{"version":3,"file":"components-page-filters.ff64b5aa260a42dc841e.js","mappings":"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","sources":["webpack://silverstripe-base/./themes/app/src/components/page-filters.js","webpack://silverstripe-base/./themes/app/src/scripts/common/ajax.js","webpack://silverstripe-base/./themes/app/src/scripts/common/scroll-to.js","webpack://silverstripe-base/./themes/app/src/scripts/common/util.js"],"sourcesContent":["import { on, off, fire } from 'delegated-events'\nimport { createUrl } from '@common/util'\nimport scrollTo from '@common/scroll-to'\nimport ajax from '@common/ajax'\n\nconst selectors = {\n pageFilters: '[data-page-filters]',\n}\n\nconst resetForm = (form) => {\n form.querySelectorAll('input').forEach((input) => (input.value = null))\n form.querySelectorAll('select').forEach((select) => (select.selectedIndex = -1))\n}\n\nconst handleClear = (e) => {\n e.preventDefault()\n\n const filters = document.querySelector(selectors.pageFilters)\n\n filters.querySelectorAll('form').forEach((form) => resetForm(form))\n\n window.history.replaceState({}, '', e.target.href)\n\n fire(document.documentElement, 'pagefilters:update', { filtersEl: filters, url: window.location.href, type: 'clear' })\n}\n\nconst handleFormSubmit = (e) => {\n const form = e.target.closest('form')\n const filters = form.closest(selectors.pageFilters)\n\n // Use the current url and update the query params\n if (form.dataset.submit && form.dataset.submit === 'append') {\n e.preventDefault()\n\n const data = new FormData(form)\n const url = createUrl(window.location, data, true)\n\n window.history.replaceState({}, '', url)\n\n fire(document.documentElement, 'pagefilters:update', {\n filtersEl: filters,\n url: window.location.href,\n type: 'append',\n })\n\n return\n }\n\n scrollTo(filters, 48)\n}\n\nconst handleChange = (e) => {\n const parentForm = e.target.closest('form')\n\n if (parentForm) {\n if (parentForm.requestSubmit) {\n parentForm.requestSubmit()\n } else {\n parentForm.dispatchEvent(new Event('submit'))\n }\n }\n}\n\nconst handleUpdate = async (e) => {\n e.stopPropagation()\n\n const pageContent = document.querySelector('[data-page-content]')\n\n if (pageContent) {\n pageContent.classList.add('is-loading')\n\n const res = await ajax.get(e.detail.url).text()\n\n pageContent.innerHTML = res\n pageContent.classList.remove('is-loading')\n\n fire(document.documentElement, 'pagecontent:replace')\n }\n}\n\nconst setupDropdowns = async (holder) => {\n const dropdowns = holder.querySelectorAll('.js-dropdown')\n\n if (!dropdowns.length) {\n return\n }\n\n const { default: easydropdown } = await import('easydropdown-a11y')\n import('@styles/components/dropdown.css')\n\n dropdowns.forEach((el) => {\n const select = el\n\n if (!select) {\n return\n }\n\n const placeholder = el.querySelector('option[value=\"\"]')\n\n if (placeholder && !placeholder.hasAttribute('data-placeholder')) {\n placeholder.setAttribute('data-placeholder', true)\n }\n\n const opts = {\n behavior: {\n openOnFocus: true,\n maxVisibleItems: 10,\n liveUpdates: true,\n useNativeUiOnMobile: false,\n },\n }\n\n easydropdown(select, opts)\n })\n}\n\nconst setupDatetimeFields = async (holder) => {\n const fields = holder.querySelectorAll('.date-field')\n\n if (!fields.length) {\n return\n }\n\n const { default: flatpickr } = await import('flatpickr')\n import('flatpickr/dist/flatpickr.css')\n import('@styles/components/datepicker.css')\n\n fields.forEach((el) => {\n flatpickr(el, {\n dateFormat: 'Y-m-d',\n altInput: true,\n altFormat: 'M J',\n disableMobile: true,\n maxDate: new Date(),\n monthSelectorType: 'static',\n mode: 'range',\n position: 'below left',\n onChange: (_, __, instance) => {\n if (!instance.isOpen) {\n handleChange({ target: el })\n }\n },\n })\n })\n}\n\nconst setupPageFilters = (el) => {\n setupDropdowns(el)\n setupDatetimeFields(el)\n}\n\nconst setup = (reInit) => {\n const els = document.querySelectorAll(selectors.pageFilters)\n\n const submitArgs = [\n 'submit',\n `${selectors.pageFilters} form:not([data-submit=\"live\"])`,\n handleFormSubmit,\n { capture: true },\n ]\n\n const changeArgs = ['change', `${selectors.pageFilters} select`, handleChange]\n const clearArgs = ['click', '[data-page-filters-clear]', handleClear]\n const updateArgs = ['pagefilters:update', 'html', handleUpdate]\n\n // Sometimes we refresh the html and need to remove the old listeners before adding them again\n if (reInit) {\n off(...submitArgs)\n off(...changeArgs)\n off(...clearArgs)\n off(...updateArgs)\n }\n\n on(...submitArgs)\n on(...changeArgs)\n on(...clearArgs)\n on(...updateArgs)\n\n els.forEach((el) => setupPageFilters(el))\n}\n\nsetup()\n\non('pagefilters:reinit', 'html', () => setup(true))\n","import wretch from 'wretch'\nimport QueryStringAddon from 'wretch/addons/queryString'\n\nwretch.options({\n headers: { 'X-Requested-With': 'XMLHttpRequest' },\n})\n\nexport default wretch().addon(QueryStringAddon)\n","import jump from 'jump.js'\n\nconst getPageOffset = () => {\n let offset = 0\n\n const siteHeader = document.querySelector('.site-header')\n\n if (siteHeader) {\n offset += siteHeader.offsetHeight\n }\n\n return offset\n}\n\nconst scrollTo = (target, additionalOffset = 0) => {\n const pageOffset = getPageOffset() * -1\n\n if (target.dataset.scrollOffset) {\n additionalOffset = parseInt(target.dataset.scrollOffset)\n }\n\n let offset = pageOffset - additionalOffset\n\n return new Promise((resolve) => {\n jump(target, { duration: 600, offset, callback: resolve })\n })\n}\n\nexport default scrollTo\n","export const isTouchDevice = 'ontouchstart' in document.documentElement\n\nexport const isIos =\n /iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)\n\nexport const createUrl = (base, formData = {}, append = false) => {\n let data = formData\n\n if (formData instanceof FormData === false) {\n data = new FormData()\n\n for (const [key, value] of Object.entries(formData)) {\n data.append(key, value)\n }\n }\n\n if (typeof base === 'object') {\n const baseUrl = new URL(base)\n\n if (append) {\n const searchParams = baseUrl.searchParams\n\n const params = {}\n\n for (const [key, value] of data) {\n const normalizedKey = key.replace('[]', '')\n\n if (normalizedKey in params) {\n params[normalizedKey].push(value)\n } else {\n params[normalizedKey] = [value]\n }\n }\n\n for (const [key, value] of Object.entries(params)) {\n const _value = value.filter((x) => x)\n\n if (_value.length === 0) {\n searchParams.delete(key)\n } else {\n searchParams.set(key, _value.join(','))\n }\n }\n\n return baseUrl\n } else {\n const params = new URLSearchParams(data)\n\n return new URL(`${base}?${params}`)\n }\n }\n\n if (typeof base === 'string') {\n const params = new URLSearchParams(formData)\n const url = new URL(`${base}?${params}`)\n\n return url\n }\n}\n\nexport const trackGoogleAnalytics = (event) => {\n if (window.dataLayer) {\n window.dataLayer.push(event)\n }\n}\n"],"names":["selectors","handleClear","e","preventDefault","filters","document","querySelector","querySelectorAll","forEach","form","input","value","select","selectedIndex","resetForm","window","history","replaceState","target","href","fire","documentElement","filtersEl","url","location","type","handleFormSubmit","closest","dataset","submit","data","FormData","createUrl","scrollTo","handleChange","parentForm","requestSubmit","dispatchEvent","Event","handleUpdate","async","stopPropagation","pageContent","classList","add","res","ajax","get","detail","text","innerHTML","remove","setup","reInit","els","submitArgs","capture","changeArgs","clearArgs","updateArgs","off","on","el","dropdowns","holder","length","default","easydropdown","placeholder","hasAttribute","setAttribute","behavior","openOnFocus","maxVisibleItems","liveUpdates","useNativeUiOnMobile","setupDropdowns","fields","flatpickr","dateFormat","altInput","altFormat","disableMobile","maxDate","Date","monthSelectorType","mode","position","onChange","_","__","instance","isOpen","setupDatetimeFields","setupPageFilters","wretch","options","headers","addon","QueryStringAddon","additionalOffset","arguments","undefined","pageOffset","getPageOffset","offset","siteHeader","offsetHeight","scrollOffset","parseInt","Promise","resolve","jump","duration","callback","test","navigator","platform","maxTouchPoints","base","formData","append","key","Object","entries","baseUrl","URL","searchParams","params","normalizedKey","replace","push","_value","filter","x","delete","set","join","URLSearchParams","trackGoogleAnalytics","event","dataLayer"],"sourceRoot":""}