{"version":3,"file":"bibliography-search-app.js","mappings":"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","sources":["webpack://@upstatement/harvard-law-school-wp-theme/./static/js/components/algolia/bibliography-controls.js","webpack://@upstatement/harvard-law-school-wp-theme/./static/js/components/algolia/bibliography-search.js"],"sourcesContent":["import SearchControls from './search-controls';\nimport { on } from '@src/utils';\n\nclass BibliographyControls extends SearchControls {\n constructor(el, state) {\n super(el, state);\n\n // Bindings.\n this.handlePublicationDateChange = this.handlePublicationDateChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n\n // State.\n this.nonce = this.controlsEl.querySelector('input[name=\"nonce_hls_bibliography_query\"]')?.value;\n\n // DOM.\n this.appEl = el;\n this.buttonEls = Array.from(el.querySelectorAll('button[data-facet-group]'));\n this.datePickerEls = Array.from(\n el.querySelectorAll('[data-search-bibliography-publicationDate-datepicker]'),\n );\n this.datePickers = Array.from(el.querySelectorAll('input[name][type=\"date\"]'));\n\n // Init.\n this.setupExtraListeners();\n }\n\n /**\n * Updates the controls display with new facet data.\n *\n * @param {object} facets Facet data.\n *\n * @return void\n */\n updateFacets() {}\n\n /**\n * Event listeners.\n *\n * @return void\n */\n setupExtraListeners() {\n this.listeners = [\n ...this.listeners,\n on(this.datePickerEls, 'change', this.handlePublicationDateChange),\n ];\n }\n\n /**\n * Hit the reset button and clear the dates selected in the Publication Date datepickers.\n *\n * @return void\n */\n handleReset() {\n // clear the dates from the Publication Date datePickers\n this.datePickers.forEach(datepicker => {\n datepicker.value = '';\n });\n\n // hide the children categories when resetting search\n const parentCategoriesDiv = document.querySelector(\n '[data-facet-group=\"hls_bibliography_parent_category\"]',\n );\n const children = parentCategoriesDiv.querySelectorAll('fieldset');\n children.forEach(child => {\n child.style.display = 'none';\n });\n\n super.handleReset();\n }\n\n /**\n * Handle change of the Publication Date datepicker.\n *\n * @param {object} event Input change event.\n */\n handlePublicationDateChange() {\n const newParams = { ...this.state.get('params') };\n\n const pubDateFrom = this.datePickerEls[0].value;\n const pubDateTo = this.datePickerEls[1].value;\n\n if (pubDateFrom || pubDateTo) {\n if (pubDateFrom && !isNaN(Date.parse(pubDateFrom))) {\n newParams.publicationDateFrom = encodeURIComponent(pubDateFrom);\n }\n if (pubDateTo && !isNaN(Date.parse(pubDateTo))) {\n newParams.publicationDateTo = encodeURIComponent(pubDateTo);\n }\n this.state.set('params', newParams);\n this.triggerChange();\n }\n }\n\n /**\n * Allows the progammatic update of a filter control.\n *\n * @param {string} name Name of the filter to set.\n * @param {string} value Value of the filter.\n *\n * @return void\n */\n setFilterControl(name, value) {\n const newParams = { ...this.state.get('params') };\n\n // if there are currently any previously selected parameters of the same name, add the newly selected one to the array\n if (newParams && newParams[name] && newParams[name].length > 0) {\n newParams[name].push(value);\n } else {\n newParams[name] = [value];\n }\n\n // also check any facet checkboxes that apply\n this.refreshListeners();\n\n this.state.set('params', newParams);\n this.triggerChange();\n }\n\n /**\n * Triggers the change event.\n *\n * @param {boolean} runChangeFns Whether to trigger the onchange functions or not.\n * @param {boolean} updateAriaState Whether to trigger a change to the aria state.\n *\n * @return void\n */\n triggerChange(runChangeFns = true, updateAriaState = true) {\n const params = this.applyFilters('beforeChangeParams', this.state.get('params'));\n const base = location.href.split('?')[0];\n const queryString = Object.keys(params)\n .map(key => {\n if ('publicationDate' === key) {\n const pubDateFilters = new Array();\n\n if (params[key].from && !isNaN(Date.parse(params[key].from))) {\n pubDateFilters.push(`from:${encodeURIComponent(params[key].from)}`);\n }\n if (params[key].to && !isNaN(Date.parse(params[key].to))) {\n pubDateFilters.push(`to:${encodeURIComponent(params[key].to)}`);\n }\n return `${key}=${pubDateFilters.join(',')}`;\n } else {\n return `${key}=${encodeURIComponent(params[key])}`;\n }\n })\n .join('&');\n history.replaceState({}, '', `${base}?${queryString}`);\n\n if (updateAriaState) {\n const stateUpdate = Object.keys(params)\n .filter(key => 'type' !== key)\n .map(key => {\n const value = Array.isArray(params[key]) ? params[key].join(', ') : params[key];\n if ('search' === key) {\n return `Keyword search for ${value}`;\n } else if ('publicationDateFrom' === key || 'publicationDateTo' === key) {\n return `${key}: ${encodeURIComponent(value)}`;\n }\n\n return 'page' === key ? `Page ${value}` : value;\n })\n .join(', ');\n\n this.ariaState.innerText = `Filtered view: ${stateUpdate}`;\n }\n\n if (runChangeFns) {\n this.onchangeFns.forEach(fn => fn());\n }\n }\n\n /**\n * Handles the change of a checkbox element.\n *\n * @param {object} event\n *\n * @erturn void\n */\n handleCheckChange(event) {\n const name = event.currentTarget.name;\n const is_parent_category = name === 'hls_bibliography_parent_category';\n const child_category = 'hls_bibliography_child_category';\n const is_checked = event.currentTarget.checked;\n const parent_id = event.currentTarget.id;\n let unchecked_children = [];\n\n if (is_parent_category && is_checked) {\n // Show children categories\n const Children = document.querySelectorAll(`[data-parent=${parent_id}]`);\n Children[0].style.display = 'table';\n } else if (is_parent_category && !is_checked) {\n // Uncheck children when parent is unchecked.\n const Children = document.querySelectorAll(`[data-parent=${parent_id}]`)[0];\n let checkboxes = null;\n const lastDiv = Children.querySelector('div:last-child');\n if (lastDiv) {\n checkboxes = lastDiv.querySelectorAll('input[type=\"checkbox\"]:checked');\n if (checkboxes) {\n // Uncheck the children in the UI\n checkboxes.forEach(checkbox => {\n checkbox.checked = false;\n });\n\n // Get values of unchecked children to remove them from search parameters\n unchecked_children = Array.from(checkboxes, checkbox => checkbox.value);\n }\n }\n\n // Hide the childrens section\n Children.style.display = 'none';\n }\n\n // scroll to navigation view when category selected\n if (is_parent_category || name === child_category) {\n document.getElementsByClassName('data-page__pages-nav')[0].scrollIntoView();\n }\n\n const group = this.checkboxes.filter(checkbox => checkbox.name === name);\n const checked = group.filter(checkbox => checkbox.checked).map(checkbox => checkbox.value);\n const newParams = { ...this.state.get('params') };\n if (unchecked_children.length > 0) {\n newParams[child_category] = newParams[child_category].filter(\n x => !unchecked_children.includes(x),\n );\n if (newParams[child_category].length === 0) {\n delete newParams[child_category];\n }\n }\n\n if (checked.length > 0) {\n newParams[name] = checked;\n } else {\n delete newParams[name];\n }\n\n newParams.page = 1;\n\n this.state.set('params', newParams);\n this.state.set('lastChanged', name);\n this.triggerChange();\n }\n}\n\nexport default BibliographyControls;\n","import SearchApp from './search-app';\nimport { on } from '@src/utils';\nimport BibliographyControls from './bibliography-controls';\nimport { bibliographyTease } from './render';\nimport algoliaClient from '@src/components/algolia/algolia-client';\n\nconst { ALGOLIA_TYPE_INDEX_NAME } = window.algoliaSettings || {};\n\nclass BibliographySearch extends SearchApp {\n facultyListeners = [];\n\n constructor(el) {\n super(el);\n\n this.nonce = this.controls.controlsEl.querySelector(\n 'input[name=\"nonce_hls_bibliography_query\"]',\n )?.value;\n\n // Bindings.\n this.handleParentCategoryFilter = this.handleParentCategoryFilter.bind(this);\n this.handleChildCategoryFilter = this.handleChildCategoryFilter.bind(this);\n this.handlePubTypeFilter = this.handlePubTypeFilter.bind(this);\n this.handleRepresentativePubsFilter = this.handleRepresentativePubsFilter.bind(this);\n\n // Set up facets for the Bibliography query.\n this.facets = [\n 'hls_bibliography_pub_type',\n 'isFavorite',\n 'hls_bibliography_parent_category',\n 'hls_bibliography_child_category',\n 'instructor_reverse',\n ];\n\n this.setupHooks();\n this.afterQueryComplete();\n }\n\n /**\n * @inheritdoc\n */\n setupControls() {\n this.controls = new BibliographyControls(this.el, this.state);\n }\n\n deinit() {\n super.deinit();\n this.bibliographyListeners.forEach(listener =>\n typeof listener.off === 'function' ? listener.off : null,\n );\n }\n\n getIndexName() {\n return ALGOLIA_TYPE_INDEX_NAME;\n }\n\n setupHooks() {\n // Filter query params.\n this.addFilter('filterParams', params => {\n const newParams = { ...params };\n newParams.type = 'hls_bibliography';\n return newParams;\n });\n\n this.controls.addFilter('optionFacetText', (facetValue, facetName) => {\n if (facetName !== 'instructor_reverse') {\n return facetValue;\n }\n\n return facetValue;\n });\n }\n\n /**\n * Handle a click of a parent category pill in a bibliography tease.\n *\n * @param {object} event Click event.\n *\n * @return void\n */\n handleParentCategoryFilter(event) {\n const filter = event.target.dataset.searchBibliographyParentCategory;\n\n if (!filter) {\n return;\n }\n\n const { hls_bibliography_parent_category } = this.state.get('params');\n\n // If clicked filter is already active, don't do anything.\n if (hls_bibliography_parent_category === filter) {\n return;\n }\n\n this.controls.setFilterControl('hls_bibliography_parent_category', filter);\n }\n\n /**\n * Handle a click of a child category pill in a bibliography tease.\n *\n * @param {object} event Click event.\n *\n * @return void\n */\n handleChildCategoryFilter(event) {\n const filter = event.target.dataset.searchBibliographyChildCategory;\n\n if (!filter) {\n return;\n }\n\n const { hls_bibliography_child_category } = this.state.get('params');\n\n // If clicked filter is already active, don't do anything.\n if (hls_bibliography_child_category === filter) {\n return;\n }\n\n this.controls.setFilterControl('hls_bibliography_child_category', filter);\n }\n\n /**\n * Handle a click of a publication type pill in a bibliography tease.\n *\n * @param {object} event Click event.\n *\n * @return void\n */\n handlePubTypeFilter(event) {\n const filter = event.target.dataset.searchBibliographyPubType;\n\n if (!filter) {\n return;\n }\n\n const { hls_bibliography_pub_type } = this.state.get('params');\n\n // If clicked filter is already active, don't do anything.\n if (hls_bibliography_pub_type === filter) {\n return;\n }\n\n this.controls.setFilterControl('hls_bibliography_pub_type', filter);\n }\n\n /**\n * Handle a click of representative publications star in a bibliography tease.\n *\n * @param {object} event Click event.\n *\n * @return void\n */\n handleRepresentativePubsFilter(event) {\n const filter = event.target.dataset.searchBibliographyRepresentativePublications;\n\n if (!filter) {\n return;\n }\n\n const { isFavorite } = this.state.get('params');\n\n // If clicked filter is already active, don't do anything.\n if (isFavorite === filter) {\n return;\n }\n\n this.controls.setFilterControl('isFavorite', filter);\n }\n\n /**\n * Render the bibliography tease.\n *\n * @param {array} hits Hits from Algolia.\n *\n * @return void\n */\n render(hits) {\n const hitsMarkup = hits.map(bibliographyTease).join('');\n this.resultsEl.innerHTML = `