{"version":3,"sources":["priory.filterGroup.js"],"names":["filterGroup","scrollToTop","document","querySelector","scrollIntoView","behavior","block","refreshLocationArea","el","selected","input","select","radio","closest","classList","add","hasAttribute","inputField","radioInput","labelField","value","innerHTML","remove","length","dataset","replace","refreshCheckboxesUi","checkboxes","Array","from","querySelectorAll","numSelected","filter","x","checked","filterZeroSelected","filterSomeSelected","refreshRadiosUi","selectedRadio","handleCheckboxes","allCheckbox","forEach","checkbox","addEventListener","allCheckboxInput","handleRadios","handleMixed","submitButton","e","keyCode","dispatchEvent","Event","initBlock","content","toggle","refreshUi","scope","ControlBinders","register"],"mappings":"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","sourcesContent":["const filterGroup = (() => {\r\n const scrollToTop = () => {\r\n document.querySelector('.search-results-block').scrollIntoView({ behavior: \"smooth\", block: \"start\" });\r\n }\r\n \r\n const initBlock = el => {\r\n const content = el.querySelector('[data-filter-group-content]');\r\n el.querySelectorAll('[data-filter-group-toggle]').forEach(filterGroup => {\r\n filterGroup.addEventListener('click', () => {\r\n el.classList.toggle('filter-group--closed');\r\n content.classList.toggle('filter-group__wrapper--open');\r\n });\r\n });\r\n if (el.dataset.filterGroup === \"checkboxes\"){\r\n handleCheckboxes(el);\r\n }\r\n if (el.dataset.filterGroup === \"radios\"){\r\n handleRadios(el);\r\n }\r\n if (el.dataset.filterGroup === \"mixed\"){\r\n handleMixed(el);\r\n }\r\n };\r\n\r\n const refreshLocationArea = el => { \r\n const selected = el.querySelector('[data-filter-selected]');\r\n const input = el.querySelector('[data-radio-input]');\r\n const select = el.querySelector('[data-radio-select]');\r\n const radio = el.querySelector('[data-radio] input:checked').closest(\"[data-radio]\");\r\n \r\n input.classList.add('form-group--hidden');\r\n select.classList.add('form-group--hidden');\r\n if (radio.hasAttribute('data-has-input')){\r\n const inputField = input.querySelector('input');\r\n const radioInput = radio.querySelector('input');\r\n const labelField = el.querySelector('label[for=\"townPostcode\"]');\r\n if (radioInput.value === 'postcode'){\r\n labelField.innerHTML = 'Postcode';\r\n } else {\r\n labelField.innerHTML = 'Town or city';\r\n }\r\n input.classList.remove('form-group--hidden');\r\n if (inputField.value.length > 0){\r\n selected.innerHTML = radio.dataset.radio.replace('###', inputField.value);\r\n } else {\r\n selected.innerHTML = radio.dataset.radio.replace('(###)', \"\");\r\n } \r\n }\r\n else {\r\n selected.innerHTML = radio.dataset.radio;\r\n }\r\n \r\n if (radio.hasAttribute('data-has-select')){\r\n select.classList.remove('form-group--hidden');\r\n }\r\n }\r\n\r\n const refreshCheckboxesUi = el => {\r\n const selected = el.querySelector('[data-filter-selected]');\r\n const checkboxes = Array.from(el.querySelectorAll('[data-checkbox]'));\r\n const numSelected = checkboxes.filter(x => x.querySelector(\"input\").checked).length;\r\n \r\n if (!numSelected && selected.dataset.filterZeroSelected) {\r\n selected.innerHTML = selected.dataset.filterZeroSelected;\r\n }\r\n else if (numSelected && selected.dataset.filterSomeSelected) {\r\n selected.innerHTML = selected.dataset.filterSomeSelected;\r\n }\r\n else if (el.querySelector(\"[data-checkbox-all] input:checked\")) {\r\n selected.innerHTML = el.querySelector(\"[data-checkbox-all] .flag-wrap__flag__text\").innerHTML;\r\n } \r\n else {\r\n selected.innerHTML = `${checkboxes.filter(x => x.querySelector(\"input\").checked).length} selected`; \r\n }\r\n }\r\n\r\n const refreshRadiosUi = el => {\r\n const selected = el.querySelector('[data-filter-selected]');\r\n const selectedRadio = el.querySelector('[data-radio] input:checked');\r\n\r\n selected.innerHTML = selectedRadio ? selectedRadio.closest(\"[data-radio]\").dataset.radio : \"Any\";\r\n }\r\n\r\n const refreshUi = () => {\r\n document.querySelectorAll(\"[data-filter-group]\")\r\n .forEach(scope => {\r\n if (scope.dataset.filterGroup === \"checkboxes\"){\r\n refreshCheckboxesUi(scope);\r\n }\r\n if (scope.dataset.filterGroup === \"radios\"){\r\n refreshRadiosUi(scope);\r\n }\r\n if (scope.dataset.filterGroup === \"mixed\"){\r\n refreshLocationArea(scope);\r\n } \r\n });\r\n }\r\n\r\n const handleCheckboxes = el => {\r\n const checkboxes = Array.from(el.querySelectorAll('[data-checkbox]'));\r\n const allCheckbox = el.querySelector('[data-checkbox-all]');\r\n \r\n checkboxes.forEach(checkbox => {\r\n const input = checkbox.querySelector('input');\r\n input.addEventListener('input', () => {\r\n if (allCheckbox) {\r\n allCheckbox.querySelector(\"input\").checked = checkboxes.filter(x => x.querySelector(\"input\").checked).length === checkboxes.length;\r\n }\r\n\r\n refreshCheckboxesUi(el);\r\n scrollToTop();\r\n });\r\n });\r\n \r\n if (allCheckbox){\r\n const allCheckboxInput = allCheckbox.querySelector('input');\r\n allCheckboxInput.addEventListener('input', () => {\r\n checkboxes.forEach(x => x.querySelector(\"input\").checked = allCheckboxInput.checked);\r\n\r\n refreshCheckboxesUi(el);\r\n scrollToTop();\r\n }); \r\n }\r\n };\r\n\r\n const handleRadios = el => {\r\n const radios = el.querySelectorAll('[data-radio]');\r\n radios.forEach(radio => {\r\n const input = radio.querySelector('input');\r\n input.addEventListener('input', () => {\r\n refreshRadiosUi(el);\r\n scrollToTop();\r\n });\r\n });\r\n };\r\n \r\n const handleMixed = el => {\r\n el.querySelectorAll('[data-radio]').forEach(radio => {\r\n radio.addEventListener('input', () => {\r\n refreshLocationArea(el);\r\n });\r\n });\r\n\r\n const submitButton = el.querySelector(\"[data-filter-text-submit]\");\r\n const input = el.querySelector('[data-radio-input]');\r\n \r\n if (input && submitButton) {\r\n const inputField = input.querySelector('input');\r\n\r\n input.addEventListener('input', () => {\r\n refreshLocationArea(el);\r\n });\r\n inputField.addEventListener(\"keyup\", e => {\r\n if (e.keyCode === 13) {\r\n submitButton.dispatchEvent(new Event(\"click\"));\r\n }\r\n });\r\n }\r\n };\r\n \r\n return {\r\n initBlock,\r\n refreshUi\r\n };\r\n})();\r\nControlBinders.register(`[data-filter-group]`, el => filterGroup.initBlock(el));"],"file":"priory.filterGroup-min.js"}