{"version":3,"file":"app-9024fe65.xxxxxxxx.bundle.js","mappings":"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","sources":["webpack://iadviser/./src/components/qce/qce.html","webpack://iadviser/./src/components/qce/qce.ts"],"sourcesContent":["// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","import styles from '../../styles/qce.css';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { log } from 'resources/services/log-service';\r\nimport { customElement, autoinject, TaskQueue, bindable, DOM, getContextFor } from 'aurelia-framework';\r\nimport { IQceResponse, IQceQuestion, IQceAnswerOption, IQceResponseGroup } from './qce-typings';\r\nimport { generateGuidString } from 'resources/utilities/insecure-guid';\r\nimport { FeatureFlagService } from 'resources/plugins/feature-flags/feature-flags-service';\r\nimport { FeatureFlag } from 'feature-flags';\r\n\r\n@customElement('qce')\r\n@autoinject()\r\nexport class Qce {\r\n public styles = styles;\r\n\r\n @bindable() model: IQceResponse = {\r\n groups: [],\r\n guid: null,\r\n validationErrors: []\r\n };\r\n\r\n @bindable additional: any = {};\r\n\r\n @bindable() viewMode = false;\r\n @bindable() autofocus = false;\r\n @bindable() debug = false;\r\n\r\n private context = this;\r\n private step;\r\n private selectedQuestion;\r\n private showAlertTextModal;\r\n\r\n constructor(private taskQueue: TaskQueue, private element: Element, private ff: FeatureFlagService) {\r\n\r\n }\r\n\r\n attached() {\r\n this.element.classList.add('qce-rendered');\r\n }\r\n\r\n bind(bindingContext, overrideContext) {\r\n\r\n this.step = getContextFor('isDirty', { bindingContext, overrideContext }, 0);\r\n\r\n if (this.step) {\r\n this.step.isDirty = false;\r\n }\r\n\r\n this.generateGuids();\r\n\r\n if (this.autofocus) {\r\n this.focusFirstEditableInput();\r\n }\r\n\r\n if (this.ff.enabled(FeatureFlag.qceDebug)) {\r\n this.debug = true;\r\n }\r\n\r\n this.modelChanged();\r\n\r\n log.info(`QCE component bound: `, this.model);\r\n }\r\n\r\n generateGuids() {\r\n if (this.model && this.model.groups && this.model.groups.length) {\r\n this.model.groups = this.model.groups.map(group => {\r\n if (group.guid === '00000000-0000-0000-0000-000000000000') {\r\n group.guid = generateGuidString();\r\n }\r\n\r\n group.questions = group.questions.map(question => {\r\n if (question.guid === '00000000-0000-0000-0000-000000000000') {\r\n question.guid = generateGuidString();\r\n }\r\n\r\n if (question.currentResponse && question.currentResponse.guid === '00000000-0000-0000-0000-000000000000') {\r\n question.currentResponse.guid = generateGuidString();\r\n }\r\n\r\n if (question.currentResponse && question.currentResponse.gridResponses) {\r\n question.currentResponse.gridResponses = question.currentResponse.gridResponses.map(response => {\r\n if (response.Guid === '00000000-0000-0000-0000-000000000000') {\r\n response.Guid = generateGuidString();\r\n }\r\n\r\n return response;\r\n });\r\n }\r\n\r\n return question;\r\n });\r\n return group;\r\n });\r\n }\r\n }\r\n\r\n modelChanged() {\r\n if (this.model) {\r\n log.info(`QCE: modelChanged`, this.model);\r\n\r\n this.generateGuids();\r\n\r\n for (const group of this.model.groups) {\r\n this.recalculateWorkflows(group.sequenceNo);\r\n }\r\n }\r\n }\r\n\r\n fieldChanged(question: IQceQuestion, group: IQceResponseGroup) {\r\n this.taskQueue.queueTask(() => {\r\n const currentResponse = question.currentResponse;\r\n const selectedValue = (question as any)._selectedValue as IQceAnswerOption;\r\n\r\n if (selectedValue) {\r\n currentResponse.answerId = selectedValue.answerId;\r\n } else {\r\n currentResponse.answerId = null;\r\n }\r\n\r\n if (question.hasError) {\r\n question.hasError = false;\r\n }\r\n\r\n log.info(`QCE: fieldChanged`, question);\r\n\r\n this.recalculateWorkflowsOnChange(question);\r\n\r\n // No response present, set the flag to false\r\n if (currentResponse.responseTypeId === -1) {\r\n currentResponse.responseValue = null;\r\n currentResponse.responsePresent = false;\r\n currentResponse.answerId = null;\r\n } else {\r\n question.currentResponse.responsePresent = true;\r\n }\r\n\r\n if (this.step) {\r\n this.step.isDirty = true;\r\n }\r\n\r\n const changeEvent = DOM.createCustomEvent('change', {\r\n bubbles: true,\r\n cancelable: true,\r\n detail: { question }\r\n });\r\n\r\n this.element.dispatchEvent(changeEvent);\r\n });\r\n }\r\n\r\n recalculateWorkflows(groupSequenceNo: number) {\r\n const group = this.model.groups.find(g => g.sequenceNo === groupSequenceNo);\r\n const questions = group.questions;\r\n\r\n if (questions) {\r\n for (const question of questions) {\r\n\r\n if (!question.currentResponse.responseTypeId) {\r\n question.currentResponse.responseTypeId = -1;\r\n }\r\n\r\n if (question.disabledByQuestionFlowFlag) {\r\n continue;\r\n }\r\n\r\n let currentWorkflowItem;\r\n\r\n if (question.currentResponse.responseTypeId === 600000000) {\r\n currentWorkflowItem = question.questionFlow.find(q => q.answerId === question.currentResponse.answerId);\r\n } else {\r\n currentWorkflowItem = question.questionFlow.find(q => q.responseTypeId === question.currentResponse.responseTypeId);\r\n }\r\n\r\n if (currentWorkflowItem) {\r\n for (const disabledQuestion of currentWorkflowItem.disabledQuestions) {\r\n const questionToDisable = this.findQuestionByIdInModel(disabledQuestion.disabledQuestionId);\r\n\r\n if (questionToDisable) {\r\n questionToDisable.disabledByQuestionFlowFlag = true;\r\n }\r\n }\r\n\r\n if (currentWorkflowItem.nextQuestionId !== null) {\r\n const nextQuestion = this.findQuestionByIdInModel(currentWorkflowItem.nextQuestionId);\r\n\r\n if (nextQuestion) {\r\n nextQuestion.disabledByQuestionFlowFlag = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.autofocus) {\r\n this.focusFirstEditableInput();\r\n }\r\n }\r\n\r\n /**\r\n * Traverses all groups and questions looking for that magic ID\r\n * is it out there? Let's find it together. You and I, on a journey\r\n * to the center of the collection model.\r\n *\r\n * @param questionId\r\n */\r\n findQuestionByIdInModel(questionId: number): IQceQuestion | null {\r\n let finalQuestion: IQceQuestion = null;\r\n\r\n this.model.groups.forEach((group) => {\r\n if (group && group.questions) {\r\n group.questions.forEach((question) => {\r\n if (question.questionId === questionId) {\r\n finalQuestion = question;\r\n }\r\n });\r\n }\r\n });\r\n\r\n return finalQuestion;\r\n }\r\n\r\n recalculateWorkflowsOnChange(changedQuestion: IQceQuestion) {\r\n if (this.model) {\r\n for (const group of this.model.groups) {\r\n const questions = group.questions.slice(group.questions.findIndex(q => q.questionId === changedQuestion.questionId));\r\n\r\n for (const question of questions) {\r\n if (question.disabledByQuestionFlowFlag) {\r\n continue;\r\n }\r\n\r\n if (!question.currentResponse.responseTypeId) {\r\n question.currentResponse.responseTypeId = -1;\r\n }\r\n\r\n let currentWorkflowItem;\r\n\r\n if (question.currentResponse.responseTypeId === 600000000) {\r\n currentWorkflowItem = question.questionFlow.find(q => q.answerId === question.currentResponse.answerId);\r\n } else {\r\n currentWorkflowItem = question.questionFlow.find(q => q.responseTypeId === question.currentResponse.responseTypeId);\r\n }\r\n\r\n if (currentWorkflowItem) {\r\n for (const disabledQuestion of currentWorkflowItem.disabledQuestions) {\r\n const questionToDisable = this.findQuestionByIdInModel(disabledQuestion.disabledQuestionId);\r\n\r\n if (questionToDisable) {\r\n questionToDisable.disabledByQuestionFlowFlag = true;\r\n }\r\n }\r\n\r\n if (currentWorkflowItem.nextQuestionId !== null) {\r\n const nextQuestion = this.findQuestionByIdInModel(currentWorkflowItem.nextQuestionId);\r\n\r\n if (nextQuestion) {\r\n nextQuestion.disabledByQuestionFlowFlag = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.autofocus) {\r\n this.focusFirstEditableInput();\r\n }\r\n }\r\n\r\n focusFirstEditableInput() {\r\n for (const group of this.model.groups) {\r\n let breakGroupLoop = false;\r\n\r\n if (group) {\r\n for (const question of group.questions) {\r\n // Question is editable\r\n if (!question.readOnlyFlag && !question.disabledByQuestionFlowFlag) {\r\n question.$focused = true;\r\n breakGroupLoop = true;\r\n break;\r\n }\r\n }\r\n\r\n if (breakGroupLoop) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n showAlertText(question) {\r\n this.selectedQuestion = question;\r\n this.showAlertTextModal = true;\r\n }\r\n}\r\n"],"names":["taskQueue","element","ff","styles","model","groups","guid","validationErrors","additional","viewMode","autofocus","debug","context","this","attached","classList","add","bind","bindingContext","overrideContext","step","getContextFor","isDirty","generateGuids","focusFirstEditableInput","enabled","modelChanged","length","map","group","questions","question","currentResponse","gridResponses","response","Guid","recalculateWorkflows","sequenceNo","fieldChanged","queueTask","selectedValue","_selectedValue","answerId","hasError","recalculateWorkflowsOnChange","responseTypeId","responseValue","responsePresent","changeEvent","DOM","bubbles","cancelable","detail","dispatchEvent","groupSequenceNo","find","g","disabledByQuestionFlowFlag","currentWorkflowItem","questionFlow","q","disabledQuestions","disabledQuestion","questionToDisable","findQuestionByIdInModel","disabledQuestionId","nextQuestionId","nextQuestion","questionId","finalQuestion","forEach","changedQuestion","slice","findIndex","breakGroupLoop","readOnlyFlag","$focused","showAlertText","selectedQuestion","showAlertTextModal","bindable","customElement","autoinject","TaskQueue","Element","Qce"],"sourceRoot":""}