{"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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"}