UNPKG

digitalmarketplace-frontend

Version:

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

1 lines 8.94 kB
{"version":3,"file":"question-checkbox-tree.bundle.mjs","sources":["../../../../src/digitalmarketplace/components/question-checkbox-tree/question-checkbox-tree.ts"],"sourcesContent":["import { DigitalMarketplaceFrontendComponent } from '../../digitalmarketplace-frontend-component'\n\nclass QuestionCheckboxTreeSummary {\n $totalSelected: JQuery<HTMLElement>\n $totalSelectedText: JQuery<HTMLElement>\n itemNameSingular: string\n itemNamePlural: string\n\n constructor ($summary: JQuery<HTMLElement>, itemNameSingular: string, itemNamePlural: string) {\n this.$totalSelected = $summary.find('.dm-checkbox-tree__summary-total-selected')\n this.$totalSelectedText = $summary.find('.dm-checkbox-tree__summary-total-selected-text')\n this.itemNameSingular = itemNameSingular\n this.itemNamePlural = itemNamePlural\n }\n\n updateSelectedCount (numberSelected: number) {\n this.$totalSelected.text(numberSelected)\n\n if (numberSelected === 1) {\n this.$totalSelectedText.text(`${this.itemNameSingular} selected.`)\n } else {\n this.$totalSelectedText.text(`${this.itemNamePlural} selected.`)\n }\n }\n}\n\nclass QuestionCheckboxTreeSection {\n checkboxTree: QuestionCheckboxTree\n $section: JQuery<HTMLElement>\n $accordionButton: JQuery<HTMLButtonElement>\n checkboxes: JQuery<HTMLInputElement>[]\n $summary: JQuery<HTMLElement>\n\n constructor (checkboxTree: QuestionCheckboxTree, $section: JQuery<HTMLElement>) {\n this.checkboxTree = checkboxTree\n this.$section = $section\n this.$accordionButton = this.$section.find<HTMLButtonElement>('button.govuk-accordion__section-button')\n this.checkboxes = this.$section.find<HTMLInputElement>('.govuk-checkboxes__input').get().map((element) => $(element))\n this.$summary = this.$section.find('.dm-checkbox-tree__options-number-selected')\n }\n\n init () {\n this.openSectionIfSelected()\n\n this.checkboxes.forEach(($checkbox) => {\n $checkbox.on('click', () => {\n this.checkboxTree.updateTotals($checkbox.val(), $checkbox.is(':checked'))\n })\n })\n }\n\n private selectedItems () {\n return this.checkboxes.filter(($checkbox) => $checkbox.is(':checked'))\n }\n\n private countSelected () {\n return this.selectedItems().length\n }\n\n private openSectionIfSelected () {\n if (this.$accordionButton.length && this.countSelected() > 0 && this.$accordionButton.attr('aria-expanded') === 'false') {\n this.$accordionButton.trigger('click')\n }\n }\n\n slectedItemValues () {\n return this.selectedItems().map(($checkbox) => $checkbox.val())\n }\n\n updateSelectedCount () {\n if (this.$summary.length) {\n const numberSelected = this.countSelected()\n\n if (numberSelected > 0) {\n this.$summary.text(`, ${numberSelected} selected`)\n } else {\n this.$summary.text('')\n }\n }\n }\n\n toggleCheckbox (value: string | undefined, isChecked: boolean) {\n this.checkboxes.forEach(($checkbox) => {\n if ($checkbox.val() === value) {\n $checkbox.prop('checked', isChecked)\n }\n })\n }\n}\n\nclass QuestionCheckboxTree implements DigitalMarketplaceFrontendComponent {\n static moduleName = 'dm-question-checkbox-tree'\n $checkboxTree: JQuery<HTMLElement>\n checkboxTreeSummary: QuestionCheckboxTreeSummary\n checkboxTreeSections: QuestionCheckboxTreeSection[]\n\n constructor ($checkboxTree: JQuery<HTMLElement>) {\n this.$checkboxTree = $checkboxTree\n this.checkboxTreeSummary = new QuestionCheckboxTreeSummary(this.$checkboxTree.find('.dm-checkbox-tree__summary'), this.$checkboxTree.data('itemNameSingular'), this.$checkboxTree.data('itemNamePlural'))\n\n const checkboxTreeSections = this.$checkboxTree.find('.govuk-accordion__section').get().map((element) => new QuestionCheckboxTreeSection(this, $(element)))\n\n if (checkboxTreeSections.length) {\n this.checkboxTreeSections = checkboxTreeSections\n } else {\n this.checkboxTreeSections = [new QuestionCheckboxTreeSection(this, $('.dm-checkbox-tree__options'))]\n }\n }\n\n init () {\n this.checkboxTreeSections.forEach((checkboxTreeSection) => checkboxTreeSection.init())\n\n this.updateCheckboxTreeSummaryCount()\n this.updateCheckboxTreeSectionSelectedCounts()\n }\n\n private countSelected () {\n return new Set(this.checkboxTreeSections.map((checkboxTreeSection) => checkboxTreeSection.slectedItemValues()).flat()).size\n }\n\n private updateCheckboxTreeSummaryCount () {\n this.checkboxTreeSummary.updateSelectedCount(this.countSelected())\n }\n\n private updateCheckboxTreeSectionSelectedCounts () {\n this.checkboxTreeSections.forEach((checkboxTreeSection) => checkboxTreeSection.updateSelectedCount())\n }\n\n updateTotals (value: string | undefined, isChecked: boolean) {\n this.checkboxTreeSections.forEach((checkboxTreeSection) => checkboxTreeSection.toggleCheckbox(value, isChecked))\n\n this.updateCheckboxTreeSummaryCount()\n this.updateCheckboxTreeSectionSelectedCounts()\n }\n}\n\nexport { QuestionCheckboxTree }\n"],"names":[],"mappings":"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"}