{"version":3,"file":"sections-calendar.9d8dcc904f7f7b3cf985.js","mappings":"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","sources":["webpack://silverstripe-base/./themes/app/src/scripts/common/ajax.js","webpack://silverstripe-base/./themes/app/src/sections/calendar.js"],"sourcesContent":["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 { on } from 'delegated-events'\nimport qs from 'qs'\nimport flatpickr from 'flatpickr'\nimport 'flatpickr/dist/flatpickr.css'\nimport '@styles/components/datepicker.css'\nimport NProgress from 'nprogress'\nimport ajax from '@common/ajax'\n\nconst form = document.querySelector('.filter-form')\nconst calendarSearchForm = document.querySelector('.calendar-filter-search')\n\nconst setupCalendarField = () => {\n flatpickr(form.querySelector('.filter-date'), {\n dateFormat: 'Y-m-d',\n altInput: true,\n altFormat: 'M J',\n disableMobile: true,\n monthSelectorType: 'static',\n minDate: new Date(),\n mode: 'range',\n position: window.matchMedia('(min-width: 768px)').matches ? 'auto left' : 'auto left',\n onChange: (_, __, instance) => {\n if (!instance.isOpen) {\n handleFilterChange()\n }\n },\n onClose: (selectedDates, __, instance) => {\n if (selectedDates.length === 1) {\n setTimeout(() => {\n instance.setDate(selectedDates[0], true)\n }, 0)\n }\n },\n })\n}\n\nconst populateFilterState = () => {\n const filters = JSON.parse(form.dataset.selectedFilters)\n\n const types = ['exhibitions', 'categories', 'audiences']\n\n types.forEach((type) => {\n if (type in filters) {\n filters[type].forEach((value) => {\n const field = form.querySelector(`[value=\"${value}\"]`)\n\n if (field) {\n field.checked = true\n }\n })\n }\n })\n}\n\nconst generateUrl = (params = {}) => {\n const query = qs.stringify(params, { filter: (_, value) => value || undefined })\n const queryStr = query ? `?${query}` : ''\n\n return `${form.action}${queryStr}`\n}\n\nconst handleFilterChange = (e) => {\n e && e.preventDefault()\n\n const searchTerm = form.querySelector('.filter-search').value\n const selectedCategories = Array.from(form.querySelectorAll('.filter-category:checked'))\n const selectedAudiences = Array.from(form.querySelectorAll('.filter-audience:checked'))\n const selectedDate = form.querySelector('.filter-date[type=\"hidden\"]').value\n\n const currentParams = qs.parse(window.location.search, { ignoreQueryPrefix: true })\n\n const params = {}\n\n params.search = searchTerm\n params.categories = selectedCategories.map((x) => x.value).join('_')\n params.audiences = selectedAudiences.map((x) => x.value).join('_')\n params.date = selectedDate.replace(' to ', '_')\n\n if (currentParams.view) {\n params.view = currentParams.view\n }\n\n const url = generateUrl(params)\n\n window.history.replaceState({}, '', url)\n\n updateResults()\n}\n\nconst handleFilterClear = (e) => {\n const targetFilter = e.currentTarget.dataset.target\n\n if (targetFilter === '_all_') {\n form.querySelectorAll('input[type=\"checkbox\"]').forEach((x) => (x.checked = false))\n form.querySelectorAll('input[type=\"search\"]').forEach((x) => (x.value = null))\n form.querySelectorAll('input[type=\"text\"]').forEach((x) => (x.value = null))\n\n calendarSearchForm.querySelectorAll('input[type=\"search\"]').forEach((x) => (x.value = null))\n\n const dateField = form.querySelector('.filter-date')\n\n if (dateField) {\n dateField._flatpickr.clear()\n }\n\n handleFilterChange()\n\n return\n }\n\n if (targetFilter === '_date_') {\n const dateField = form.querySelector('.filter-date')\n\n if (dateField) {\n dateField._flatpickr.clear()\n }\n\n handleFilterChange()\n }\n\n const targetCheckbox = form.querySelector(`input[type=\"checkbox\"][value=\"${targetFilter}\"]`)\n\n if (targetCheckbox) {\n targetCheckbox.checked = false\n handleFilterChange()\n }\n}\n\nconst handleViewToggle = (e) => {\n const toggles = document.querySelectorAll('.view-toggle')\n const groupedDates = document.querySelector('.event-grouped-dates')\n const selectedView = e.currentTarget.dataset.view\n\n groupedDates.classList.remove('as-grid', 'as-list')\n groupedDates.classList.add(`as-${selectedView}`)\n\n toggles.forEach((x) => {\n x.disabled = false\n x.setAttribute('aria-pressed', 'false')\n })\n\n e.currentTarget.setAttribute('aria-pressed', 'true')\n e.currentTarget.disabled = true\n\n const currentParams = qs.parse(window.location.search, { ignoreQueryPrefix: true })\n currentParams.view = selectedView\n\n const url = generateUrl(currentParams)\n\n window.history.replaceState({}, '', url)\n}\n\nconst updateResults = async () => {\n const pageContent = document.querySelector('[data-page-content]')\n const selectedFilters = document.querySelector('[data-page-selected-filters]')\n\n if (pageContent) {\n NProgress.start()\n pageContent.classList.add('is-loading')\n\n const res = await ajax.get(window.location.href).json()\n\n NProgress.done()\n selectedFilters.innerHTML = res.selectedFilters\n pageContent.innerHTML = res.page\n pageContent.classList.remove('is-loading')\n }\n}\n\nconst init = () => {\n populateFilterState()\n setupCalendarField()\n\n NProgress.configure({ parent: '.calendar-loading-progress' })\n\n on('change', '.filter-form input:not([type=hidden]):not([type=search])', handleFilterChange)\n on('submit', '.filter-form', handleFilterChange)\n on('click', '.clear-filter-btn', handleFilterClear)\n on('click', '.view-toggle:not([disabled])', handleViewToggle)\n on('click', '.show-filters-btn', () => {\n document.documentElement.classList.add('overflow-hidden')\n document.querySelector('.calendar-filters').classList.add('is-active')\n document.querySelector('.sticky').classList.remove('z-30')\n document.querySelector('.sticky').classList.add('-z-1')\n })\n on('click', '.hide-filters-btn', () => {\n document.documentElement.classList.remove('overflow-hidden')\n document.querySelector('.calendar-filters').classList.remove('is-active')\n document.querySelector('.sticky').classList.remove('-z-1')\n document.querySelector('.sticky').classList.add('z-30')\n })\n}\n\ninit()\n"],"names":["wretch","options","headers","addon","QueryStringAddon","form","document","querySelector","calendarSearchForm","generateUrl","params","arguments","length","undefined","query","qs","filter","_","value","queryStr","action","handleFilterChange","e","preventDefault","searchTerm","selectedCategories","Array","from","querySelectorAll","selectedAudiences","selectedDate","currentParams","window","location","search","ignoreQueryPrefix","categories","map","x","join","audiences","date","replace","view","url","history","replaceState","updateResults","async","pageContent","selectedFilters","NProgress","classList","add","res","ajax","get","href","json","innerHTML","page","remove","populateFilterState","filters","JSON","parse","dataset","forEach","type","field","checked","flatpickr","dateFormat","altInput","altFormat","disableMobile","monthSelectorType","minDate","Date","mode","position","matchMedia","matches","onChange","__","instance","isOpen","onClose","selectedDates","setTimeout","setDate","parent","on","targetFilter","currentTarget","target","dateField","_flatpickr","clear","targetCheckbox","toggles","groupedDates","selectedView","disabled","setAttribute","documentElement"],"sourceRoot":""}