UNPKG

digitalmarketplace-frontend

Version:

Digital Marketplace Frontend contains assets and components used in Digital Marketplace projects

1 lines 10.5 kB
{"version":3,"file":"question.mjs","sources":["../../../../src/digitalmarketplace/components/question/question.ts"],"sourcesContent":["import { DigitalMarketplaceFrontendComponent } from '../../digitalmarketplace-frontend-component'\n\nenum QuestionType {\n CONTROLLER,\n CONTROLLER_AND_TARGET,\n TARGET\n}\n\nclass QuestionInput {\n question: QuestionQuestion\n $input: JQuery<HTMLInputElement>\n targets: string[]\n\n constructor (question: QuestionQuestion, $input: JQuery<HTMLInputElement>) {\n this.question = question\n this.$input = $input\n\n const targets = this.$input.attr('data-target')\n this.targets = targets ? targets.split(' ') : []\n }\n\n setEventListener () {\n this.$input.on('click', () => {\n this.question.updateTargetQuestionsVisibility()\n })\n }\n\n isChecked () {\n return this.$input.is(':checked')\n }\n}\n\nclass QuestionQuestion {\n questionWatcher: Question\n $question: JQuery<HTMLElement>\n id: string\n questionType: QuestionType\n questionInputs?: QuestionInput[]\n possibleTargetIds?: Set<string>\n targetOf?: string[]\n\n constructor (questionWatcher: Question, $question: JQuery<HTMLElement>, questionType: QuestionType) {\n this.questionWatcher = questionWatcher\n this.$question = $question\n this.id = this.$question.attr('id') as string\n this.questionType = questionType\n\n if (this.questionType === QuestionType.CONTROLLER) {\n this.enableControllerQuestionMethods()\n } else {\n this.enableTargetQuestionMethods()\n }\n }\n\n enableControllerQuestionMethods () {\n this.questionInputs = this.$question.find('input').get().map((inputElement) => new QuestionInput(this, $(inputElement)))\n\n this.possibleTargetIds = new Set(this.questionInputs.map((questionInput) => questionInput.targets).flat())\n }\n\n enableTargetQuestionMethods () {\n this.targetOf = []\n }\n\n isVisible () {\n return !this.$question.hasClass('govuk-visually-hidden')\n }\n\n currentTargetIds () {\n let targets: string[]\n\n if (this.isVisible() && this.questionInputs) {\n targets = this.questionInputs.filter((questionInput) => questionInput.isChecked()).map((questionInput) => questionInput.targets).flat()\n } else {\n targets = []\n }\n\n return new Set(targets)\n }\n\n updateTargetQuestionsVisibility () {\n this.questionWatcher.updateTargetQuestionsVisibility(this.possibleTargetIds)\n }\n\n appendTargetOf (questionId: string) {\n if (this.targetOf !== undefined) {\n this.targetOf.push(questionId)\n }\n }\n\n toggleVisibility (isShown: boolean) {\n this.$question.toggleClass('govuk-visually-hidden', !isShown)\n this.$question.attr('aria-hidden', (!isShown).toString())\n if (isShown) {\n this.$question.removeAttr('hidden')\n } else {\n this.$question.attr('hidden', '')\n }\n }\n}\n\nclass Question implements DigitalMarketplaceFrontendComponent {\n static moduleName = 'dm-question'\n questions: Record<string, QuestionQuestion>\n\n constructor () {\n this.questions = {}\n\n $(`[data-module=\"${Question.moduleName}\"]`).each((_index, question) => {\n this.push(new QuestionQuestion(this, $(question), QuestionType.CONTROLLER))\n })\n\n for (const [questionId, question] of Object.entries(this.questions)) {\n for (const questionTargetId of question.possibleTargetIds || []) {\n if (questionTargetId in this.questions) {\n if (this.questions[questionTargetId].questionType === QuestionType.CONTROLLER) {\n this.questions[questionTargetId].questionType = QuestionType.CONTROLLER_AND_TARGET\n this.questions[questionTargetId].enableTargetQuestionMethods()\n }\n } else {\n this.push(new QuestionQuestion(this, $(`#${questionTargetId}`), QuestionType.TARGET))\n }\n\n this.questions[questionTargetId].appendTargetOf(questionId)\n }\n }\n }\n\n init () {\n for (const question of Object.values(this.questions)) {\n if (question.questionType < QuestionType.TARGET) {\n for (const questionInput of question.questionInputs || []) {\n questionInput.setEventListener()\n }\n if (question.questionType === QuestionType.CONTROLLER) {\n this.updateTargetQuestionsVisibility(question.possibleTargetIds)\n }\n }\n }\n }\n\n push (question: QuestionQuestion) {\n this.questions[question.id] = question\n }\n\n updateTargetQuestionsVisibility (possibleTargetIds?: Set<string>, isShown?: boolean) {\n for (const possibleTargetId of possibleTargetIds || []) {\n const targetQuestion = this.questions[possibleTargetId]\n let questionIsShown\n\n if (isShown === undefined) {\n const controllerQuestions = targetQuestion.targetOf?.map((questionId) => this.questions[questionId])\n\n const targetsToShow = new Set(controllerQuestions?.map((controllerQuestion) => Array.from(controllerQuestion.currentTargetIds())).flat())\n\n questionIsShown = targetsToShow.has(possibleTargetId)\n } else {\n questionIsShown = isShown\n }\n\n targetQuestion.toggleVisibility(questionIsShown)\n\n if (targetQuestion.questionType === QuestionType.CONTROLLER_AND_TARGET) {\n if (questionIsShown) {\n this.updateTargetQuestionsVisibility(targetQuestion.possibleTargetIds)\n } else {\n this.updateTargetQuestionsVisibility(targetQuestion.possibleTargetIds, false)\n }\n }\n }\n }\n}\n\nexport { Question }\n"],"names":[],"mappings":"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"}