{"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":""}