digitalmarketplace-frontend
Version:
Digital Marketplace Frontend contains assets and components used in Digital Marketplace projects
1 lines • 14 kB
Source Map (JSON)
{"version":3,"file":"question-list.bundle.mjs","sources":["../../../../src/digitalmarketplace/components/question-list/question-list.ts"],"sourcesContent":["import { DigitalMarketplaceFrontendComponent } from '../../digitalmarketplace-frontend-component'\n\nclass QuestionListRowInput {\n $input: JQuery<HTMLInputElement>\n $label: JQuery<HTMLLabelElement>\n $labelCounter: JQuery<HTMLElement>\n $prefixText: JQuery<HTMLElement>\n\n constructor ($row: JQuery<HTMLElement>) {\n this.$input = $row.find<HTMLInputElement>('.dm-list__item-input')\n this.$label = $row.find<HTMLLabelElement>('.govuk-label')\n this.$labelCounter = this.$label.find('.dm-list__item-label-counter')\n this.$prefixText = $row.find('.govuk-input__prefix')\n }\n\n getValue () {\n return this.$input.val()\n }\n\n clearValue () {\n this.$input.val('')\n this.$input.attr('value', '')\n }\n\n updateIndex (newIndex: number) {\n const newId = `input-${this.$input.attr('name')}-${newIndex}`\n\n this.$label.attr('for', newId)\n this.$labelCounter.text(newIndex + 1)\n\n this.$prefixText.text(`${newIndex + 1}.`)\n\n this.$input.attr('id', newId)\n }\n}\n\nclass QuestionListRowRemoveButton {\n answerListRow: QuestionListRow\n $button: JQuery<HTMLButtonElement>\n $removeButtonCounter: JQuery<HTMLElement>\n\n constructor (answerListRow: QuestionListRow, $row: JQuery<HTMLElement>) {\n this.answerListRow = answerListRow\n this.$button = $row.find<HTMLButtonElement>('.dm-list__item-remove')\n this.$removeButtonCounter = this.$button.find('.dm-list__item-remove-counter')\n }\n\n init () {\n this.toggleVisibility(true)\n\n this.$button.on('click', () => {\n this.answerListRow.removeRow()\n })\n }\n\n toggleVisibility (isShown: boolean) {\n this.$button.toggleClass('govuk-visually-hidden', !isShown)\n }\n\n updateIndex (newIndex: number) {\n this.$removeButtonCounter.text(newIndex + 1)\n }\n}\n\nclass QuestionListRow {\n answerList: QuestionList\n index: number\n $row: JQuery<HTMLElement>\n answerListRowInput: QuestionListRowInput\n answerListRowRemoveButton: QuestionListRowRemoveButton\n\n constructor (answerList: QuestionList, index: number, $row: JQuery<HTMLElement>) {\n this.answerList = answerList\n this.index = index\n this.$row = $row\n this.answerListRowInput = new QuestionListRowInput($row)\n this.answerListRowRemoveButton = new QuestionListRowRemoveButton(this, $row)\n }\n\n init () {\n this.answerListRowRemoveButton.init()\n }\n\n updateIndex (newIndex: number) {\n this.index = newIndex\n this.answerListRowInput.updateIndex(newIndex)\n this.answerListRowRemoveButton.updateIndex(newIndex)\n }\n\n removeRow () {\n this.answerList.removeRow(this.index)\n this.deleteRow()\n }\n\n deleteRow () {\n this.$row.remove()\n }\n\n toggleRemoveButtonVisibility (isShown: boolean) {\n this.answerListRowRemoveButton.toggleVisibility(isShown)\n }\n\n inputValue () {\n return this.answerListRowInput.getValue()\n }\n}\n\nclass QuestionListAddButton {\n answerList: QuestionList\n $button: JQuery<HTMLButtonElement>\n $buttonCounter: JQuery<HTMLElement>\n\n constructor (answerList: QuestionList, $button: JQuery<HTMLButtonElement>) {\n this.answerList = answerList\n this.$button = $button\n this.$buttonCounter = $button.find('.dm-list__item-add-counter')\n }\n\n init (numberOfRows: number) {\n this.$button.on('click', () => {\n this.answerList.addRow()\n })\n\n this.updateButtonText(this.answerList.maxNumberOfItems - numberOfRows)\n }\n\n updateButtonText (numberRemaining: number) {\n this.$buttonCounter.text(numberRemaining)\n }\n\n toggleVisibility (isShown: boolean) {\n this.$button.toggleClass('govuk-visually-hidden', !isShown)\n }\n}\n\nclass QuestionList implements DigitalMarketplaceFrontendComponent {\n static moduleName = 'dm-question-list'\n $answerList: JQuery<HTMLElement>\n $answerListItems: JQuery<HTMLElement>\n answerListRows: QuestionListRow[]\n answerListAddButton: QuestionListAddButton\n maxNumberOfItems: number\n numberOfItemsShownAsDefault: number\n\n constructor ($answerList: JQuery<HTMLElement>) {\n this.$answerList = $answerList\n this.maxNumberOfItems = this.$answerList.data('maxNumberOfItems')\n this.numberOfItemsShownAsDefault = this.$answerList.data('numberOfItemsShownAsDefault')\n this.$answerListItems = this.$answerList.find('.dm-list__items')\n this.answerListRows = this.$answerList.find('.dm-list__item').get().map((row, index) => new QuestionListRow(this, index, $(row)))\n this.answerListAddButton = new QuestionListAddButton(this, this.$answerList.find<HTMLButtonElement>('.dm-list__item-add'))\n }\n\n init () {\n const rowValues = this.answerListRows.map((answerListRow) => answerListRow.inputValue())\n let indexToDeleteFrom = 1\n\n if (rowValues.every((rowValue) => !rowValue)) {\n indexToDeleteFrom = this.numberOfItemsShownAsDefault\n } else {\n rowValues.forEach((rowValue, index) => {\n if (rowValue) {\n indexToDeleteFrom = index + 1\n }\n })\n }\n\n if (indexToDeleteFrom >= 0) {\n this.answerListRows.slice(indexToDeleteFrom).forEach((answerListRow) => answerListRow.deleteRow())\n this.answerListRows.splice(indexToDeleteFrom)\n }\n\n this.answerListAddButton.init(this.answerListRows.length)\n this.answerListRows.forEach((answerListRow) => answerListRow.init())\n\n this.updateIfMinRows()\n this.updateAnswerButton()\n }\n\n removeRow (indexToRemove: number) {\n this.answerListRows.splice(indexToRemove, 1)\n\n this.answerListRows.slice(indexToRemove).forEach((answerListRow, index) => {\n answerListRow.updateIndex(indexToRemove + index)\n })\n\n this.updateIfMinRows()\n this.updateAnswerButton()\n this.focusOnRow(indexToRemove)\n }\n\n addRow () {\n const numberOfRows = this.answerListRows.length\n\n if (numberOfRows < this.maxNumberOfItems) {\n const $newRow = this.answerListRows[0].$row.clone()\n const answerListRow = new QuestionListRow(this, numberOfRows, $newRow)\n\n answerListRow.updateIndex(numberOfRows)\n answerListRow.answerListRowInput.clearValue()\n\n this.answerListRows.push(answerListRow)\n this.$answerListItems.append($newRow)\n this.answerListRows[numberOfRows].init()\n\n this.updateIfMinRows()\n this.updateAnswerButton()\n this.focusOnRow(numberOfRows)\n }\n }\n\n updateIfMinRows () {\n if (this.answerListRows.length === 1) {\n this.answerListRows[0].toggleRemoveButtonVisibility(false)\n } else {\n this.answerListRows[0].toggleRemoveButtonVisibility(true)\n }\n }\n\n updateAnswerButton () {\n if (this.answerListRows.length === this.maxNumberOfItems) {\n this.answerListAddButton.toggleVisibility(false)\n } else {\n this.answerListAddButton.toggleVisibility(true)\n this.answerListAddButton.updateButtonText(this.maxNumberOfItems - this.answerListRows.length)\n }\n }\n\n focusOnRow (targetIndexToFocus: number) {\n const numberOfRows = this.answerListRows.length\n let indexToFocus = targetIndexToFocus\n\n if (targetIndexToFocus >= numberOfRows) {\n indexToFocus = numberOfRows - 1\n }\n\n this.answerListRows[indexToFocus].answerListRowInput.$input.focus()\n }\n}\n\nexport { QuestionList }\n"],"names":[],"mappings":"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"}