{"version":3,"sources":["webpack:///./src/js/react-components/today-search-results/index.js"],"names":["mobileButtonId","concat","nanoid","contentId","TodaySearchResultsListing","_ref","_response$data$Result","_response$data","_response$data2","_response$data3","_response$data3$Facet","_response$data4","clearFiltersLabel","filtersAriaLabel","resultsAriaLabel","facetsSearchLabel","goToPageLabel","errorDescription","errorHeading","errorNoResults","fetchUrl","heading","keywordQueryString","loadingDataLabel","narrowResultsHeading","pageQueryString","paginationLabel","searchButtonLabel","searchFacetPlaceholder","searchId","searchLabel","showAllFacetsLabel","showLessFacetsLabel","filtersRef","useRef","_useState2","_slicedToArray","useState","filtersExpanded","setFiltersExpanded","_useQueryString2","useQueryString","keywordQs","setKeywordQs","_useQueryString4","pageQs","setPageQs","_useState4","facetsQs","setFacetsQs","_useState6","setFiltersFocusTrap","query","_objectSpread","_defineProperty","fetchUrlWithParams","stringifyUrl","url","_useFetch","useFetch","response","error","isLoading","filtersSelected","Object","entries","some","_ref4","_ref5","k","resultListing","data","ResultListing","clearFilters","triggerCustomEvent","window","updateFacets","keyword","prev","getQueryStringValue","useEffect","scrollHeight","current","windowHeight","document","documentElement","clientHeight","scrollTop","body","classList","add","remove","React","createElement","className","aria-label","ref","aria-expanded","onClick","filtersFocusTrap","createFocusTrap","escapeDeactivates","clickOutsideDeactivates","onActivate","onDeactivate","activate","id","aria-controls","Results","xlinkHref","role","aria-labelledby","Search","buttonLabel","label","onSearch","value","Facets","length","map","_ref6","Name","Keyword","Options","key","facets","searchFacetLabel","replace","showAllLabel","showLessLabel","parse","List","resultText","Pagination","currentPage","CurrentPage","onPageChange","page","scrollTo","top","behavior","totalPages","TotalPages","propTypes","string","isRequired"],"mappings":"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","file":"67.d9c457.js","sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\r\nimport { string } from 'prop-types';\r\nimport { nanoid } from 'nanoid';\r\nimport parse from 'html-react-parser';\r\n\r\nimport useFetch from '../../react-hooks/use-fetch';\r\nimport useQueryString from '../../react-hooks/use-query-string';\r\nimport { stringifyUrl, getQueryStringValue } from '../../utils/url';\r\nimport Facets from '../facets';\r\nimport Search from '../search';\r\nimport List from '../search/list';\r\nimport Pagination from '../pagination';\r\nimport { triggerCustomEvent } from '../../utils/events';\r\nimport { createFocusTrap } from 'focus-trap';\r\n\r\nconst mobileButtonId = `id-${nanoid()}`;\r\nconst contentId = `id-${nanoid()}`;\r\n\r\nfunction TodaySearchResultsListing({\r\n clearFiltersLabel,\r\n filtersAriaLabel,\r\n resultsAriaLabel,\r\n facetsSearchLabel,\r\n goToPageLabel,\r\n errorDescription,\r\n errorHeading,\r\n errorNoResults,\r\n fetchUrl,\r\n heading,\r\n keywordQueryString,\r\n loadingDataLabel,\r\n narrowResultsHeading,\r\n pageQueryString,\r\n paginationLabel,\r\n searchButtonLabel,\r\n searchFacetPlaceholder,\r\n searchId,\r\n searchLabel,\r\n showAllFacetsLabel,\r\n showLessFacetsLabel\r\n}) {\r\n const filtersRef = useRef(null);\r\n const [filtersExpanded, setFiltersExpanded] = useState(false);\r\n const [keywordQs, setKeywordQs] = useQueryString(keywordQueryString);\r\n const [pageQs, setPageQs] = useQueryString(pageQueryString);\r\n const [facetsQs, setFacetsQs] = useState({});\r\n const [filtersFocusTrap, setFiltersFocusTrap] = useState();\r\n const query = {\r\n ...(keywordQs && { [keywordQueryString]: keywordQs }),\r\n ...(pageQs && { [pageQueryString]: pageQs }),\r\n ...facetsQs\r\n };\r\n const fetchUrlWithParams = stringifyUrl({\r\n url: fetchUrl,\r\n query\r\n });\r\n const { response, error, isLoading } = useFetch(fetchUrlWithParams);\r\n const filtersSelected = Object.entries(query).some(\r\n ([k, v]) => v && k !== keywordQueryString\r\n );\r\n const resultListing = response?.data?.ResultListing ?? [];\r\n\r\n function clearFilters() {\r\n setPageQs('');\r\n setKeywordQs('');\r\n setFacetsQs({});\r\n triggerCustomEvent(window, 'clearFacets');\r\n }\r\n\r\n function updateFacets(keyword) {\r\n setFacetsQs((prev) => ({\r\n ...prev,\r\n [keyword]: getQueryStringValue(keyword)\r\n }));\r\n setPageQs('');\r\n setFiltersExpanded(false);\r\n }\r\n\r\n function onSearch(keyword) {\r\n setKeywordQs(keyword);\r\n setPageQs('');\r\n setFiltersExpanded(false);\r\n }\r\n\r\n function onPageChange(page) {\r\n setPageQs(page);\r\n window.scrollTo({ top: 0, behavior: 'smooth' });\r\n }\r\n\r\n function onFiltersExpanded() {\r\n const filtersFocusTrap = createFocusTrap(filtersRef.current, {\r\n escapeDeactivates: true,\r\n clickOutsideDeactivates: true,\r\n onActivate: () => {\r\n setFiltersExpanded(true);\r\n },\r\n onDeactivate: () => {\r\n setFiltersExpanded(false);\r\n }\r\n });\r\n setFiltersFocusTrap(filtersFocusTrap);\r\n filtersFocusTrap.activate();\r\n\r\n setFiltersExpanded(!filtersExpanded);\r\n }\r\n\r\n useEffect(() => {\r\n if (filtersExpanded && filtersRef) {\r\n const { scrollHeight } = filtersRef.current;\r\n const windowHeight = window.document.documentElement.clientHeight;\r\n\r\n if (scrollHeight > windowHeight) {\r\n filtersRef.current.scrollTop = windowHeight - scrollHeight;\r\n }\r\n }\r\n }, [filtersExpanded, filtersRef]);\r\n\r\n useEffect(() => {\r\n const body = window.document.body;\r\n\r\n if (filtersExpanded) {\r\n body.classList.add('noscroll');\r\n } else {\r\n body.classList.remove('noscroll');\r\n }\r\n }, [filtersExpanded]);\r\n\r\n return (\r\n <div className=\"faculty-staff-listing\">\r\n {heading && <h1>{heading}</h1>}\r\n <div className=\"faculty-staff-listing__wrapper\">\r\n <section\r\n aria-label={filtersAriaLabel}\r\n className={`faculty-staff-listing__filters ${\r\n filtersExpanded ? 'faculty-staff-listing__filters--expanded' : ''\r\n }`}\r\n ref={filtersRef}\r\n >\r\n <h3\r\n className={`faculty-staff-listing__filters-mobile-header ${\r\n filtersExpanded\r\n ? 'faculty-staff-listing__filters-mobile-header--expanded'\r\n : ''\r\n }`}\r\n >\r\n <button\r\n aria-expanded={filtersExpanded}\r\n className=\"faculty-staff-listing__filters-mobile-header-button\"\r\n onClick={onFiltersExpanded}\r\n id={mobileButtonId}\r\n aria-controls={contentId}\r\n >\r\n <span>\r\n {filtersExpanded && response\r\n ? response.data?.Results\r\n : narrowResultsHeading}\r\n </span>\r\n <svg>\r\n <use xlinkHref=\"#chevron-down-outline\" />\r\n </svg>\r\n </button>\r\n </h3>\r\n <div\r\n className=\"faculty-staff-listing__filters-content\"\r\n role=\"region\"\r\n id={contentId}\r\n aria-labelledby={mobileButtonId}\r\n >\r\n <div className=\"faculty-staff-listing__filters-content-header\">\r\n <h3 className=\"faculty-staff-listing__narrow-results-heading\">\r\n {narrowResultsHeading}\r\n </h3>\r\n {(filtersSelected || keywordQs) && (\r\n <button className=\"btn-label\" onClick={clearFilters}>\r\n <span>{clearFiltersLabel}</span>\r\n </button>\r\n )}\r\n </div>\r\n <Search\r\n buttonLabel={searchButtonLabel}\r\n id={searchId}\r\n label={searchLabel}\r\n onSearch={onSearch}\r\n value={keywordQs}\r\n />\r\n {response?.data?.Facets?.length > 0 &&\r\n response.data.Facets.map(({ Name, Keyword, Options }) => {\r\n const length = Options.length;\r\n\r\n return (\r\n <Facets\r\n key={Keyword}\r\n keyword={Keyword}\r\n heading={`${Name} ${length > 10 ? `(${length})` : ''}`}\r\n facets={Options}\r\n searchFacetPlaceholder={searchFacetPlaceholder}\r\n searchFacetLabel={facetsSearchLabel.replace(\r\n '{{category}}',\r\n Name\r\n )}\r\n showAllLabel={showAllFacetsLabel}\r\n showLessLabel={showLessFacetsLabel}\r\n updateFacets={updateFacets}\r\n />\r\n );\r\n })}\r\n <div className=\"faculty-staff-listing__clear-filters-mobile\">\r\n {filtersSelected && (\r\n <button className=\"btn-label\" onClick={clearFilters}>\r\n <span>{clearFiltersLabel}</span>\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </section>\r\n <div className=\"faculty-staff-listing__list\">\r\n {!isLoading && !error && resultListing.length === 0 && (\r\n <div className=\"rte\">{parse(errorNoResults)}</div>\r\n )}\r\n <List\r\n resultsAriaLabel={resultsAriaLabel}\r\n fetchUrl={fetchUrlWithParams}\r\n errorDescription={errorDescription}\r\n errorHeading={errorHeading}\r\n loadingDataLabel={loadingDataLabel}\r\n resultListing={resultListing}\r\n resultText={response?.data?.Results}\r\n error={error}\r\n isLoading={isLoading}\r\n />\r\n {!isLoading && resultListing.length !== 0 && (\r\n <Pagination\r\n label={paginationLabel}\r\n currentPage={response.data.CurrentPage}\r\n goToPageLabel={goToPageLabel}\r\n onPageChange={onPageChange}\r\n totalPages={response.data.TotalPages}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nTodaySearchResultsListing.propTypes = {\r\n clearFiltersLabel: string.isRequired,\r\n facetsSearchLabel: string.isRequired,\r\n filtersAriaLabel: string.isRequired,\r\n goToPageLabel: string.isRequired,\r\n errorDescription: string.isRequired,\r\n errorHeading: string.isRequired,\r\n errorNoResults: string.isRequired,\r\n fetchUrl: string.isRequired,\r\n heading: string,\r\n keywordQueryString: string.isRequired,\r\n loadingDataLabel: string.isRequired,\r\n narrowResultsHeading: string.isRequired,\r\n pageQueryString: string.isRequired,\r\n paginationLabel: string.isRequired,\r\n resultsAriaLabel: string.isRequired,\r\n searchButtonLabel: string.isRequired,\r\n searchFacetPlaceholder: string.isRequired,\r\n searchId: string.isRequired,\r\n searchLabel: string.isRequired,\r\n showAllFacetsLabel: string.isRequired,\r\n showLessFacetsLabel: string.isRequired\r\n};\r\n\r\nexport default TodaySearchResultsListing;\r\n"],"sourceRoot":""}