@touchpoll/tp-survey 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"touchpoll-tp-survey.mjs","sources":["../../../projects/tp.survey/src/lib/tp.survey.config.ts","../../../projects/tp.survey/src/lib/icons/default.icons/default.icons.ts","../../../projects/tp.survey/src/lib/icons/default.icons/default.icons.module.ts","../../../projects/tp.survey/src/lib/tp.survey.module.ts","../../../projects/tp.survey/src/lib/component/question.caption/question.caption.component.ts","../../../projects/tp.survey/src/lib/component/question.caption/question.caption.component.html","../../../projects/tp.survey/src/lib/component/navigation.button/navigation.button.component.ts","../../../projects/tp.survey/src/lib/component/navigation.button/navigation.button.component.html","../../../projects/tp.survey/src/lib/tp.survey.const.ts","../../../projects/tp.survey/src/lib/component/answer/container.answer/container.answer.validator.ts","../../../projects/tp.survey/src/lib/core/tp.survey.logic/tp.survey.logic.service.ts","../../../projects/tp.survey/src/lib/pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe.ts","../../../projects/tp.survey/src/lib/tp.survey.enum.ts","../../../projects/tp.survey/src/lib/component/answer/answer.master/answer.master.component.ts","../../../projects/tp.survey/src/lib/directive/alternatives.container/alternatives.container.directive.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ss/answer.ss.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ss/answer.ss.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.info/answer.info.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ms/answer.ms.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ms/answer.ms.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.additional/directive/additional.answer.caption.position/additional.answer.caption.position.directive.ts","../../../projects/tp.survey/src/lib/component/answer/answer.additional/answer.additional.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.additional/answer.additional.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.end/answer.end.component.ts","../../../projects/tp.survey/src/lib/directive/focus.and.select/focus.and.select.directive.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ol/answer.ol.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ol/answer.ol.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.sl/pipe/as.form.array/as.form.array.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.sl/pipe/as.form.control/as.form.control.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.sl/answer.sl.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.sl/answer.sl.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.od/answer.od.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.od/answer.od.component.html","../../../projects/tp.survey/src/lib/pipe/get.additional.value.by.value/get.additional.value.by.value.pipe.ts","../../../projects/tp.survey/src/lib/pipe/key.values/key.values.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.lang/answer.lang.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.lang/answer.lang.component.html","../../../projects/tp.survey/src/lib/component/answer/container.answer/container.answer.component.ts","../../../projects/tp.survey/src/lib/component/answer/container.answer/container.answer.component.html","../../../projects/tp.survey/src/lib/pipe/get.active.language/get.active.language.pipe.ts","../../../projects/tp.survey/src/lib/directive/update.font.size/update.font.size.directive.ts","../../../projects/tp.survey/src/lib/tp.survey.method.ts","../../../projects/tp.survey/src/lib/core/tp.servey.quota/tp.survey.quota.ts","../../../projects/tp.survey/src/lib/core/tp.survey.answer/tp.survey.answer.ts","../../../projects/tp.survey/src/lib/core/tp.survey.interview/tp.survey.interview.service.ts","../../../projects/tp.survey/src/lib/core/tp.survey.core/tp.survey.core.service.ts","../../../projects/tp.survey/src/lib/directive/survey.theme/survey.theme.directive.ts","../../../projects/tp.survey/src/lib/component/survey.play/survey.play.component.ts","../../../projects/tp.survey/src/lib/component/survey.play/survey.play.component.html","../../../projects/tp.survey/src/lib/component/survey.question.preview/survey.question.preview.component.ts","../../../projects/tp.survey/src/lib/component/survey.question.preview/survey.question.preview.component.html","../../../projects/tp.survey/src/public-api.ts","../../../projects/tp.survey/src/touchpoll-tp-survey.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\r\nimport {TpSurveyPlatform} from './tp.survey.type';\r\n\r\n\r\n\r\nexport interface TpSurveyConfig {\r\n tpPlatform: TpSurveyPlatform;\r\n}\r\n\r\n\r\n\r\n/**\r\n * A DI token for the survey service.\r\n *\r\n * @publicApi\r\n */\r\nexport const TP_SURVEY_CONFIGURATION = new InjectionToken<TpSurveyConfig>('__TOUCHPOLL_SURVEY_CONFIGURATION_TOKEN__')\r\n","export const defaultIcons = {\r\n 'iconButtonNext': `\r\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\"/>\r\n `,\r\n 'iconButtonBack': `\r\n <path d=\"M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z\"/>\r\n `,\r\n 'iconIsMute': `\r\n <path d=\"M7.6,4H4A3,3,0,0,0,1,7H1a3,3,0,0,0,3,3H7.6a7.9,7.9,0,0,1,3.9,1L15,13V1L11.4,3A7.9,7.9,0,0,1,7.6,4Z\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"2\"/>\r\n <path d=\"M6,10v2.9a4,4,0,0,0,.3,1.5L7,17\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"4\"/>\r\n <path d=\"M15,4h.1A1.9,1.9,0,0,1,17,5.9V8.1A1.9,1.9,0,0,1,15.1,10H15a0,0,0,0,1,0,0V4A0,0,0,0,1,15,4Z\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"2\"/>\r\n <line x1=\"1\" y1=\"1\" x2=\"17\" y2=\"17\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"2\"/>\r\n `,\r\n}\r\n","import {Inject, NgModule, PLATFORM_ID} from '@angular/core';\r\nimport {isPlatformServer} from '@angular/common';\r\nimport {DomSanitizer} from '@angular/platform-browser';\r\nimport {MatIconRegistry} from '@angular/material/icon';\r\nimport {defaultIcons} from './default.icons';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n})\r\nexport class DefaultIconsModule {\r\n constructor(private domSanitizer: DomSanitizer, private matIconRegistry: MatIconRegistry, @Inject(PLATFORM_ID) private platformId: string) {\r\n for (const [name, svgText] of Object.entries(defaultIcons)) {\r\n const iconText: string = `<svg viewBox=\"0 0 24 24\">${isPlatformServer(this.platformId) ? '' : svgText}</svg>`;\r\n this.matIconRegistry.addSvgIconLiteral(name, this.domSanitizer.bypassSecurityTrustHtml(iconText));\r\n }\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {TP_SURVEY_CONFIGURATION, TpSurveyConfig} from './tp.survey.config';\r\nimport {DefaultIconsModule} from './icons/default.icons/default.icons.module';\r\nimport {TpSurveyCoreService} from './core/tp.survey.core/tp.survey.core.service';\r\n\r\n@NgModule({\r\n imports: [\r\n DefaultIconsModule\r\n ]\r\n})\r\nexport class TpSurveyModule {\r\n // #docregion for-root\r\n static forRoot(config: TpSurveyConfig): ModuleWithProviders<TpSurveyModule> {\r\n return {\r\n ngModule: TpSurveyModule,\r\n providers: [\r\n {provide: TP_SURVEY_CONFIGURATION, useValue: config }\r\n ]\r\n };\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, input} from '@angular/core';\r\nimport {SafeHtml} from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'tp-survey-question-caption',\r\n templateUrl: './question.caption.component.html',\r\n styleUrls: ['./question.caption.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n})\r\nexport class QuestionCaptionComponent {\r\n caption = input<SafeHtml>();\r\n captionHelp = input<SafeHtml>();\r\n}\r\n","<div class=\"container-main\">\r\n <div [innerHTML]= \"caption()\" class=\"question-caption-font\"></div>\r\n <div [innerHTML]= \"captionHelp()\" class=\"question-caption-helper-font\"></div>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, input, output} from '@angular/core';\r\nimport {MatButton} from '@angular/material/button';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {NavigationButtonDirection} from '../../tp.survey.type';\r\n\r\n@Component({\r\n selector: 'tp-survey-navigation-button',\r\n standalone: true,\r\n imports: [\r\n MatButton,\r\n MatIcon\r\n ],\r\n templateUrl: './navigation.button.component.html',\r\n styleUrl: './navigation.button.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NavigationButtonComponent {\r\n direction = input.required<NavigationButtonDirection>()\r\n caption = input<string>();\r\n onClick = output<NavigationButtonDirection>()\r\n}\r\n\r\n","<button mat-flat-button (click)=\"onClick.emit(direction())\" class=\"navigation-button\">\r\n @if (direction() === 'back') {\r\n <mat-icon svgIcon=\"iconButtonBack\" aria-hidden=\"false\" class=\"navigation-button-icon\"/>\r\n }\r\n\r\n <span class=\"navigation-button-label\">{{ caption() }}</span>\r\n\r\n @if (direction() === 'next') {\r\n <mat-icon iconPositionEnd svgIcon=\"iconButtonNext\" aria-hidden=\"false\" class=\"navigation-button-icon\"/>\r\n }\r\n</button>\r\n\r\n","export const MISSING_VALUE = -97;\r\n\r\nexport const BASE_WIDTH = 1280;\r\nexport const BASE_HEIGHT = 800;\r\n\r\nexport const LOGIC_FUNC_TEXT = `\r\n const self = this;\r\n var setVar = function(varName, value) {\r\n self[varName] = value\r\n };\r\n var FUNC_IN = function(varName, array) {\r\n return isNaN(parseInt(varName)) ? false : array.indexOf(varName) > -1\r\n };\r\n var FUNC_INTERSECT = function (var1, var2) {\r\n return Array.isArray(var1) && Array.isArray(var2) ? var1.some(function(el1) {\r\n return var2.some(function (el2) {\r\n return el2 === el1;\r\n });\r\n }) : false;\r\n };\r\n var value = function(varName, defaultValue) {\r\n const defVal = !defaultValue ? 0 : defaultValue;\r\n if ( (varName === -97) || (varName === null) || (varName === undefined) ) {\r\n return defVal\r\n } else {\r\n return varName\r\n }\r\n }\r\n for (var p in this) eval(\"var \" + p + \" = this[p];\"); `;\r\n","import {AbstractControl, ValidatorFn} from '@angular/forms';\r\nimport {MISSING_VALUE} from '../../../tp.survey.const';\r\nimport {IdbSection} from '../../../tp.survey.interface';\r\n\r\nexport const answerDefaultValidator = (): ValidatorFn => {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n //ответ не число, такого быть не может, это ошибка\r\n if ((control.value === null) || (control.value === MISSING_VALUE) ) {\r\n return {answerRequired: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n };\r\n};\r\n\r\nexport const answerODValidator = (minValue: number | null, maxValue: number | null): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //ответ не число, такого быть не может, это ошибка\r\n if (!Number.isSafeInteger(control.value)) {\r\n return {answerOdAnswerType: true}\r\n }\r\n //Нужно проверить 2 ситуации.\r\n //1 В настройках вопроса указали minValue, тогда введённое число должно быть больше minValue.\r\n //2 В настройках вопроса указали maxValue, тогда введённое число должно быть меньше maxValue.\r\n //Если эти условия не выполняются, то это ошибка.\r\n if ( (Number.isSafeInteger(minValue) && control.value < minValue!) || (Number.isSafeInteger(maxValue) && (maxValue ?? 0 > 0) && control.value > maxValue!) ) {\r\n return {answerOdAnswerError: true}\r\n }\r\n \r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\nexport const answerOLValidator = (): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n const text = typeof control.value !== 'string' ? '' : control.value.trim();\r\n\r\n //Нужно чтобы в поле ввели хоть что-то.\r\n if ( text.length === 0 ) {\r\n return {answerOlAnswerError: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\n\r\nexport const answerSSValidator = (): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //ответ не число, такого быть не может, это ошибка\r\n if (!Number.isSafeInteger(control.value)) {\r\n return {answerSsAnswerType: true}\r\n }\r\n\r\n //нет ответа\r\n if (control.value < 0) {\r\n return {answerMissing: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\n\r\nexport const answerMSValidator = (visibleAlternativeCount: number, minCount: number = 1, maxCount: number = 0): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //visibleAlternativeCount - количество альтернатив на экране, если 0, то смысла показывать вопрос нет\r\n //minCount - Минимальное количество ответов, которое может выбрать респондент, по умолчанию 1.\r\n //maxCount - Максимальное количество ответов, которые может выбрать респондент. Если указано 0, количество не ограничено. По умолчанию 0\r\n\r\n if (visibleAlternativeCount === 0) {\r\n return null;\r\n }\r\n\r\n //ответ не массив, такого быть не может, это ошибка\r\n if (!Array.isArray(control.value)) {\r\n return {answerMsAnswerType: true}\r\n }\r\n\r\n //количество ответов\r\n const count = control.value.length;\r\n \r\n //проверяем minCount\r\n if (count < minCount) {\r\n return {answerMsMinCount: true}\r\n }\r\n\r\n //проверяем maxCount\r\n if (maxCount > 0 && count > maxCount) {\r\n return {answerMsMaxCount: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\nexport const answerSlValidator = (required: boolean, minAnswersCount: number, sectionList: Array<IdbSection>): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //если ответы для каждой секции необязательны, ничего не проверяем и выходим.\r\n if (!required) {\r\n return null;\r\n }\r\n if (!control.value) {\r\n return {answerMissing: true};\r\n }\r\n\r\n //если хоть 1 сессия не имеет значения(или количество выбранных альтернатив меньше minAnswersCount), тогда ответ на вопрос не полный.\r\n const hasMissingAnswers = sectionList.some(section => {\r\n const sectionAnswers = control.value[section.SectionGuid.toString()];\r\n if (!sectionAnswers) {\r\n return true;\r\n } else{\r\n return Array.isArray(sectionAnswers) ? sectionAnswers.length === 0 || (minAnswersCount > 1 && sectionAnswers.length < minAnswersCount) : sectionAnswers === 0;\r\n }\r\n });\r\n if (hasMissingAnswers) {\r\n return {answerMissing: true};\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\nexport const additionalAnswerDefaultValidator = (required: boolean): ValidatorFn => {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n if ( (control.value === null || (typeof control.value === 'string' && control.value.trim().length === 0)) && required) {\r\n return { additionalAnswerRequired: true}\r\n }\r\n //ошибок нет, всё корректно\r\n return null;\r\n };\r\n};\r\n\r\nexport const additionalAnswerNumberValidator = (required: boolean, minValue: number | null, maxValue: number | null): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //ответ не обязательный, можно не контролировать\r\n if (!required) {\r\n return null;\r\n }\r\n\r\n //ответ не число, такого быть не может, это ошибка\r\n if (!Number.isSafeInteger(control.value)) {\r\n return {additionalAnswerType: true}\r\n }\r\n\r\n //Нужно проверить 2 ситуации.\r\n //1 В настройках вопроса указали minValue, тогда введённое число должно быть больше minValue.\r\n //2 В настройках вопроса указали maxValue, тогда введённое число должно быть меньше maxValue.\r\n //Если эти условия не выполняются, то это ошибка.\r\n if ( (Number.isSafeInteger(minValue) && control.value < minValue!) || (Number.isSafeInteger(maxValue) && control.value > maxValue!) ) {\r\n return {answerOdAnswerError: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n","import {Injectable} from '@angular/core';\r\nimport {LOGIC_FUNC_TEXT} from '../../tp.survey.const';\r\nimport {LogicObject} from '../../tp.survey.type';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TpSurveyLogicService {\r\n #vars: LogicObject = Object.create(null);\r\n\r\n get vars(): object {\r\n return this.#vars;\r\n }\r\n\r\n setLogicValue(varName: string, value: any): void {\r\n this.#vars[varName] = value;\r\n }\r\n\r\n getLogicVars(): LogicObject{\r\n return {...this.#vars};\r\n }\r\n\r\n executeLogic(expression: string): boolean {\r\n try {\r\n return !expression ? true : new Function(`${LOGIC_FUNC_TEXT} return ${expression}`).call(this.#vars);\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n executePostScript(expression: string): void {\r\n try {\r\n if (!expression ) {\r\n return;\r\n }\r\n new Function(`${LOGIC_FUNC_TEXT} ${expression}`).call(this.#vars);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\r\nimport {IdbLogicCaptionObject, IdbMultilangObject} from '../../tp.survey.interface';\r\nimport {TpSurveyLogicService} from '../../core/tp.survey.logic/tp.survey.logic.service';\r\n\r\n@Pipe({\r\n name: 'multiLangObjectToHtml',\r\n standalone: true\r\n})\r\nexport class MultiLangObjectToHtmlPipe implements PipeTransform {\r\n\r\n constructor(private readonly _sanitizer: DomSanitizer, private readonly _logic: TpSurveyLogicService) {\r\n }\r\n\r\n transform(caption: Array<IdbMultilangObject>, language: number, logicCaptions?: Array<IdbLogicCaptionObject>): SafeHtml {\r\n if (Array.isArray(logicCaptions)){\r\n const correctLogicCaption = logicCaptions.find(logicCaption => this._logic.executeLogic(logicCaption.Expression));\r\n const correctLogicCaptionLangObj = correctLogicCaption?.MultiLangCaptions.find(capt => capt.lang === language);\r\n const text = correctLogicCaptionLangObj?._SYS_CaptionHTML ?? correctLogicCaptionLangObj?.CaptionHtml ?? '';\r\n return this._sanitizer.bypassSecurityTrustHtml(text);\r\n }\r\n\r\n if (!Array.isArray(caption)) {\r\n return ''\r\n }\r\n\r\n const langObj = caption.find(capt => capt.lang === language);\r\n const text = langObj?._SYS_CaptionHTML ?? langObj?.CaptionHtml ?? '';\r\n return this._sanitizer.bypassSecurityTrustHtml(text);\r\n }\r\n\r\n}\r\n","export enum ViewModel {\r\n vmDesktop = 1, // desktop view\r\n vmMobile = 2, // phone view\r\n vmTablet = 3, // tablet view\r\n}\r\n\r\nexport enum SurveyEvents {\r\n seSurveyStart = 'survey.start', // on start survey\r\n seSurveyViewModelUpdate = 'survey.view.model.update', // on viewmodel updated\r\n seSurveyDeveloperModeUpdate = 'survey.developer.mode.update', // on Developermode updated\r\n seSurveyEnd = 'survey.end', // on end survey\r\n seQuestionShow = 'question.show', // before question show\r\n seQuestionHide = 'question.hide', // before question hide\r\n seQuestionRefresh = 'question.refresh', // refresh question (after edit)\r\n seQuestionAnswersCompleted = 'answers.completed', // after all answers complete\r\n seQuestionAnswersChange = 'answers.change', // after answers change\r\n seSurveyLanguageUpdate = 'survey.language.update' // on survey language updated\r\n}\r\n\r\nexport enum AdditionalAnswerType {\r\n aatNumber = 1,\r\n aatText = 2,\r\n aatBoolean = 3,\r\n}\r\n\r\nexport enum QuestionsType {\r\n eqLANG = 'LANG',\r\n eqSS = 'SS',\r\n eqMS = 'MS',\r\n eqINFO = 'INFO',\r\n eqSL = 'SL',\r\n eqOL = 'OL',\r\n eqOD = 'OD',\r\n eqEND = 'END',\r\n}\r\n\r\n\r\nexport enum ResultativeStatus {\r\n rsUnset = -1,\r\n rsUnresultative = 0,\r\n rsResultative = 1,\r\n}\r\n\r\nexport enum ValidStatus {\r\n vsUnset = -1,\r\n vsUnValid = 0,\r\n vsValid = 1,\r\n vsDoubtful = 2\r\n}\r\n\r\nexport enum EInterviewStatus {\r\n isUnFinished = -4, // не завершено\r\n isTested = -3, // тестовое\r\n isRefinement = -2, // не проверено\r\n isDefect = -1, // брак\r\n isNotChecked = 0, // не проверено\r\n isChecked = 1 // проверено\r\n}\r\n","import {ChangeDetectionStrategy, Component, DestroyRef, forwardRef, inject, input} from '@angular/core';\r\nimport {ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {AnswerT} from '../../../tp.survey.type';\r\nimport {ViewModel} from '../../../tp.survey.enum';\r\n\r\n@Component({\r\n selector: 'app-answer-master',\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerMasterComponent),\r\n multi: true\r\n },\r\n ],\r\n\r\n})\r\nexport abstract class AnswerMasterComponent<T extends AnswerT> implements ControlValueAccessor {\r\n language = input.required<number>();\r\n viewModel = input.required<ViewModel>();\r\n viewModelE = ViewModel;\r\n control: FormControl<T | null>;\r\n protected onModelChange = (data: T) => {};\r\n protected onModelTouched = () => {};\r\n protected readonly destroyRef = inject(DestroyRef);\r\n constructor() {\r\n this.control = new FormControl(null);\r\n this.control.valueChanges.pipe(\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe(res => {\r\n this.onModelChange(res!);\r\n })\r\n }\r\n \r\n registerOnChange(fn: (data: T) => void): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onModelTouched();\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n }\r\n \r\n writeValue(value: T): void {\r\n this.control.patchValue(value, {emitEvent: false});\r\n }\r\n}\r\n","import {ContentChildren, DestroyRef, Directive, effect, ElementRef, inject, input, QueryList, Renderer2} from '@angular/core';\r\nimport {IdbQuestion} from '../../tp.survey.interface';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {BASE_HEIGHT, BASE_WIDTH} from '../../tp.survey.const';\r\nimport {BreakpointObserver, BreakpointState} from '@angular/cdk/layout';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Directive({\r\n selector: '[tpSurveyAlternativesContainer]',\r\n standalone: true\r\n})\r\nexport class AlternativesContainerDirective {\r\n question = input.required<IdbQuestion>( {alias: 'tpSurveyAlternativesContainer'});\r\n viewModel = input.required<ViewModel>({alias: 'containerViewModel'});\r\n @ContentChildren('tablet_alt', {read: ElementRef}) alternatives: QueryList<ElementRef<HTMLElement>> | undefined;\r\n readonly #destroyRef = inject(DestroyRef);\r\n constructor(private readonly _renderer: Renderer2,private readonly elementRef: ElementRef, private _breakpointObserver: BreakpointObserver) {\r\n effect(() => {\r\n if (this.viewModel() === ViewModel.vmTablet) {\r\n this.#updateTabletLayout();\r\n } else {\r\n this.#updateDesktopLayout();\r\n }\r\n })\r\n }\r\n\r\n #updateDesktopLayout(): void {\r\n this._breakpointObserver.observe([\"(max-width: 480px)\"]).pipe(\r\n map((result: BreakpointState) => result.matches),\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe((isMobile: boolean) => {\r\n let columnCount: number;\r\n if (isMobile) {\r\n columnCount = this.question().MobileViewAlternativeColumnCount || 1; //if 0 will be 1\r\n } else {\r\n columnCount = this.question().AlternativeColumnCount || 1; //if 0 will be 1\r\n }\r\n this._renderer.setStyle(this.elementRef.nativeElement, 'grid-template-columns', `repeat(${columnCount}, 10fr)`);\r\n });\r\n }\r\n \r\n #updateTabletLayout(): void {\r\n if (!this.alternatives) {\r\n return;\r\n }\r\n \r\n if (this.viewModel() === ViewModel.vmTablet) {\r\n const question = this.question();\r\n const transformToPer = (newVal: number, containerSideSize: number): number => newVal * 100 / containerSideSize; // превращает размер px в %\r\n \r\n const containerWidthFull = this.elementRef.nativeElement.offsetWidth;\r\n const containerHeightFull = this.elementRef.nativeElement.offsetHeight;\r\n \r\n const alternativeColumnCount = question.TabletViewAlternativeColumnCount ?? 1;\r\n \r\n const horizontalRatio = containerWidthFull / BASE_WIDTH;\r\n const verticalRatio = containerHeightFull / BASE_HEIGHT;\r\n \r\n const maxAlternativeWidth: number = containerWidthFull * 0.7; // для авторазмера установим максимальный размер альтернативы в 70% от доступной длинны контейнера\r\n \r\n const alternativesCount = Math.max(this.alternatives.length, 1);\r\n \r\n const horizontalDistance = question.AlternativeHorizontalDistance ?? 10 * horizontalRatio;\r\n const verticalDistance = (question.AlternativeVerticalDistance ?? 10) * verticalRatio;\r\n const marginTop = question.AlternativeMarginTop ?? 10 * verticalRatio;\r\n const marginLeft = (question.AlternativeMarginLeft ?? 0) * horizontalRatio;\r\n const columnCount: number = alternativeColumnCount > alternativesCount ? alternativesCount : alternativeColumnCount;\r\n const rowCount: number = Math.round(alternativesCount / columnCount);\r\n \r\n const defaultHorizontalPadding = 10 * horizontalRatio;\r\n \r\n let width = 0;\r\n let height = 0;\r\n \r\n if (question.AlternativeAutoSize ?? true) { // если авторазмер, то высоту и ширину считаем автоматом\r\n const marginsWidth = horizontalDistance * (columnCount - 1) + defaultHorizontalPadding * 2;\r\n width = Math.min((containerWidthFull - marginsWidth) / columnCount, maxAlternativeWidth);\r\n height = this.alternatives.reduce((maxHeight, alt) => { // узнаем максимальную высоту альтернативы\r\n const altWidthPercent = transformToPer(width, containerWidthFull);\r\n this._renderer.setStyle(alt.nativeElement, 'width', `${altWidthPercent}%`);\r\n return Math.max(maxHeight, alt.nativeElement.clientHeight) ;\r\n }, 0);\r\n } else { // если авторазмер отключён, размеры берём из настроек\r\n width = question.AlternativeWidth ?? 300;\r\n height = question.AlternativeHeight ?? 50;\r\n }\r\n \r\n const deltaVertical = containerHeightFull - height * rowCount - verticalDistance * (rowCount - 1);\r\n const deltaHorizontal = (containerWidthFull - width * columnCount - horizontalDistance * (columnCount - 1)) / 2 - defaultHorizontalPadding;\r\n let rowNum = -1;\r\n let colNum = 0;\r\n \r\n this.alternatives.forEach((alt, index) => {\r\n let left = 0;\r\n let top = 0;\r\n if (question.AlternativeAutoArrange) {\r\n const isNewRow = (index) % columnCount === 0;\r\n if (isNewRow) {\r\n rowNum++;\r\n colNum = 0;\r\n }\r\n left = marginLeft + colNum * width + colNum * horizontalDistance + deltaHorizontal + defaultHorizontalPadding ;\r\n top = marginTop + rowNum * height + rowNum * verticalDistance + deltaVertical / 2 ;\r\n colNum++;\r\n } else {\r\n const altObj = question.Alternativelist[index];\r\n if (!!altObj) {\r\n left = altObj.x;\r\n top = altObj.y;\r\n if (!question.AlternativeAutoSize) {\r\n width = altObj.width > 0 ? altObj.width : question.AlternativeWidth;\r\n height = altObj.height > 0 ? altObj.height : question.AlternativeHeight;\r\n }\r\n }\r\n }\r\n this._renderer.setStyle(alt.nativeElement, 'width', `${transformToPer(width, containerWidthFull)}%`);\r\n this._renderer.setStyle(alt.nativeElement, 'height', `${transformToPer(height, containerHeightFull)}%`);\r\n this._renderer.setStyle(alt.nativeElement, 'left', `${transformToPer(left, containerWidthFull)}%`);\r\n this._renderer.setStyle(alt.nativeElement, 'top', `${transformToPer(top, containerHeightFull)}%`);\r\n });\r\n } else {\r\n this.alternatives.forEach((alt) => {\r\n this._renderer.setStyle(alt.nativeElement, 'width', ``);\r\n this._renderer.setStyle(alt.nativeElement, 'height', ``);\r\n this._renderer.setStyle(alt.nativeElement, 'left', ``);\r\n this._renderer.setStyle(alt.nativeElement, 'top', ``);\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import {ChangeDetectionStrategy, Component, forwardRef, input, output,} from '@angular/core';\r\nimport {MatRadioButton, MatRadioGroup} from '@angular/material/radio';\r\nimport {NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {KeyValuePipe} from '@angular/common';\r\nimport {MatFormField} from '@angular/material/form-field';\r\nimport {MatInput} from '@angular/material/input';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {IdbAlternative, IdbQuestion} from '../../../tp.survey.interface';\r\nimport {AlternativesContainerDirective} from '../../../directive/alternatives.container/alternatives.container.directive';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-ss',\r\n templateUrl: './answer.ss.component.html',\r\n styleUrls: ['./answer.ss.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n MatRadioGroup,\r\n ReactiveFormsModule,\r\n MatRadioButton,\r\n MultiLangObjectToHtmlPipe,\r\n KeyValuePipe,\r\n MatFormField,\r\n MatInput,\r\n MatIcon,\r\n MatCheckbox,\r\n AlternativesContainerDirective\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerSSComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerSSComponent extends AnswerMasterComponent<number>{\r\n question = input.required<IdbQuestion>();\r\n alternativeList = input.required<Array<IdbAlternative>>();\r\n onAlternativeClick = output<number>();\r\n}\r\n\r\n\r\n","<mat-radio-group\r\n class=\"container-ms-ss-alternatives\"\r\n [tpSurveyAlternativesContainer] = \"question()\"\r\n [containerViewModel]=\"viewModel()\"\r\n [formControl]=\"control\">\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <mat-radio-button\r\n #tablet_alt\r\n class=\"alternative-ss-ms tp-survey-radio-button\"\r\n [style.font-size.%]=\"viewModel() === viewModelE.vmTablet ? question().AlternativeTabletFontSize : undefined\"\r\n [value]=\"alt.Value\"\r\n (change)=\"onAlternativeClick.emit($event.value)\">\r\n @if (alt.IsMute) {\r\n <mat-icon class=\"icon-is-mute\" svgIcon=\"iconIsMute\"></mat-icon>\r\n }\r\n <span class=\"alternative-ss-ms-caption\" [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-radio-button>\r\n }\r\n</mat-radio-group>\r\n\r\n","import {Component, forwardRef} from '@angular/core';\r\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-info',\r\n template: '',\r\n standalone: true,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerInfoComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerInfoComponent extends AnswerMasterComponent<number>{\r\n}\r\n\r\n\r\n","import {Component, forwardRef, input, OnInit, output} from '@angular/core';\r\nimport {FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {map} from 'rxjs/operators';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {MatRadioGroup} from '@angular/material/radio';\r\nimport {filter, tap} from 'rxjs';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {IdbAlternative, IdbQuestion} from '../../../tp.survey.interface';\r\nimport {AlternativesContainerDirective} from '../../../directive/alternatives.container/alternatives.container.directive';\r\n\r\ninterface IAnswerMSForm {\r\n alternativeList: FormArray<FormControl<boolean>>;\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-ms',\r\n templateUrl: './answer.ms.component.html',\r\n styleUrls: ['./answer.ms.component.scss'],\r\n standalone: true,\r\n imports: [\r\n ReactiveFormsModule,\r\n MatCheckbox,\r\n MultiLangObjectToHtmlPipe,\r\n MatIcon,\r\n MatRadioGroup,\r\n AlternativesContainerDirective,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerMSComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerMSComponent extends AnswerMasterComponent<Array<number>> implements OnInit{\r\n question = input.required<IdbQuestion>();\r\n alternativeList = input.required<Array<IdbAlternative>>();\r\n alternativeMaxAnswersCount = input.required<number>();\r\n onAlternativeClick = output<number>();\r\n readonly answerMSForm: FormGroup<IAnswerMSForm>;\r\n constructor() {\r\n super();\r\n this.answerMSForm = new FormGroup<IAnswerMSForm>({\r\n alternativeList: new FormArray<FormControl<boolean>>([])\r\n })\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n const alternativeList = this.alternativeList();\r\n const answerAsArray: Array<number> = Array.isArray(this.control.value) ? this.control.value : [];\r\n const maxCount = this.alternativeMaxAnswersCount();\r\n\r\n this.answerMSForm.controls.alternativeList.clear({emitEvent: false});\r\n alternativeList.forEach( alt => {\r\n const control= new FormControl<boolean>( answerAsArray.includes(alt.Value), {nonNullable: true});\r\n\r\n //У альтернативы есть понятие \"Группа\". Группа это число. Если выбирают альтернативу с определённой группой, то альтернативы с другой группой должны быть отжаты.\r\n control.valueChanges.pipe(\r\n filter(value => value),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe( {\r\n next: () => this.#uncheckControlsWithOtherGroup(alt.GroupNo)\r\n });\r\n\r\n this.answerMSForm.controls.alternativeList.push(control, {emitEvent: false});\r\n });\r\n\r\n this.answerMSForm.controls.alternativeList.valueChanges.pipe(\r\n map((_) => {\r\n const checkedArray = this.answerMSForm.controls.alternativeList.controls.map(c => c.value) ?? [];\r\n return this.alternativeList()\r\n .map(alt => alt.Value)\r\n .filter((_, index) => checkedArray[index] )\r\n }),\r\n tap(answerArray => this.#disableExtraControls(answerArray.length, maxCount)),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe({\r\n next: res => this.control.patchValue(res, {emitEvent: true})\r\n })\r\n }\r\n\r\n //отжимает контролы у которых отличается номер группы\r\n #uncheckControlsWithOtherGroup(groupNumber: number): void {\r\n //сначала отбираем контролы у которых другая группа.\r\n const otherGroupAlternativesList = this.alternativeList()\r\n .map((alt, altIndex) => ({alternative: alt, index: altIndex}) ) //нужен индекс, по нему проще выбирать контролы в answerMSForm.controls.alternativeList\r\n .filter(data => data.alternative.GroupNo !== groupNumber); //контролы у которых другая группа\r\n\r\n //\"отжимаем галочку\"\r\n otherGroupAlternativesList.forEach(data => {\r\n const altControl = this.answerMSForm.controls.alternativeList.at(data.index);\r\n altControl.patchValue(false, {emitEvent: false})\r\n })\r\n }\r\n \r\n //дизейблит контроли если выбрали максимальное количество или енейблит если выбрали не максимальное количество\r\n #disableExtraControls(currentCount:number, maxCount: number): void{\r\n //если в настройках анкеты указали что максимальное возможное количество выбранных альтернатив = 0, но ничего контролировать не надо.\r\n if (maxCount === 0) {\r\n return\r\n }\r\n this.alternativeList().forEach((_, altIndex) => {\r\n const isDisable = currentCount >= maxCount;\r\n const control = this.answerMSForm.controls.alternativeList.at(altIndex);\r\n if (isDisable) {\r\n //надо дизейблить те которые не выбраны\r\n if (!control.value) {\r\n control.disable({emitEvent: false})\r\n }\r\n } else {\r\n //лимита нет, можно выбирать все\r\n control.enable({emitEvent: false})\r\n }\r\n })\r\n }\r\n}\r\n","<ng-container [formGroup]=\"answerMSForm\">\r\n <div\r\n class=\"container-ms-ss-alternatives\"\r\n [tpSurveyAlternativesContainer] = \"question()\"\r\n [containerViewModel]=\"viewModel()\"\r\n formArrayName=\"alternativeList\">\r\n @for (alt of answerMSForm.controls.alternativeList.controls; track alt; let indx = $index) {\r\n <mat-checkbox\r\n #tablet_alt\r\n [formControl]=\"alt\"\r\n [style.font-size.%]=\"viewModel() === viewModelE.vmTablet ? question().AlternativeTabletFontSize : undefined\"\r\n (change)=\"onAlternativeClick.emit(alternativeList()[indx].Value)\"\r\n class=\"alternative-ss-ms tp-survey-checkbox\">\r\n @if (alternativeList()[indx].IsMute) {\r\n <mat-icon class=\"icon-is-mute\" svgIcon=\"iconIsMute\"></mat-icon>\r\n }\r\n <span class=\"alternative-ss-ms-caption\" [innerHTML]= \"alternativeList()[indx].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-checkbox>\r\n }\r\n </div>\r\n</ng-container>\r\n","import {Directive, HostBinding, input} from '@angular/core';\r\nimport {AdditionalAnswerCaptionPosition} from '../../../../../tp.survey.type';\r\nimport {AdditionalAnswerType} from '../../../../../tp.survey.enum';\r\n\r\n@Directive({\r\n selector: '[tpSurveyAdditionalAnswerCaptionPosition]',\r\n standalone: true\r\n})\r\nexport class AdditionalAnswerCaptionPositionDirective{\r\n tpSurveyAdditionalAnswerCaptionPosition = input<AdditionalAnswerCaptionPosition>();\r\n tpSurveyAdditionalAnswerType = input<AdditionalAnswerType>();\r\n @HostBinding(\"class.caption-align-bottom\") public get classBottom() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'bottom';\r\n }\r\n @HostBinding(\"class.caption-align-top\") public get classTop() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'top';\r\n }\r\n @HostBinding(\"class.caption-align-left\") public get classLeft() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'left';\r\n }\r\n @HostBinding(\"class.caption-align-right\") public get classRight() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'right';\r\n }\r\n \r\n @HostBinding(\"class.answer-type-number\") public get classTypeNumber() {\r\n return this.tpSurveyAdditionalAnswerType() === AdditionalAnswerType.aatNumber;\r\n }\r\n \r\n @HostBinding(\"class.answer-type-text\") public get classTypeText() {\r\n return this.tpSurveyAdditionalAnswerType() === AdditionalAnswerType.aatText;\r\n }\r\n \r\n @HostBinding(\"class.answer-type-boolean\") public get classTypeBoolean() {\r\n return this.tpSurveyAdditionalAnswerType() === AdditionalAnswerType.aatBoolean;\r\n }\r\n}\r\n","import {Component, forwardRef, input,} from '@angular/core';\r\nimport {FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatFormField} from '@angular/material/form-field';\r\nimport {MatInput} from '@angular/material/input';\r\nimport {SafeHtml} from '@angular/platform-browser';\r\nimport {CdkTextareaAutosize} from '@angular/cdk/text-field';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {AdditionalAnswerCaptionPositionDirective} from './directive/additional.answer.caption.position/additional.answer.caption.position.directive';\r\nimport {AdditionalAnswer, AdditionalAnswerCaptionPosition} from '../../../tp.survey.type';\r\nimport {AdditionalAnswerType} from '../../../tp.survey.enum';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-additional',\r\n templateUrl: './answer.additional.component.html',\r\n styleUrls: ['./answer.additional.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MatFormField,\r\n MatInput,\r\n ReactiveFormsModule,\r\n AdditionalAnswerCaptionPositionDirective,\r\n CdkTextareaAutosize,\r\n MatCheckbox,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerAdditionalComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerAdditionalComponent { //ControlValueAccessor\r\n // control = input.required<FormControl<AdditionalAnswer>>();\r\n control = input.required<FormControl<AdditionalAnswer>>();\r\n answerType = input.required<AdditionalAnswerType>()\r\n caption = input<SafeHtml>('');\r\n numberMinValue = input<number | null>(null);\r\n numberMaxValue = input<number | null>(null);\r\n textMultiline = input<boolean>(false);\r\n captionPosition = input<AdditionalAnswerCaptionPosition>('top');\r\n additionalAnswerType = AdditionalAnswerType;\r\n}\r\n","<div class=\"container-main\" [tpSurveyAdditionalAnswerCaptionPosition]=\"captionPosition()\" [tpSurveyAdditionalAnswerType]=\"answerType()\" >\r\n <span [innerHTML]= \"caption()\" class=\"answer-caption\"></span>\r\n @switch (answerType()) {\r\n @case (additionalAnswerType.aatNumber) {\r\n <mat-form-field class=\"tp-survey-input\" appearance=\"outline\" subscriptSizing=\"dynamic\">\r\n <input [formControl]=\"control()\" matInput [step]=\"1\" [min]=\"numberMinValue()\" [max]=\"numberMaxValue()\" type=\"number\">\r\n </mat-form-field>\r\n }\r\n\r\n @case (additionalAnswerType.aatText) {\r\n <mat-form-field appearance=\"outline\" class=\"tp-survey-input\" subscriptSizing=\"dynamic\">\r\n @if (textMultiline()) {\r\n <textarea\r\n [formControl]=\"control()\"\r\n cdkAutosizeMaxRows=\"5\"\r\n cdkAutosizeMinRows=\"3\"\r\n cdkTextareaAutosize matInput>\r\n </textarea>\r\n } @else {\r\n <input [formControl]=\"control()\" matInput type=\"text\">\r\n }\r\n </mat-form-field>\r\n }\r\n @case (additionalAnswerType.aatBoolean) {\r\n <mat-checkbox\r\n [formControl]=\"control()\"\r\n [class.answer-checkbox-center] = \"captionPosition() === 'left' || captionPosition() === 'right'\"\r\n class=\"tp-survey-checkbox\">\r\n </mat-checkbox>\r\n }\r\n }\r\n</div>\r\n","import {Component, forwardRef} from '@angular/core';\r\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-end',\r\n template: '',\r\n standalone: true,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerEndComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\n\r\nexport class AnswerEndComponent extends AnswerMasterComponent<number>{\r\n}\r\n","import {Directive, ElementRef, OnInit} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[tpSurveyFocusAndSelect]',\r\n standalone: true\r\n})\r\nexport class FocusAndSelectDirective implements OnInit{\r\n constructor(private el: ElementRef) {\r\n if (!el.nativeElement['focus']) {\r\n throw new Error('Element does not accept focus.');\r\n }\r\n }\r\n \r\n ngOnInit(): void {\r\n const input: HTMLInputElement = this.el.nativeElement as HTMLInputElement;\r\n if ('focus' in input) {\r\n input.focus();\r\n input.select();\r\n }\r\n }\r\n}\r\n","import {Component, forwardRef, input} from '@angular/core';\r\nimport {FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatFormField} from '@angular/material/form-field';\r\nimport {MatInput} from '@angular/material/input';\r\nimport {FocusAndSelectDirective} from '../../../directive/focus.and.select/focus.and.select.directive';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-ol',\r\n templateUrl: './answer.ol.component.html',\r\n styleUrls: ['./answer.ol.component.scss'],\r\n standalone: true,\r\n imports: [\r\n FocusAndSelectDirective,\r\n FormsModule,\r\n MatFormField,\r\n MatInput,\r\n ReactiveFormsModule\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerOLComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerOLComponent extends AnswerMasterComponent<number> {\r\n telephoneInput= input<boolean>(false);\r\n}\r\n","<div class=\"container-main\">\r\n @if (telephoneInput()) {\r\n <mat-form-field appearance=\"outline\">\r\n <span matPrefix>+380&nbsp;</span>\r\n <input matInput [formControl]=\"control\" tpSurveyFocusAndSelect>\r\n </mat-form-field>\r\n } @else {\r\n <mat-form-field appearance=\"outline\" class=\"input-text\">\r\n <textarea rows=\"10\" matInput [formControl]=\"control\" tpSurveyFocusAndSelect></textarea>\r\n </mat-form-field>\r\n\r\n<!-- <mat-form-field class=\"container-controls\" appearance=\"outline\">-->\r\n<!-- <textarea rows=\"10\" autofocus matInput [(ngModel)]=\"answer.AnswerValue\" (ngModelChange)=\"answerChange()\" appFocusAndSelect></textarea>-->\r\n<!-- </mat-form-field>-->\r\n }\r\n\r\n<!-- <mat-form-field appearance=\"outline\" class=\"input-od-number\">-->\r\n<!-- <input [formControl]=\"control\" tpSurveyFocusAndSelect matInput type=\"number\">-->\r\n<!-- </mat-form-field>-->\r\n</div>\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {FormArray, FormControl} from '@angular/forms';\r\n\r\n@Pipe({\r\n name: 'asFormArray',\r\n standalone: true\r\n})\r\nexport class AsFormArrayPipe implements PipeTransform {\r\n\r\n transform(value: any): FormArray<FormControl<boolean>> {\r\n return value;\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {FormControl} from '@angular/forms';\r\n\r\n@Pipe({\r\n name: 'asFormControl',\r\n standalone: true\r\n})\r\nexport class AsFormControlPipe implements PipeTransform {\r\n \r\n transform(value: any): FormControl<number> {\r\n return value;\r\n }\r\n\r\n}\r\n","import {booleanAttribute, Component, forwardRef, input, numberAttribute, OnInit} from '@angular/core';\r\nimport {FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {JsonPipe, KeyValuePipe} from '@angular/common';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {MatRadioButton, MatRadioGroup} from '@angular/material/radio';\r\nimport {map} from 'rxjs/operators';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {filter, tap} from 'rxjs';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AsFormArrayPipe} from './pipe/as.form.array/as.form.array.pipe';\r\nimport {AsFormControlPipe} from './pipe/as.form.control/as.form.control.pipe';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {AnswerSlType} from '../../../tp.survey.type';\r\nimport {IdbAlternative, IdbSection} from '../../../tp.survey.interface';\r\n\r\ninterface IAnswerSLForm {\r\n [key: string]: FormArray<FormControl<boolean>> | FormControl<number> | FormControl<Array<number>>\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-sl',\r\n templateUrl: './answer.sl.component.html',\r\n styleUrls: ['./answer.sl.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MultiLangObjectToHtmlPipe,\r\n MatCheckbox,\r\n ReactiveFormsModule,\r\n KeyValuePipe,\r\n MatIcon,\r\n JsonPipe,\r\n AsFormArrayPipe,\r\n MatRadioButton,\r\n MatRadioGroup,\r\n AsFormControlPipe\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerSLComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerSLComponent extends AnswerMasterComponent<AnswerSlType> implements OnInit{\r\n alternativeList = input.required<Array<IdbAlternative>>();\r\n sectionList = input.required<Array<IdbSection>>();\r\n multiSelect = input(false, {transform: booleanAttribute});\r\n maxCount = input(0, {transform: numberAttribute});\r\n answerSLForm = new FormGroup<IAnswerSLForm>({})\r\n\r\n ngOnInit(): void {\r\n const multiSelect = this.multiSelect();\r\n\r\n this.sectionList().forEach(section => {\r\n const sectionControl = this.#createSectionRowControl(multiSelect, []);\r\n this.answerSLForm!.addControl(section.SectionGuid.toString(), sectionControl, );\r\n })\r\n\r\n this.answerSLForm.valueChanges.pipe(\r\n map((fullAnswer) => {\r\n let res: Record<string, Array<number> | number> = {};\r\n //Если в настройках указали мультивыбор для секции, то в данной реализации, при изменении форма возвращает массив boolean?, true/false, нажата отжата.\r\n //Этот массив нужно конвертировать в массив number, в котором будут только нажатые альтернативы.\r\n if (this.multiSelect()) {\r\n Object.entries(fullAnswer).forEach(([key]) => {\r\n const sectionAnswerCheckedArray = this.answerSLForm.get(key)?.value;\r\n res[key] = this.alternativeList()\r\n .map(alt => alt.Value)\r\n .filter((_, index) => sectionAnswerCheckedArray[index] )\r\n });\r\n } else {\r\n //если единичный выбор для секции, то ответ просто исходное значение.\r\n res = fullAnswer as Record<string, number>;\r\n }\r\n return res;\r\n }),\r\n tap(res => this.#disableExtraControls(this.maxCount())),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe({\r\n next: res => this.control.patchValue(res, {emitEvent: true})\r\n })\r\n }\r\n\r\n #createSectionRowControl(multiSelect: boolean, answers: number | Array<number>): FormArray<FormControl<boolean>> | FormControl<number> {\r\n if (multiSelect) {\r\n const msArray = new FormArray<FormControl<boolean>>([]);\r\n const answerAsArray = Array(answers);\r\n \r\n this.alternativeList().forEach((alt) => {\r\n const control= new FormControl<boolean>( answerAsArray.includes(alt.Value), {nonNullable: true});\r\n msArray.push(control, {emitEvent: false});\r\n\r\n //В режиме multiSelect у альтернативы есть понятие \"Группа\". Группа это число. Если выбирают альтернативу с определённой группой, то альтернативы с другой группой должны быть отжаты.\r\n //Логика такая же как и в ms вопросе\r\n control.valueChanges.pipe(\r\n filter(value => value && this.multiSelect()),\r\n takeUntilDestroyed(this.destroyRef),\r\n ).subscribe({\r\n next: () => {\r\n //сначала отбираем контролы у которых другая группа.\r\n const otherGroupAlternativesList = this.alternativeList()\r\n .map((alt, altIndex) => ({alternative: alt, index: altIndex}) ) //нужен индекс, по нему проще выбирать контролы в msArray\r\n .filter(data => data.alternative.GroupNo !== alt.GroupNo); //контролы у которых другая группа\r\n\r\n //\"отжимаем галочку\"\r\n otherGroupAlternativesList.forEach(data => {\r\n const altControl = msArray.controls.at(data.index);\r\n altControl!.patchValue(false, {emitEvent: false})\r\n });\r\n }\r\n })\r\n });\r\n return msArray;\r\n } else {\r\n return new FormControl<number>(Number(answers), {nonNullable: true});\r\n }\r\n }\r\n\r\n //дизейблит контроли если выбрали максимальное количество или енейблит если выбрали не максимальное количество\r\n #disableExtraControls(maxCount: number): void{\r\n //если в настройках анкеты указали что максимальное возможное количество выбранных альтернатив = 0, но ничего контролировать не надо.\r\n if (maxCount === 0 || !this.multiSelect()) {\r\n return\r\n }\r\n\r\n this.sectionList().forEach(sec => {\r\n const sectionControlArray = this.answerSLForm.get(sec.SectionGuid.toString()) as FormArray<FormControl<boolean>>;\r\n const values = sectionControlArray.value;\r\n const checkedCount = values.filter(v => v).length;\r\n\r\n sectionControlArray.controls.forEach(control => {\r\n if (checkedCount >= maxCount && !control.value) {\r\n control.disable({emitEvent: false})\r\n } else {\r\n control.enable({emitEvent: false})\r\n }\r\n })\r\n\r\n })\r\n }\r\n}\r\n","<table class=\"default-view\" [formGroup]=\"answerSLForm\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <th class=\"SLAlternativeCaption\">\r\n <span [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (secControl of answerSLForm.controls | keyvalue; track secControl.key; let sectionIndex = $index) {\r\n @if (multiSelect()){\r\n <tr>\r\n <td>\r\n <span [innerHTML]= \"sectionList()[sectionIndex].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </td>\r\n @for (alternativeControl of (secControl.value | asFormArray).controls ; track alternativeControl) {\r\n <td>\r\n <mat-checkbox\r\n [formControl]=\"alternativeControl\"\r\n class=\"alternative-sl tp-survey-checkbox\"/>\r\n </td>\r\n }\r\n </tr>\r\n } @else {\r\n <mat-radio-group [formControl]=\"secControl.value | asFormControl\" class=\"single-select-row\">\r\n <td class=\"single-select-item\">\r\n <span [innerHTML]= \"sectionList()[sectionIndex].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </td>\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <td class=\"single-select-item\">\r\n <mat-radio-button\r\n class=\"alternative-sl tp-survey-radio-button\"\r\n [value]=\"alt.Value\">\r\n </mat-radio-button>\r\n </td>\r\n }\r\n </mat-radio-group>\r\n }\r\n }\r\n </tbody>\r\n</table>\r\n\r\n<div class=\"mobile-view\" [formGroup]=\"answerSLForm\">\r\n @for (secControl of answerSLForm.controls | keyvalue; track secControl.key; let secIndex = $index) {\r\n <div class=\"mobile-view-section-row\" [formArrayName]=\"secControl.key\">\r\n <span [innerHTML]= \"sectionList()[secIndex].MultiLangCaptions | multiLangObjectToHtml:language()\" class=\"mobile-view-section-caption section-sl-caption\"></span>\r\n @if (multiSelect()) {\r\n <div class=\"mobile-view-alternative-list\">\r\n @for (alternativeControl of (secControl.value | asFormArray).controls; track alternativeControl; let altIndex = $index) {\r\n <mat-checkbox\r\n [formControl]=\"alternativeControl\"\r\n class=\"alternative-sl tp-survey-checkbox\">\r\n <span class=\"alternative-sl-caption\" [innerHTML]= \"alternativeList()[altIndex].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-checkbox>\r\n }\r\n </div>\r\n } @else {\r\n <mat-radio-group\r\n class=\"mobile-view-alternative-list\"\r\n [formControl]=\"secControl.value | asFormControl\">\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <mat-radio-button\r\n class=\"tp-survey-radio-button\"\r\n [value]=\"alt.Value\">\r\n <span class=\"alternative-sl-caption\" [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-radio-button>\r\n }\r\n </mat-radio-group>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {Component, forwardRef, input} from '@angular/core';\r\nimport {MatFormField} from '@angular/material/form-field';\r\nimport {MatInput} from '@angular/material/input';\r\nimport {NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {FocusAndSelectDirective} from '../../../directive/focus.and.select/focus.and.select.directive';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-od',\r\n templateUrl: './answer.od.component.html',\r\n styleUrls: ['./answer.od.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MatFormField,\r\n ReactiveFormsModule,\r\n FocusAndSelectDirective,\r\n MatInput,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerODComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerODComponent extends AnswerMasterComponent<number> {\r\n minValue = input<number>(1);\r\n maxValue = input<number | null>(null);\r\n}\r\n","<div class=\"container-main\">\r\n <mat-form-field appearance=\"outline\" class=\"input-od-number\">\r\n <input [formControl]=\"control\" [min]=\"minValue()\" [max]=\"maxValue()\" tpSurveyFocusAndSelect matInput type=\"number\">\r\n </mat-form-field>\r\n</div>\r\n\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {IdbAdditionalAnswer} from '../../tp.survey.interface';\r\n\r\n@Pipe({\r\n name: 'getAdditionalValueByValue',\r\n standalone: true\r\n})\r\nexport class GetAdditionalValueByValuePipe implements PipeTransform {\r\n\r\n transform(value: number | string, additionalAnswerList: Array<IdbAdditionalAnswer>): IdbAdditionalAnswer | undefined {\r\n const val = (typeof value === 'string') ? Number(value): value;\r\n return additionalAnswerList.find(aa => aa.Value === val);\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {AbstractControl, FormControl, FormGroup} from '@angular/forms';\r\nimport {AdditionalAnswer} from '../../tp.survey.type';\r\n\r\n@Pipe({\r\n name: 'keyValues',\r\n standalone: true\r\n})\r\nexport class KeyValuesPipe implements PipeTransform {\r\n\r\n transform(controls: FormGroup<{[key: string]: AbstractControl<AdditionalAnswer>}>): Array<{name: string, control: FormControl<AdditionalAnswer>}> {\r\n return Object.entries(controls).map(([key, control]) =>({\r\n name: key,\r\n control: control,\r\n }));\r\n }\r\n\r\n}\r\n","import {Component, input, output} from '@angular/core';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {IdbBaseParamsLanguage} from '../../../tp.survey.interface';\r\nimport {MatButton} from '@angular/material/button';\r\nimport {MatIcon} from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-lang',\r\n templateUrl: './answer.lang.component.html',\r\n styleUrls: ['./answer.lang.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MatButton,\r\n MatIcon\r\n ]\r\n})\r\n\r\nexport class AnswerLangComponent extends AnswerMasterComponent<number>{\r\n languageList = input.required<Array<IdbBaseParamsLanguage>>();\r\n onLanguageChange = output<number>();\r\n}\r\n","@for (language of languageList(); track $index) {\r\n <button mat-button (click)=\"onLanguageChange.emit(language.Value)\">\r\n {{language.Caption}}\r\n </button>\r\n}\r\n","import {ChangeDetectionStrategy, Component, DestroyRef, inject, input, OnInit, output, signal} from '@angular/core';\r\n\r\nimport {\r\n additionalAnswerDefaultValidator,\r\n additionalAnswerNumberValidator,\r\n answerDefaultValidator,\r\n answerMSValidator,\r\n answerODValidator,\r\n answerOLValidator,\r\n answerSlValidator,\r\n answerSSValidator\r\n} from './container.answer.validator';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {AnswerSSComponent} from '../answer.ss/answer.ss.component';\r\nimport {AnswerInfoComponent} from '../answer.info/answer.info.component';\r\nimport {AnswerMSComponent} from '../answer.ms/answer.ms.component';\r\nimport {KeyValuePipe} from '@angular/common';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AnswerAdditionalComponent} from '../answer.additional/answer.additional.component';\r\nimport {AnswerEndComponent} from '../answer.end/answer.end.component';\r\nimport {debounceTime, tap} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {AnswerOLComponent} from '../answer.ol/answer.ol.component';\r\nimport {AnswerSLComponent} from '../answer.sl/answer.sl.component';\r\nimport {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\r\nimport {AdditionalAnswer, AnswerSlType, AnswerT} from '../../../tp.survey.type';\r\nimport {AnswerODComponent} from '../answer.od/answer.od.component';\r\nimport {AnswerChange, ICurrentQuestionAnswer, IdbAdditionalAnswer, IdbAlternative, IdbBaseParamsLanguage, IdbQuestion, IdbSection} from '../../../tp.survey.interface';\r\nimport {AdditionalAnswerType, QuestionsType, ViewModel} from '../../../tp.survey.enum';\r\nimport {TpSurveyLogicService} from '../../../core/tp.survey.logic/tp.survey.logic.service';\r\nimport {MISSING_VALUE} from '../../../tp.survey.const';\r\nimport {GetAdditionalValueByValuePipe} from '../../../pipe/get.additional.value.by.value/get.additional.value.by.value.pipe';\r\nimport {KeyValuesPipe} from '../../../pipe/key.values/key.values.pipe';\r\nimport {AnswerLangComponent} from '../answer.lang/answer.lang.component';\r\n\r\ninterface IAnswerForm {\r\n answer: FormControl<AnswerT>;\r\n additionalAnswers: FormGroup<{\r\n [key: string]: FormControl<AdditionalAnswer>\r\n }>;\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-container-answer',\r\n standalone: true,\r\n imports: [\r\n AnswerODComponent,\r\n ReactiveFormsModule,\r\n AnswerSSComponent,\r\n AnswerInfoComponent,\r\n AnswerMSComponent,\r\n AnswerAdditionalComponent,\r\n KeyValuePipe,\r\n MultiLangObjectToHtmlPipe,\r\n AnswerEndComponent,\r\n AnswerOLComponent,\r\n AnswerSLComponent,\r\n GetAdditionalValueByValuePipe,\r\n KeyValuesPipe,\r\n AnswerLangComponent\r\n ],\r\n templateUrl: './container.answer.component.html',\r\n styleUrl: './container.answer.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ContainerAnswerComponent implements OnInit{\r\n question = input.required<IdbQuestion>();\r\n language = input.required<number>();\r\n viewModel = input.required<ViewModel>();\r\n answers = input<ICurrentQuestionAnswer>();\r\n developerMode = input<boolean>(false);\r\n languageList = input.required<Array<IdbBaseParamsLanguage>>();\r\n visibleAlternativeList = signal<Array<IdbAlternative>>([]);\r\n visibleSectionList = signal<Array<IdbSection>>([]);\r\n visibleAdditionalAnswerList = signal<Array<IdbAdditionalAnswer>>([]);\r\n logicChanged = output<Record<string, any>>();\r\n answerChanged = output<AnswerChange>();\r\n onLanguageChange = output<number>();\r\n\r\n questionsType = QuestionsType;\r\n answerForm: FormGroup<IAnswerForm>;\r\n readonly AdditionalAnswerType = AdditionalAnswerType;\r\n #alternativeSequenceClicks: Array<[number, number]> = [];\r\n readonly #logic = inject(TpSurveyLogicService);\r\n readonly #destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n this.answerForm = new FormGroup<IAnswerForm>({\r\n answer: new FormControl<AnswerT>(null ),\r\n additionalAnswers: new FormGroup({}),\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const answerValue = this.answers()?.question?.AnswerValue ?? null;\r\n const answerValueClear = answerValue === MISSING_VALUE ? null : answerValue;\r\n this.answerForm.patchValue({\r\n answer: answerValueClear,\r\n additionalAnswers: this.answers()?.question?.AnswerAdditional\r\n }, {emitEvent:false});\r\n\r\n this.#alternativeSequenceClicks = this.answers()?.question?.AlternativeSequenceClicks ?? [];\r\n this.#updateAlternativesAndSections();\r\n this.#updateAdditionalAnswers(true);\r\n this.#addValidator();\r\n\r\n this.answerForm.valueChanges.pipe(\r\n debounceTime(250),\r\n tap(() => this.logicChanged.emit(this.#getLogicVars())), //шлём новые логические переменные(может обновиться список additionalAnswers)\r\n tap(() => this.#updateAdditionalAnswers(false)), //перестраиваем additionalAnswers\r\n map(values => {\r\n const formGroup = (this.answerForm.controls.additionalAnswers as FormGroup);\r\n const additionalAnswerNormalized: Record<number, AdditionalAnswer> = {};\r\n this.question().AdditionalAnswerlist.forEach(aa => {\r\n const isVisible = this.visibleAdditionalAnswerList().find(faa => faa.Value === aa.Value);\r\n if (isVisible) {\r\n additionalAnswerNormalized[aa.Value] = !!values.additionalAnswers ? values.additionalAnswers[aa.Value]! : MISSING_VALUE;\r\n formGroup.get(aa.Value.toString())?.enable({emitEvent: false})\r\n } else {\r\n additionalAnswerNormalized[aa.Value] = MISSING_VALUE;\r\n formGroup.get(aa.Value.toString())?.disable({emitEvent: false})\r\n }\r\n });\r\n return {\r\n answer:values.answer,\r\n additionalAnswers: additionalAnswerNormalized,\r\n }\r\n }),\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe(data => {\r\n this.answerChanged.emit({\r\n guid: this.question().QuestionGuid,\r\n isComplete: this.answerForm.valid,\r\n answer: data.answer!,\r\n additionalAnswers: data.additionalAnswers as Record<number, AdditionalAnswer>,\r\n logicVars: this.#getLogicVars(),\r\n viewedAlternativeValues: this.visibleAlternativeList().map(alt => alt.Value),\r\n viewedSectionGuids: this.visibleSectionList().map(alt => alt.SectionGuid),\r\n alternativeSequenceClicks: Array.from(this.#alternativeSequenceClicks)\r\n });\r\n });\r\n this.#setDefaultAnswers();\r\n }\r\n\r\n #addValidator(): void{\r\n const question = this.question();\r\n this.answerForm.controls.answer.addValidators(answerDefaultValidator());\r\n\r\n switch (question.QuestionType){\r\n case QuestionsType.eqSS: {\r\n this.answerForm.controls.answer.addValidators(answerSSValidator());\r\n break;\r\n }\r\n\r\n case QuestionsType.eqMS: {\r\n this.answerForm.controls.answer.addValidators(answerMSValidator(this.visibleAlternativeList().length, this.question().AlternativeMinAnswersCount, this.question().AlternativeMaxAnswersCount));\r\n break;\r\n }\r\n\r\n case QuestionsType.eqOD: {\r\n this.answerForm.controls.answer.addValidators(answerODValidator(question.ODMinValue, question.ODMaxValue));\r\n break;\r\n }\r\n\r\n case QuestionsType.eqOL: {\r\n this.answerForm.controls.answer.addValidators(answerOLValidator());\r\n break;\r\n }\r\n\r\n case QuestionsType.eqSL: {\r\n this.answerForm.controls.answer.addValidators(answerSlValidator(this.question().RequireAllAnswers, this.question().SLSectionMinAnswersCount, this.visibleSectionList()));\r\n break;\r\n }\r\n }\r\n }\r\n\r\n #setDefaultAnswers(): void{\r\n const question = this.question();\r\n const isLang = question.QuestionType === QuestionsType.eqLANG;\r\n const isInfo = question.QuestionType === QuestionsType.eqINFO;\r\n const isEnd = question.QuestionType === QuestionsType.eqEND;\r\n const isSSMS = (question.QuestionType === QuestionsType.eqSS || question.QuestionType === QuestionsType.eqMS) && (this.visibleAlternativeList().length === 0);\r\n\r\n if (isInfo || isEnd || isSSMS || isLang) {\r\n let defaultAnswer;\r\n switch (question.QuestionType) {\r\n case QuestionsType.eqMS: defaultAnswer = []; break;\r\n case QuestionsType.eqSS: defaultAnswer = 0; break;\r\n default: defaultAnswer = 1;\r\n }\r\n\r\n //может возникнуть ситуация, когда нет альтернатив для отображения.в этом случае вопрос показывать не нужно, как ответ записываем 0 и переходим на следующий\r\n this.answerForm.patchValue({\r\n answer: defaultAnswer\r\n }, {emitEvent: true});\r\n }\r\n }\r\n\r\n\r\n //собираем все логические переменные, которые генерит вопрос\r\n #getLogicVars(): Record<string, any>{\r\n const questionType = this.question().QuestionType;\r\n const answer = this.answerForm.controls.answer.value;\r\n const logicObj: Record<string, any> = {};\r\n\r\n //переменная самого вопроса\r\n const questionSysName = this.question().SysName;\r\n\r\n //ответ на основной вопрос\r\n logicObj[questionSysName] = this.answerForm.value.answer;\r\n\r\n switch (questionType) {\r\n case QuestionsType.eqSS: {\r\n //каждая альтернатива имеет свою переменную, 1 нажата, 0 не нажата или скрыта(скрыта сомнительно, что это правильно)\r\n this.question().Alternativelist.forEach( alt => logicObj[`${questionSysName}${alt.SysName}`] = answer === alt.Value ? 1 : 0); // переменные альтернатив\r\n break;\r\n }\r\n\r\n case QuestionsType.eqMS: {\r\n const answers = Array.isArray(this.answerForm.value.answer) ? this.answerForm.value.answer : [];\r\n //каждая альтернатива имеет свою переменную, 1 нажата, 0 не нажата или скрыта(скрыта сомнительно, что это правильно)\r\n this.question().Alternativelist.forEach( alt => logicObj[`${questionSysName}${alt.SysName}`] = answers.find(val => val === alt.Value) ? 1 : 0); // переменные альтернатив\r\n break;\r\n }\r\n\r\n case QuestionsType.eqOL: {\r\n //логическая переменная для OL вопроса - 1, а не то что ввели\r\n logicObj[questionSysName] = 1;\r\n break;\r\n }\r\n\r\n case QuestionsType.eqSL: {\r\n /*Тут сложнее чем в остальных типах вопросов.\r\n * 1. Логическая переменная для SL вопроса\r\n * 2. Логическая переменная для каждой секции\r\n * 3. Логические переменные для каждой альтернативы + секции\r\n * */\r\n\r\n //1. Логическая переменная для SL вопроса - 1, а не то что ввели\r\n logicObj[questionSysName] = 1;\r\n\r\n //Каждая секция должны иметь свою логическую переменную, array<number> если multiselect, number если multiselect = false, -97 если секция не была показана.\r\n //+ для каждой секции нужно добавлять логические переменные для каждой альтернативы. 1 нажата, 0 отжата, -97 если альтернатива не была показана.\r\n const fullAnswers = this.answerForm.value.answer as AnswerSlType;\r\n const visibleAlternativeList = this.visibleAlternativeList().map(alt => alt.Value);\r\n this.question().Sectionlist.forEach(section => {\r\n const sectionSysName = section.SysName;\r\n\r\n //если undefined, то заменим на -97 это значит секция не была показана.\r\n const sectionAnswer = fullAnswers[section.SectionGuid.toString()] ?? MISSING_VALUE;\r\n\r\n //2. добавляем переменную самой секции.\r\n logicObj[sectionSysName] = sectionAnswer;\r\n this.question().Alternativelist.forEach(alternative => {\r\n\r\n const sectionAlternativeSysName = `${sectionSysName}${alternative.SysName}`;\r\n //секция не была показана, значит альтернативы тоже\r\n if (sectionAnswer === MISSING_VALUE) {\r\n logicObj[sectionAlternativeSysName] = MISSING_VALUE;\r\n } else {\r\n //сначала нужно проверить была ли показана альтернатива, если нет\r\n //альтернативы нет в списке показанных\r\n if (!visibleAlternativeList.find(visibleVal => visibleVal === alternative.Value)) {\r\n logicObj[sectionAlternativeSysName] = MISSING_VALUE;\r\n } else {\r\n //альтернативы есть в списке показанных, нужно узнать была нажата или нет.\r\n const isPressed = Array.isArray(sectionAnswer) ? sectionAnswer.includes(alternative.Value) : sectionAnswer === alternative.Value;\r\n logicObj[sectionAlternativeSysName] = isPressed ? 1 : 0;\r\n }\r\n }\r\n });\r\n });\r\n break;\r\n }\r\n }\r\n\r\n //логические переменные дополнительных вопросов.\r\n this.question().AdditionalAnswerlist.forEach(aa => {\r\n const additionalAnswer = !!this.answerForm.value.additionalAnswers ? this.answerForm.value.additionalAnswers![aa.Value.toString()] : MISSING_VALUE;\r\n const additionalAnswerSysName = `${questionSysName}${aa.SysName}`;\r\n if (additionalAnswer === MISSING_VALUE) {\r\n //дополнительный ответ не был показан, (скрыт по логике)\r\n logicObj[additionalAnswerSysName] = MISSING_VALUE;\r\n } else {\r\n //если на вопрос не отвечали(null), этот самый null и добавляем как ответ.\r\n if (additionalAnswer === null) {\r\n logicObj[additionalAnswerSysName] = null;\r\n } else {\r\n //если вопрос типа текст, как переменную добавим 1, в остальных случаях сам ответ.\r\n logicObj[additionalAnswerSysName] = aa.AnswerType === AdditionalAnswerType.aatText ? 1 : additionalAnswer;\r\n }\r\n }\r\n });\r\n return logicObj;\r\n }\r\n\r\n #updateAlternativesAndSections(): void{\r\n const developerMode = this.developerMode();\r\n //фильтруем альтернативы,\r\n const filteredAlternativeList = this.question().Alternativelist.filter(alt => developerMode || this.#logic.executeLogic(alt.EnableExpression));\r\n\r\n //фильтруем секции,\r\n const filteredSectionList = this.question().Sectionlist.filter(sec => developerMode || this.#logic.executeLogic(sec.EnableExpression));\r\n\r\n //меняем расположение тех, которые этого требуют и обновляем глобальную переменную\r\n this.visibleAlternativeList.set(this.#arrangeRotatedList(filteredAlternativeList));\r\n //для секций тоже самое\r\n this.visibleSectionList.set(this.#arrangeRotatedList(filteredSectionList));\r\n }\r\n\r\n #updateAdditionalAnswers(isInit: boolean): void{\r\n const developerMode = this.developerMode();\r\n const formGroup = (this.answerForm.controls.additionalAnswers as FormGroup);\r\n\r\n if (isInit) {\r\n this.question().AdditionalAnswerlist.forEach(aa => {\r\n switch (aa.AnswerType) {\r\n case AdditionalAnswerType.aatNumber: formGroup.addControl(aa.Value.toString(), new FormControl<number | null>(null,{validators: [additionalAnswerDefaultValidator(aa.IsRequired), additionalAnswerNumberValidator(aa.IsRequired, aa.NumberMinValue, aa.NumberMaxValue)]}), {emitEvent: false}); break;\r\n case AdditionalAnswerType.aatText: formGroup.addControl(aa.Value.toString(), new FormControl<string | null>(null,{validators: [additionalAnswerDefaultValidator(aa.IsRequired)]}), {emitEvent: false}); break;\r\n case AdditionalAnswerType.aatBoolean: formGroup.addControl(aa.Value.toString(), new FormControl<boolean | null>(null,{validators: [additionalAnswerDefaultValidator(aa.IsRequired)]}), {emitEvent: false}); break;\r\n }\r\n });\r\n return\r\n }\r\n\r\n //фильтруем,\r\n const filteredAdditionalAnswerList = this.question().AdditionalAnswerlist.filter(addAnswer => developerMode || this.#logic.executeLogic(addAnswer.EnableExpression));\r\n\r\n //обновляем глобальный список\r\n this.visibleAdditionalAnswerList.set(filteredAdditionalAnswerList);\r\n }\r\n\r\n onAlternativeClick(value: number) {\r\n this.#alternativeSequenceClicks.push([value, new Date().getTime()]);\r\n }\r\n\r\n #arrangeRotatedList<T extends IdbAlternative | IdbSection>(inputArray: Array<T>): Array <T> {\r\n //У каждой альтернативы и секции есть признак Rotation, который позволяем менять порядок отображения альтернативы или секции\r\n //если он true, то альтернатива и секция должна поменять расположение\r\n const resArray: Array<T | number> = [];\r\n\r\n //размер массива\r\n const inputArrayLength = inputArray.length;\r\n\r\n //проходимся по каждому элементу входного массива, и копируем в результирующий, Если Rotation, копируем его индекс, если Rotation не указан, копируем сам объект\r\n inputArray.forEach((obj, index) => resArray.push(obj.Rotation ? index : obj));\r\n\r\n //теперь с помощью рандома, расставим остальные эл-ты\r\n resArray.forEach((obj, index, array) => {\r\n if ((typeof obj === 'number') && (obj >= 0)) {\r\n while (true) {\r\n //если в новом массиве нет элемента из старого массива по random индексу, тогда копируем в новый массив старый елемент в новый адрес\r\n const newIndex = Math.floor( Math.random() * inputArrayLength );\r\n if (array.indexOf(inputArray[newIndex]) === -1) {\r\n array[index] = inputArray[newIndex];\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n return resArray as Array<T>;\r\n }\r\n}\r\n","<div class=\"container-main\" [formGroup]=\"answerForm\">\r\n @switch (question().QuestionType) {\r\n <!-- @case ('LANG') {-->\r\n <!-- <app-answer-lang [question]=\"question\" [langArray]=\"sc.questionary.BaseParams.LanguageList\"/>-->\r\n <!-- }-->\r\n\r\n @case (questionsType.eqLANG) {\r\n <tp-survey-answer-lang\r\n [languageList]=\"languageList()\"\r\n [language]=\"2\"\r\n [viewModel]=\"viewModel()\"\r\n (onLanguageChange)=\"onLanguageChange.emit($event)\"/>\r\n }\r\n\r\n @case (questionsType.eqINFO) {\r\n <tp-survey-answer-info\r\n formControlName=\"answer\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"/>\r\n }\r\n\r\n @case (questionsType.eqSS) {\r\n <tp-survey-answer-ss\r\n formControlName=\"answer\"\r\n [question]=\"question()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [alternativeList]=\"visibleAlternativeList()\"\r\n (onAlternativeClick)=\"onAlternativeClick($event)\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqMS) {\r\n <tp-survey-answer-ms\r\n formControlName=\"answer\"\r\n [question]=\"question()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [alternativeMaxAnswersCount]=\"question().AlternativeMaxAnswersCount\"\r\n [alternativeList]=\"visibleAlternativeList()\"\r\n (onAlternativeClick)=\"onAlternativeClick($event)\"/>\r\n }\r\n\r\n @case (questionsType.eqOD) {\r\n <tp-survey-answer-od\r\n formControlName=\"answer\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [minValue]=\"question().ODMinValue\"\r\n [maxValue]=\"question().ODMaxValue\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqOL) {\r\n <tp-survey-answer-ol\r\n formControlName=\"answer\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [telephoneInput]=\"question().OLTypeTel\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqSL) {\r\n <tp-survey-answer-sl\r\n formControlName=\"answer\"\r\n [alternativeList]=\"visibleAlternativeList()\"\r\n [sectionList]=\"visibleSectionList()\"\r\n [multiSelect]=\"question().MultiSelect\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [maxCount]=\"this.question().SLSectionMaxAnswersCount\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqEND) {\r\n <tp-survey-answer-end\r\n formControlName=\"answer\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n />\r\n }\r\n }\r\n\r\n <div class=\"container-additional-answer\">\r\n @for (addAnswer of answerForm.controls.additionalAnswers.controls | keyValues; track addAnswer) {\r\n @if (addAnswer.name | getAdditionalValueByValue:visibleAdditionalAnswerList(); as additionalAnswerObject ) {\r\n <tp-survey-answer-additional\r\n [control]=\"addAnswer.control\"\r\n [class.full-width]=\"additionalAnswerObject.AnswerType===AdditionalAnswerType.aatText\"\r\n [answerType]=\"additionalAnswerObject.AnswerType\"\r\n [caption]=\"additionalAnswerObject.MultiLangCaptions | multiLangObjectToHtml:language()\"\r\n [numberMinValue]=\"additionalAnswerObject.NumberMinValue\"\r\n [numberMaxValue]=\"additionalAnswerObject.NumberMaxValue\"\r\n [textMultiline]=\"additionalAnswerObject.TextMultiline\"\r\n [captionPosition]=\"additionalAnswerObject.CaptionPosition\"/>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {IdbBaseParamsLanguage} from '../../tp.survey.interface';\r\n\r\n@Pipe({\r\n name: 'getActiveLanguage',\r\n standalone: true\r\n})\r\nexport class GetActiveLanguagePipe implements PipeTransform {\r\n\r\n transform(languageList?: Array<IdbBaseParamsLanguage>, languageId?: number): IdbBaseParamsLanguage | undefined {\r\n return Array.isArray(languageList) ? languageList.find(langObj => langObj.Value === languageId && langObj.isActive) : undefined;\r\n }\r\n\r\n}\r\n","import {Directive, effect, ElementRef, input} from '@angular/core';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {BASE_HEIGHT, BASE_WIDTH} from '../../tp.survey.const';\r\n\r\n@Directive({\r\n selector: '[tpSurveyUpdateFontSize]',\r\n standalone: true\r\n})\r\nexport class UpdateFontSizeDirective{\r\n viewModel = input.required<ViewModel>( {alias: 'tpSurveyUpdateFontSize'});\r\n constructor(private readonly _element: ElementRef) {\r\n effect(() => {\r\n if (this.viewModel() === ViewModel.vmTablet) {\r\n const containerWidth = this._element.nativeElement.clientWidth;\r\n const containerHeight = this._element.nativeElement.clientHeight;\r\n const proportion: number = Math.min(containerWidth / BASE_WIDTH, containerHeight / BASE_HEIGHT );\r\n Array.from(this._element.nativeElement.children).forEach((el) => (el as HTMLElement).style.fontSize = `${proportion * 100}%`);\r\n }\r\n });\r\n }\r\n}\r\n\r\n","import {LOGIC_FUNC_TEXT} from './tp.survey.const';\r\n\r\nexport function executeLogicExpression(expression: string, vars: Record<string, unknown>): Function {\r\n return new Function(`${LOGIC_FUNC_TEXT} return ${expression}`).call(vars);\r\n}\r\n\r\n","import {IdbQuestionaryQuota, IdbQuestionaryQuota2dObject} from '../../tp.survey.interface';\r\nimport {Answer} from '../tp.survey.answer/tp.survey.answer';\r\nimport {executeLogicExpression} from '../../tp.survey.method';\r\nimport {LogicObject} from '../../tp.survey.type';\r\n\r\ntype QuotaCalculationResult = {\r\n name: string;\r\n guid: number;\r\n} | {\r\n name: null;\r\n guid2d: number;\r\n} | null;\r\n\r\nexport class SurveyQuotas {\r\n #completedQuota: {name: string | null; guid: number| null; guid2d: number| null} = {name: null, guid: null, guid2d: null};\r\n #quotas: Array<IdbQuestionaryQuota> = [];\r\n #quotas2d: Array<IdbQuestionaryQuota2dObject> = [];\r\n #quotaLimitDestinationQuestionGuid: number = -1;\r\n #quotaLimitDestinationQuestionNum: number = -1;\r\n\r\n setQuotas(quotas1d: Array<IdbQuestionaryQuota> = [], quotas2d: Array<IdbQuestionaryQuota2dObject> = [], quotaLimitDestinationQuestionGuid: number = -1, destinationQuestionNum: number = -1){\r\n this.#quotas = quotas1d;\r\n this.#quotas2d = quotas2d;\r\n this.#quotaLimitDestinationQuestionGuid = quotaLimitDestinationQuestionGuid;\r\n this.#quotaLimitDestinationQuestionNum = destinationQuestionNum;\r\n }\r\n\r\n guidIsDestinationQuestion(guid: number): boolean{\r\n return this.#quotaLimitDestinationQuestionGuid === guid;\r\n }\r\n\r\n\r\n get quotaIsCompleted(): boolean {\r\n return this.#completedQuota && (!!this.#completedQuota.guid || !!this.#completedQuota.guid2d) ;\r\n }\r\n\r\n get destinationQuestionGuid(): number {\r\n return this.#quotaLimitDestinationQuestionGuid\r\n }\r\n\r\n get quotaCount(): number {\r\n const quotas = this.#quotas && Array.isArray(this.#quotas) ? this.#quotas.length : 0;\r\n const quotas2d = this.#quotas2d && Array.isArray(this.#quotas2d) ? this.#quotas2d.length : 0;\r\n return quotas + quotas2d;\r\n }\r\n\r\n findFilledQuotas(currentQuestionNum: number, vars: LogicObject, interviewAnswers: Array<Answer>): void {\r\n /*\r\n * Поиск заполненной квоты это очень дорогой процесс. Его нужно оптимизировать по максимуму.\r\n * Перед поиском нужно выполнить ряд проверок.\r\n * Проверка currentQuestionNum <= this.#quotaLimitDestinationQuestionNum Нужна для оптимизации.\r\n * DestinationQuestion Желательно располагать после последнего квотного вопроса, потому что нет смысла постоянно проверять квоты, если вопросы которые используются для расчёта квоты меняться не будут.\r\n * например Квота Q1 + Q2 <= 25. DestinationQuestion нужно делать номером 3 или 4. Потому что как бы респондент не отвечал на последующие вопросы, результат квот не измениться и каждый раз их пересчитывать смысла нет.\r\n */\r\n if (\r\n (this.destinationQuestionGuid > 0) && //Глобально в настройках анкеты должен быть указан вопрос который должен отобразиться при достижении квоты, если его нет, то и искать квоты смысла нет.\r\n (this.quotaCount > 0) && //проверим если у нас вообще квоты\r\n (currentQuestionNum <= this.#quotaLimitDestinationQuestionNum) && // номер текущий вопроса меньше номера вопроса для перехода по достижении квот\r\n (!this.quotaIsCompleted) //и на финал проверим если ли уже заполненная квота, повторно не запускаем\r\n ) {\r\n\r\n new Promise<QuotaCalculationResult>((resolve, reject) => {\r\n if (Array.isArray(this.#quotas)) {\r\n const completedQuota = this.#quotas.find(quota => executeLogicExpression(quota.expression, vars));\r\n if (!!completedQuota) {\r\n return resolve({name: completedQuota.name, guid: completedQuota.quota_guid});\r\n }\r\n }\r\n\r\n if (Array.isArray(this.#quotas2d)) {\r\n const answers = this.#quotas2d.length > 0 ? interviewAnswers.map(a => ({av: a.AnswerValue, qg: a.QuestionGUID}) ) : [];\r\n\r\n const filledQuota2dArray = this.#quotas2d.filter(quotaValues => quotaValues.qs.every(qvq => !!answers.find(intAnswer => intAnswer.qg === qvq.guid && intAnswer.av === qvq.value)));\r\n\r\n //если не нашли заполненных квот выходим\r\n if (filledQuota2dArray.length <= 0) {\r\n return;\r\n }\r\n\r\n //ищем квоту которая заполнена и у нее есть условие и оно выполняется.\r\n const quota2dWithExpression = filledQuota2dArray.find((q: IdbQuestionaryQuota2dObject) => !!q.exp && executeLogicExpression(q.exp, vars));\r\n\r\n //если квота есть сообщим\r\n if (!!quota2dWithExpression) {\r\n return resolve({name: null, guid2d: quota2dWithExpression.qvg});\r\n }\r\n\r\n //если квоты с Expression нет, ищем квоту которая заполнена и у нее нет условия\r\n const quota2dWithoutExpression = filledQuota2dArray.find((q: IdbQuestionaryQuota2dObject) => !q.exp || (typeof q.exp === 'string' && q.exp.trim().length === 0));\r\n if (!!quota2dWithoutExpression) {\r\n return resolve({name: null, guid2d: quota2dWithoutExpression.qvg});\r\n }\r\n }\r\n reject(null)\r\n }).then(quota => {\r\n if (!!quota) {\r\n this.#completedQuota = {\r\n name: quota.name,\r\n guid: 'guid' in quota ? quota.guid : null,\r\n guid2d: 'guid2d' in quota ? quota.guid2d : null,\r\n }\r\n }\r\n }).catch(err => {\r\n console.error(err);\r\n });\r\n }\r\n }\r\n}\r\n","import {IQuestionAnswer} from '../../tp.survey.interface';\r\nimport {AdditionalAnswer, LogicObject} from '../../tp.survey.type';\r\nimport {MISSING_VALUE} from '../../tp.survey.const';\r\n\r\nexport class Answer implements IQuestionAnswer {\r\n readonly QuestionGUID: number;\r\n readonly QuestionVersion: number;\r\n readonly AnswerAdditional: Record<string, AdditionalAnswer> = {};\r\n readonly ViewedAlternativeValues: Array<number> = [];\r\n readonly ViewedSectionGuids: Array<number> = [];\r\n readonly AlternativeSequenceClicks: Array<[number, number]> = [];\r\n StartedAt = 0;\r\n FinishedAt = 0;\r\n AnswerValue: any = MISSING_VALUE;\r\n answerIsComplete: boolean = false;\r\n constructor(guid: number, version: number = -1) {\r\n this.QuestionGUID = guid;\r\n this.QuestionVersion = version;\r\n }\r\n clear(): void {\r\n this.StartedAt = 0;\r\n this.FinishedAt = 0;\r\n this.AnswerValue = MISSING_VALUE;\r\n this.ViewedAlternativeValues.length = 0;\r\n this.ViewedSectionGuids.length = 0;\r\n this.AlternativeSequenceClicks.length = 0;\r\n for (const key of Object.keys(this.AnswerAdditional)) {\r\n this.AnswerAdditional[Number(key)] = null;\r\n }\r\n }\r\n\r\n addAnswer(answerValue: unknown, answerAdditional: LogicObject, asComplete: boolean): void {\r\n this.AnswerValue = answerValue;\r\n }\r\n\r\n}\r\n","import {Answer} from '../tp.survey.answer/tp.survey.answer';\r\nimport {IQuestionAnswer} from '../../tp.survey.interface';\r\nimport {MISSING_VALUE} from '../../tp.survey.const';\r\nimport {Injectable} from '@angular/core';\r\nimport {TpSurveyCoreService} from '../tp.survey.core/tp.survey.core.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TpSurveyInterviewService {\r\n #answerList: Array<Answer> = [];\r\n startedAt: number = 0;\r\n\r\n createAnswer(guid: number, version: number): Answer {\r\n //ишем ответ с таким же номером как и в вопросе\r\n let answer = this.findAnswerByGuid(guid);\r\n\r\n //если ответа с таким номером вопроса нет, создадим\r\n if (!answer) {\r\n answer = new Answer(guid, version)\r\n this.#answerList.push(answer);\r\n }\r\n //вернём то, что создали или то что нашли\r\n return answer;\r\n }\r\n\r\n findAnswerByGuid(guid: number): Answer | undefined {\r\n return this.#answerList.find(a => a.QuestionGUID === guid);\r\n }\r\n\r\n questionIsComplete(guid: number): boolean{\r\n const answer = this.findAnswerByGuid(guid);\r\n return !answer ? false : answer.answerIsComplete;\r\n }\r\n\r\n getAnswerList(): Array<Answer>{\r\n return this.#answerList;\r\n }\r\n\r\n overrideAnswers(answers: Array<IQuestionAnswer>): void{\r\n //не будем трогать вопросы которые = -97\r\n answers.filter(answer => answer.AnswerValue !== MISSING_VALUE).forEach(oldAnswer => {\r\n const newAnswer = this.#answerList.find(aa => aa.QuestionGUID === oldAnswer.QuestionGUID);\r\n if (!!newAnswer) {\r\n //вернём основной ответ\r\n newAnswer.AnswerValue = oldAnswer.AnswerValue;\r\n\r\n newAnswer.StartedAt = oldAnswer.StartedAt;\r\n newAnswer.FinishedAt = oldAnswer.FinishedAt;\r\n\r\n //С дополнительными ответами сложнее, они помечены readonly. Поэтому сначала удалим, потом добавим\r\n for (const prop of Object.getOwnPropertyNames(newAnswer.AnswerAdditional)) {\r\n delete newAnswer.AnswerAdditional[prop];\r\n }\r\n //добавляем старые значения\r\n for (const [key, value] of Object.entries(oldAnswer.AnswerAdditional)) {\r\n newAnswer.AnswerAdditional[key] = value;\r\n }\r\n\r\n //То же самое с ViewedAlternativeValues и ViewedSectionGuids и AlternativeSequenceClicks. Т.к. они readonly сначала удалим, потом добавим\r\n newAnswer.ViewedAlternativeValues.length = 0;\r\n oldAnswer.ViewedAlternativeValues.forEach(oa => newAnswer.ViewedAlternativeValues.push(oa));\r\n\r\n newAnswer.ViewedSectionGuids.length = 0;\r\n oldAnswer.ViewedSectionGuids.forEach(oa => newAnswer.ViewedSectionGuids.push(oa));\r\n\r\n newAnswer.AlternativeSequenceClicks.length = 0;\r\n oldAnswer.AlternativeSequenceClicks.forEach(oa => newAnswer.AlternativeSequenceClicks.push(oa));\r\n }\r\n });\r\n }\r\n}\r\n","import {DestroyRef, inject, Inject, Injectable, PLATFORM_ID} from '@angular/core';\r\nimport {BehaviorSubject, filter, Observable, Subject} from 'rxjs';\r\nimport {SurveyQuotas} from '../tp.servey.quota/tp.survey.quota';\r\nimport {TpSurveyLogicService} from '../tp.survey.logic/tp.survey.logic.service';\r\nimport {isPlatformBrowser} from '@angular/common';\r\nimport {map} from 'rxjs/operators';\r\nimport {AnswerChange, IdbQuestion, IdbQuestionary, IInterviewData, IInterviewLogicVar, IQuestionAnswer} from '../../tp.survey.interface';\r\nimport {TpSurveyInterviewService} from '../tp.survey.interview/tp.survey.interview.service';\r\nimport {QuestionsType, ResultativeStatus, SurveyEvents, ValidStatus} from '../../tp.survey.enum';\r\nimport {Answer} from '../tp.survey.answer/tp.survey.answer';\r\nimport {AnswerSlType, LogicObject} from '../../tp.survey.type';\r\nimport {MISSING_VALUE} from '../../tp.survey.const';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\n\r\ninterface BroadcastEvent {\r\n key: string;\r\n data?: any;\r\n}\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TpSurveyCoreService {\r\n private readonly _eventBus = new Subject<BroadcastEvent>();\r\n readonly #currentQuestion = new BehaviorSubject<IdbQuestion | null>(null);\r\n #surveyQuotas = new SurveyQuotas();\r\n #questionary?: IdbQuestionary;\r\n #displayedQuestions: Array<number> = []; // нужно для навигации по кнопке back\r\n readonly #destroyRef = inject(DestroyRef);\r\n constructor(@Inject(PLATFORM_ID) private readonly platformId: object, private readonly _logic: TpSurveyLogicService, private readonly _interview: TpSurveyInterviewService) {\r\n // запускам проверку квот, после скрытия каждого(почти) вопроса (seQuestionHide)\r\n this._eventBus.asObservable().pipe(\r\n filter(ev => ev.key === SurveyEvents.seQuestionHide ),\r\n takeUntilDestroyed(this.#destroyRef),\r\n ).subscribe({\r\n next: () => this.#surveyQuotas.findFilledQuotas(this.#currentQuestion.value?.QuestionNum ?? -1, Object.assign({}, this._logic.getLogicVars()), this._interview.getAnswerList())\r\n });\r\n }\r\n\r\n setupSurvey(questionaryRawData: IdbQuestionary, logicVars?: Array<IInterviewLogicVar>, answerList?: Array<IQuestionAnswer>, questionGuid?: number) {\r\n //если анкеты нет, делать нечего.\r\n if (!questionaryRawData) {\r\n this.#currentQuestion.next(null);\r\n return;\r\n }\r\n\r\n this.#questionary = questionaryRawData;\r\n\r\n if (isPlatformBrowser(this.platformId)) {\r\n //узнаем есть ли вопрос который указали для перехода при заполнении квоты\r\n const destinationQuestion = this.#findQuestionByGuid(questionaryRawData.BaseParams.QuotaLimitDestinationQuestionGuid);\r\n\r\n //инициализируем квоты\r\n this.#surveyQuotas.setQuotas(questionaryRawData.Quotas, questionaryRawData.Quotas2d, destinationQuestion?.QuestionGuid ?? -1, destinationQuestion?.QuestionNum ?? -1);\r\n }\r\n\r\n //создадим ответы и логические переменные\r\n this.#initiateQuestions(this.#questionary.Questions)\r\n\r\n // Может быть 2 варианта запуска интервью, 1-новое интервью, 2-перезапуск старого интервью. В первом случае начало это lang или первый вопрос. Во втором, с последнего вопроса на который ответили.\r\n let startQuestionNum: number | undefined = undefined;\r\n //если загружаем ранее не законченное интервью, продолжаем с места последнего вопроса (случай номер 2)\r\n if (!!logicVars && !!answerList && !!questionGuid) {\r\n //загружаем старые логические переменные и ответы\r\n this.#fillOldInterviewData(logicVars, answerList);\r\n\r\n //ищем номер вопроса, который был последний перед сохранением.\r\n const questionLastSave = this.#findQuestionByGuid(questionGuid);\r\n\r\n //Вопрос могли удалить. Тогда начнем сначала.\r\n if (!!questionLastSave) {\r\n startQuestionNum = questionLastSave.QuestionNum;\r\n }\r\n }\r\n if (startQuestionNum === undefined) {\r\n //Это новое интервью, без ранее сохранённых данных(случай 1). Запускаем опрос, первый экран это Lang вопрос, но если выбора языка нет, пропускаем и переходим на 1-й вопрос\r\n startQuestionNum = this.#activeLangCount > 1 ? 0 : this.#nextQuestionNum();\r\n }\r\n\r\n //пошлём событие о начале опроса\r\n this._eventBus.next({key: SurveyEvents.seSurveyStart, data: {questionary: this.#questionary}});\r\n\r\n //показываем вопрос\r\n this.#changeCurrentQuestion(this.#questionary!.Questions[startQuestionNum]);\r\n }\r\n\r\n on(...key: Array<string>): Observable<any> {\r\n return this._eventBus.asObservable().pipe(\r\n filter(event => key.includes(event.key)),\r\n map(event => event.data)\r\n );\r\n }\r\n\r\n goToNextQuestion(): void {\r\n const currentQuestion = this.#currentQuestion.value;\r\n if (!currentQuestion) {\r\n return;\r\n }\r\n //если ответ на текущий вопрос не закончен, выходим\r\n if (!this._interview.questionIsComplete(currentQuestion.QuestionGuid)) {\r\n return ;\r\n }\r\n\r\n //если указан PostScript, выполним его\r\n if (!!currentQuestion.PostScript) {\r\n this._logic.executePostScript(currentQuestion.PostScript);\r\n }\r\n this.#changeCurrentQuestion(this.#questionary!.Questions[this.#nextQuestionNum()]);\r\n }\r\n\r\n goToBackQuestion(): void {\r\n this.#displayedQuestions.pop(); // удалим информацию о том что показывали этот вопрос\r\n const previousQuestionNum = this.#displayedQuestions.pop(); // узнаем номер вопроса на который нам надо перейти, и удалим информацию что-бы не дублировать\r\n if (!!previousQuestionNum) {\r\n const prevQuestion = this.#questionary?.Questions[previousQuestionNum];\r\n if (!!prevQuestion) {\r\n this.#changeCurrentQuestion(prevQuestion);\r\n }\r\n }\r\n }\r\n\r\n questionIsComplete(guid: number): boolean {\r\n const answer = this._interview.findAnswerByGuid(guid);\r\n return answer?.answerIsComplete ?? false\r\n }\r\n\r\n #fillOldInterviewData(logicVars: Array<IInterviewLogicVar>, answerList: Array<IQuestionAnswer>): void{\r\n //пропишем старые логические переменные\r\n if (Array.isArray(logicVars)) {\r\n logicVars.forEach(logicVarObj => {\r\n this._logic.setLogicValue(logicVarObj.nm, logicVarObj.vl);\r\n })\r\n }\r\n\r\n //пропишем старые ответы\r\n this._interview.overrideAnswers(answerList);\r\n\r\n //нужно вернуть время начала интервью, отдельно оно не сохраняется, поэтому возьмём минимальное время начала из ответов\r\n //фильтруем все вопросы у которых оно указано(>0) и трансформируем в число.\r\n const startedAtArray = answerList.filter(answer => answer.StartedAt > 0).map(answer => answer.StartedAt);\r\n\r\n //берём минимальное\r\n this._interview.startedAt = Math.min(...startedAtArray);\r\n }\r\n\r\n #changeCurrentQuestion(newQuestion: IdbQuestion): void {\r\n const currentQuestion = this.#currentQuestion.value;\r\n const currentTime = new Date().getTime();\r\n\r\n if (!!currentQuestion) {\r\n /*\r\n Сохраним время начала интервью. Фиксировать будем не с самого начала, а с ответа на первый вопрос.\r\n Потому что практика такая, открыть анкету на планшете и ходить искать респондентов и из-за этого длительность интервью может быть нерелевантно.\r\n * */\r\n if (this._interview.startedAt === 0 && currentQuestion.QuestionNum >= 0) {\r\n this._interview.startedAt = currentTime;\r\n }\r\n\r\n //нужно сохранить FinishedAt в ответах для старого вопроса\r\n const answer = this._interview.findAnswerByGuid(currentQuestion.QuestionGuid);\r\n if (!!answer) {\r\n answer.FinishedAt = currentTime;\r\n }\r\n this._eventBus.next({key: SurveyEvents.seQuestionHide, data: currentQuestion});\r\n }\r\n this.#displayedQuestions.push(newQuestion.QuestionNum);\r\n this.#currentQuestion.next(newQuestion);\r\n\r\n //нужно сохранить StartedAt в ответах для нового вопроса\r\n const answerNew = this._interview.findAnswerByGuid(newQuestion.QuestionGuid);\r\n if (!!answerNew) {\r\n answerNew.StartedAt = currentTime;\r\n }\r\n this._eventBus.next({key: SurveyEvents.seQuestionShow, data: newQuestion});\r\n\r\n //если новый экран это end тогда завершаем интервью\r\n if (newQuestion.QuestionType === 'END') {\r\n this.#finishInterview();\r\n }\r\n }\r\n\r\n currentQuestion$(): Observable<IdbQuestion | null> {\r\n return this.#currentQuestion.asObservable();\r\n }\r\n\r\n findAnswerByGuid(guid: number): Answer | undefined {\r\n return this._interview.findAnswerByGuid(guid);\r\n }\r\n\r\n setLogicValue(varName: string, value: any): void {\r\n this._logic.setLogicValue(varName, value);\r\n }\r\n\r\n getLogicVars(): LogicObject {\r\n return this._logic.getLogicVars();\r\n }\r\n\r\n getAnswerList(): Array<Answer> {\r\n return this._interview.getAnswerList();\r\n }\r\n\r\n updateAnswer(eventData: AnswerChange): void {\r\n const answer = this._interview.findAnswerByGuid(eventData.guid);\r\n if (!answer) {\r\n return;\r\n }\r\n\r\n //вопросы которые в своем составе имеет секции, хранят ответы чуть по другому, точнее ответ на каждую секцию это отдельный объект в _interview.answerList\r\n //поэтому ответ для таких типов вопросов это [key: string]: Array<number> | number, где key(guid секции) это ответ на секцию, если key нет, секция не была показана\r\n if (this.#currentQuestion.value?.QuestionType === QuestionsType.eqSL) {\r\n const sectionList = this.#currentQuestion.value?.Sectionlist;\r\n\r\n //пройдёмся по каждой секции и если для неё есть ответ, запишем, в противном случае вместо ответа укажем -97(MISSING_VALUE)\r\n if (!!sectionList) {\r\n sectionList.forEach(section => {\r\n const sectionInterviewAnswer = this._interview.findAnswerByGuid(section.SectionGuid);\r\n if (!sectionInterviewAnswer){\r\n return\r\n }\r\n const sectionQuestionAnswer = eventData.answer ? (eventData.answer as AnswerSlType)[section.SectionGuid.toString()] : undefined;\r\n sectionInterviewAnswer.AnswerValue = sectionQuestionAnswer === undefined ? MISSING_VALUE : sectionQuestionAnswer;\r\n });\r\n }\r\n //ответ самого исходного вопроса должен быть 1\r\n answer.AnswerValue = 1;\r\n } else {\r\n //ответ на вопрос у которого нет секций\r\n answer.AnswerValue = eventData.answer;\r\n }\r\n\r\n //на вопрос ответили тогда когда есть все ответы и выполняется логика кнопки далее(если её указали)\r\n answer.answerIsComplete = eventData.isComplete && this.#nextButtonExpressionIsTrue();\r\n\r\n //ViewedAlternativeValues и ViewedSectionGuids. Т.к. они readonly сначала удалим, потом добавим\r\n answer.ViewedAlternativeValues.length = 0;\r\n eventData.viewedAlternativeValues.forEach(oa => answer.ViewedAlternativeValues.push(oa));\r\n\r\n answer.ViewedSectionGuids.length = 0;\r\n eventData.viewedSectionGuids.forEach(oa => answer.ViewedSectionGuids.push(oa));\r\n\r\n answer.AlternativeSequenceClicks.length = 0;\r\n eventData.alternativeSequenceClicks.forEach(oa => answer.AlternativeSequenceClicks.push(oa));\r\n\r\n\r\n Object.entries(answer.AnswerAdditional).forEach(([key]) => delete answer.AnswerAdditional[Number(key)]);\r\n Object.entries(eventData.additionalAnswers).forEach(([key, value]) => answer.AnswerAdditional[Number(key)] = value);\r\n\r\n this.updateLogic(eventData.logicVars);\r\n\r\n this._eventBus.next({key: SurveyEvents.seQuestionAnswersChange, data: {question: this.#currentQuestion.value, answerIsComplete: answer.answerIsComplete}});\r\n\r\n //может возникнуть ситуация, когда нет ни одной альтернативы или секции для отображения.в этом случае вопрос показывать не нужно, как ответ записываем 0 и переходим на следующий\r\n const question = this.#findQuestionByGuid(eventData.guid);\r\n //ситуация для ss/ms вопросов,\r\n if (!!question && answer.answerIsComplete && (question.QuestionType === 'SS' || question.QuestionType === 'MS') && (eventData.viewedAlternativeValues.length === 0)) {\r\n this.goToNextQuestion()\r\n }\r\n }\r\n\r\n updateLogic(logicVars: Record<string, any>): void{\r\n Object.entries(logicVars).forEach(([varName, value]) => {\r\n this.setLogicValue(varName, value)\r\n })\r\n }\r\n\r\n //возвращает количество активных языков\r\n get #activeLangCount(): number {\r\n //если анкета по какой-то причине ну указана, вернём 0\r\n return this.#questionary?.BaseParams.LanguageList.filter( langObj => langObj.isActive).length ?? 0;\r\n }\r\n\r\n //возвращает количество вопросов\r\n get #questionsCount(): number {\r\n return this.#questionary?.Questions.length ?? 0;\r\n }\r\n\r\n #finishInterview(): void {\r\n const currentTime = new Date();\r\n let resultDirty;\r\n try {\r\n resultDirty = this._logic.executeLogic(this.#questionary?.BaseParams.ResultativeScript ?? '');\r\n }catch (e) {\r\n resultDirty = false;\r\n }\r\n\r\n const interview: IInterviewData = {\r\n Language: 0, //todo lang\r\n SpotId: 0,\r\n DeviceId: 0,\r\n DeviceType: 0,\r\n Resultative: ResultativeStatus.rsUnset,\r\n Valid: ValidStatus.vsUnset,\r\n Wave: this.#questionary?.Info.current_wave ?? 0,\r\n QuestionaryName: this.#questionary?.Info.name ?? '',\r\n QuestionaryGuid: this.#questionary?.Info.questionary_guid ?? 0,\r\n StartedAt: this._interview.startedAt,\r\n FinishedAt: currentTime.getTime(),\r\n TineZoneBias: currentTime.getTimezoneOffset(),\r\n ResultatDirty: resultDirty,\r\n Answers: {\r\n AnsversList: Array.from(this._interview.getAnswerList())\r\n },\r\n additional_info: {\r\n QuestionaryUpdateTimestamp: new Date(this.#questionary?.Info.last_update_timestamp ?? 0).getTime() ,\r\n },\r\n ResultQuotaGuids: [],\r\n ResultQuota2dGuids: [],\r\n LogicVars: [],\r\n };\r\n\r\n const logicVars = this._logic.getLogicVars();\r\n Object.entries(logicVars).forEach(([key, value]) => interview.LogicVars.push({nm: key, vl: value}));\r\n\r\n this._eventBus.next({key: SurveyEvents.seSurveyEnd, data: interview});\r\n }\r\n\r\n #nextQuestionNum(): number {\r\n const currentQuestion = this.#currentQuestion.value;\r\n // проверим квоты\r\n const currentGuid = currentQuestion?.QuestionGuid ?? 0;\r\n if (this.#surveyQuotas.quotaIsCompleted && !this.#surveyQuotas.guidIsDestinationQuestion(currentGuid)) {\r\n // у нас есть заполненная квота, найдем вопрос который нужно показать при заполнении квоты\r\n const destinationQ = this.#findQuestionByGuid(this.#surveyQuotas.destinationQuestionGuid);\r\n //если вопрос есть(его могли удалить из анкеты), показывает его\r\n if (!!destinationQ) {\r\n return destinationQ.QuestionNum;\r\n }\r\n }\r\n\r\n // если нет заполненной квоты, переходим на следующий вопрос, ищем следующий вопрос который мы можем отобразить (до логика может запретить показ вопроса)\r\n let nextQuestionNum = (currentQuestion?.QuestionNum ?? 0) + 1;\r\n\r\n // но сначала проверим после логику\r\n if (!!currentQuestion) {\r\n const destQ = currentQuestion.logiclist.find(logObj => (logObj.DestinationQuestionGuid > 0) && this._logic.executeLogic(logObj.LogicText) );\r\n if (!!destQ) {\r\n const destQNum = this.#findQuestionByGuid(destQ.DestinationQuestionGuid)?.QuestionNum;\r\n if (Number.isSafeInteger(destQNum)) { // вопрос мог быть удалён, а логику оставить\r\n nextQuestionNum = destQNum!;\r\n }\r\n }\r\n }\r\n\r\n // общее количество вопросов, цикл будет считать до этого количества\r\n const questionCount = this.#questionsCount;\r\n do {\r\n //потенциально следующий вопрос\r\n const q = this.#questionary!.Questions[nextQuestionNum];\r\n\r\n //если это последний вопрос или если выполняется BeforeExpression и этот вопрос не DestinationQuota, можем его показать\r\n if (q.QuestionType === QuestionsType.eqEND || (this._logic.executeLogic(q.BeforeExpression) && !this.#surveyQuotas.guidIsDestinationQuestion(q.QuestionGuid)) ) {\r\n return nextQuestionNum;\r\n }\r\n //вопрос нельзя показывать, увеличиваем счётчик текущего вопроса на 1\r\n nextQuestionNum++;\r\n } while (nextQuestionNum < questionCount - 1); // end вопрос должен всегда быть показан\r\n return nextQuestionNum;\r\n }\r\n\r\n #initiateQuestions(questionList: Array<IdbQuestion>): void{\r\n questionList.forEach(question => {\r\n //создаём пустой ответ для вопроса.\r\n const answer = this._interview.createAnswer(question.QuestionGuid, question.Version);\r\n\r\n //такого быть не должно, это ошибка\r\n if (!answer) {\r\n throw new Error('answer not found');\r\n }\r\n\r\n this._logic.setLogicValue(question.SysName, MISSING_VALUE); // переменная самого вопроса\r\n\r\n //добавим доп ответы и логику для них\r\n question.AdditionalAnswerlist.forEach(aa => {\r\n answer.AnswerAdditional[aa.Value] = null;\r\n this._logic.setLogicValue(`${question.SysName}${aa.SysName}`, MISSING_VALUE); // логика для переменных доп ответа\r\n });\r\n\r\n // если в тексте postScript есть запись типа setVar('varName', value); нужно инициализировать переменную varName значением -97.\r\n if (!!question.PostScript) {\r\n (question.PostScript.match(/(\\bsetvar\\b)\\(['|\"](.*?)['|\"]/gim) ?? []).map(scriptVar => scriptVar.match(/['|\"](.+)['|\"]/i)![1]).forEach(varName => this._logic.setLogicValue(varName, null));\r\n }\r\n\r\n // для Вопросов SS/MS нужно прописать логику альтернатив sysname вопроса + sysname альтернативы\r\n if (question.Sectionlist.length <= 0) {// для Вопросов SS/MS\r\n question.Alternativelist.forEach(alt => this._logic.setLogicValue(`${question.SysName}${alt.SysName}`, MISSING_VALUE));\r\n } else {\r\n //для вопросов у которых есть секции проинициализируем каждую секцию\r\n question.Sectionlist.forEach(section => {\r\n\r\n //создаём пустой ответ для секции.\r\n const answerForSection = this._interview.createAnswer(section.SectionGuid, 1);\r\n\r\n //такого быть не должно, это ошибка\r\n if (!answerForSection) {\r\n throw new Error('answer not found');\r\n }\r\n\r\n // для Вопросов SL нужно прописать логику альтернатив и секций sysname секции + sysname альтернативы\r\n this._logic.setLogicValue(section.SysName, MISSING_VALUE); // переменная самой секции\r\n\r\n //логика альтернатив SL вопроса\r\n question.Alternativelist.forEach(alt => this._logic.setLogicValue(`${section.SysName}${alt.SysName}`, MISSING_VALUE));\r\n })\r\n }\r\n })\r\n }\r\n\r\n //ищет вопрос на guid\r\n #findQuestionByGuid(guid: number): IdbQuestion | undefined {\r\n if (!this.#questionary) {\r\n return undefined;\r\n }\r\n return this.#questionary.Questions.find(q => q.QuestionGuid === guid);\r\n }\r\n\r\n #nextButtonExpressionIsTrue(): boolean{\r\n const buttonNextExpression = this.#currentQuestion.value?.BtnNextExpression ?? '';\r\n //если скрипта для кнопки далее нет, вернём true\r\n if (buttonNextExpression.trim() === '') {\r\n return true;\r\n }\r\n try {\r\n return this._logic.executeLogic(buttonNextExpression);\r\n } catch (e) {\r\n console.error(e);\r\n return false;\r\n }\r\n }\r\n}\r\n","import {Directive, HostBinding, input} from '@angular/core';\r\nimport {TpSurveyTheme} from '../../tp.survey.type';\r\n\r\n@Directive({\r\n selector: '[tpSurveyTheme]',\r\n standalone: true\r\n})\r\nexport class SurveyThemeDirective {\r\n theme = input<TpSurveyTheme>('cyan-orange-light',{alias: 'tpSurveyTheme'});\r\n @HostBinding(\"class.survey-theme-cyan-orange-light\") public get classCyanOrangeLight() {\r\n return this.theme() === 'cyan-orange-light';\r\n }\r\n @HostBinding(\"class.survey-theme-cyan-orange-dark\") public get classCyanOrangeDark() {\r\n return this.theme() === 'cyan-orange-dark';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-rose-red-light\") public get classRoseRedLight() {\r\n return this.theme() === 'rose-red-light';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-rose-red-dark\") public get classRoseRedDark() {\r\n return this.theme() === 'rose-red-dark';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-azure-blue-light\") public get classAzureBlueLight() {\r\n return this.theme() === 'azure-blue-light';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-azure-blue-dark\") public get classAzureBlueDark() {\r\n return this.theme() === 'azure-blue-dark';\r\n }\r\n}\r\n\r\n","import {ChangeDetectionStrategy, Component, DestroyRef, inject, input, OnInit, output, signal, TemplateRef} from '@angular/core';\r\nimport {concatMap, delay, distinctUntilChanged, filter, from, merge, mergeMap, Observable, of} from 'rxjs';\r\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\r\nimport {map} from 'rxjs/operators';\r\nimport {takeUntilDestroyed, toSignal} from '@angular/core/rxjs-interop';\r\nimport {AnswerChange, ICurrentQuestionAnswer, IdbQuestion, IdbQuestionary, IInterviewAutoSaveData, IInterviewData, IInterviewProgressEvent, IInterviewStartedEvent} from '../../tp.survey.interface';\r\nimport {QuestionCaptionComponent} from '../question.caption/question.caption.component';\r\nimport {NavigationButtonComponent} from '../navigation.button/navigation.button.component';\r\nimport {ContainerAnswerComponent} from '../answer/container.answer/container.answer.component';\r\nimport {GetActiveLanguagePipe} from '../../pipe/get.active.language/get.active.language.pipe';\r\nimport {UpdateFontSizeDirective} from '../../directive/update.font.size/update.font.size.directive';\r\nimport {TpSurveyCoreService} from '../../core/tp.survey.core/tp.survey.core.service';\r\nimport {NavigationButtonDirection, TpSurveyTheme} from '../../tp.survey.type';\r\nimport {QuestionsType, SurveyEvents, ViewModel} from '../../tp.survey.enum';\r\nimport {MultiLangObjectToHtmlPipe} from '../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {SurveyThemeDirective} from '../../directive/survey.theme/survey.theme.directive';\r\n\r\ninterface ICurrentQuestionViewData {\r\n question: IdbQuestion | null;\r\n answers?: ICurrentQuestionAnswer;\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-play',\r\n templateUrl: './survey.play.component.html',\r\n styleUrls: ['./survey.play.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n AsyncPipe,\r\n QuestionCaptionComponent,\r\n NavigationButtonComponent,\r\n ContainerAnswerComponent,\r\n GetActiveLanguagePipe,\r\n UpdateFontSizeDirective,\r\n NgTemplateOutlet,\r\n MultiLangObjectToHtmlPipe,\r\n SurveyThemeDirective,\r\n ]\r\n})\r\nexport class SurveyPlayComponent implements OnInit{\r\n questionary = input.required<IdbQuestionary>();\r\n viewModel = input.required<ViewModel>();\r\n interviewAutoSaveData = input<IInterviewAutoSaveData>();\r\n theme = input<TpSurveyTheme>('cyan-orange-light');\r\n language = input<number>(2);\r\n templateNavigationRef = input<TemplateRef<any> | null>();\r\n interviewStarted = output<IInterviewStartedEvent>();\r\n interviewFinished = output<IInterviewData>();\r\n interviewProgress = output<IInterviewProgressEvent>();\r\n readonly currentQuestionViewData$: Observable<ICurrentQuestionViewData>;\r\n readonly activeLanguage = signal<number>(this.language())\r\n readonly viewModelE = ViewModel;\r\n readonly backButtonAvailable;\r\n readonly nextButtonAvailable;\r\n readonly #core = inject(TpSurveyCoreService);\r\n readonly #destroyRef = inject(DestroyRef);\r\n constructor() {\r\n //Проблема в том, что если идёт подряд 2 вопроса с одинаковым типом, то не удаляется. Нужно пробросить null с небольшой задержкой, чтобы движок angular`а удалял старые компоненты\r\n this.currentQuestionViewData$ = this.#core.currentQuestion$().pipe(\r\n mergeMap(currentQuestion => from([null, currentQuestion]).pipe(\r\n concatMap(val => of(val).pipe(\r\n delay(val === null ? 0 : 50),\r\n )),\r\n )),\r\n //будем реагировать только когда null => вопрос и наоборот вопрос => null.\r\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\r\n map(currentQuestion => ({\r\n question: currentQuestion,\r\n answers: !currentQuestion ? undefined : {\r\n question: this.#core.findAnswerByGuid(currentQuestion.QuestionGuid),\r\n sections: currentQuestion.Sectionlist.map(section => this.#core.findAnswerByGuid(section.SectionGuid)),\r\n }\r\n })),\r\n );\r\n\r\n /*\r\n * кнопка далее нужно проверять при показе вопроса и при изменении ответа. При показе она может быть доступна сразу(например info).\r\n * Кнопка доступна если ответ корректно заполнен(questionIsComplete) и это не eqEND вопрос\r\n * */\r\n this.nextButtonAvailable = toSignal(merge(\r\n this.#core.on(SurveyEvents.seQuestionAnswersChange).pipe(map(data => data.question)),\r\n this.#core.on(SurveyEvents.seQuestionShow).pipe(map(data => data))\r\n ).pipe(\r\n map(question => this.#core.questionIsComplete(question.QuestionGuid) && question.QuestionType !== QuestionsType.eqEND && question.QuestionType !== QuestionsType.eqLANG),\r\n delay(1),\r\n ), { initialValue: false });\r\n\r\n //кнопку Назад можно показывать если в настройках указали ShowBtnBack и это не eqEND вопрос\r\n this.backButtonAvailable = toSignal(this.#core.on(SurveyEvents.seQuestionShow).pipe(\r\n filter(question => !!question),\r\n map((question: IdbQuestion) => question.QuestionNum > 1 && question.ShowBtnBack && question.QuestionType !== QuestionsType.eqEND && question.QuestionType !== QuestionsType.eqLANG),\r\n delay(1),\r\n ));\r\n\r\n this.#core.on(SurveyEvents.seSurveyEnd).pipe(\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe({\r\n next: interview => {\r\n interview.Language = this.activeLanguage()\r\n this.interviewFinished.emit(interview)\r\n }\r\n });\r\n\r\n this.#core.on(SurveyEvents.seSurveyStart).pipe(\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe({\r\n next: data => this.interviewStarted.emit(data)\r\n });\r\n\r\n this.#core.on(SurveyEvents.seQuestionShow).pipe(\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe({\r\n next: q => this.interviewProgress.emit({\r\n currentNum: q.QuestionNum,\r\n questionsCount: this.questionary().Questions.length,\r\n questionGuid: q.QuestionGuid,\r\n interviewData: {\r\n logicVars: this.#core.getLogicVars(),\r\n answerList: this.#core.getAnswerList(),\r\n }\r\n })\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.#core.setupSurvey(this.questionary(), this.interviewAutoSaveData()?.logic_vars, this.interviewAutoSaveData()?.answer_list, this.interviewAutoSaveData()?.question_guid, );\r\n }\r\n\r\n onNavigationButtonClick(direction: NavigationButtonDirection) {\r\n if (direction === 'next') {\r\n this.#core.goToNextQuestion()\r\n } else {\r\n this.#core.goToBackQuestion()\r\n }\r\n }\r\n\r\n onAnswerChanged(eventData: AnswerChange) {\r\n this.#core.updateAnswer(eventData);\r\n }\r\n\r\n onLogicChanged(logicVars: Record<string, any>) {\r\n this.#core.updateLogic(logicVars);\r\n }\r\n\r\n onLanguageChange(language: number) {\r\n this.activeLanguage.set(language);\r\n this.#core.goToNextQuestion();\r\n }\r\n}\r\n","<div\r\n class=\"survey-container-main survey-typography\"\r\n [tpSurveyUpdateFontSize]=\"viewModel()\"\r\n [tpSurveyTheme]=\"theme()\"\r\n [class.tp-view-desktop]=\"viewModel() === viewModelE.vmDesktop\"\r\n [class.tp-view-tablet]=\"viewModel() === viewModelE.vmTablet\">\r\n\r\n @if (currentQuestionViewData$ | async; as currentQuestionViewData) {\r\n @if (currentQuestionViewData.question; as question) {\r\n <tp-survey-question-caption\r\n [caption]=\"question.MultiLangCaptions | multiLangObjectToHtml:activeLanguage():question.LogicCaptionsList\"\r\n [captionHelp]=\"question.MultiLangCaptionsHelper | multiLangObjectToHtml:activeLanguage()\"/>\r\n\r\n <tp-survey-container-answer\r\n [question]=\"question\"\r\n [language]=\"activeLanguage()\"\r\n [viewModel]=\"viewModel()\"\r\n [answers]=\"currentQuestionViewData.answers\"\r\n [languageList]=\"questionary().BaseParams.LanguageList\"\r\n (logicChanged)=\"onLogicChanged($event)\"\r\n (onLanguageChange)=\"onLanguageChange($event)\"\r\n (answerChanged)=\"onAnswerChanged($event)\"/>\r\n }\r\n }\r\n\r\n <div class=\"container-navigation\">\r\n <div class=\"container-navigation-back\">\r\n @if (backButtonAvailable()) {\r\n <tp-survey-navigation-button\r\n direction=\"back\"\r\n [caption]=\"(questionary().BaseParams.LanguageList | getActiveLanguage: activeLanguage())?.back_button_caption\"\r\n (click)=\"onNavigationButtonClick('back')\"/>\r\n }\r\n </div>\r\n\r\n <ng-container\r\n [ngTemplateOutlet]=\"templateNavigationRef() ?? null\">\r\n </ng-container>\r\n\r\n <div class=\"container-navigation-next\">\r\n @if (nextButtonAvailable()){\r\n <tp-survey-navigation-button\r\n [caption]=\"(questionary().BaseParams.LanguageList | getActiveLanguage: activeLanguage())?.next_button_caption\"\r\n direction=\"next\"\r\n (onClick)=\"onNavigationButtonClick('next')\"/>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n","import {ChangeDetectionStrategy, Component, input, TemplateRef} from '@angular/core';\r\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\r\nimport {ContainerAnswerComponent} from '../answer/container.answer/container.answer.component';\r\nimport {GetActiveLanguagePipe} from '../../pipe/get.active.language/get.active.language.pipe';\r\nimport {NavigationButtonComponent} from '../navigation.button/navigation.button.component';\r\nimport {QuestionCaptionComponent} from '../question.caption/question.caption.component';\r\nimport {UpdateFontSizeDirective} from '../../directive/update.font.size/update.font.size.directive';\r\nimport {TpSurveyTheme} from '../../tp.survey.type';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {IdbBaseParamsLanguage, IdbQuestion} from '../../tp.survey.interface';\r\nimport {TpSurveyLogicService} from '../../core/tp.survey.logic/tp.survey.logic.service';\r\nimport {MultiLangObjectToHtmlPipe} from '../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {SurveyThemeDirective} from '../../directive/survey.theme/survey.theme.directive';\r\n\r\n@Component({\r\n selector: 'tp-survey-question-preview',\r\n standalone: true,\r\n imports: [\r\n AsyncPipe,\r\n ContainerAnswerComponent,\r\n GetActiveLanguagePipe,\r\n NavigationButtonComponent,\r\n QuestionCaptionComponent,\r\n UpdateFontSizeDirective,\r\n NgTemplateOutlet,\r\n MultiLangObjectToHtmlPipe,\r\n SurveyThemeDirective\r\n ],\r\n templateUrl: './survey.question.preview.component.html',\r\n styleUrl: './survey.question.preview.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n TpSurveyLogicService,\r\n ]\r\n})\r\nexport class SurveyQuestionPreviewComponent {\r\n question = input.required<IdbQuestion | null>();\r\n language = input.required<number>();\r\n viewModel = input.required<ViewModel>();\r\n languageList = input.required<Array<IdbBaseParamsLanguage>>();\r\n theme = input<TpSurveyTheme>('cyan-orange-light');\r\n templateNavigationRef = input<TemplateRef<any> | null>();\r\n ViewModel = ViewModel;\r\n}\r\n","<div\r\n class=\"survey-container-main survey-typography\"\r\n [tpSurveyUpdateFontSize]=\"viewModel()\"\r\n [tpSurveyTheme]=\"theme()\"\r\n [class.tp-view-desktop]=\"viewModel() === ViewModel.vmDesktop\"\r\n [class.tp-view-tablet]=\"viewModel() === ViewModel.vmTablet\">\r\n\r\n @if (question(); as question) {\r\n <tp-survey-question-caption\r\n [caption]=\"question.MultiLangCaptions | multiLangObjectToHtml:language()\"\r\n [captionHelp]=\"question.MultiLangCaptionsHelper | multiLangObjectToHtml:language()\"/>\r\n\r\n <tp-survey-container-answer\r\n [question]=\"question\"\r\n [language]=\"language()\"\r\n [developerMode]=\"true\"\r\n [viewModel]=\"viewModel()\"\r\n [languageList]=\"languageList()\"/>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of tp.survey\r\n */\r\n\r\n// export * from './lib/tp.survey.service';\r\n\r\nexport * from './lib/tp.survey.module';\r\nexport * from './lib/component/survey.play/survey.play.component';\r\nexport * from './lib/component/survey.question.preview/survey.question.preview.component';\r\nexport * from './lib/tp.survey.config';\r\nexport * from './lib/tp.survey.const';\r\nexport * from './lib/tp.survey.type';\r\nexport * from './lib/tp.survey.interface';\r\nexport * from './lib/tp.survey.enum';\r\nexport * from './lib/tp.survey.method';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.TpSurveyLogicService","i1","i1.TpSurveyLogicService","i2.TpSurveyInterviewService"],"mappings":"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"}
1
+ {"version":3,"file":"touchpoll-tp-survey.mjs","sources":["../../../projects/tp.survey/src/lib/tp.survey.config.ts","../../../projects/tp.survey/src/lib/icons/default.icons/default.icons.ts","../../../projects/tp.survey/src/lib/icons/default.icons/default.icons.module.ts","../../../projects/tp.survey/src/lib/tp.survey.module.ts","../../../projects/tp.survey/src/lib/component/question.caption/question.caption.component.ts","../../../projects/tp.survey/src/lib/component/question.caption/question.caption.component.html","../../../projects/tp.survey/src/lib/component/navigation.button/navigation.button.component.ts","../../../projects/tp.survey/src/lib/component/navigation.button/navigation.button.component.html","../../../projects/tp.survey/src/lib/tp.survey.const.ts","../../../projects/tp.survey/src/lib/component/answer/container.answer/container.answer.validator.ts","../../../projects/tp.survey/src/lib/core/tp.survey.logic/tp.survey.logic.service.ts","../../../projects/tp.survey/src/lib/pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe.ts","../../../projects/tp.survey/src/lib/tp.survey.enum.ts","../../../projects/tp.survey/src/lib/component/answer/answer.master/answer.master.component.ts","../../../projects/tp.survey/src/lib/directive/alternatives.container/alternatives.container.directive.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ss/answer.ss.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ss/answer.ss.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.info/answer.info.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ms/answer.ms.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ms/answer.ms.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.additional/directive/additional.answer.caption.position/additional.answer.caption.position.directive.ts","../../../projects/tp.survey/src/lib/component/answer/answer.additional/answer.additional.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.additional/answer.additional.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.end/answer.end.component.ts","../../../projects/tp.survey/src/lib/directive/focus.and.select/focus.and.select.directive.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ol/answer.ol.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ol/answer.ol.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.sl/pipe/as.form.array/as.form.array.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.sl/pipe/as.form.control/as.form.control.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.sl/answer.sl.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.sl/answer.sl.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.od/answer.od.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.od/answer.od.component.html","../../../projects/tp.survey/src/lib/pipe/get.additional.value.by.value/get.additional.value.by.value.pipe.ts","../../../projects/tp.survey/src/lib/pipe/key.values/key.values.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.lang/answer.lang.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.lang/answer.lang.component.html","../../../projects/tp.survey/src/lib/component/answer/container.answer/container.answer.component.ts","../../../projects/tp.survey/src/lib/component/answer/container.answer/container.answer.component.html","../../../projects/tp.survey/src/lib/pipe/get.active.language/get.active.language.pipe.ts","../../../projects/tp.survey/src/lib/directive/update.font.size/update.font.size.directive.ts","../../../projects/tp.survey/src/lib/tp.survey.method.ts","../../../projects/tp.survey/src/lib/core/tp.servey.quota/tp.survey.quota.ts","../../../projects/tp.survey/src/lib/core/tp.survey.answer/tp.survey.answer.ts","../../../projects/tp.survey/src/lib/core/tp.survey.interview/tp.survey.interview.service.ts","../../../projects/tp.survey/src/lib/core/tp.survey.core/tp.survey.core.service.ts","../../../projects/tp.survey/src/lib/directive/survey.theme/survey.theme.directive.ts","../../../projects/tp.survey/src/lib/component/survey.play/survey.play.component.ts","../../../projects/tp.survey/src/lib/component/survey.play/survey.play.component.html","../../../projects/tp.survey/src/lib/component/survey.question.preview/survey.question.preview.component.ts","../../../projects/tp.survey/src/lib/component/survey.question.preview/survey.question.preview.component.html","../../../projects/tp.survey/src/public-api.ts","../../../projects/tp.survey/src/touchpoll-tp-survey.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\r\nimport {TpSurveyPlatform} from './tp.survey.type';\r\n\r\n\r\n\r\nexport interface TpSurveyConfig {\r\n tpPlatform: TpSurveyPlatform;\r\n}\r\n\r\n\r\n\r\n/**\r\n * A DI token for the survey service.\r\n *\r\n * @publicApi\r\n */\r\nexport const TP_SURVEY_CONFIGURATION = new InjectionToken<TpSurveyConfig>('__TOUCHPOLL_SURVEY_CONFIGURATION_TOKEN__')\r\n","export const defaultIcons = {\r\n 'iconButtonNext': `\r\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\"/>\r\n `,\r\n 'iconButtonBack': `\r\n <path d=\"M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z\"/>\r\n `,\r\n 'iconIsMute': `\r\n <path d=\"M7.6,4H4A3,3,0,0,0,1,7H1a3,3,0,0,0,3,3H7.6a7.9,7.9,0,0,1,3.9,1L15,13V1L11.4,3A7.9,7.9,0,0,1,7.6,4Z\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"2\"/>\r\n <path d=\"M6,10v2.9a4,4,0,0,0,.3,1.5L7,17\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"4\"/>\r\n <path d=\"M15,4h.1A1.9,1.9,0,0,1,17,5.9V8.1A1.9,1.9,0,0,1,15.1,10H15a0,0,0,0,1,0,0V4A0,0,0,0,1,15,4Z\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"2\"/>\r\n <line x1=\"1\" y1=\"1\" x2=\"17\" y2=\"17\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"2\"/>\r\n `,\r\n}\r\n","import {Inject, NgModule, PLATFORM_ID} from '@angular/core';\r\nimport {isPlatformServer} from '@angular/common';\r\nimport {DomSanitizer} from '@angular/platform-browser';\r\nimport {MatIconRegistry} from '@angular/material/icon';\r\nimport {defaultIcons} from './default.icons';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n})\r\nexport class DefaultIconsModule {\r\n constructor(private domSanitizer: DomSanitizer, private matIconRegistry: MatIconRegistry, @Inject(PLATFORM_ID) private platformId: string) {\r\n for (const [name, svgText] of Object.entries(defaultIcons)) {\r\n const iconText: string = `<svg viewBox=\"0 0 24 24\">${isPlatformServer(this.platformId) ? '' : svgText}</svg>`;\r\n this.matIconRegistry.addSvgIconLiteral(name, this.domSanitizer.bypassSecurityTrustHtml(iconText));\r\n }\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {TP_SURVEY_CONFIGURATION, TpSurveyConfig} from './tp.survey.config';\r\nimport {DefaultIconsModule} from './icons/default.icons/default.icons.module';\r\nimport {TpSurveyCoreService} from './core/tp.survey.core/tp.survey.core.service';\r\n\r\n@NgModule({\r\n imports: [\r\n DefaultIconsModule\r\n ]\r\n})\r\nexport class TpSurveyModule {\r\n // #docregion for-root\r\n static forRoot(config: TpSurveyConfig): ModuleWithProviders<TpSurveyModule> {\r\n return {\r\n ngModule: TpSurveyModule,\r\n providers: [\r\n {provide: TP_SURVEY_CONFIGURATION, useValue: config }\r\n ]\r\n };\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, input} from '@angular/core';\r\nimport {SafeHtml} from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'tp-survey-question-caption',\r\n templateUrl: './question.caption.component.html',\r\n styleUrls: ['./question.caption.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n})\r\nexport class QuestionCaptionComponent {\r\n caption = input<SafeHtml>();\r\n captionHelp = input<SafeHtml>();\r\n}\r\n","<div class=\"container-main\">\r\n <div [innerHTML]= \"caption()\" class=\"question-caption-font survey-object-caption\"></div>\r\n <div [innerHTML]= \"captionHelp()\" class=\"question-caption-helper-font survey-object-caption\"></div>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, input, output} from '@angular/core';\r\nimport {MatButton} from '@angular/material/button';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {NavigationButtonDirection} from '../../tp.survey.type';\r\n\r\n@Component({\r\n selector: 'tp-survey-navigation-button',\r\n standalone: true,\r\n imports: [\r\n MatButton,\r\n MatIcon\r\n ],\r\n templateUrl: './navigation.button.component.html',\r\n styleUrl: './navigation.button.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NavigationButtonComponent {\r\n direction = input.required<NavigationButtonDirection>()\r\n caption = input<string>();\r\n onClick = output<NavigationButtonDirection>()\r\n}\r\n\r\n","<button mat-flat-button (click)=\"onClick.emit(direction())\" class=\"navigation-button\">\r\n @if (direction() === 'back') {\r\n <mat-icon svgIcon=\"iconButtonBack\" aria-hidden=\"false\" class=\"navigation-button-icon\"/>\r\n }\r\n\r\n <span class=\"navigation-button-label\">{{ caption() }}</span>\r\n\r\n @if (direction() === 'next') {\r\n <mat-icon iconPositionEnd svgIcon=\"iconButtonNext\" aria-hidden=\"false\" class=\"navigation-button-icon\"/>\r\n }\r\n</button>\r\n\r\n","export const MISSING_VALUE = -97;\r\n\r\nexport const BASE_WIDTH = 1280;\r\nexport const BASE_HEIGHT = 800;\r\n\r\nexport const LOGIC_FUNC_TEXT = `\r\n const self = this;\r\n var setVar = function(varName, value) {\r\n self[varName] = value\r\n };\r\n var FUNC_IN = function(varName, array) {\r\n return isNaN(parseInt(varName)) ? false : array.indexOf(varName) > -1\r\n };\r\n var FUNC_INTERSECT = function (var1, var2) {\r\n return Array.isArray(var1) && Array.isArray(var2) ? var1.some(function(el1) {\r\n return var2.some(function (el2) {\r\n return el2 === el1;\r\n });\r\n }) : false;\r\n };\r\n var value = function(varName, defaultValue) {\r\n const defVal = !defaultValue ? 0 : defaultValue;\r\n if ( (varName === -97) || (varName === null) || (varName === undefined) ) {\r\n return defVal\r\n } else {\r\n return varName\r\n }\r\n }\r\n for (var p in this) eval(\"var \" + p + \" = this[p];\"); `;\r\n","import {AbstractControl, ValidatorFn} from '@angular/forms';\r\nimport {MISSING_VALUE} from '../../../tp.survey.const';\r\nimport {IdbSection} from '../../../tp.survey.interface';\r\n\r\nexport const answerDefaultValidator = (): ValidatorFn => {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n //ответ не число, такого быть не может, это ошибка\r\n if ((control.value === null) || (control.value === MISSING_VALUE) ) {\r\n return {answerRequired: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n };\r\n};\r\n\r\nexport const answerODValidator = (minValue: number | null, maxValue: number | null): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //ответ не число, такого быть не может, это ошибка\r\n if (!Number.isSafeInteger(control.value)) {\r\n return {answerOdAnswerType: true}\r\n }\r\n //Нужно проверить 2 ситуации.\r\n //1 В настройках вопроса указали minValue, тогда введённое число должно быть больше minValue.\r\n //2 В настройках вопроса указали maxValue, тогда введённое число должно быть меньше maxValue.\r\n //Если эти условия не выполняются, то это ошибка.\r\n if ( (Number.isSafeInteger(minValue) && control.value < minValue!) || (Number.isSafeInteger(maxValue) && (maxValue ?? 0 > 0) && control.value > maxValue!) ) {\r\n return {answerOdAnswerError: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\nexport const answerOLValidator = (isPhoneNumber: boolean): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n const text = typeof control.value !== 'string' ? '' : control.value.trim();\r\n //Нужно чтобы в поле ввели хоть что-то.\r\n if ( text.length === 0 ) {\r\n return {answerOlAnswerError: true}\r\n }\r\n\r\n if (isPhoneNumber) {\r\n const res = text.length === 9 && !isNaN(Number(text));\r\n if (!res) {\r\n return {answerOlTelephoneFormatError: true}\r\n }\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\n\r\nexport const answerSSValidator = (): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //ответ не число, такого быть не может, это ошибка\r\n if (!Number.isSafeInteger(control.value)) {\r\n return {answerSsAnswerType: true}\r\n }\r\n\r\n //нет ответа\r\n if (control.value < 0) {\r\n return {answerMissing: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\n\r\nexport const answerMSValidator = (visibleAlternativeCount: number, minCount: number = 1, maxCount: number = 0): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //visibleAlternativeCount - количество альтернатив на экране, если 0, то смысла показывать вопрос нет\r\n //minCount - Минимальное количество ответов, которое может выбрать респондент, по умолчанию 1.\r\n //maxCount - Максимальное количество ответов, которые может выбрать респондент. Если указано 0, количество не ограничено. По умолчанию 0\r\n\r\n if (visibleAlternativeCount === 0) {\r\n return null;\r\n }\r\n\r\n //ответ не массив, такого быть не может, это ошибка\r\n if (!Array.isArray(control.value)) {\r\n return {answerMsAnswerType: true}\r\n }\r\n\r\n //количество ответов\r\n const count = control.value.length;\r\n\r\n //проверяем minCount\r\n if (count < minCount) {\r\n return {answerMsMinCount: true}\r\n }\r\n\r\n //проверяем maxCount\r\n if (maxCount > 0 && count > maxCount) {\r\n return {answerMsMaxCount: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\nexport const answerSlValidator = (required: boolean, minAnswersCount: number, sectionList: Array<IdbSection>): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //если ответы для каждой секции необязательны, ничего не проверяем и выходим.\r\n if (!required) {\r\n return null;\r\n }\r\n if (!control.value) {\r\n return {answerMissing: true};\r\n }\r\n\r\n //если хоть 1 сессия не имеет значения(или количество выбранных альтернатив меньше minAnswersCount), тогда ответ на вопрос не полный.\r\n const hasMissingAnswers = sectionList.some(section => {\r\n const sectionAnswers = control.value[section.SectionGuid.toString()];\r\n if (!sectionAnswers) {\r\n return true;\r\n } else{\r\n return Array.isArray(sectionAnswers) ? sectionAnswers.length === 0 || (minAnswersCount > 1 && sectionAnswers.length < minAnswersCount) : sectionAnswers === 0;\r\n }\r\n });\r\n if (hasMissingAnswers) {\r\n return {answerMissing: true};\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\nexport const additionalAnswerDefaultValidator = (required: boolean): ValidatorFn => {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n if ( (control.value === null || (typeof control.value === 'string' && control.value.trim().length === 0)) && required) {\r\n return { additionalAnswerRequired: true}\r\n }\r\n //ошибок нет, всё корректно\r\n return null;\r\n };\r\n};\r\n\r\nexport const additionalAnswerNumberValidator = (required: boolean, minValue: number | null, maxValue: number | null): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //ответ не обязательный, можно не контролировать\r\n if (!required) {\r\n return null;\r\n }\r\n\r\n //ответ не число, такого быть не может, это ошибка\r\n if (!Number.isSafeInteger(control.value)) {\r\n return {additionalAnswerType: true}\r\n }\r\n\r\n //Нужно проверить 2 ситуации.\r\n //1 В настройках вопроса указали minValue, тогда введённое число должно быть больше minValue.\r\n //2 В настройках вопроса указали maxValue, тогда введённое число должно быть меньше maxValue.\r\n //Если эти условия не выполняются, то это ошибка.\r\n if ( (Number.isSafeInteger(minValue) && control.value < minValue!) || (Number.isSafeInteger(maxValue) && control.value > maxValue!) ) {\r\n return {answerOdAnswerError: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n","import {Injectable} from '@angular/core';\r\nimport {LOGIC_FUNC_TEXT} from '../../tp.survey.const';\r\nimport {LogicObject} from '../../tp.survey.type';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TpSurveyLogicService {\r\n #vars: LogicObject = Object.create(null);\r\n\r\n get vars(): object {\r\n return this.#vars;\r\n }\r\n\r\n setLogicValue(varName: string, value: any): void {\r\n this.#vars[varName] = value;\r\n }\r\n\r\n getLogicVars(): LogicObject{\r\n return {...this.#vars};\r\n }\r\n\r\n executeLogic(expression: string): boolean {\r\n try {\r\n return !expression ? true : new Function(`${LOGIC_FUNC_TEXT} return ${expression}`).call(this.#vars);\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n executePostScript(expression: string): void {\r\n try {\r\n if (!expression ) {\r\n return;\r\n }\r\n new Function(`${LOGIC_FUNC_TEXT} ${expression}`).call(this.#vars);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\r\nimport {IdbLogicCaptionObject, IdbMultilangObject} from '../../tp.survey.interface';\r\nimport {TpSurveyLogicService} from '../../core/tp.survey.logic/tp.survey.logic.service';\r\n\r\n@Pipe({\r\n name: 'multiLangObjectToHtml',\r\n standalone: true\r\n})\r\nexport class MultiLangObjectToHtmlPipe implements PipeTransform {\r\n\r\n constructor(private readonly _sanitizer: DomSanitizer, private readonly _logic: TpSurveyLogicService) {\r\n }\r\n\r\n transform(caption: Array<IdbMultilangObject>, language: number, logicCaptions?: Array<IdbLogicCaptionObject>): SafeHtml {\r\n //сначала проверим есть ли текст у которого выполняется Expression.\r\n if (Array.isArray(logicCaptions)){\r\n const correctLogicCaption = logicCaptions.find(logicCaption => this._logic.executeLogic(logicCaption.Expression));\r\n const correctLogicCaptionLangObj = correctLogicCaption?.MultiLangCaptions.find(capt => capt.lang === language);\r\n const text = correctLogicCaptionLangObj?._SYS_CaptionHTML ?? correctLogicCaptionLangObj?.CaptionHtml ?? '';\r\n\r\n //если есть хоть какой-то текст - показываем его\r\n if ((text ?? '').trim().length > 0){\r\n return this._sanitizer.bypassSecurityTrustHtml(text);\r\n }\r\n }\r\n\r\n //если основой текст не указан, выходим\r\n if (!Array.isArray(caption)) {\r\n return ''\r\n }\r\n\r\n //ищем основной текс с нужным языком\r\n const langObj = caption.find(capt => capt.lang === language);\r\n const text = langObj?._SYS_CaptionHTML ?? langObj?.CaptionHtml ?? '';\r\n return this._sanitizer.bypassSecurityTrustHtml(text);\r\n }\r\n\r\n}\r\n","export enum ViewModel {\r\n vmDesktop = 1, // desktop view\r\n vmMobile = 2, // phone view\r\n vmTablet = 3, // tablet view\r\n}\r\n\r\nexport enum SurveyEvents {\r\n seSurveyStart = 'survey.start', // on start survey\r\n seSurveyViewModelUpdate = 'survey.view.model.update', // on viewmodel updated\r\n seSurveyDeveloperModeUpdate = 'survey.developer.mode.update', // on Developermode updated\r\n seSurveyEnd = 'survey.end', // on end survey\r\n seQuestionShow = 'question.show', // before question show\r\n seQuestionHide = 'question.hide', // before question hide\r\n seQuestionRefresh = 'question.refresh', // refresh question (after edit)\r\n seQuestionAnswersCompleted = 'answers.completed', // after all answers complete\r\n seQuestionAnswersChange = 'answers.change', // after answers change\r\n seSurveyLanguageUpdate = 'survey.language.update' // on survey language updated\r\n}\r\n\r\nexport enum AdditionalAnswerType {\r\n aatNumber = 1,\r\n aatText = 2,\r\n aatBoolean = 3,\r\n}\r\n\r\nexport enum QuestionsType {\r\n eqLANG = 'LANG',\r\n eqSS = 'SS',\r\n eqMS = 'MS',\r\n eqINFO = 'INFO',\r\n eqSL = 'SL',\r\n eqOL = 'OL',\r\n eqOD = 'OD',\r\n eqEND = 'END',\r\n}\r\n\r\n\r\nexport enum ResultativeStatus {\r\n rsUnset = -1,\r\n rsUnresultative = 0,\r\n rsResultative = 1,\r\n}\r\n\r\nexport enum ValidStatus {\r\n vsUnset = -1,\r\n vsUnValid = 0,\r\n vsValid = 1,\r\n vsDoubtful = 2\r\n}\r\n\r\nexport enum EInterviewStatus {\r\n isUnFinished = -4, // не завершено\r\n isTested = -3, // тестовое\r\n isRefinement = -2, // не проверено\r\n isDefect = -1, // брак\r\n isNotChecked = 0, // не проверено\r\n isChecked = 1 // проверено\r\n}\r\n","import {ChangeDetectionStrategy, Component, DestroyRef, forwardRef, inject, input} from '@angular/core';\r\nimport {ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {AnswerT} from '../../../tp.survey.type';\r\nimport {ViewModel} from '../../../tp.survey.enum';\r\n\r\n@Component({\r\n selector: 'app-answer-master',\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerMasterComponent),\r\n multi: true\r\n },\r\n ],\r\n\r\n})\r\nexport abstract class AnswerMasterComponent<T extends AnswerT> implements ControlValueAccessor {\r\n language = input.required<number>();\r\n viewModel = input.required<ViewModel>();\r\n viewModelE = ViewModel;\r\n control: FormControl<T | null>;\r\n protected onModelChange = (data: T) => {};\r\n protected onModelTouched = () => {};\r\n protected readonly destroyRef = inject(DestroyRef);\r\n constructor() {\r\n this.control = new FormControl(null);\r\n this.control.valueChanges.pipe(\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe(res => {\r\n this.onModelChange(res!);\r\n })\r\n }\r\n \r\n registerOnChange(fn: (data: T) => void): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onModelTouched();\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n }\r\n \r\n writeValue(value: T): void {\r\n this.control.patchValue(value, {emitEvent: false});\r\n }\r\n}\r\n","import {ContentChildren, DestroyRef, Directive, effect, ElementRef, inject, input, QueryList, Renderer2} from '@angular/core';\r\nimport {IdbQuestion} from '../../tp.survey.interface';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {BASE_HEIGHT, BASE_WIDTH} from '../../tp.survey.const';\r\nimport {BreakpointObserver, BreakpointState} from '@angular/cdk/layout';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Directive({\r\n selector: '[tpSurveyAlternativesContainer]',\r\n standalone: true\r\n})\r\nexport class AlternativesContainerDirective {\r\n question = input.required<IdbQuestion>( {alias: 'tpSurveyAlternativesContainer'});\r\n viewModel = input.required<ViewModel>({alias: 'containerViewModel'});\r\n @ContentChildren('tablet_alt', {read: ElementRef}) alternatives: QueryList<ElementRef<HTMLElement>> | undefined;\r\n readonly #destroyRef = inject(DestroyRef);\r\n constructor(private readonly _renderer: Renderer2,private readonly elementRef: ElementRef, private _breakpointObserver: BreakpointObserver) {\r\n effect(() => {\r\n if (this.viewModel() === ViewModel.vmTablet) {\r\n this.#updateTabletLayout();\r\n } else {\r\n this.#updateDesktopLayout();\r\n }\r\n })\r\n }\r\n\r\n #updateDesktopLayout(): void {\r\n this._breakpointObserver.observe([\"(max-width: 480px)\"]).pipe(\r\n map((result: BreakpointState) => result.matches),\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe((isMobile: boolean) => {\r\n let columnCount: number;\r\n if (isMobile) {\r\n columnCount = this.question().MobileViewAlternativeColumnCount || 1; //if 0 will be 1\r\n } else {\r\n columnCount = this.question().AlternativeColumnCount || 1; //if 0 will be 1\r\n }\r\n this._renderer.setStyle(this.elementRef.nativeElement, 'grid-template-columns', `repeat(${columnCount}, 10fr)`);\r\n });\r\n }\r\n \r\n #updateTabletLayout(): void {\r\n if (!this.alternatives) {\r\n return;\r\n }\r\n \r\n if (this.viewModel() === ViewModel.vmTablet) {\r\n const question = this.question();\r\n const transformToPer = (newVal: number, containerSideSize: number): number => newVal * 100 / containerSideSize; // превращает размер px в %\r\n \r\n const containerWidthFull = this.elementRef.nativeElement.offsetWidth;\r\n const containerHeightFull = this.elementRef.nativeElement.offsetHeight;\r\n \r\n const alternativeColumnCount = question.TabletViewAlternativeColumnCount ?? 1;\r\n \r\n const horizontalRatio = containerWidthFull / BASE_WIDTH;\r\n const verticalRatio = containerHeightFull / BASE_HEIGHT;\r\n \r\n const maxAlternativeWidth: number = containerWidthFull * 0.7; // для авторазмера установим максимальный размер альтернативы в 70% от доступной длинны контейнера\r\n \r\n const alternativesCount = Math.max(this.alternatives.length, 1);\r\n \r\n const horizontalDistance = question.AlternativeHorizontalDistance ?? 10 * horizontalRatio;\r\n const verticalDistance = (question.AlternativeVerticalDistance ?? 10) * verticalRatio;\r\n const marginTop = question.AlternativeMarginTop ?? 10 * verticalRatio;\r\n const marginLeft = (question.AlternativeMarginLeft ?? 0) * horizontalRatio;\r\n const columnCount: number = alternativeColumnCount > alternativesCount ? alternativesCount : alternativeColumnCount;\r\n const rowCount: number = Math.round(alternativesCount / columnCount);\r\n \r\n const defaultHorizontalPadding = 10 * horizontalRatio;\r\n \r\n let width = 0;\r\n let height = 0;\r\n \r\n if (question.AlternativeAutoSize ?? true) { // если авторазмер, то высоту и ширину считаем автоматом\r\n const marginsWidth = horizontalDistance * (columnCount - 1) + defaultHorizontalPadding * 2;\r\n width = Math.min((containerWidthFull - marginsWidth) / columnCount, maxAlternativeWidth);\r\n height = this.alternatives.reduce((maxHeight, alt) => { // узнаем максимальную высоту альтернативы\r\n const altWidthPercent = transformToPer(width, containerWidthFull);\r\n this._renderer.setStyle(alt.nativeElement, 'width', `${altWidthPercent}%`);\r\n return Math.max(maxHeight, alt.nativeElement.clientHeight) ;\r\n }, 0);\r\n } else { // если авторазмер отключён, размеры берём из настроек\r\n width = question.AlternativeWidth ?? 300;\r\n height = question.AlternativeHeight ?? 50;\r\n }\r\n \r\n const deltaVertical = containerHeightFull - height * rowCount - verticalDistance * (rowCount - 1);\r\n const deltaHorizontal = (containerWidthFull - width * columnCount - horizontalDistance * (columnCount - 1)) / 2 - defaultHorizontalPadding;\r\n let rowNum = -1;\r\n let colNum = 0;\r\n \r\n this.alternatives.forEach((alt, index) => {\r\n let left = 0;\r\n let top = 0;\r\n if (question.AlternativeAutoArrange) {\r\n const isNewRow = (index) % columnCount === 0;\r\n if (isNewRow) {\r\n rowNum++;\r\n colNum = 0;\r\n }\r\n left = marginLeft + colNum * width + colNum * horizontalDistance + deltaHorizontal + defaultHorizontalPadding ;\r\n top = marginTop + rowNum * height + rowNum * verticalDistance + deltaVertical / 2 ;\r\n colNum++;\r\n } else {\r\n const altObj = question.Alternativelist[index];\r\n if (!!altObj) {\r\n left = altObj.x;\r\n top = altObj.y;\r\n if (!question.AlternativeAutoSize) {\r\n width = altObj.width > 0 ? altObj.width : question.AlternativeWidth;\r\n height = altObj.height > 0 ? altObj.height : question.AlternativeHeight;\r\n }\r\n }\r\n }\r\n this._renderer.setStyle(alt.nativeElement, 'width', `${transformToPer(width, containerWidthFull)}%`);\r\n this._renderer.setStyle(alt.nativeElement, 'height', `${transformToPer(height, containerHeightFull)}%`);\r\n this._renderer.setStyle(alt.nativeElement, 'left', `${transformToPer(left, containerWidthFull)}%`);\r\n this._renderer.setStyle(alt.nativeElement, 'top', `${transformToPer(top, containerHeightFull)}%`);\r\n });\r\n } else {\r\n this.alternatives.forEach((alt) => {\r\n this._renderer.setStyle(alt.nativeElement, 'width', ``);\r\n this._renderer.setStyle(alt.nativeElement, 'height', ``);\r\n this._renderer.setStyle(alt.nativeElement, 'left', ``);\r\n this._renderer.setStyle(alt.nativeElement, 'top', ``);\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import {ChangeDetectionStrategy, Component, forwardRef, input, output,} from '@angular/core';\r\nimport {MatRadioButton, MatRadioGroup} from '@angular/material/radio';\r\nimport {NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {KeyValuePipe} from '@angular/common';\r\nimport {MatFormField} from '@angular/material/form-field';\r\nimport {MatInput} from '@angular/material/input';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {IdbAlternative, IdbQuestion} from '../../../tp.survey.interface';\r\nimport {AlternativesContainerDirective} from '../../../directive/alternatives.container/alternatives.container.directive';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-ss',\r\n templateUrl: './answer.ss.component.html',\r\n styleUrls: ['./answer.ss.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n MatRadioGroup,\r\n ReactiveFormsModule,\r\n MatRadioButton,\r\n MultiLangObjectToHtmlPipe,\r\n KeyValuePipe,\r\n MatFormField,\r\n MatInput,\r\n MatIcon,\r\n MatCheckbox,\r\n AlternativesContainerDirective\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerSSComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerSSComponent extends AnswerMasterComponent<number>{\r\n question = input.required<IdbQuestion>();\r\n alternativeList = input.required<Array<IdbAlternative>>();\r\n onAlternativeClick = output<number>();\r\n}\r\n\r\n\r\n","<mat-radio-group\r\n class=\"container-ms-ss-alternatives\"\r\n [tpSurveyAlternativesContainer] = \"question()\"\r\n [containerViewModel]=\"viewModel()\"\r\n [formControl]=\"control\">\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <mat-radio-button\r\n #tablet_alt\r\n class=\"alternative-ss-ms tp-survey-radio-button\"\r\n [style.font-size.%]=\"viewModel() === viewModelE.vmTablet ? question().AlternativeTabletFontSize : undefined\"\r\n [value]=\"alt.Value\"\r\n (change)=\"onAlternativeClick.emit($event.value)\">\r\n @if (alt.IsMute) {\r\n <mat-icon class=\"icon-is-mute\" svgIcon=\"iconIsMute\"></mat-icon>\r\n }\r\n <span class=\"alternative-ss-ms-caption survey-object-caption\" [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-radio-button>\r\n }\r\n</mat-radio-group>\r\n\r\n","import {Component, forwardRef} from '@angular/core';\r\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-info',\r\n template: '',\r\n standalone: true,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerInfoComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerInfoComponent extends AnswerMasterComponent<number>{\r\n}\r\n\r\n\r\n","import {Component, forwardRef, input, OnInit, output} from '@angular/core';\r\nimport {FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {map} from 'rxjs/operators';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {MatRadioGroup} from '@angular/material/radio';\r\nimport {filter, tap} from 'rxjs';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {IdbAlternative, IdbQuestion} from '../../../tp.survey.interface';\r\nimport {AlternativesContainerDirective} from '../../../directive/alternatives.container/alternatives.container.directive';\r\n\r\ninterface IAnswerMSForm {\r\n alternativeList: FormArray<FormControl<boolean>>;\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-ms',\r\n templateUrl: './answer.ms.component.html',\r\n styleUrls: ['./answer.ms.component.scss'],\r\n standalone: true,\r\n imports: [\r\n ReactiveFormsModule,\r\n MatCheckbox,\r\n MultiLangObjectToHtmlPipe,\r\n MatIcon,\r\n MatRadioGroup,\r\n AlternativesContainerDirective,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerMSComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerMSComponent extends AnswerMasterComponent<Array<number>> implements OnInit{\r\n question = input.required<IdbQuestion>();\r\n alternativeList = input.required<Array<IdbAlternative>>();\r\n alternativeMaxAnswersCount = input.required<number>();\r\n onAlternativeClick = output<number>();\r\n readonly answerMSForm: FormGroup<IAnswerMSForm>;\r\n constructor() {\r\n super();\r\n this.answerMSForm = new FormGroup<IAnswerMSForm>({\r\n alternativeList: new FormArray<FormControl<boolean>>([])\r\n })\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n const alternativeList = this.alternativeList();\r\n const answerAsArray: Array<number> = Array.isArray(this.control.value) ? this.control.value : [];\r\n const maxCount = this.alternativeMaxAnswersCount();\r\n\r\n this.answerMSForm.controls.alternativeList.clear({emitEvent: false});\r\n alternativeList.forEach( alt => {\r\n const control= new FormControl<boolean>( answerAsArray.includes(alt.Value), {nonNullable: true});\r\n\r\n //У альтернативы есть понятие \"Группа\". Группа это число. Если выбирают альтернативу с определённой группой, то альтернативы с другой группой должны быть отжаты.\r\n control.valueChanges.pipe(\r\n filter(value => value),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe( {\r\n next: () => this.#uncheckControlsWithOtherGroup(alt.GroupNo)\r\n });\r\n\r\n this.answerMSForm.controls.alternativeList.push(control, {emitEvent: false});\r\n });\r\n\r\n this.answerMSForm.controls.alternativeList.valueChanges.pipe(\r\n map((_) => {\r\n const checkedArray = this.answerMSForm.controls.alternativeList.controls.map(c => c.value) ?? [];\r\n return this.alternativeList()\r\n .map(alt => alt.Value)\r\n .filter((_, index) => checkedArray[index] )\r\n }),\r\n tap(answerArray => this.#disableExtraControls(answerArray.length, maxCount)),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe({\r\n next: res => this.control.patchValue(res, {emitEvent: true})\r\n })\r\n }\r\n\r\n //отжимает контролы у которых отличается номер группы\r\n #uncheckControlsWithOtherGroup(groupNumber: number): void {\r\n //сначала отбираем контролы у которых другая группа.\r\n const otherGroupAlternativesList = this.alternativeList()\r\n .map((alt, altIndex) => ({alternative: alt, index: altIndex}) ) //нужен индекс, по нему проще выбирать контролы в answerMSForm.controls.alternativeList\r\n .filter(data => data.alternative.GroupNo !== groupNumber); //контролы у которых другая группа\r\n\r\n //\"отжимаем галочку\"\r\n otherGroupAlternativesList.forEach(data => {\r\n const altControl = this.answerMSForm.controls.alternativeList.at(data.index);\r\n altControl.patchValue(false, {emitEvent: false})\r\n })\r\n }\r\n \r\n //дизейблит контроли если выбрали максимальное количество или енейблит если выбрали не максимальное количество\r\n #disableExtraControls(currentCount:number, maxCount: number): void{\r\n //если в настройках анкеты указали что максимальное возможное количество выбранных альтернатив = 0, но ничего контролировать не надо.\r\n if (maxCount === 0) {\r\n return\r\n }\r\n this.alternativeList().forEach((_, altIndex) => {\r\n const isDisable = currentCount >= maxCount;\r\n const control = this.answerMSForm.controls.alternativeList.at(altIndex);\r\n if (isDisable) {\r\n //надо дизейблить те которые не выбраны\r\n if (!control.value) {\r\n control.disable({emitEvent: false})\r\n }\r\n } else {\r\n //лимита нет, можно выбирать все\r\n control.enable({emitEvent: false})\r\n }\r\n })\r\n }\r\n}\r\n","<ng-container [formGroup]=\"answerMSForm\">\r\n <div\r\n class=\"container-ms-ss-alternatives\"\r\n [tpSurveyAlternativesContainer] = \"question()\"\r\n [containerViewModel]=\"viewModel()\"\r\n formArrayName=\"alternativeList\">\r\n @for (alt of answerMSForm.controls.alternativeList.controls; track alt; let indx = $index) {\r\n <mat-checkbox\r\n #tablet_alt\r\n [formControl]=\"alt\"\r\n [style.font-size.%]=\"viewModel() === viewModelE.vmTablet ? question().AlternativeTabletFontSize : undefined\"\r\n (change)=\"onAlternativeClick.emit(alternativeList()[indx].Value)\"\r\n class=\"alternative-ss-ms tp-survey-checkbox\">\r\n @if (alternativeList()[indx].IsMute) {\r\n <mat-icon class=\"icon-is-mute\" svgIcon=\"iconIsMute\"></mat-icon>\r\n }\r\n <span class=\"alternative-ss-ms-caption survey-object-caption\" [innerHTML]= \"alternativeList()[indx].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-checkbox>\r\n }\r\n </div>\r\n</ng-container>\r\n","import {Directive, HostBinding, input} from '@angular/core';\r\nimport {AdditionalAnswerCaptionPosition} from '../../../../../tp.survey.type';\r\nimport {AdditionalAnswerType} from '../../../../../tp.survey.enum';\r\n\r\n@Directive({\r\n selector: '[tpSurveyAdditionalAnswerCaptionPosition]',\r\n standalone: true\r\n})\r\nexport class AdditionalAnswerCaptionPositionDirective{\r\n tpSurveyAdditionalAnswerCaptionPosition = input<AdditionalAnswerCaptionPosition>();\r\n tpSurveyAdditionalAnswerType = input<AdditionalAnswerType>();\r\n @HostBinding(\"class.caption-align-bottom\") public get classBottom() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'bottom';\r\n }\r\n @HostBinding(\"class.caption-align-top\") public get classTop() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'top';\r\n }\r\n @HostBinding(\"class.caption-align-left\") public get classLeft() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'left';\r\n }\r\n @HostBinding(\"class.caption-align-right\") public get classRight() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'right';\r\n }\r\n \r\n @HostBinding(\"class.answer-type-number\") public get classTypeNumber() {\r\n return this.tpSurveyAdditionalAnswerType() === AdditionalAnswerType.aatNumber;\r\n }\r\n \r\n @HostBinding(\"class.answer-type-text\") public get classTypeText() {\r\n return this.tpSurveyAdditionalAnswerType() === AdditionalAnswerType.aatText;\r\n }\r\n \r\n @HostBinding(\"class.answer-type-boolean\") public get classTypeBoolean() {\r\n return this.tpSurveyAdditionalAnswerType() === AdditionalAnswerType.aatBoolean;\r\n }\r\n}\r\n","import {Component, forwardRef, input,} from '@angular/core';\r\nimport {FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatFormField} from '@angular/material/form-field';\r\nimport {MatInput} from '@angular/material/input';\r\nimport {SafeHtml} from '@angular/platform-browser';\r\nimport {CdkTextareaAutosize} from '@angular/cdk/text-field';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {AdditionalAnswerCaptionPositionDirective} from './directive/additional.answer.caption.position/additional.answer.caption.position.directive';\r\nimport {AdditionalAnswer, AdditionalAnswerCaptionPosition} from '../../../tp.survey.type';\r\nimport {AdditionalAnswerType} from '../../../tp.survey.enum';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-additional',\r\n templateUrl: './answer.additional.component.html',\r\n styleUrls: ['./answer.additional.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MatFormField,\r\n MatInput,\r\n ReactiveFormsModule,\r\n AdditionalAnswerCaptionPositionDirective,\r\n CdkTextareaAutosize,\r\n MatCheckbox,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerAdditionalComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerAdditionalComponent { //ControlValueAccessor\r\n // control = input.required<FormControl<AdditionalAnswer>>();\r\n control = input.required<FormControl<AdditionalAnswer>>();\r\n answerType = input.required<AdditionalAnswerType>()\r\n caption = input<SafeHtml>('');\r\n numberMinValue = input<number | null>(null);\r\n numberMaxValue = input<number | null>(null);\r\n textMultiline = input<boolean>(false);\r\n captionPosition = input<AdditionalAnswerCaptionPosition>('top');\r\n additionalAnswerType = AdditionalAnswerType;\r\n}\r\n","<div class=\"container-main\" [tpSurveyAdditionalAnswerCaptionPosition]=\"captionPosition()\" [tpSurveyAdditionalAnswerType]=\"answerType()\" >\r\n <span [innerHTML]= \"caption()\" class=\"answer-caption survey-object-caption\"></span>\r\n @switch (answerType()) {\r\n @case (additionalAnswerType.aatNumber) {\r\n <mat-form-field class=\"tp-survey-input\" appearance=\"outline\" subscriptSizing=\"dynamic\">\r\n <input [formControl]=\"control()\" matInput [step]=\"1\" [min]=\"numberMinValue()\" [max]=\"numberMaxValue()\" type=\"number\">\r\n </mat-form-field>\r\n }\r\n\r\n @case (additionalAnswerType.aatText) {\r\n <mat-form-field appearance=\"outline\" class=\"tp-survey-input\" subscriptSizing=\"dynamic\">\r\n @if (textMultiline()) {\r\n <textarea\r\n [formControl]=\"control()\"\r\n cdkAutosizeMaxRows=\"5\"\r\n cdkAutosizeMinRows=\"3\"\r\n cdkTextareaAutosize matInput>\r\n </textarea>\r\n } @else {\r\n <input [formControl]=\"control()\" matInput type=\"text\">\r\n }\r\n </mat-form-field>\r\n }\r\n @case (additionalAnswerType.aatBoolean) {\r\n <mat-checkbox\r\n [formControl]=\"control()\"\r\n [class.answer-checkbox-center] = \"captionPosition() === 'left' || captionPosition() === 'right'\"\r\n class=\"tp-survey-checkbox\">\r\n </mat-checkbox>\r\n }\r\n }\r\n</div>\r\n","import {Component, forwardRef} from '@angular/core';\r\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-end',\r\n template: '',\r\n standalone: true,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerEndComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\n\r\nexport class AnswerEndComponent extends AnswerMasterComponent<number>{\r\n}\r\n","import {Directive, ElementRef, OnInit} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[tpSurveyFocusAndSelect]',\r\n standalone: true\r\n})\r\nexport class FocusAndSelectDirective implements OnInit{\r\n constructor(private el: ElementRef) {\r\n if (!el.nativeElement['focus']) {\r\n throw new Error('Element does not accept focus.');\r\n }\r\n }\r\n \r\n ngOnInit(): void {\r\n const input: HTMLInputElement = this.el.nativeElement as HTMLInputElement;\r\n if ('focus' in input) {\r\n input.focus();\r\n input.select();\r\n }\r\n }\r\n}\r\n","import {Component, forwardRef, input, OnInit} from '@angular/core';\r\nimport {FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators} from '@angular/forms';\r\nimport {MatFormField, MatPrefix} from '@angular/material/form-field';\r\nimport {MatInput} from '@angular/material/input';\r\nimport {FocusAndSelectDirective} from '../../../directive/focus.and.select/focus.and.select.directive';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-ol',\r\n templateUrl: './answer.ol.component.html',\r\n styleUrls: ['./answer.ol.component.scss'],\r\n standalone: true,\r\n imports: [\r\n FocusAndSelectDirective,\r\n FormsModule,\r\n MatFormField,\r\n MatInput,\r\n ReactiveFormsModule,\r\n MatPrefix\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerOLComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerOLComponent extends AnswerMasterComponent<number>{\r\n telephoneInput= input<boolean>(false);\r\n}\r\n","<div class=\"container-main\">\r\n @if (telephoneInput()) {\r\n <mat-form-field appearance=\"outline\">\r\n <input\r\n type=\"text\"\r\n inputmode=\"numeric\"\r\n matInput\r\n [formControl]=\"control\" tpSurveyFocusAndSelect>\r\n <span matTextPrefix>+380 &nbsp;</span>\r\n </mat-form-field>\r\n } @else {\r\n <mat-form-field appearance=\"outline\" class=\"input-text\">\r\n <textarea rows=\"10\" matInput [formControl]=\"control\" tpSurveyFocusAndSelect></textarea>\r\n </mat-form-field>\r\n\r\n<!-- <mat-form-field class=\"container-controls\" appearance=\"outline\">-->\r\n<!-- <textarea rows=\"10\" autofocus matInput [(ngModel)]=\"answer.AnswerValue\" (ngModelChange)=\"answerChange()\" appFocusAndSelect></textarea>-->\r\n<!-- </mat-form-field>-->\r\n }\r\n\r\n<!-- <mat-form-field appearance=\"outline\" class=\"input-od-number\">-->\r\n<!-- <input [formControl]=\"control\" tpSurveyFocusAndSelect matInput type=\"number\">-->\r\n<!-- </mat-form-field>-->\r\n</div>\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {FormArray, FormControl} from '@angular/forms';\r\n\r\n@Pipe({\r\n name: 'asFormArray',\r\n standalone: true\r\n})\r\nexport class AsFormArrayPipe implements PipeTransform {\r\n\r\n transform(value: any): FormArray<FormControl<boolean>> {\r\n return value;\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {FormControl} from '@angular/forms';\r\n\r\n@Pipe({\r\n name: 'asFormControl',\r\n standalone: true\r\n})\r\nexport class AsFormControlPipe implements PipeTransform {\r\n \r\n transform(value: any): FormControl<number> {\r\n return value;\r\n }\r\n\r\n}\r\n","import {booleanAttribute, Component, forwardRef, input, numberAttribute, OnInit} from '@angular/core';\r\nimport {FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {JsonPipe, KeyValuePipe} from '@angular/common';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {MatRadioButton, MatRadioGroup} from '@angular/material/radio';\r\nimport {map} from 'rxjs/operators';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {filter, tap} from 'rxjs';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AsFormArrayPipe} from './pipe/as.form.array/as.form.array.pipe';\r\nimport {AsFormControlPipe} from './pipe/as.form.control/as.form.control.pipe';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {AnswerSlType} from '../../../tp.survey.type';\r\nimport {IdbAlternative, IdbSection} from '../../../tp.survey.interface';\r\n\r\ninterface IAnswerSLForm {\r\n [key: string]: FormArray<FormControl<boolean>> | FormControl<number> | FormControl<Array<number>>\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-sl',\r\n templateUrl: './answer.sl.component.html',\r\n styleUrls: ['./answer.sl.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MultiLangObjectToHtmlPipe,\r\n MatCheckbox,\r\n ReactiveFormsModule,\r\n KeyValuePipe,\r\n MatIcon,\r\n JsonPipe,\r\n AsFormArrayPipe,\r\n MatRadioButton,\r\n MatRadioGroup,\r\n AsFormControlPipe\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerSLComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerSLComponent extends AnswerMasterComponent<AnswerSlType> implements OnInit{\r\n alternativeList = input.required<Array<IdbAlternative>>();\r\n sectionList = input.required<Array<IdbSection>>();\r\n multiSelect = input(false, {transform: booleanAttribute});\r\n maxCount = input(0, {transform: numberAttribute});\r\n answerSLForm = new FormGroup<IAnswerSLForm>({})\r\n\r\n ngOnInit(): void {\r\n const multiSelect = this.multiSelect();\r\n\r\n this.sectionList().forEach(section => {\r\n const sectionControl = this.#createSectionRowControl(multiSelect, []);\r\n this.answerSLForm!.addControl(section.SectionGuid.toString(), sectionControl, );\r\n })\r\n\r\n this.answerSLForm.valueChanges.pipe(\r\n map((fullAnswer) => {\r\n let res: Record<string, Array<number> | number> = {};\r\n //Если в настройках указали мультивыбор для секции, то в данной реализации, при изменении форма возвращает массив boolean?, true/false, нажата отжата.\r\n //Этот массив нужно конвертировать в массив number, в котором будут только нажатые альтернативы.\r\n if (this.multiSelect()) {\r\n Object.entries(fullAnswer).forEach(([key]) => {\r\n const sectionAnswerCheckedArray = this.answerSLForm.get(key)?.value;\r\n res[key] = this.alternativeList()\r\n .map(alt => alt.Value)\r\n .filter((_, index) => sectionAnswerCheckedArray[index] )\r\n });\r\n } else {\r\n //если единичный выбор для секции, то ответ просто исходное значение.\r\n res = fullAnswer as Record<string, number>;\r\n }\r\n return res;\r\n }),\r\n tap(res => this.#disableExtraControls(this.maxCount())),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe({\r\n next: res => this.control.patchValue(res, {emitEvent: true})\r\n })\r\n }\r\n\r\n #createSectionRowControl(multiSelect: boolean, answers: number | Array<number>): FormArray<FormControl<boolean>> | FormControl<number> {\r\n if (multiSelect) {\r\n const msArray = new FormArray<FormControl<boolean>>([]);\r\n const answerAsArray = Array(answers);\r\n \r\n this.alternativeList().forEach((alt) => {\r\n const control= new FormControl<boolean>( answerAsArray.includes(alt.Value), {nonNullable: true});\r\n msArray.push(control, {emitEvent: false});\r\n\r\n //В режиме multiSelect у альтернативы есть понятие \"Группа\". Группа это число. Если выбирают альтернативу с определённой группой, то альтернативы с другой группой должны быть отжаты.\r\n //Логика такая же как и в ms вопросе\r\n control.valueChanges.pipe(\r\n filter(value => value && this.multiSelect()),\r\n takeUntilDestroyed(this.destroyRef),\r\n ).subscribe({\r\n next: () => {\r\n //сначала отбираем контролы у которых другая группа.\r\n const otherGroupAlternativesList = this.alternativeList()\r\n .map((alt, altIndex) => ({alternative: alt, index: altIndex}) ) //нужен индекс, по нему проще выбирать контролы в msArray\r\n .filter(data => data.alternative.GroupNo !== alt.GroupNo); //контролы у которых другая группа\r\n\r\n //\"отжимаем галочку\"\r\n otherGroupAlternativesList.forEach(data => {\r\n const altControl = msArray.controls.at(data.index);\r\n altControl!.patchValue(false, {emitEvent: false})\r\n });\r\n }\r\n })\r\n });\r\n return msArray;\r\n } else {\r\n return new FormControl<number>(Number(answers), {nonNullable: true});\r\n }\r\n }\r\n\r\n //дизейблит контроли если выбрали максимальное количество или енейблит если выбрали не максимальное количество\r\n #disableExtraControls(maxCount: number): void{\r\n //если в настройках анкеты указали что максимальное возможное количество выбранных альтернатив = 0, но ничего контролировать не надо.\r\n if (maxCount === 0 || !this.multiSelect()) {\r\n return\r\n }\r\n\r\n this.sectionList().forEach(sec => {\r\n const sectionControlArray = this.answerSLForm.get(sec.SectionGuid.toString()) as FormArray<FormControl<boolean>>;\r\n const values = sectionControlArray.value;\r\n const checkedCount = values.filter(v => v).length;\r\n\r\n sectionControlArray.controls.forEach(control => {\r\n if (checkedCount >= maxCount && !control.value) {\r\n control.disable({emitEvent: false})\r\n } else {\r\n control.enable({emitEvent: false})\r\n }\r\n })\r\n\r\n })\r\n }\r\n}\r\n","<table class=\"default-view\" [formGroup]=\"answerSLForm\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <th class=\"SLAlternativeCaption\">\r\n <span [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\" class=\"survey-object-caption\"></span>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (secControl of answerSLForm.controls | keyvalue; track secControl.key; let sectionIndex = $index) {\r\n @if (multiSelect()){\r\n <tr>\r\n <td>\r\n <span [innerHTML]= \"sectionList()[sectionIndex].MultiLangCaptions | multiLangObjectToHtml:language()\" class=\"survey-object-caption\"></span>\r\n </td>\r\n @for (alternativeControl of (secControl.value | asFormArray).controls ; track alternativeControl) {\r\n <td>\r\n <mat-checkbox\r\n [formControl]=\"alternativeControl\"\r\n class=\"alternative-sl tp-survey-checkbox\"/>\r\n </td>\r\n }\r\n </tr>\r\n } @else {\r\n <mat-radio-group [formControl]=\"secControl.value | asFormControl\" class=\"single-select-row\">\r\n <td class=\"single-select-item\">\r\n <span [innerHTML]= \"sectionList()[sectionIndex].MultiLangCaptions | multiLangObjectToHtml:language()\" class=\"survey-object-caption\"></span>\r\n </td>\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <td class=\"single-select-item\">\r\n <mat-radio-button\r\n class=\"alternative-sl tp-survey-radio-button\"\r\n [value]=\"alt.Value\">\r\n </mat-radio-button>\r\n </td>\r\n }\r\n </mat-radio-group>\r\n }\r\n }\r\n </tbody>\r\n</table>\r\n\r\n<div class=\"mobile-view\" [formGroup]=\"answerSLForm\">\r\n @for (secControl of answerSLForm.controls | keyvalue; track secControl.key; let secIndex = $index) {\r\n <div class=\"mobile-view-section-row\" [formArrayName]=\"secControl.key\">\r\n <span [innerHTML]= \"sectionList()[secIndex].MultiLangCaptions | multiLangObjectToHtml:language()\" class=\"mobile-view-section-caption section-sl-caption survey-object-caption\"></span>\r\n @if (multiSelect()) {\r\n <div class=\"mobile-view-alternative-list\">\r\n @for (alternativeControl of (secControl.value | asFormArray).controls; track alternativeControl; let altIndex = $index) {\r\n <mat-checkbox\r\n [formControl]=\"alternativeControl\"\r\n class=\"alternative-sl tp-survey-checkbox\">\r\n <span class=\"alternative-sl-caption survey-object-caption\" [innerHTML]= \"alternativeList()[altIndex].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-checkbox>\r\n }\r\n </div>\r\n } @else {\r\n <mat-radio-group\r\n class=\"mobile-view-alternative-list\"\r\n [formControl]=\"secControl.value | asFormControl\">\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <mat-radio-button\r\n class=\"tp-survey-radio-button\"\r\n [value]=\"alt.Value\">\r\n <span class=\"alternative-sl-caption survey-object-caption\" [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-radio-button>\r\n }\r\n </mat-radio-group>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {Component, forwardRef, input} from '@angular/core';\r\nimport {MatFormField} from '@angular/material/form-field';\r\nimport {MatInput} from '@angular/material/input';\r\nimport {NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {FocusAndSelectDirective} from '../../../directive/focus.and.select/focus.and.select.directive';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-od',\r\n templateUrl: './answer.od.component.html',\r\n styleUrls: ['./answer.od.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MatFormField,\r\n ReactiveFormsModule,\r\n FocusAndSelectDirective,\r\n MatInput,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerODComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerODComponent extends AnswerMasterComponent<number> {\r\n minValue = input<number>(1);\r\n maxValue = input<number | null>(null);\r\n}\r\n","<div class=\"container-main\">\r\n <mat-form-field appearance=\"outline\" class=\"input-od-number\">\r\n <input [formControl]=\"control\" [min]=\"minValue()\" [max]=\"maxValue()\" tpSurveyFocusAndSelect matInput type=\"number\">\r\n </mat-form-field>\r\n</div>\r\n\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {IdbAdditionalAnswer} from '../../tp.survey.interface';\r\n\r\n@Pipe({\r\n name: 'getAdditionalValueByValue',\r\n standalone: true\r\n})\r\nexport class GetAdditionalValueByValuePipe implements PipeTransform {\r\n\r\n transform(value: number | string, additionalAnswerList: Array<IdbAdditionalAnswer>): IdbAdditionalAnswer | undefined {\r\n const val = (typeof value === 'string') ? Number(value): value;\r\n return additionalAnswerList.find(aa => aa.Value === val);\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {AbstractControl, FormControl, FormGroup} from '@angular/forms';\r\nimport {AdditionalAnswer} from '../../tp.survey.type';\r\n\r\n@Pipe({\r\n name: 'keyValues',\r\n standalone: true\r\n})\r\nexport class KeyValuesPipe implements PipeTransform {\r\n\r\n transform(controls: FormGroup<{[key: string]: AbstractControl<AdditionalAnswer>}>): Array<{name: string, control: FormControl<AdditionalAnswer>}> {\r\n return Object.entries(controls).map(([key, control]) =>({\r\n name: key,\r\n control: control,\r\n }));\r\n }\r\n\r\n}\r\n","import {Component, input, output} from '@angular/core';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {IdbBaseParamsLanguage} from '../../../tp.survey.interface';\r\nimport {MatButton} from '@angular/material/button';\r\nimport {MatIcon} from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-lang',\r\n templateUrl: './answer.lang.component.html',\r\n styleUrls: ['./answer.lang.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MatButton,\r\n MatIcon\r\n ]\r\n})\r\n\r\nexport class AnswerLangComponent extends AnswerMasterComponent<number>{\r\n languageList = input.required<Array<IdbBaseParamsLanguage>>();\r\n onLanguageChange = output<number>();\r\n}\r\n","@for (language of languageList(); track $index) {\r\n <button mat-button (click)=\"onLanguageChange.emit(language.Value)\">\r\n {{language.Caption}}\r\n </button>\r\n}\r\n","import {ChangeDetectionStrategy, Component, DestroyRef, inject, input, OnInit, output, signal} from '@angular/core';\r\n\r\nimport {\r\n additionalAnswerDefaultValidator,\r\n additionalAnswerNumberValidator,\r\n answerDefaultValidator,\r\n answerMSValidator,\r\n answerODValidator,\r\n answerOLValidator,\r\n answerSlValidator,\r\n answerSSValidator\r\n} from './container.answer.validator';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {AnswerSSComponent} from '../answer.ss/answer.ss.component';\r\nimport {AnswerInfoComponent} from '../answer.info/answer.info.component';\r\nimport {AnswerMSComponent} from '../answer.ms/answer.ms.component';\r\nimport {KeyValuePipe} from '@angular/common';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AnswerAdditionalComponent} from '../answer.additional/answer.additional.component';\r\nimport {AnswerEndComponent} from '../answer.end/answer.end.component';\r\nimport {debounceTime, tap} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {AnswerOLComponent} from '../answer.ol/answer.ol.component';\r\nimport {AnswerSLComponent} from '../answer.sl/answer.sl.component';\r\nimport {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\r\nimport {AdditionalAnswer, AnswerSlType, AnswerT} from '../../../tp.survey.type';\r\nimport {AnswerODComponent} from '../answer.od/answer.od.component';\r\nimport {AnswerChange, ICurrentQuestionAnswer, IdbAdditionalAnswer, IdbAlternative, IdbBaseParamsLanguage, IdbQuestion, IdbSection} from '../../../tp.survey.interface';\r\nimport {AdditionalAnswerType, QuestionsType, ViewModel} from '../../../tp.survey.enum';\r\nimport {TpSurveyLogicService} from '../../../core/tp.survey.logic/tp.survey.logic.service';\r\nimport {MISSING_VALUE} from '../../../tp.survey.const';\r\nimport {GetAdditionalValueByValuePipe} from '../../../pipe/get.additional.value.by.value/get.additional.value.by.value.pipe';\r\nimport {KeyValuesPipe} from '../../../pipe/key.values/key.values.pipe';\r\nimport {AnswerLangComponent} from '../answer.lang/answer.lang.component';\r\n\r\ninterface IAnswerForm {\r\n answer: FormControl<AnswerT>;\r\n additionalAnswers: FormGroup<{\r\n [key: string]: FormControl<AdditionalAnswer>\r\n }>;\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-container-answer',\r\n standalone: true,\r\n imports: [\r\n AnswerODComponent,\r\n ReactiveFormsModule,\r\n AnswerSSComponent,\r\n AnswerInfoComponent,\r\n AnswerMSComponent,\r\n AnswerAdditionalComponent,\r\n KeyValuePipe,\r\n MultiLangObjectToHtmlPipe,\r\n AnswerEndComponent,\r\n AnswerOLComponent,\r\n AnswerSLComponent,\r\n GetAdditionalValueByValuePipe,\r\n KeyValuesPipe,\r\n AnswerLangComponent\r\n ],\r\n templateUrl: './container.answer.component.html',\r\n styleUrl: './container.answer.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ContainerAnswerComponent implements OnInit{\r\n question = input.required<IdbQuestion>();\r\n language = input.required<number>();\r\n viewModel = input.required<ViewModel>();\r\n answers = input<ICurrentQuestionAnswer>();\r\n developerMode = input<boolean>(false);\r\n languageList = input.required<Array<IdbBaseParamsLanguage>>();\r\n visibleAlternativeList = signal<Array<IdbAlternative>>([]);\r\n visibleSectionList = signal<Array<IdbSection>>([]);\r\n visibleAdditionalAnswerList = signal<Array<IdbAdditionalAnswer>>([]);\r\n logicChanged = output<Record<string, any>>();\r\n answerChanged = output<AnswerChange>();\r\n onLanguageChange = output<number>();\r\n\r\n questionsType = QuestionsType;\r\n answerForm: FormGroup<IAnswerForm>;\r\n readonly AdditionalAnswerType = AdditionalAnswerType;\r\n #alternativeSequenceClicks: Array<[number, number]> = [];\r\n readonly #logic = inject(TpSurveyLogicService);\r\n readonly #destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n this.answerForm = new FormGroup<IAnswerForm>({\r\n answer: new FormControl<AnswerT>(null ),\r\n additionalAnswers: new FormGroup({}),\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const answerValue = this.answers()?.question?.AnswerValue ?? null;\r\n const answerValueClear = answerValue === MISSING_VALUE ? null : answerValue;\r\n this.answerForm.patchValue({\r\n answer: answerValueClear,\r\n additionalAnswers: this.answers()?.question?.AnswerAdditional\r\n }, {emitEvent:false});\r\n\r\n this.#alternativeSequenceClicks = this.answers()?.question?.AlternativeSequenceClicks ?? [];\r\n this.#updateAlternativesAndSections();\r\n this.#updateAdditionalAnswers(true);\r\n this.#addValidator();\r\n\r\n this.answerForm.valueChanges.pipe(\r\n debounceTime(250),\r\n tap(() => this.logicChanged.emit(this.#getLogicVars())), //шлём новые логические переменные(может обновиться список additionalAnswers)\r\n tap(() => this.#updateAdditionalAnswers(false)), //перестраиваем additionalAnswers\r\n map(values => {\r\n const formGroup = (this.answerForm.controls.additionalAnswers as FormGroup);\r\n const additionalAnswerNormalized: Record<number, AdditionalAnswer> = {};\r\n this.question().AdditionalAnswerlist.forEach(aa => {\r\n const isVisible = this.visibleAdditionalAnswerList().find(faa => faa.Value === aa.Value);\r\n if (isVisible) {\r\n additionalAnswerNormalized[aa.Value] = !!values.additionalAnswers ? values.additionalAnswers[aa.Value]! : MISSING_VALUE;\r\n formGroup.get(aa.Value.toString())?.enable({emitEvent: false})\r\n } else {\r\n additionalAnswerNormalized[aa.Value] = MISSING_VALUE;\r\n formGroup.get(aa.Value.toString())?.disable({emitEvent: false})\r\n }\r\n });\r\n return {\r\n answer:values.answer,\r\n additionalAnswers: additionalAnswerNormalized,\r\n }\r\n }),\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe(data => {\r\n this.answerChanged.emit({\r\n guid: this.question().QuestionGuid,\r\n isComplete: this.answerForm.valid,\r\n answer: data.answer!,\r\n additionalAnswers: data.additionalAnswers as Record<number, AdditionalAnswer>,\r\n logicVars: this.#getLogicVars(),\r\n viewedAlternativeValues: this.visibleAlternativeList().map(alt => alt.Value),\r\n viewedSectionGuids: this.visibleSectionList().map(alt => alt.SectionGuid),\r\n alternativeSequenceClicks: Array.from(this.#alternativeSequenceClicks)\r\n });\r\n });\r\n this.#setDefaultAnswers();\r\n }\r\n\r\n #addValidator(): void{\r\n const question = this.question();\r\n this.answerForm.controls.answer.addValidators(answerDefaultValidator());\r\n\r\n switch (question.QuestionType){\r\n case QuestionsType.eqSS: {\r\n this.answerForm.controls.answer.addValidators(answerSSValidator());\r\n break;\r\n }\r\n\r\n case QuestionsType.eqMS: {\r\n this.answerForm.controls.answer.addValidators(answerMSValidator(this.visibleAlternativeList().length, this.question().AlternativeMinAnswersCount, this.question().AlternativeMaxAnswersCount));\r\n break;\r\n }\r\n\r\n case QuestionsType.eqOD: {\r\n this.answerForm.controls.answer.addValidators(answerODValidator(question.ODMinValue, question.ODMaxValue));\r\n break;\r\n }\r\n\r\n case QuestionsType.eqOL: {\r\n this.answerForm.controls.answer.addValidators(answerOLValidator(question.OLTypeTel));\r\n break;\r\n }\r\n\r\n case QuestionsType.eqSL: {\r\n this.answerForm.controls.answer.addValidators(answerSlValidator(this.question().RequireAllAnswers, this.question().SLSectionMinAnswersCount, this.visibleSectionList()));\r\n break;\r\n }\r\n }\r\n }\r\n\r\n #setDefaultAnswers(): void{\r\n const question = this.question();\r\n const isLang = question.QuestionType === QuestionsType.eqLANG;\r\n const isInfo = question.QuestionType === QuestionsType.eqINFO;\r\n const isEnd = question.QuestionType === QuestionsType.eqEND;\r\n const isSSMS = (question.QuestionType === QuestionsType.eqSS || question.QuestionType === QuestionsType.eqMS) && (this.visibleAlternativeList().length === 0);\r\n\r\n if (isInfo || isEnd || isSSMS || isLang) {\r\n let defaultAnswer;\r\n switch (question.QuestionType) {\r\n case QuestionsType.eqMS: defaultAnswer = []; break;\r\n case QuestionsType.eqSS: defaultAnswer = 0; break;\r\n default: defaultAnswer = 1;\r\n }\r\n\r\n //может возникнуть ситуация, когда нет альтернатив для отображения.в этом случае вопрос показывать не нужно, как ответ записываем 0 и переходим на следующий\r\n this.answerForm.patchValue({\r\n answer: defaultAnswer\r\n }, {emitEvent: true});\r\n }\r\n }\r\n\r\n\r\n //собираем все логические переменные, которые генерит вопрос\r\n #getLogicVars(): Record<string, any>{\r\n const questionType = this.question().QuestionType;\r\n const answer = this.answerForm.controls.answer.value;\r\n const logicObj: Record<string, any> = {};\r\n\r\n //переменная самого вопроса\r\n const questionSysName = this.question().SysName;\r\n\r\n //ответ на основной вопрос\r\n logicObj[questionSysName] = this.answerForm.value.answer;\r\n\r\n switch (questionType) {\r\n case QuestionsType.eqSS: {\r\n //каждая альтернатива имеет свою переменную, 1 нажата, 0 не нажата или скрыта(скрыта сомнительно, что это правильно)\r\n this.question().Alternativelist.forEach( alt => logicObj[`${questionSysName}${alt.SysName}`] = answer === alt.Value ? 1 : 0); // переменные альтернатив\r\n break;\r\n }\r\n\r\n case QuestionsType.eqMS: {\r\n const answers = Array.isArray(this.answerForm.value.answer) ? this.answerForm.value.answer : [];\r\n //каждая альтернатива имеет свою переменную, 1 нажата, 0 не нажата или скрыта(скрыта сомнительно, что это правильно)\r\n this.question().Alternativelist.forEach( alt => logicObj[`${questionSysName}${alt.SysName}`] = answers.find(val => val === alt.Value) ? 1 : 0); // переменные альтернатив\r\n break;\r\n }\r\n\r\n case QuestionsType.eqOL: {\r\n //логическая переменная для OL вопроса - 1, а не то что ввели\r\n logicObj[questionSysName] = 1;\r\n break;\r\n }\r\n\r\n case QuestionsType.eqSL: {\r\n /*Тут сложнее чем в остальных типах вопросов.\r\n * 1. Логическая переменная для SL вопроса\r\n * 2. Логическая переменная для каждой секции\r\n * 3. Логические переменные для каждой альтернативы + секции\r\n * */\r\n\r\n //1. Логическая переменная для SL вопроса - 1, а не то что ввели\r\n logicObj[questionSysName] = 1;\r\n\r\n //Каждая секция должны иметь свою логическую переменную, array<number> если multiselect, number если multiselect = false, -97 если секция не была показана.\r\n //+ для каждой секции нужно добавлять логические переменные для каждой альтернативы. 1 нажата, 0 отжата, -97 если альтернатива не была показана.\r\n const fullAnswers = this.answerForm.value.answer as AnswerSlType;\r\n const visibleAlternativeList = this.visibleAlternativeList().map(alt => alt.Value);\r\n this.question().Sectionlist.forEach(section => {\r\n const sectionSysName = section.SysName;\r\n\r\n //если undefined, то заменим на -97 это значит секция не была показана.\r\n const sectionAnswer = fullAnswers[section.SectionGuid.toString()] ?? MISSING_VALUE;\r\n\r\n //2. добавляем переменную самой секции.\r\n logicObj[sectionSysName] = sectionAnswer;\r\n this.question().Alternativelist.forEach(alternative => {\r\n\r\n const sectionAlternativeSysName = `${sectionSysName}${alternative.SysName}`;\r\n //секция не была показана, значит альтернативы тоже\r\n if (sectionAnswer === MISSING_VALUE) {\r\n logicObj[sectionAlternativeSysName] = MISSING_VALUE;\r\n } else {\r\n //сначала нужно проверить была ли показана альтернатива, если нет\r\n //альтернативы нет в списке показанных\r\n if (!visibleAlternativeList.find(visibleVal => visibleVal === alternative.Value)) {\r\n logicObj[sectionAlternativeSysName] = MISSING_VALUE;\r\n } else {\r\n //альтернативы есть в списке показанных, нужно узнать была нажата или нет.\r\n const isPressed = Array.isArray(sectionAnswer) ? sectionAnswer.includes(alternative.Value) : sectionAnswer === alternative.Value;\r\n logicObj[sectionAlternativeSysName] = isPressed ? 1 : 0;\r\n }\r\n }\r\n });\r\n });\r\n break;\r\n }\r\n }\r\n\r\n //логические переменные дополнительных вопросов.\r\n this.question().AdditionalAnswerlist.forEach(aa => {\r\n const additionalAnswer = !!this.answerForm.value.additionalAnswers ? this.answerForm.value.additionalAnswers![aa.Value.toString()] : MISSING_VALUE;\r\n const additionalAnswerSysName = `${questionSysName}${aa.SysName}`;\r\n if (additionalAnswer === MISSING_VALUE) {\r\n //дополнительный ответ не был показан, (скрыт по логике)\r\n logicObj[additionalAnswerSysName] = MISSING_VALUE;\r\n } else {\r\n //если на вопрос не отвечали(null), этот самый null и добавляем как ответ.\r\n if (additionalAnswer === null) {\r\n logicObj[additionalAnswerSysName] = null;\r\n } else {\r\n //если вопрос типа текст, как переменную добавим 1, в остальных случаях сам ответ.\r\n logicObj[additionalAnswerSysName] = aa.AnswerType === AdditionalAnswerType.aatText ? 1 : additionalAnswer;\r\n }\r\n }\r\n });\r\n return logicObj;\r\n }\r\n\r\n #updateAlternativesAndSections(): void{\r\n const developerMode = this.developerMode();\r\n //фильтруем альтернативы,\r\n const filteredAlternativeList = this.question().Alternativelist.filter(alt => developerMode || this.#logic.executeLogic(alt.EnableExpression));\r\n\r\n //фильтруем секции,\r\n const filteredSectionList = this.question().Sectionlist.filter(sec => developerMode || this.#logic.executeLogic(sec.EnableExpression));\r\n\r\n //меняем расположение тех, которые этого требуют и обновляем глобальную переменную\r\n this.visibleAlternativeList.set(this.#arrangeRotatedList(filteredAlternativeList));\r\n //для секций тоже самое\r\n this.visibleSectionList.set(this.#arrangeRotatedList(filteredSectionList));\r\n }\r\n\r\n #updateAdditionalAnswers(isInit: boolean): void{\r\n const developerMode = this.developerMode();\r\n const formGroup = (this.answerForm.controls.additionalAnswers as FormGroup);\r\n\r\n if (isInit) {\r\n this.question().AdditionalAnswerlist.forEach(aa => {\r\n switch (aa.AnswerType) {\r\n case AdditionalAnswerType.aatNumber: formGroup.addControl(aa.Value.toString(), new FormControl<number | null>(null,{validators: [additionalAnswerDefaultValidator(aa.IsRequired), additionalAnswerNumberValidator(aa.IsRequired, aa.NumberMinValue, aa.NumberMaxValue)]}), {emitEvent: false}); break;\r\n case AdditionalAnswerType.aatText: formGroup.addControl(aa.Value.toString(), new FormControl<string | null>(null,{validators: [additionalAnswerDefaultValidator(aa.IsRequired)]}), {emitEvent: false}); break;\r\n case AdditionalAnswerType.aatBoolean: formGroup.addControl(aa.Value.toString(), new FormControl<boolean | null>(null,{validators: [additionalAnswerDefaultValidator(aa.IsRequired)]}), {emitEvent: false}); break;\r\n }\r\n });\r\n return\r\n }\r\n\r\n //фильтруем,\r\n const filteredAdditionalAnswerList = this.question().AdditionalAnswerlist.filter(addAnswer => developerMode || this.#logic.executeLogic(addAnswer.EnableExpression));\r\n\r\n //обновляем глобальный список\r\n this.visibleAdditionalAnswerList.set(filteredAdditionalAnswerList);\r\n }\r\n\r\n onAlternativeClick(value: number) {\r\n this.#alternativeSequenceClicks.push([value, new Date().getTime()]);\r\n }\r\n\r\n #arrangeRotatedList<T extends IdbAlternative | IdbSection>(inputArray: Array<T>): Array <T> {\r\n //У каждой альтернативы и секции есть признак Rotation, который позволяем менять порядок отображения альтернативы или секции\r\n //если он true, то альтернатива и секция должна поменять расположение\r\n const resArray: Array<T | number> = [];\r\n\r\n //размер массива\r\n const inputArrayLength = inputArray.length;\r\n\r\n //проходимся по каждому элементу входного массива, и копируем в результирующий, Если Rotation, копируем его индекс, если Rotation не указан, копируем сам объект\r\n inputArray.forEach((obj, index) => resArray.push(obj.Rotation ? index : obj));\r\n\r\n //теперь с помощью рандома, расставим остальные эл-ты\r\n resArray.forEach((obj, index, array) => {\r\n if ((typeof obj === 'number') && (obj >= 0)) {\r\n while (true) {\r\n //если в новом массиве нет элемента из старого массива по random индексу, тогда копируем в новый массив старый елемент в новый адрес\r\n const newIndex = Math.floor( Math.random() * inputArrayLength );\r\n if (array.indexOf(inputArray[newIndex]) === -1) {\r\n array[index] = inputArray[newIndex];\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n return resArray as Array<T>;\r\n }\r\n}\r\n","<div class=\"container-main\" [formGroup]=\"answerForm\">\r\n @switch (question().QuestionType) {\r\n\r\n @case (questionsType.eqLANG) {\r\n <tp-survey-answer-lang\r\n [languageList]=\"languageList()\"\r\n [language]=\"2\"\r\n [viewModel]=\"viewModel()\"\r\n (onLanguageChange)=\"onLanguageChange.emit($event)\"/>\r\n }\r\n\r\n @case (questionsType.eqINFO) {\r\n <tp-survey-answer-info\r\n formControlName=\"answer\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"/>\r\n }\r\n\r\n @case (questionsType.eqSS) {\r\n <tp-survey-answer-ss\r\n formControlName=\"answer\"\r\n [question]=\"question()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [alternativeList]=\"visibleAlternativeList()\"\r\n (onAlternativeClick)=\"onAlternativeClick($event)\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqMS) {\r\n <tp-survey-answer-ms\r\n formControlName=\"answer\"\r\n [question]=\"question()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [alternativeMaxAnswersCount]=\"question().AlternativeMaxAnswersCount\"\r\n [alternativeList]=\"visibleAlternativeList()\"\r\n (onAlternativeClick)=\"onAlternativeClick($event)\"/>\r\n }\r\n\r\n @case (questionsType.eqOD) {\r\n <tp-survey-answer-od\r\n formControlName=\"answer\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [minValue]=\"question().ODMinValue\"\r\n [maxValue]=\"question().ODMaxValue\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqOL) {\r\n <tp-survey-answer-ol\r\n formControlName=\"answer\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [telephoneInput]=\"question().OLTypeTel\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqSL) {\r\n <tp-survey-answer-sl\r\n formControlName=\"answer\"\r\n [alternativeList]=\"visibleAlternativeList()\"\r\n [sectionList]=\"visibleSectionList()\"\r\n [multiSelect]=\"question().MultiSelect\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [maxCount]=\"this.question().SLSectionMaxAnswersCount\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqEND) {\r\n <tp-survey-answer-end\r\n formControlName=\"answer\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n />\r\n }\r\n }\r\n\r\n <div class=\"container-additional-answer\">\r\n @for (addAnswer of answerForm.controls.additionalAnswers.controls | keyValues; track addAnswer) {\r\n @if (addAnswer.name | getAdditionalValueByValue:visibleAdditionalAnswerList(); as additionalAnswerObject ) {\r\n <tp-survey-answer-additional\r\n [control]=\"addAnswer.control\"\r\n [class.full-width]=\"additionalAnswerObject.AnswerType===AdditionalAnswerType.aatText\"\r\n [answerType]=\"additionalAnswerObject.AnswerType\"\r\n [caption]=\"additionalAnswerObject.MultiLangCaptions | multiLangObjectToHtml:language()\"\r\n [numberMinValue]=\"additionalAnswerObject.NumberMinValue\"\r\n [numberMaxValue]=\"additionalAnswerObject.NumberMaxValue\"\r\n [textMultiline]=\"additionalAnswerObject.TextMultiline\"\r\n [captionPosition]=\"additionalAnswerObject.CaptionPosition\"/>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {IdbBaseParamsLanguage} from '../../tp.survey.interface';\r\n\r\n@Pipe({\r\n name: 'getActiveLanguage',\r\n standalone: true\r\n})\r\nexport class GetActiveLanguagePipe implements PipeTransform {\r\n\r\n transform(languageList?: Array<IdbBaseParamsLanguage>, languageId?: number): IdbBaseParamsLanguage | undefined {\r\n return Array.isArray(languageList) ? languageList.find(langObj => langObj.Value === languageId && langObj.isActive) : undefined;\r\n }\r\n\r\n}\r\n","import {Directive, effect, ElementRef, input} from '@angular/core';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {BASE_HEIGHT, BASE_WIDTH} from '../../tp.survey.const';\r\n\r\n@Directive({\r\n selector: '[tpSurveyUpdateFontSize]',\r\n standalone: true\r\n})\r\nexport class UpdateFontSizeDirective{\r\n viewModel = input.required<ViewModel>( {alias: 'tpSurveyUpdateFontSize'});\r\n constructor(private readonly _element: ElementRef) {\r\n effect(() => {\r\n if (this.viewModel() === ViewModel.vmTablet) {\r\n const containerWidth = this._element.nativeElement.clientWidth;\r\n const containerHeight = this._element.nativeElement.clientHeight;\r\n const proportion: number = Math.min(containerWidth / BASE_WIDTH, containerHeight / BASE_HEIGHT );\r\n Array.from(this._element.nativeElement.children).forEach((el) => (el as HTMLElement).style.fontSize = `${proportion * 100}%`);\r\n }\r\n });\r\n }\r\n}\r\n\r\n","import {LOGIC_FUNC_TEXT} from './tp.survey.const';\r\n\r\nexport function executeLogicExpression(expression: string, vars: Record<string, unknown>): Function {\r\n return new Function(`${LOGIC_FUNC_TEXT} return ${expression}`).call(vars);\r\n}\r\n\r\n","import {IdbQuestionaryQuota, IdbQuestionaryQuota2dObject} from '../../tp.survey.interface';\r\nimport {Answer} from '../tp.survey.answer/tp.survey.answer';\r\nimport {executeLogicExpression} from '../../tp.survey.method';\r\nimport {LogicObject} from '../../tp.survey.type';\r\n\r\ntype QuotaCalculationResult = {\r\n name: string;\r\n guid: number;\r\n} | {\r\n name: null;\r\n guid2d: number;\r\n} | null;\r\n\r\nexport class SurveyQuotas {\r\n #completedQuota: {name: string | null; guid: number| null; guid2d: number| null} = {name: null, guid: null, guid2d: null};\r\n #quotas: Array<IdbQuestionaryQuota> = [];\r\n #quotas2d: Array<IdbQuestionaryQuota2dObject> = [];\r\n #quotaLimitDestinationQuestionGuid: number = -1;\r\n #quotaLimitDestinationQuestionNum: number = -1;\r\n\r\n setQuotas(quotas1d: Array<IdbQuestionaryQuota> = [], quotas2d: Array<IdbQuestionaryQuota2dObject> = [], quotaLimitDestinationQuestionGuid: number = -1, destinationQuestionNum: number = -1){\r\n this.#quotas = quotas1d;\r\n this.#quotas2d = quotas2d;\r\n this.#quotaLimitDestinationQuestionGuid = quotaLimitDestinationQuestionGuid;\r\n this.#quotaLimitDestinationQuestionNum = destinationQuestionNum;\r\n }\r\n\r\n guidIsDestinationQuestion(guid: number): boolean{\r\n return this.#quotaLimitDestinationQuestionGuid === guid;\r\n }\r\n\r\n\r\n get quotaIsCompleted(): boolean {\r\n return this.#completedQuota && (!!this.#completedQuota.guid || !!this.#completedQuota.guid2d) ;\r\n }\r\n\r\n get destinationQuestionGuid(): number {\r\n return this.#quotaLimitDestinationQuestionGuid\r\n }\r\n\r\n get quotaCount(): number {\r\n const quotas = this.#quotas && Array.isArray(this.#quotas) ? this.#quotas.length : 0;\r\n const quotas2d = this.#quotas2d && Array.isArray(this.#quotas2d) ? this.#quotas2d.length : 0;\r\n return quotas + quotas2d;\r\n }\r\n\r\n findFilledQuotas(currentQuestionNum: number, vars: LogicObject, interviewAnswers: Array<Answer>): void {\r\n /*\r\n * Поиск заполненной квоты это очень дорогой процесс. Его нужно оптимизировать по максимуму.\r\n * Перед поиском нужно выполнить ряд проверок.\r\n * Проверка currentQuestionNum <= this.#quotaLimitDestinationQuestionNum Нужна для оптимизации.\r\n * DestinationQuestion Желательно располагать после последнего квотного вопроса, потому что нет смысла постоянно проверять квоты, если вопросы которые используются для расчёта квоты меняться не будут.\r\n * например Квота Q1 + Q2 <= 25. DestinationQuestion нужно делать номером 3 или 4. Потому что как бы респондент не отвечал на последующие вопросы, результат квот не измениться и каждый раз их пересчитывать смысла нет.\r\n */\r\n if (\r\n (this.destinationQuestionGuid > 0) && //Глобально в настройках анкеты должен быть указан вопрос который должен отобразиться при достижении квоты, если его нет, то и искать квоты смысла нет.\r\n (this.quotaCount > 0) && //проверим если у нас вообще квоты\r\n (currentQuestionNum <= this.#quotaLimitDestinationQuestionNum) && // номер текущий вопроса меньше номера вопроса для перехода по достижении квот\r\n (!this.quotaIsCompleted) //и на финал проверим если ли уже заполненная квота, повторно не запускаем\r\n ) {\r\n\r\n new Promise<QuotaCalculationResult>((resolve, reject) => {\r\n if (Array.isArray(this.#quotas)) {\r\n const completedQuota = this.#quotas.find(quota => executeLogicExpression(quota.expression, vars));\r\n if (!!completedQuota) {\r\n return resolve({name: completedQuota.name, guid: completedQuota.quota_guid});\r\n }\r\n }\r\n\r\n if (Array.isArray(this.#quotas2d)) {\r\n const answers = this.#quotas2d.length > 0 ? interviewAnswers.map(a => ({av: a.AnswerValue, qg: a.QuestionGUID}) ) : [];\r\n\r\n const filledQuota2dArray = this.#quotas2d.filter(quotaValues => quotaValues.qs.every(qvq => !!answers.find(intAnswer => intAnswer.qg === qvq.guid && intAnswer.av === qvq.value)));\r\n\r\n //если не нашли заполненных квот выходим\r\n if (filledQuota2dArray.length <= 0) {\r\n return;\r\n }\r\n\r\n //ищем квоту которая заполнена и у нее есть условие и оно выполняется.\r\n const quota2dWithExpression = filledQuota2dArray.find((q: IdbQuestionaryQuota2dObject) => !!q.exp && executeLogicExpression(q.exp, vars));\r\n\r\n //если квота есть сообщим\r\n if (!!quota2dWithExpression) {\r\n return resolve({name: null, guid2d: quota2dWithExpression.qvg});\r\n }\r\n\r\n //если квоты с Expression нет, ищем квоту которая заполнена и у нее нет условия\r\n const quota2dWithoutExpression = filledQuota2dArray.find((q: IdbQuestionaryQuota2dObject) => !q.exp || (typeof q.exp === 'string' && q.exp.trim().length === 0));\r\n if (!!quota2dWithoutExpression) {\r\n return resolve({name: null, guid2d: quota2dWithoutExpression.qvg});\r\n }\r\n }\r\n reject(null)\r\n }).then(quota => {\r\n if (!!quota) {\r\n this.#completedQuota = {\r\n name: quota.name,\r\n guid: 'guid' in quota ? quota.guid : null,\r\n guid2d: 'guid2d' in quota ? quota.guid2d : null,\r\n }\r\n }\r\n }).catch(err => {\r\n console.error(err);\r\n });\r\n }\r\n }\r\n}\r\n","import {IQuestionAnswer} from '../../tp.survey.interface';\r\nimport {AdditionalAnswer, LogicObject} from '../../tp.survey.type';\r\nimport {MISSING_VALUE} from '../../tp.survey.const';\r\n\r\nexport class Answer implements IQuestionAnswer {\r\n readonly QuestionGUID: number;\r\n readonly QuestionVersion: number;\r\n readonly AnswerAdditional: Record<string, AdditionalAnswer> = {};\r\n readonly ViewedAlternativeValues: Array<number> = [];\r\n readonly ViewedSectionGuids: Array<number> = [];\r\n readonly AlternativeSequenceClicks: Array<[number, number]> = [];\r\n StartedAt = 0;\r\n FinishedAt = 0;\r\n AnswerValue: any = MISSING_VALUE;\r\n answerIsComplete: boolean = false;\r\n constructor(guid: number, version: number = -1) {\r\n this.QuestionGUID = guid;\r\n this.QuestionVersion = version;\r\n }\r\n clear(): void {\r\n this.StartedAt = 0;\r\n this.FinishedAt = 0;\r\n this.AnswerValue = MISSING_VALUE;\r\n this.ViewedAlternativeValues.length = 0;\r\n this.ViewedSectionGuids.length = 0;\r\n this.AlternativeSequenceClicks.length = 0;\r\n for (const key of Object.keys(this.AnswerAdditional)) {\r\n this.AnswerAdditional[Number(key)] = null;\r\n }\r\n }\r\n\r\n addAnswer(answerValue: unknown, answerAdditional: LogicObject, asComplete: boolean): void {\r\n this.AnswerValue = answerValue;\r\n }\r\n\r\n}\r\n","import {Answer} from '../tp.survey.answer/tp.survey.answer';\r\nimport {IQuestionAnswer} from '../../tp.survey.interface';\r\nimport {MISSING_VALUE} from '../../tp.survey.const';\r\nimport {Injectable} from '@angular/core';\r\nimport {TpSurveyCoreService} from '../tp.survey.core/tp.survey.core.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TpSurveyInterviewService {\r\n #answerList: Array<Answer> = [];\r\n startedAt: number = 0;\r\n\r\n createAnswer(guid: number, version: number): Answer {\r\n //ишем ответ с таким же номером как и в вопросе\r\n let answer = this.findAnswerByGuid(guid);\r\n\r\n //если ответа с таким номером вопроса нет, создадим\r\n if (!answer) {\r\n answer = new Answer(guid, version)\r\n this.#answerList.push(answer);\r\n }\r\n //вернём то, что создали или то что нашли\r\n return answer;\r\n }\r\n\r\n findAnswerByGuid(guid: number): Answer | undefined {\r\n return this.#answerList.find(a => a.QuestionGUID === guid);\r\n }\r\n\r\n questionIsComplete(guid: number): boolean{\r\n const answer = this.findAnswerByGuid(guid);\r\n return !answer ? false : answer.answerIsComplete;\r\n }\r\n\r\n getAnswerList(): Array<Answer>{\r\n return this.#answerList;\r\n }\r\n\r\n overrideAnswers(answers: Array<IQuestionAnswer>): void{\r\n //не будем трогать вопросы которые = -97\r\n answers.filter(answer => answer.AnswerValue !== MISSING_VALUE).forEach(oldAnswer => {\r\n const newAnswer = this.#answerList.find(aa => aa.QuestionGUID === oldAnswer.QuestionGUID);\r\n if (!!newAnswer) {\r\n //вернём основной ответ\r\n newAnswer.AnswerValue = oldAnswer.AnswerValue;\r\n\r\n newAnswer.StartedAt = oldAnswer.StartedAt;\r\n newAnswer.FinishedAt = oldAnswer.FinishedAt;\r\n\r\n //С дополнительными ответами сложнее, они помечены readonly. Поэтому сначала удалим, потом добавим\r\n for (const prop of Object.getOwnPropertyNames(newAnswer.AnswerAdditional)) {\r\n delete newAnswer.AnswerAdditional[prop];\r\n }\r\n //добавляем старые значения\r\n for (const [key, value] of Object.entries(oldAnswer.AnswerAdditional)) {\r\n newAnswer.AnswerAdditional[key] = value;\r\n }\r\n\r\n //То же самое с ViewedAlternativeValues и ViewedSectionGuids и AlternativeSequenceClicks. Т.к. они readonly сначала удалим, потом добавим\r\n newAnswer.ViewedAlternativeValues.length = 0;\r\n oldAnswer.ViewedAlternativeValues.forEach(oa => newAnswer.ViewedAlternativeValues.push(oa));\r\n\r\n newAnswer.ViewedSectionGuids.length = 0;\r\n oldAnswer.ViewedSectionGuids.forEach(oa => newAnswer.ViewedSectionGuids.push(oa));\r\n\r\n newAnswer.AlternativeSequenceClicks.length = 0;\r\n oldAnswer.AlternativeSequenceClicks.forEach(oa => newAnswer.AlternativeSequenceClicks.push(oa));\r\n }\r\n });\r\n }\r\n}\r\n","import {DestroyRef, inject, Inject, Injectable, PLATFORM_ID} from '@angular/core';\r\nimport {BehaviorSubject, filter, Observable, Subject} from 'rxjs';\r\nimport {SurveyQuotas} from '../tp.servey.quota/tp.survey.quota';\r\nimport {TpSurveyLogicService} from '../tp.survey.logic/tp.survey.logic.service';\r\nimport {isPlatformBrowser} from '@angular/common';\r\nimport {map} from 'rxjs/operators';\r\nimport {AnswerChange, IdbQuestion, IdbQuestionary, IInterviewData, IInterviewLogicVar, IQuestionAnswer} from '../../tp.survey.interface';\r\nimport {TpSurveyInterviewService} from '../tp.survey.interview/tp.survey.interview.service';\r\nimport {QuestionsType, ResultativeStatus, SurveyEvents, ValidStatus} from '../../tp.survey.enum';\r\nimport {Answer} from '../tp.survey.answer/tp.survey.answer';\r\nimport {AnswerSlType, LogicObject} from '../../tp.survey.type';\r\nimport {MISSING_VALUE} from '../../tp.survey.const';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\n\r\ninterface BroadcastEvent {\r\n key: string;\r\n data?: any;\r\n}\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TpSurveyCoreService {\r\n private readonly _eventBus = new Subject<BroadcastEvent>();\r\n readonly #currentQuestion = new BehaviorSubject<IdbQuestion | null>(null);\r\n #surveyQuotas = new SurveyQuotas();\r\n #questionary?: IdbQuestionary;\r\n #displayedQuestions: Array<number> = []; // нужно для навигации по кнопке back\r\n readonly #destroyRef = inject(DestroyRef);\r\n constructor(@Inject(PLATFORM_ID) private readonly platformId: object, private readonly _logic: TpSurveyLogicService, private readonly _interview: TpSurveyInterviewService) {\r\n // запускам проверку квот, после скрытия каждого(почти) вопроса (seQuestionHide)\r\n this._eventBus.asObservable().pipe(\r\n filter(ev => ev.key === SurveyEvents.seQuestionHide ),\r\n takeUntilDestroyed(this.#destroyRef),\r\n ).subscribe({\r\n next: () => this.#surveyQuotas.findFilledQuotas(this.#currentQuestion.value?.QuestionNum ?? -1, Object.assign({}, this._logic.getLogicVars()), this._interview.getAnswerList())\r\n });\r\n }\r\n\r\n setupSurvey(questionaryRawData: IdbQuestionary, logicVars?: Array<IInterviewLogicVar>, answerList?: Array<IQuestionAnswer>, questionGuid?: number) {\r\n //если анкеты нет, делать нечего.\r\n if (!questionaryRawData) {\r\n this.#currentQuestion.next(null);\r\n return;\r\n }\r\n\r\n this.#questionary = questionaryRawData;\r\n\r\n if (isPlatformBrowser(this.platformId)) {\r\n //узнаем есть ли вопрос который указали для перехода при заполнении квоты\r\n const destinationQuestion = this.#findQuestionByGuid(questionaryRawData.BaseParams.QuotaLimitDestinationQuestionGuid);\r\n\r\n //инициализируем квоты\r\n this.#surveyQuotas.setQuotas(questionaryRawData.Quotas, questionaryRawData.Quotas2d, destinationQuestion?.QuestionGuid ?? -1, destinationQuestion?.QuestionNum ?? -1);\r\n }\r\n\r\n //создадим ответы и логические переменные\r\n this.#initiateQuestions(this.#questionary.Questions)\r\n\r\n // Может быть 2 варианта запуска интервью, 1-новое интервью, 2-перезапуск старого интервью. В первом случае начало это lang или первый вопрос. Во втором, с последнего вопроса на который ответили.\r\n let startQuestionNum: number | undefined = undefined;\r\n //если загружаем ранее не законченное интервью, продолжаем с места последнего вопроса (случай номер 2)\r\n if (!!logicVars && !!answerList && !!questionGuid) {\r\n //загружаем старые логические переменные и ответы\r\n this.#fillOldInterviewData(logicVars, answerList);\r\n\r\n //ищем номер вопроса, который был последний перед сохранением.\r\n const questionLastSave = this.#findQuestionByGuid(questionGuid);\r\n\r\n //Вопрос могли удалить. Тогда начнем сначала.\r\n if (!!questionLastSave) {\r\n startQuestionNum = questionLastSave.QuestionNum;\r\n }\r\n }\r\n if (startQuestionNum === undefined) {\r\n //Это новое интервью, без ранее сохранённых данных(случай 1). Запускаем опрос, первый экран это Lang вопрос, но если выбора языка нет, пропускаем и переходим на 1-й вопрос\r\n startQuestionNum = this.#activeLangCount > 1 ? 0 : this.#nextQuestionNum();\r\n }\r\n\r\n //пошлём событие о начале опроса\r\n this._eventBus.next({key: SurveyEvents.seSurveyStart, data: {questionary: this.#questionary}});\r\n\r\n //показываем вопрос\r\n this.#changeCurrentQuestion(this.#questionary!.Questions[startQuestionNum]);\r\n }\r\n\r\n on(...key: Array<string>): Observable<any> {\r\n return this._eventBus.asObservable().pipe(\r\n filter(event => key.includes(event.key)),\r\n map(event => event.data)\r\n );\r\n }\r\n\r\n goToNextQuestion(): void {\r\n const currentQuestion = this.#currentQuestion.value;\r\n if (!currentQuestion) {\r\n return;\r\n }\r\n //если ответ на текущий вопрос не закончен, выходим\r\n if (!this._interview.questionIsComplete(currentQuestion.QuestionGuid)) {\r\n return ;\r\n }\r\n\r\n //если указан PostScript, выполним его\r\n if (!!currentQuestion.PostScript) {\r\n this._logic.executePostScript(currentQuestion.PostScript);\r\n }\r\n this.#changeCurrentQuestion(this.#questionary!.Questions[this.#nextQuestionNum()]);\r\n }\r\n\r\n goToBackQuestion(): void {\r\n this.#displayedQuestions.pop(); // удалим информацию о том что показывали этот вопрос\r\n const previousQuestionNum = this.#displayedQuestions.pop(); // узнаем номер вопроса на который нам надо перейти, и удалим информацию что-бы не дублировать\r\n if (!!previousQuestionNum) {\r\n const prevQuestion = this.#questionary?.Questions[previousQuestionNum];\r\n if (!!prevQuestion) {\r\n this.#changeCurrentQuestion(prevQuestion);\r\n }\r\n }\r\n }\r\n\r\n questionIsComplete(guid: number): boolean {\r\n const answer = this._interview.findAnswerByGuid(guid);\r\n return answer?.answerIsComplete ?? false\r\n }\r\n\r\n #fillOldInterviewData(logicVars: Array<IInterviewLogicVar>, answerList: Array<IQuestionAnswer>): void{\r\n //пропишем старые логические переменные\r\n if (Array.isArray(logicVars)) {\r\n logicVars.forEach(logicVarObj => {\r\n this._logic.setLogicValue(logicVarObj.nm, logicVarObj.vl);\r\n })\r\n }\r\n\r\n //пропишем старые ответы\r\n this._interview.overrideAnswers(answerList);\r\n\r\n //нужно вернуть время начала интервью, отдельно оно не сохраняется, поэтому возьмём минимальное время начала из ответов\r\n //фильтруем все вопросы у которых оно указано(>0) и трансформируем в число.\r\n const startedAtArray = answerList.filter(answer => answer.StartedAt > 0).map(answer => answer.StartedAt);\r\n\r\n //берём минимальное\r\n this._interview.startedAt = Math.min(...startedAtArray);\r\n }\r\n\r\n #changeCurrentQuestion(newQuestion: IdbQuestion): void {\r\n const currentQuestion = this.#currentQuestion.value;\r\n const currentTime = new Date().getTime();\r\n\r\n if (!!currentQuestion) {\r\n /*\r\n Сохраним время начала интервью. Фиксировать будем не с самого начала, а с ответа на первый вопрос.\r\n Потому что практика такая, открыть анкету на планшете и ходить искать респондентов и из-за этого длительность интервью может быть нерелевантно.\r\n * */\r\n if (this._interview.startedAt === 0 && currentQuestion.QuestionNum >= 0) {\r\n this._interview.startedAt = currentTime;\r\n }\r\n\r\n //нужно сохранить FinishedAt в ответах для старого вопроса\r\n const answer = this._interview.findAnswerByGuid(currentQuestion.QuestionGuid);\r\n if (!!answer) {\r\n answer.FinishedAt = currentTime;\r\n }\r\n this._eventBus.next({key: SurveyEvents.seQuestionHide, data: currentQuestion});\r\n }\r\n this.#displayedQuestions.push(newQuestion.QuestionNum);\r\n this.#currentQuestion.next(newQuestion);\r\n\r\n //нужно сохранить StartedAt в ответах для нового вопроса\r\n const answerNew = this._interview.findAnswerByGuid(newQuestion.QuestionGuid);\r\n if (!!answerNew) {\r\n answerNew.StartedAt = currentTime;\r\n }\r\n this._eventBus.next({key: SurveyEvents.seQuestionShow, data: newQuestion});\r\n\r\n //если новый экран это end тогда завершаем интервью\r\n if (newQuestion.QuestionType === 'END') {\r\n this.#finishInterview();\r\n }\r\n }\r\n\r\n currentQuestion$(): Observable<IdbQuestion | null> {\r\n return this.#currentQuestion.asObservable();\r\n }\r\n\r\n findAnswerByGuid(guid: number): Answer | undefined {\r\n return this._interview.findAnswerByGuid(guid);\r\n }\r\n\r\n setLogicValue(varName: string, value: any): void {\r\n this._logic.setLogicValue(varName, value);\r\n }\r\n\r\n getLogicVars(): LogicObject {\r\n return this._logic.getLogicVars();\r\n }\r\n\r\n getAnswerList(): Array<Answer> {\r\n return this._interview.getAnswerList();\r\n }\r\n\r\n updateAnswer(eventData: AnswerChange): void {\r\n const answer = this._interview.findAnswerByGuid(eventData.guid);\r\n if (!answer) {\r\n return;\r\n }\r\n\r\n //вопросы которые в своем составе имеет секции, хранят ответы чуть по другому, точнее ответ на каждую секцию это отдельный объект в _interview.answerList\r\n //поэтому ответ для таких типов вопросов это [key: string]: Array<number> | number, где key(guid секции) это ответ на секцию, если key нет, секция не была показана\r\n if (this.#currentQuestion.value?.QuestionType === QuestionsType.eqSL) {\r\n const sectionList = this.#currentQuestion.value?.Sectionlist;\r\n\r\n //пройдёмся по каждой секции и если для неё есть ответ, запишем, в противном случае вместо ответа укажем -97(MISSING_VALUE)\r\n if (!!sectionList) {\r\n sectionList.forEach(section => {\r\n const sectionInterviewAnswer = this._interview.findAnswerByGuid(section.SectionGuid);\r\n if (!sectionInterviewAnswer){\r\n return\r\n }\r\n const sectionQuestionAnswer = eventData.answer ? (eventData.answer as AnswerSlType)[section.SectionGuid.toString()] : undefined;\r\n sectionInterviewAnswer.AnswerValue = sectionQuestionAnswer === undefined ? MISSING_VALUE : sectionQuestionAnswer;\r\n });\r\n }\r\n //ответ самого исходного вопроса должен быть 1\r\n answer.AnswerValue = 1;\r\n } else {\r\n //ответ на вопрос у которого нет секций\r\n answer.AnswerValue = eventData.answer;\r\n }\r\n\r\n //на вопрос ответили тогда когда есть все ответы и выполняется логика кнопки далее(если её указали)\r\n answer.answerIsComplete = eventData.isComplete && this.#nextButtonExpressionIsTrue();\r\n\r\n //ViewedAlternativeValues и ViewedSectionGuids. Т.к. они readonly сначала удалим, потом добавим\r\n answer.ViewedAlternativeValues.length = 0;\r\n eventData.viewedAlternativeValues.forEach(oa => answer.ViewedAlternativeValues.push(oa));\r\n\r\n answer.ViewedSectionGuids.length = 0;\r\n eventData.viewedSectionGuids.forEach(oa => answer.ViewedSectionGuids.push(oa));\r\n\r\n answer.AlternativeSequenceClicks.length = 0;\r\n eventData.alternativeSequenceClicks.forEach(oa => answer.AlternativeSequenceClicks.push(oa));\r\n\r\n\r\n Object.entries(answer.AnswerAdditional).forEach(([key]) => delete answer.AnswerAdditional[Number(key)]);\r\n Object.entries(eventData.additionalAnswers).forEach(([key, value]) => answer.AnswerAdditional[Number(key)] = value);\r\n\r\n this.updateLogic(eventData.logicVars);\r\n\r\n this._eventBus.next({key: SurveyEvents.seQuestionAnswersChange, data: {question: this.#currentQuestion.value, answerIsComplete: answer.answerIsComplete}});\r\n\r\n //может возникнуть ситуация, когда нет ни одной альтернативы или секции для отображения.в этом случае вопрос показывать не нужно, как ответ записываем 0 и переходим на следующий\r\n const question = this.#findQuestionByGuid(eventData.guid);\r\n //ситуация для ss/ms вопросов,\r\n if (!!question && answer.answerIsComplete && (question.QuestionType === 'SS' || question.QuestionType === 'MS') && (eventData.viewedAlternativeValues.length === 0)) {\r\n this.goToNextQuestion()\r\n }\r\n }\r\n\r\n updateLogic(logicVars: Record<string, any>): void{\r\n Object.entries(logicVars).forEach(([varName, value]) => {\r\n this.setLogicValue(varName, value)\r\n })\r\n }\r\n\r\n //возвращает количество активных языков\r\n get #activeLangCount(): number {\r\n //если анкета по какой-то причине ну указана, вернём 0\r\n return this.#questionary?.BaseParams.LanguageList.filter( langObj => langObj.isActive).length ?? 0;\r\n }\r\n\r\n //возвращает количество вопросов\r\n get #questionsCount(): number {\r\n return this.#questionary?.Questions.length ?? 0;\r\n }\r\n\r\n #finishInterview(): void {\r\n const currentTime = new Date();\r\n let resultDirty;\r\n try {\r\n resultDirty = this._logic.executeLogic(this.#questionary?.BaseParams.ResultativeScript ?? '');\r\n }catch (e) {\r\n resultDirty = false;\r\n }\r\n\r\n const interview: IInterviewData = {\r\n Language: 0, //todo lang\r\n SpotId: 0,\r\n DeviceId: 0,\r\n DeviceType: 0,\r\n Resultative: ResultativeStatus.rsUnset,\r\n Valid: ValidStatus.vsUnset,\r\n Wave: this.#questionary?.Info.current_wave ?? 0,\r\n QuestionaryName: this.#questionary?.Info.name ?? '',\r\n QuestionaryGuid: this.#questionary?.Info.questionary_guid ?? 0,\r\n StartedAt: this._interview.startedAt,\r\n FinishedAt: currentTime.getTime(),\r\n TineZoneBias: currentTime.getTimezoneOffset(),\r\n ResultatDirty: resultDirty,\r\n Answers: {\r\n AnsversList: Array.from(this._interview.getAnswerList())\r\n },\r\n additional_info: {\r\n QuestionaryUpdateTimestamp: new Date(this.#questionary?.Info.last_update_timestamp ?? 0).getTime() ,\r\n },\r\n ResultQuotaGuids: [],\r\n ResultQuota2dGuids: [],\r\n LogicVars: [],\r\n };\r\n\r\n const logicVars = this._logic.getLogicVars();\r\n Object.entries(logicVars).forEach(([key, value]) => interview.LogicVars.push({nm: key, vl: value}));\r\n\r\n this._eventBus.next({key: SurveyEvents.seSurveyEnd, data: interview});\r\n }\r\n\r\n #nextQuestionNum(): number {\r\n const currentQuestion = this.#currentQuestion.value;\r\n // проверим квоты\r\n const currentGuid = currentQuestion?.QuestionGuid ?? 0;\r\n if (this.#surveyQuotas.quotaIsCompleted && !this.#surveyQuotas.guidIsDestinationQuestion(currentGuid)) {\r\n // у нас есть заполненная квота, найдем вопрос который нужно показать при заполнении квоты\r\n const destinationQ = this.#findQuestionByGuid(this.#surveyQuotas.destinationQuestionGuid);\r\n //если вопрос есть(его могли удалить из анкеты), показывает его\r\n if (!!destinationQ) {\r\n return destinationQ.QuestionNum;\r\n }\r\n }\r\n\r\n // если нет заполненной квоты, переходим на следующий вопрос, ищем следующий вопрос который мы можем отобразить (до логика может запретить показ вопроса)\r\n let nextQuestionNum = (currentQuestion?.QuestionNum ?? 0) + 1;\r\n\r\n // но сначала проверим после логику\r\n if (!!currentQuestion) {\r\n const destQ = currentQuestion.logiclist.find(logObj => (logObj.DestinationQuestionGuid > 0) && this._logic.executeLogic(logObj.LogicText) );\r\n if (!!destQ) {\r\n const destQNum = this.#findQuestionByGuid(destQ.DestinationQuestionGuid)?.QuestionNum;\r\n if (Number.isSafeInteger(destQNum)) { // вопрос мог быть удалён, а логику оставить\r\n nextQuestionNum = destQNum!;\r\n }\r\n }\r\n }\r\n\r\n // общее количество вопросов, цикл будет считать до этого количества\r\n const questionCount = this.#questionsCount;\r\n do {\r\n //потенциально следующий вопрос\r\n const q = this.#questionary!.Questions[nextQuestionNum];\r\n\r\n //если это последний вопрос или если выполняется BeforeExpression и этот вопрос не DestinationQuota, можем его показать\r\n if (q.QuestionType === QuestionsType.eqEND || (this._logic.executeLogic(q.BeforeExpression) && !this.#surveyQuotas.guidIsDestinationQuestion(q.QuestionGuid)) ) {\r\n return nextQuestionNum;\r\n }\r\n //вопрос нельзя показывать, увеличиваем счётчик текущего вопроса на 1\r\n nextQuestionNum++;\r\n } while (nextQuestionNum < questionCount - 1); // end вопрос должен всегда быть показан\r\n return nextQuestionNum;\r\n }\r\n\r\n #initiateQuestions(questionList: Array<IdbQuestion>): void{\r\n questionList.forEach(question => {\r\n //создаём пустой ответ для вопроса.\r\n const answer = this._interview.createAnswer(question.QuestionGuid, question.Version);\r\n\r\n //такого быть не должно, это ошибка\r\n if (!answer) {\r\n throw new Error('answer not found');\r\n }\r\n\r\n this._logic.setLogicValue(question.SysName, MISSING_VALUE); // переменная самого вопроса\r\n\r\n //добавим доп ответы и логику для них\r\n question.AdditionalAnswerlist.forEach(aa => {\r\n answer.AnswerAdditional[aa.Value] = null;\r\n this._logic.setLogicValue(`${question.SysName}${aa.SysName}`, MISSING_VALUE); // логика для переменных доп ответа\r\n });\r\n\r\n // если в тексте postScript есть запись типа setVar('varName', value); нужно инициализировать переменную varName значением -97.\r\n if (!!question.PostScript) {\r\n (question.PostScript.match(/(\\bsetvar\\b)\\(['|\"](.*?)['|\"]/gim) ?? []).map(scriptVar => scriptVar.match(/['|\"](.+)['|\"]/i)![1]).forEach(varName => this._logic.setLogicValue(varName, null));\r\n }\r\n\r\n // для Вопросов SS/MS нужно прописать логику альтернатив sysname вопроса + sysname альтернативы\r\n if (question.Sectionlist.length <= 0) {// для Вопросов SS/MS\r\n question.Alternativelist.forEach(alt => this._logic.setLogicValue(`${question.SysName}${alt.SysName}`, MISSING_VALUE));\r\n } else {\r\n //для вопросов у которых есть секции проинициализируем каждую секцию\r\n question.Sectionlist.forEach(section => {\r\n\r\n //создаём пустой ответ для секции.\r\n const answerForSection = this._interview.createAnswer(section.SectionGuid, 1);\r\n\r\n //такого быть не должно, это ошибка\r\n if (!answerForSection) {\r\n throw new Error('answer not found');\r\n }\r\n\r\n // для Вопросов SL нужно прописать логику альтернатив и секций sysname секции + sysname альтернативы\r\n this._logic.setLogicValue(section.SysName, MISSING_VALUE); // переменная самой секции\r\n\r\n //логика альтернатив SL вопроса\r\n question.Alternativelist.forEach(alt => this._logic.setLogicValue(`${section.SysName}${alt.SysName}`, MISSING_VALUE));\r\n })\r\n }\r\n })\r\n }\r\n\r\n //ищет вопрос на guid\r\n #findQuestionByGuid(guid: number): IdbQuestion | undefined {\r\n if (!this.#questionary) {\r\n return undefined;\r\n }\r\n return this.#questionary.Questions.find(q => q.QuestionGuid === guid);\r\n }\r\n\r\n #nextButtonExpressionIsTrue(): boolean{\r\n const buttonNextExpression = this.#currentQuestion.value?.BtnNextExpression ?? '';\r\n //если скрипта для кнопки далее нет, вернём true\r\n if (buttonNextExpression.trim() === '') {\r\n return true;\r\n }\r\n try {\r\n return this._logic.executeLogic(buttonNextExpression);\r\n } catch (e) {\r\n console.error(e);\r\n return false;\r\n }\r\n }\r\n}\r\n","import {Directive, HostBinding, input} from '@angular/core';\r\nimport {TpSurveyTheme} from '../../tp.survey.type';\r\n\r\n@Directive({\r\n selector: '[tpSurveyTheme]',\r\n standalone: true\r\n})\r\nexport class SurveyThemeDirective {\r\n theme = input<TpSurveyTheme>('cyan-orange-light',{alias: 'tpSurveyTheme'});\r\n @HostBinding(\"class.survey-theme-cyan-orange-light\") public get classCyanOrangeLight() {\r\n return this.theme() === 'cyan-orange-light';\r\n }\r\n @HostBinding(\"class.survey-theme-cyan-orange-dark\") public get classCyanOrangeDark() {\r\n return this.theme() === 'cyan-orange-dark';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-rose-red-light\") public get classRoseRedLight() {\r\n return this.theme() === 'rose-red-light';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-rose-red-dark\") public get classRoseRedDark() {\r\n return this.theme() === 'rose-red-dark';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-azure-blue-light\") public get classAzureBlueLight() {\r\n return this.theme() === 'azure-blue-light';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-azure-blue-dark\") public get classAzureBlueDark() {\r\n return this.theme() === 'azure-blue-dark';\r\n }\r\n}\r\n\r\n","import {ChangeDetectionStrategy, Component, DestroyRef, inject, input, OnInit, output, signal, TemplateRef} from '@angular/core';\r\nimport {concatMap, delay, distinctUntilChanged, filter, from, merge, mergeMap, Observable, of} from 'rxjs';\r\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\r\nimport {map} from 'rxjs/operators';\r\nimport {takeUntilDestroyed, toSignal} from '@angular/core/rxjs-interop';\r\nimport {AnswerChange, ICurrentQuestionAnswer, IdbQuestion, IdbQuestionary, IInterviewAutoSaveData, IInterviewData, IInterviewProgressEvent, IInterviewStartedEvent} from '../../tp.survey.interface';\r\nimport {QuestionCaptionComponent} from '../question.caption/question.caption.component';\r\nimport {NavigationButtonComponent} from '../navigation.button/navigation.button.component';\r\nimport {ContainerAnswerComponent} from '../answer/container.answer/container.answer.component';\r\nimport {GetActiveLanguagePipe} from '../../pipe/get.active.language/get.active.language.pipe';\r\nimport {UpdateFontSizeDirective} from '../../directive/update.font.size/update.font.size.directive';\r\nimport {TpSurveyCoreService} from '../../core/tp.survey.core/tp.survey.core.service';\r\nimport {NavigationButtonDirection, TpSurveyTheme} from '../../tp.survey.type';\r\nimport {QuestionsType, SurveyEvents, ViewModel} from '../../tp.survey.enum';\r\nimport {MultiLangObjectToHtmlPipe} from '../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {SurveyThemeDirective} from '../../directive/survey.theme/survey.theme.directive';\r\n\r\ninterface ICurrentQuestionViewData {\r\n question: IdbQuestion | null;\r\n answers?: ICurrentQuestionAnswer;\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-play',\r\n templateUrl: './survey.play.component.html',\r\n styleUrls: ['./survey.play.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n AsyncPipe,\r\n QuestionCaptionComponent,\r\n NavigationButtonComponent,\r\n ContainerAnswerComponent,\r\n GetActiveLanguagePipe,\r\n UpdateFontSizeDirective,\r\n NgTemplateOutlet,\r\n MultiLangObjectToHtmlPipe,\r\n SurveyThemeDirective,\r\n ]\r\n})\r\nexport class SurveyPlayComponent implements OnInit{\r\n questionary = input.required<IdbQuestionary>();\r\n viewModel = input.required<ViewModel>();\r\n interviewAutoSaveData = input<IInterviewAutoSaveData>();\r\n theme = input<TpSurveyTheme>('cyan-orange-light');\r\n language = input<number>(2);\r\n templateNavigationRef = input<TemplateRef<any> | null>();\r\n interviewStarted = output<IInterviewStartedEvent>();\r\n interviewFinished = output<IInterviewData>();\r\n interviewProgress = output<IInterviewProgressEvent>();\r\n readonly currentQuestionViewData$: Observable<ICurrentQuestionViewData>;\r\n readonly activeLanguage = signal<number>(this.language())\r\n readonly viewModelE = ViewModel;\r\n readonly backButtonAvailable;\r\n readonly nextButtonAvailable;\r\n readonly #core = inject(TpSurveyCoreService);\r\n readonly #destroyRef = inject(DestroyRef);\r\n constructor() {\r\n //Проблема в том, что если идёт подряд 2 вопроса с одинаковым типом, то не удаляется. Нужно пробросить null с небольшой задержкой, чтобы движок angular`а удалял старые компоненты\r\n this.currentQuestionViewData$ = this.#core.currentQuestion$().pipe(\r\n mergeMap(currentQuestion => from([null, currentQuestion]).pipe(\r\n concatMap(val => of(val).pipe(\r\n delay(val === null ? 0 : 50),\r\n )),\r\n )),\r\n //будем реагировать только когда null => вопрос и наоборот вопрос => null.\r\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\r\n map(currentQuestion => ({\r\n question: currentQuestion,\r\n answers: !currentQuestion ? undefined : {\r\n question: this.#core.findAnswerByGuid(currentQuestion.QuestionGuid),\r\n sections: currentQuestion.Sectionlist.map(section => this.#core.findAnswerByGuid(section.SectionGuid)),\r\n }\r\n })),\r\n );\r\n\r\n /*\r\n * кнопка далее нужно проверять при показе вопроса и при изменении ответа. При показе она может быть доступна сразу(например info).\r\n * Кнопка доступна если ответ корректно заполнен(questionIsComplete) и это не eqEND вопрос\r\n * */\r\n this.nextButtonAvailable = toSignal(merge(\r\n this.#core.on(SurveyEvents.seQuestionAnswersChange).pipe(map(data => data.question)),\r\n this.#core.on(SurveyEvents.seQuestionShow).pipe(map(data => data))\r\n ).pipe(\r\n map(question => this.#core.questionIsComplete(question.QuestionGuid) && question.QuestionType !== QuestionsType.eqEND && question.QuestionType !== QuestionsType.eqLANG),\r\n delay(1),\r\n ), { initialValue: false });\r\n\r\n //кнопку Назад можно показывать если в настройках указали ShowBtnBack и это не eqEND вопрос\r\n this.backButtonAvailable = toSignal(this.#core.on(SurveyEvents.seQuestionShow).pipe(\r\n filter(question => !!question),\r\n map((question: IdbQuestion) => question.QuestionNum > 1 && question.ShowBtnBack && question.QuestionType !== QuestionsType.eqEND && question.QuestionType !== QuestionsType.eqLANG),\r\n delay(1),\r\n ));\r\n\r\n this.#core.on(SurveyEvents.seSurveyEnd).pipe(\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe({\r\n next: interview => {\r\n interview.Language = this.activeLanguage()\r\n this.interviewFinished.emit(interview)\r\n }\r\n });\r\n\r\n this.#core.on(SurveyEvents.seSurveyStart).pipe(\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe({\r\n next: data => this.interviewStarted.emit(data)\r\n });\r\n\r\n this.#core.on(SurveyEvents.seQuestionShow).pipe(\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe({\r\n next: q => this.interviewProgress.emit({\r\n currentNum: q.QuestionNum,\r\n questionsCount: this.questionary().Questions.length,\r\n questionGuid: q.QuestionGuid,\r\n interviewData: {\r\n logicVars: this.#core.getLogicVars(),\r\n answerList: this.#core.getAnswerList(),\r\n }\r\n })\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.#core.setupSurvey(this.questionary(), this.interviewAutoSaveData()?.logic_vars, this.interviewAutoSaveData()?.answer_list, this.interviewAutoSaveData()?.question_guid, );\r\n }\r\n\r\n onNavigationButtonClick(direction: NavigationButtonDirection) {\r\n if (direction === 'next') {\r\n this.#core.goToNextQuestion()\r\n } else {\r\n this.#core.goToBackQuestion()\r\n }\r\n }\r\n\r\n onAnswerChanged(eventData: AnswerChange) {\r\n this.#core.updateAnswer(eventData);\r\n }\r\n\r\n onLogicChanged(logicVars: Record<string, any>) {\r\n this.#core.updateLogic(logicVars);\r\n }\r\n\r\n onLanguageChange(language: number) {\r\n this.activeLanguage.set(language);\r\n this.#core.goToNextQuestion();\r\n }\r\n}\r\n","<div\r\n class=\"survey-container-main survey-typography\"\r\n [tpSurveyUpdateFontSize]=\"viewModel()\"\r\n [tpSurveyTheme]=\"theme()\"\r\n [class.tp-view-desktop]=\"viewModel() === viewModelE.vmDesktop\"\r\n [class.tp-view-tablet]=\"viewModel() === viewModelE.vmTablet\">\r\n\r\n @if (currentQuestionViewData$ | async; as currentQuestionViewData) {\r\n @if (currentQuestionViewData.question; as question) {\r\n <tp-survey-question-caption\r\n [caption]=\"question.MultiLangCaptions | multiLangObjectToHtml:activeLanguage():question.LogicCaptionsList\"\r\n [captionHelp]=\"question.MultiLangCaptionsHelper | multiLangObjectToHtml:activeLanguage()\"/>\r\n\r\n <tp-survey-container-answer\r\n [question]=\"question\"\r\n [language]=\"activeLanguage()\"\r\n [viewModel]=\"viewModel()\"\r\n [answers]=\"currentQuestionViewData.answers\"\r\n [languageList]=\"questionary().BaseParams.LanguageList\"\r\n (logicChanged)=\"onLogicChanged($event)\"\r\n (onLanguageChange)=\"onLanguageChange($event)\"\r\n (answerChanged)=\"onAnswerChanged($event)\"/>\r\n }\r\n }\r\n\r\n <div class=\"container-navigation\">\r\n <div class=\"container-navigation-back\">\r\n @if (backButtonAvailable()) {\r\n <tp-survey-navigation-button\r\n direction=\"back\"\r\n [caption]=\"(questionary().BaseParams.LanguageList | getActiveLanguage: activeLanguage())?.back_button_caption\"\r\n (click)=\"onNavigationButtonClick('back')\"/>\r\n }\r\n </div>\r\n\r\n <ng-container\r\n [ngTemplateOutlet]=\"templateNavigationRef() ?? null\">\r\n </ng-container>\r\n\r\n <div class=\"container-navigation-next\">\r\n @if (nextButtonAvailable()){\r\n <tp-survey-navigation-button\r\n [caption]=\"(questionary().BaseParams.LanguageList | getActiveLanguage: activeLanguage())?.next_button_caption\"\r\n direction=\"next\"\r\n (onClick)=\"onNavigationButtonClick('next')\"/>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n","import {ChangeDetectionStrategy, Component, input, TemplateRef} from '@angular/core';\r\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\r\nimport {ContainerAnswerComponent} from '../answer/container.answer/container.answer.component';\r\nimport {GetActiveLanguagePipe} from '../../pipe/get.active.language/get.active.language.pipe';\r\nimport {NavigationButtonComponent} from '../navigation.button/navigation.button.component';\r\nimport {QuestionCaptionComponent} from '../question.caption/question.caption.component';\r\nimport {UpdateFontSizeDirective} from '../../directive/update.font.size/update.font.size.directive';\r\nimport {TpSurveyTheme} from '../../tp.survey.type';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {IdbBaseParamsLanguage, IdbQuestion} from '../../tp.survey.interface';\r\nimport {TpSurveyLogicService} from '../../core/tp.survey.logic/tp.survey.logic.service';\r\nimport {MultiLangObjectToHtmlPipe} from '../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {SurveyThemeDirective} from '../../directive/survey.theme/survey.theme.directive';\r\n\r\n@Component({\r\n selector: 'tp-survey-question-preview',\r\n standalone: true,\r\n imports: [\r\n AsyncPipe,\r\n ContainerAnswerComponent,\r\n GetActiveLanguagePipe,\r\n NavigationButtonComponent,\r\n QuestionCaptionComponent,\r\n UpdateFontSizeDirective,\r\n NgTemplateOutlet,\r\n MultiLangObjectToHtmlPipe,\r\n SurveyThemeDirective\r\n ],\r\n templateUrl: './survey.question.preview.component.html',\r\n styleUrl: './survey.question.preview.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n TpSurveyLogicService,\r\n ]\r\n})\r\nexport class SurveyQuestionPreviewComponent {\r\n question = input.required<IdbQuestion | null>();\r\n language = input.required<number>();\r\n viewModel = input.required<ViewModel>();\r\n languageList = input.required<Array<IdbBaseParamsLanguage>>();\r\n theme = input<TpSurveyTheme>('cyan-orange-light');\r\n templateNavigationRef = input<TemplateRef<any> | null>();\r\n ViewModel = ViewModel;\r\n}\r\n","<div\r\n class=\"survey-container-main survey-typography\"\r\n [tpSurveyUpdateFontSize]=\"viewModel()\"\r\n [tpSurveyTheme]=\"theme()\"\r\n [class.tp-view-desktop]=\"viewModel() === ViewModel.vmDesktop\"\r\n [class.tp-view-tablet]=\"viewModel() === ViewModel.vmTablet\">\r\n\r\n @if (question(); as question) {\r\n <tp-survey-question-caption\r\n [caption]=\"question.MultiLangCaptions | multiLangObjectToHtml:language()\"\r\n [captionHelp]=\"question.MultiLangCaptionsHelper | multiLangObjectToHtml:language()\"/>\r\n\r\n <tp-survey-container-answer\r\n [question]=\"question\"\r\n [language]=\"language()\"\r\n [developerMode]=\"true\"\r\n [viewModel]=\"viewModel()\"\r\n [languageList]=\"languageList()\"/>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of tp.survey\r\n */\r\n\r\n// export * from './lib/tp.survey.service';\r\n\r\nexport * from './lib/tp.survey.module';\r\nexport * from './lib/component/survey.play/survey.play.component';\r\nexport * from './lib/component/survey.question.preview/survey.question.preview.component';\r\nexport * from './lib/tp.survey.config';\r\nexport * from './lib/tp.survey.const';\r\nexport * from './lib/tp.survey.type';\r\nexport * from './lib/tp.survey.interface';\r\nexport * from './lib/tp.survey.enum';\r\nexport * from './lib/tp.survey.method';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.TpSurveyLogicService","i1","i1.TpSurveyLogicService","i2.TpSurveyInterviewService"],"mappings":"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"}