{"version":3,"file":"articleFilters.749ef3a9d20ef49e806c.js","mappings":"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","sources":["webpack://jcb.com/./src/templates/02-components/article-filters/article-filters.js","webpack://jcb.com/./src/templates/02-components/subcomponents/_filter-section/filter-section.js"],"sourcesContent":["import FilterSection from '../subcomponents/_filter-section/filter-section.js';\r\nimport { pushToDataLayer } from '@/js/analytics/analytics.methods';\r\n\r\nconst mediaQuery = window.matchMedia('(min-width: 61.25em)');\r\nconst filter = document.querySelector('.js-filter');\r\nconst filterSections = filter.querySelectorAll('.js-filter__section');\r\nconst resetFilters = document.querySelector('.js-reset-filters');\r\nconst topTrigger = filter.querySelector('.js-filter__top-trigger');\r\nconst topSection = filter.querySelector('.js-filter__top-item-body');\r\n\r\nconst gaPrefix = document.querySelector('.js-article-listing-ga')?.dataset?.gaFilterPrefix;\r\n\r\nfunction instatiateSections() {\r\n filterSections.forEach((element) => {\r\n const filterSection = new FilterSection({\r\n body: element.querySelector('.js-filter__item-body'),\r\n container: element,\r\n mediaQuery,\r\n trigger: element.querySelector('.js-filter__trigger'),\r\n });\r\n filterSection.init();\r\n });\r\n}\r\n\r\nfunction resetForm() {\r\n const currentUrl = window.location.href;\r\n const urlWithoutParams = currentUrl.split('?')[0];\r\n\r\n const searchParam = new URLSearchParams(window.location.search).get('search');\r\n const newUrl = searchParam\r\n ? `${urlWithoutParams}?search=${searchParam}#articlesResults`\r\n : `${urlWithoutParams}#articlesResults`;\r\n window.history.replaceState({}, document.title, newUrl);\r\n location.reload();\r\n}\r\n\r\nfunction handleTopSection() {\r\n topTrigger.removeAttribute('title');\r\n topTrigger.removeAttribute('disabled');\r\n mediaQuery.matches === false && toggleTopSection(true);\r\n // hide all filters by default on mobile but show on desktop\r\n mediaQuery.matches === true && topSection.removeAttribute('hidden');\r\n\r\n topTrigger.addEventListener('click', () => {\r\n toggleTopSection();\r\n });\r\n}\r\n\r\nfunction toggleTopSection(ignoreGaPush) {\r\n const isExpanded = topTrigger.getAttribute('aria-expanded') === 'true';\r\n topTrigger.setAttribute('aria-expanded', !isExpanded);\r\n isExpanded ? topSection.setAttribute('hidden', '') : topSection.removeAttribute('hidden');\r\n\r\n !ignoreGaPush &&\r\n pushToDataLayer({\r\n event: isExpanded ? `${gaPrefix}_filter_collapse` : `${gaPrefix}_filter_expand`,\r\n });\r\n}\r\n\r\nfunction init() {\r\n if (filter) {\r\n handleTopSection();\r\n instatiateSections();\r\n resetFilters.addEventListener('click', resetForm);\r\n }\r\n}\r\n\r\nexport default init;\r\n","import { pushToDataLayer } from '@/js/analytics/analytics.methods';\r\n\r\nclass FilterSection {\r\n constructor(settings) {\r\n this.body = settings.body;\r\n this.container = settings.container;\r\n this.mediaQuery = settings.mediaQuery;\r\n this.trigger = settings.trigger ? settings.trigger : null;\r\n }\r\n bindEvents() {\r\n this.trigger.addEventListener('click', this.toggleVisibility.bind(this));\r\n }\r\n toggleVisibility(event, ignoreGaPush = false) {\r\n this.body.hidden = !this.body.hidden;\r\n this.trigger.setAttribute('aria-expanded', !this.body.hidden);\r\n\r\n const gaPrefix = document.querySelector('.js-article-listing-ga')?.dataset?.gaFilterPrefix;\r\n const filterName = this.body.querySelector('input').name;\r\n\r\n ignoreGaPush === false &&\r\n pushToDataLayer({\r\n event: this.body.hidden\r\n ? `${gaPrefix}_filter_section_collapse`\r\n : `${gaPrefix}_filter_section_expand`,\r\n filter_name: filterName,\r\n });\r\n }\r\n persistantFilters() {\r\n try {\r\n const url = new URL(window.location.href);\r\n const inputs = this.body.querySelectorAll('.c-field__choice-input');\r\n\r\n inputs.forEach((input) => {\r\n const inputAttr = input.getAttribute('name');\r\n const inputVal = input.value;\r\n const paramsMatch = url.searchParams.getAll(inputAttr);\r\n\r\n paramsMatch.forEach((param) => {\r\n if (param === inputVal) {\r\n input.checked = true;\r\n }\r\n });\r\n });\r\n } catch (err) {\r\n console.error(\"Issues with Parsing URL Parameter's - \" + err);\r\n }\r\n }\r\n init() {\r\n this.trigger.removeAttribute('title');\r\n this.trigger.removeAttribute('disabled');\r\n\r\n if (this.trigger === null) return;\r\n if (this.mediaQuery.matches === false) {\r\n this.toggleVisibility(null, true);\r\n }\r\n this.bindEvents();\r\n this.persistantFilters();\r\n }\r\n}\r\n\r\nexport default FilterSection;\r\n"],"names":["mediaQuery","window","matchMedia","filter","document","querySelector","filterSections","querySelectorAll","resetFilters","topTrigger","topSection","gaPrefix","dataset","gaFilterPrefix","resetForm","urlWithoutParams","location","href","split","searchParam","URLSearchParams","search","get","newUrl","history","replaceState","title","reload","toggleTopSection","ignoreGaPush","isExpanded","getAttribute","setAttribute","removeAttribute","pushToDataLayer","event","matches","addEventListener","forEach","element","FilterSection","body","container","trigger","init","settings","this","toggleVisibility","bind","hidden","filterName","name","filter_name","url","URL","input","inputAttr","inputVal","value","searchParams","getAll","param","checked","err","console","error","bindEvents","persistantFilters"],"sourceRoot":""}