{"version":3,"file":"SearchPrompt.js","sources":["../../../../../src/components/Search/Utils/utils.ts","../../../../../node_modules/classnames/index.js","../../../../../src/components/Search/Element/ContentTypeFilter/ContentTypeFilter.tsx","../../../../../src/components/Search/Block/SearchPrompt/CurrentQuickLinks.tsx","../../../../../src/components/Search/Element/AutoCompletes/AutoCompletes.tsx","../../../../../src/components/Search/Block/SearchPrompt/SubFilters.tsx","../../../../../src/components/Search/Block/SearchPrompt/SearchPrompt.tsx"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { IAutoCompleteResponse, ISearchResponse } from './interface'\n\nconst serverURL = '/api/search'\n\nexport const defaults = {\n  error: 'An error has occured, please reload the page or try again later.',\n  minSearchString: 3,\n  group: 'All',\n  groupCourses: 'Courses',\n  pageSize: 10,\n  authorizedKeys: [\n    'filters',\n    'group',\n    'page',\n    'pageid',\n    'pagesize',\n    'sorttype',\n    'sortvalue',\n    'term',\n  ],\n  sortOptions: {\n    name: '',\n    label: 'Select sort option',\n    prefix: 'Sort by:',\n    optionsLabel: 'sort by options list',\n  },\n  clearFlag: {\n    filter: 'All',\n    status: false,\n  },\n}\n\nexport const END_POINTS = {\n  search: `${serverURL}/contentsearch`,\n  autocomplete: `${serverURL}/quicksearch`,\n  courses: `${serverURL}/coursesearch`,\n}\n\nexport const filtersJoint = '@@@@@@'\n\n/**\n * This fetches data to an endpoint\n * @param endpoint string\n * @param body string - payload\n * @returns object\n */\nexport const dataFetcher = async (endpoint: string, body: {}) => {\n  try {\n    const response = fetch(endpoint, {\n      method: 'POST',\n      headers: {\n        'Content-type': 'application/json',\n      },\n      body: JSON.stringify(body),\n    })\n    if (!(await response).ok) {\n      throw new Error('Network response was not Ok')\n    }\n    const data = (await response).json()\n    return data\n  } catch (error) {\n    // console.error('error!!!', error)\n  }\n}\n\nexport const useDebounce = (inputValue: string, delay: number) => {\n  const [debouncedValue, setDebouncedValue] = useState(inputValue)\n\n  useEffect(() => {\n    const handler = setTimeout(() => {\n      setDebouncedValue(inputValue)\n    }, delay)\n\n    return () => {\n      clearTimeout(handler)\n    }\n  }, [inputValue, delay])\n\n  return debouncedValue\n}\n\nconst getType = (obj: any) => {\n  const lowerCaseTheFirstLetter = (str: string) =>\n    str[0].toLowerCase() + str.slice(1)\n  const type = typeof obj\n  if (type !== 'object') {\n    return type\n  }\n\n  return lowerCaseTheFirstLetter(\n    Object.prototype.toString.call(obj).replace(/^\\[object (\\S+)\\]$/, '$1')\n  )\n}\n\nexport const validateData = (data: ISearchResponse) => {\n  const defaultResponse = {\n    categorisationFacets: true,\n    categorisationGroupFacets: true,\n    categorisationSortItems: true,\n    pagination: true,\n    results: true,\n    suggestions: true,\n    log: [] as any,\n  }\n  const updatedResponse = {\n    ...defaultResponse,\n  }\n  if (data) {\n    const { categorisation, pagination, results, suggestions = [] } = data\n    if (\n      getType(categorisation) === 'object' &&\n      getType(pagination) === 'object' &&\n      getType(results) === 'array' &&\n      getType(suggestions) === 'array'\n    ) {\n      // Checking data integrity for: Facets\n      if (categorisation.facets) {\n        if (categorisation.facets.length > 0) {\n          const tempInvalidFacets = [] as any\n          categorisation.facets.map((facet) => {\n            if (\n              !facet.filters ||\n              facet.filters.length === 0 ||\n              !facet.name ||\n              !facet.value\n            ) {\n              updatedResponse.categorisationFacets = false\n              tempInvalidFacets.push(\n                !facet.filters || facet.filters.length === 0 ? 'filters' : '',\n                !facet.name ? 'name' : '',\n                !facet.value ? 'value' : ''\n              )\n            }\n\n            // Checking data integrity for: Facets/Filters\n            facet.filters.map((filter) => {\n              if (\n                (!filter.count && filter.count !== 0) ||\n                !filter.name ||\n                (!filter.selected && typeof !filter.selected !== 'boolean') ||\n                (!filter.unSelectAll &&\n                  typeof !filter.unSelectAll !== 'boolean') ||\n                !filter.value\n              ) {\n                updatedResponse.categorisationFacets = false\n                tempInvalidFacets.push(\n                  !filter.count && filter.count !== 0 ? 'filters/count' : '',\n                  !filter.name ? 'filters/name' : '',\n                  !filter.selected && typeof !filter.selected !== 'boolean'\n                    ? 'filters/selected'\n                    : '',\n                  !filter.unSelectAll &&\n                    typeof !filter.unSelectAll !== 'boolean'\n                    ? 'filters/unSelectAll'\n                    : '',\n                  !filter.value ? 'filters/value' : ''\n                )\n              }\n            })\n          })\n          if (tempInvalidFacets.length > 0) {\n            updatedResponse.log.push({\n              'Categorisation/facets data missing': [\n                ...new Set(tempInvalidFacets),\n              ].filter((entry) => entry !== ''),\n            })\n          }\n        }\n      } else {\n        updatedResponse.categorisationFacets = false\n        updatedResponse.log.push('Categorisation/facets missing')\n      }\n\n      // Checking data integrity for: groupFacets\n      if (categorisation.groupFacets) {\n        if (categorisation.groupFacets.length > 0) {\n          const tempInvalidGroupFacets = [] as any\n          categorisation.groupFacets.map((groupFacet) => {\n            if (\n              (!groupFacet.count && groupFacet.count !== 0) ||\n              !groupFacet.name ||\n              !groupFacet.value\n            ) {\n              updatedResponse.categorisationGroupFacets = false\n              tempInvalidGroupFacets.push(\n                !groupFacet.count && groupFacet.count !== 0 ? 'count' : '',\n                !groupFacet.name ? 'name' : '',\n                !groupFacet.value ? 'value' : ''\n              )\n            }\n          })\n          if (tempInvalidGroupFacets.length > 0) {\n            updatedResponse.log.push({\n              'Categorisation/groupFacets data missing': [\n                ...new Set(tempInvalidGroupFacets),\n              ].filter((entry) => entry !== ''),\n            })\n          }\n        }\n      } else {\n        updatedResponse.categorisationGroupFacets = false\n        updatedResponse.log.push('Categorisation/groupFacets missing')\n      }\n\n      // Checking data integrity for: sortItems\n      if (categorisation.sortItems) {\n        if (categorisation.sortItems.length > 0) {\n          const tempInvalidSortItems = [] as any\n          categorisation.sortItems.map((sortItem) => {\n            if (!sortItem.name || !sortItem.sortType || !sortItem.sortValue) {\n              updatedResponse.categorisationSortItems = false\n              tempInvalidSortItems.push(\n                !sortItem.name ? 'name' : '',\n                !sortItem.sortType ? 'sortType' : '',\n                !sortItem.sortValue ? 'sortValue' : ''\n              )\n            }\n          })\n          if (tempInvalidSortItems.length > 0) {\n            updatedResponse.log.push({\n              'Categorisation/sortItems data missing': [\n                ...new Set(tempInvalidSortItems),\n              ].filter((entry) => entry !== ''),\n            })\n          }\n        }\n      } else {\n        updatedResponse.categorisationSortItems = false\n        updatedResponse.log.push('Categorisation/sortItems missing')\n      }\n\n      // Checking data integrity for: Pagination\n      if (\n        !pagination.currentPage ||\n        !pagination.pageSize ||\n        !pagination.resultsPath ||\n        (!pagination.totalItems && pagination.totalItems !== 0) ||\n        (!pagination.totalPages && pagination.totalPages !== 0)\n      ) {\n        // As data are covered through code, we keep this entry as \"valid\" but log defects:\n        updatedResponse.log.push({\n          'Pagination data missing': [\n            !pagination.currentPage ? 'currrentPage' : '',\n            !pagination.pageSize ? 'pageSize' : '',\n            !pagination.resultsPath ? 'resultsPath' : '',\n            !pagination.totalItems && pagination.totalItems !== 0\n              ? 'totalItems'\n              : '',\n            !pagination.totalPages && pagination.totalPages !== 0\n              ? 'totalPages'\n              : '',\n          ].filter((entry) => entry !== ''),\n        })\n      }\n\n      // Checking data integrity for: Results\n      if (results.length > 0) {\n        const tempInvalidResults = [] as any\n        results.map((result) => {\n          if (!result.contentType || !result.title || !result.url) {\n            updatedResponse.results = false\n            tempInvalidResults.push(\n              !result.blurb && result.blurb !== '' ? 'blurb' : '',\n              !result.contentType ? 'contentType' : '',\n              !result.title ? 'title' : '',\n              !result.url ? 'url' : ''\n            )\n          }\n        })\n        if (tempInvalidResults.length > 0) {\n          updatedResponse.log.push({\n            'Results data missing': [...new Set(tempInvalidResults)].filter(\n              (entry) => entry !== ''\n            ),\n          })\n        }\n      }\n\n      // Checking data integrity for: Suggestions\n      if (suggestions.length > 0) {\n        suggestions.map((suggestion) => {\n          if (!suggestion.name || !suggestion.value) {\n            updatedResponse.suggestions = false\n            updatedResponse.log.push({\n              'Suggestions data missing': [\n                !suggestion.name ? 'name' : '',\n                !suggestion.value ? 'value' : '',\n              ].filter((entry) => entry !== ''),\n            })\n          }\n        })\n      }\n    } else {\n      return {\n        categorisationFacets: false,\n        categorisationGroupFacets: false,\n        categorisationSortItems: false,\n        pagination: false,\n        results: false,\n        suggestions: false,\n        log: ['Minimum data structure not met.'],\n      }\n    }\n  }\n  return updatedResponse\n}\n\nexport const validateAutoCompleteData = (data: IAutoCompleteResponse) => {\n  const defaultResponse = {\n    results: true,\n    suggestions: true,\n    log: [] as any,\n  }\n  const updatedResponse = {\n    ...defaultResponse,\n  }\n  if (data) {\n    const { results, suggestions } = data\n    if (getType(results) === 'array' && getType(suggestions) === 'array') {\n      // Checking data integrity for: Results\n      if (results.length > 0) {\n        const tempInvalidResults = [] as any\n        results.map((result) => {\n          if (!result.contentType || !result.title || !result.url) {\n            updatedResponse.results = false\n            tempInvalidResults.push(\n              !result.contentType ? 'contentType' : '',\n              !result.title ? 'title' : '',\n              !result.url ? 'url' : ''\n            )\n          }\n        })\n        if (tempInvalidResults.length > 0) {\n          updatedResponse.log.push({\n            'Results data missing': [...new Set(tempInvalidResults)].filter(\n              (entry) => entry !== ''\n            ),\n          })\n        }\n      }\n\n      // Checking data integrity for: Suggestions\n      if (suggestions.length > 0) {\n        const tempInvalidSuggestions = [] as any\n        suggestions.map((suggestion) => {\n          if (typeof suggestion !== 'string') {\n            updatedResponse.suggestions = false\n            tempInvalidSuggestions.push('not a string')\n          }\n        })\n        if (tempInvalidSuggestions.length > 0) {\n          updatedResponse.log.push({\n            'Suggestions data invalid': [\n              ...new Set(tempInvalidSuggestions),\n            ].filter((entry) => entry !== ''),\n          })\n        }\n      }\n    } else {\n      return {\n        results: false,\n        suggestions: false,\n        log: ['Minimum data structure not met.'],\n      }\n    }\n  }\n  return updatedResponse\n}\n\nexport const useBackButton = (callBack: Function) => {\n  const [isBack, setIsBack] = useState(false)\n  const handleEvent = () => {\n    callBack()\n    setIsBack(true)\n  }\n\n  useEffect(() => {\n    window.addEventListener('popstate', handleEvent)\n    return () => window.removeEventListener('popstate', handleEvent)\n  })\n\n  return isBack\n}\n\n/**\n * This updates the browser history to allow for back and forth navigation between results/sorting...\n * @param resultsPath string\n */\nexport const updateHistory = (resultsPath: string) => {\n  const currentURL = new URL(window.location.href)\n  if (currentURL.search !== resultsPath) {\n    currentURL.search = resultsPath\n    history.pushState({}, '', currentURL.href)\n  }\n}\n\n/**\n * This pushes up the parent container of the search results to avoid floating contents (filters, custom selector) to be overlapped by any subsequent content.\n * To be executed on load (useEffect(), [])\n * Use of this function breaks Jest as of 28.1.3. It needs mock stuff in the test file, please llok at CourseTable/CourseTable.test.tsx\n * BA 2024-09-25\n */\nexport const controlZIndexes = () => {\n  const searchResults = document.querySelector('.searchResults')\n  const ancestor = searchResults?.closest(\n    'section.layoutContainer:has(+ section.layoutContainer), .block-container:has(+ .block-container)'\n  ) as HTMLElement\n\n  if (ancestor) {\n    ancestor.style.zIndex = (\n      (parseInt(ancestor.style.zIndex, 10) || 0) + 1\n    ).toString()\n  }\n}\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import React, { useState, useEffect } from 'react'\nimport classNames from 'classnames'\n\nimport IProps from './interface'\nimport { defaults } from '../../Utils/utils'\n\nconst ContentTypeFilter = (props: IProps) => {\n  const introText = 'Category Filters:'\n  const {\n    groupFacets,\n    callBack = () => {},\n    allowUnselect = false,\n    isHeader = false,\n    preSelected,\n  } = props\n\n  const [selectedValue, setSelectedValue] = useState(preSelected)\n\n  /**\n   * This toggles the contentType buttons (search prompt) or sends the selected value (search results)\n   * @param value string\n   */\n  const handleSelect = (value: string) => {\n    if (value === selectedValue && allowUnselect) {\n      callBack(defaults.group)\n      setSelectedValue(defaults.group)\n    } else {\n      setSelectedValue(value)\n      callBack(value)\n    }\n  }\n\n  /**\n   * Updates the selected value on change\n   */\n  useEffect(() => {\n    setSelectedValue(preSelected)\n  }, [preSelected])\n\n  return (\n    <div\n      className={classNames(`contentTypeFilter`, {\n        'contentTypeFilter--header': isHeader,\n      })}>\n      <div\n        role='group'\n        aria-labelledby='categoryFiltersLabel'\n        className='contentTypeFilter__group'>\n        <span id='categoryFiltersLabel' className='sr-only'>\n          {introText}\n        </span>\n        {groupFacets?.map((groupFacet) => {\n          const { value, count = 0, name } = groupFacet\n          return (\n            <button\n              key={groupFacet.value}\n              className={classNames('contentTypeFilter__button', {\n                'contentTypeFilter__button--selected': value === selectedValue,\n              })}\n              disabled={!isHeader && count === 0}\n              role='radio'\n              aria-checked={value === selectedValue}\n              aria-label={count > 0 ? `${name} item count ${count}` : undefined}\n              onClick={() => handleSelect(value)}>\n              {name}{' '}\n              {count > 0 && (\n                <span className=''>({count.toLocaleString()})</span>\n              )}\n            </button>\n          )\n        })}\n      </div>\n    </div>\n  )\n}\n\nexport default ContentTypeFilter\n","import React from 'react'\nimport ILink from '../../../Element/Link/interface'\n\ntype currentQuickLinksProps = {\n  links: ILink[]\n  label: string\n}\n\nconst CurrentQuickLinks = (props: currentQuickLinksProps) => {\n  const { links, label } = props\n\n  return (\n    <div className='searchPrompt__quick-links'>\n      <h2 className='searchPrompt__quick-links-label'>{label}</h2>\n      <ul className='searchPrompt__quick-links-list'>\n        {links.map((link) => (\n          <li key={link.text} className=''>\n            <a\n              href={link.href}\n              target={link.target}\n              className='searchPrompt__link'>\n              <div className='searchPrompt__link-item'>\n                <i className='searchPrompt__link-icon' aria-hidden='true'>\n                  arrow_right_alt\n                </i>\n                <span className='searchPrompt__link-text'>{link.text}</span>\n              </div>\n            </a>\n          </li>\n        ))}\n      </ul>\n    </div>\n  )\n}\n\nexport default CurrentQuickLinks\n","import React from 'react'\nimport { TAutoComplete, TAutoCompletes, IAutoCompleteItem } from './interface'\nimport {\n  defaults,\n  dataFetcher,\n  validateAutoCompleteData,\n  END_POINTS,\n} from '../../Utils/utils'\nimport { IAutoCompleteResponse } from '../../Utils/interface'\n\nexport const getAutoCompletes = async (props: {\n  baseURL: string\n  searchTerm: string\n  contentType: string | null\n  callBack: Function\n}) => {\n  const { baseURL = '', searchTerm, contentType, callBack } = props\n  if (searchTerm.length >= defaults.minSearchString) {\n    const body = {\n      Term: searchTerm,\n      Group: contentType || defaults.group,\n      Filters: [],\n    }\n    const response: IAutoCompleteResponse = await dataFetcher(\n      `${baseURL}${END_POINTS.autocomplete}`,\n      body\n    )\n    if (response?.results) {\n      const validData = validateAutoCompleteData(response)\n      if (validData.log.length > 0) {\n        console.log(validData.log)\n      }\n      const aggregatedAutocompleteItems: {\n        items: IAutoCompleteItem[]\n        suggestions: string[]\n      } = { items: [], suggestions: [] }\n      if (validData.results) {\n        aggregatedAutocompleteItems.items?.push(...response.results)\n      }\n      if (validData.suggestions) {\n        aggregatedAutocompleteItems.suggestions?.push(...response.suggestions)\n      }\n      if (\n        aggregatedAutocompleteItems.items.length > 0 ||\n        aggregatedAutocompleteItems.suggestions.length > 0\n      ) {\n        callBack(aggregatedAutocompleteItems)\n      } else {\n        callBack([])\n      }\n    }\n  } else {\n    callBack(undefined)\n  }\n}\n\n/**\n * This breaks up the text to insert a <span /> surrounding the martched \"search term\"\n * @param props Object\n * @returns JSX\n */\nconst AutoComplete = (props: TAutoComplete) => {\n  const { searchTerm, item } = props\n  const regex = new RegExp(searchTerm, 'ig')\n  const split = item.split(regex)\n  const matches = item.match(regex) || []\n  const result: React.JSX.Element[] = []\n  for (let i = 0; i <= split.length; i += 1) {\n    result.push(split[i] as unknown as React.JSX.Element)\n    if (matches[i]) {\n      result.push(\n        <span key={i} className='autocompletes__match'>\n          {matches[i]}\n        </span>\n      )\n    }\n  }\n  return <span>{result}</span>\n}\n\nconst AutoCompletes = (props: TAutoCompletes) => {\n  const { searchTerm, items, suggestions, suggestionsCallBack } = props\n\n  return (\n    <div className='autocompletes__list-wrapper'>\n      <ul\n        id='suggestions-list'\n        role='listbox'\n        aria-labelledby='global-search'\n        className='autocompletes__list'\n        tabIndex={2}>\n        {items.map((item, index) => {\n          return (\n            <li\n              role='option'\n              className='autocompletes__item'\n              key={`${index}-${item.title}`}>\n              <a href={item.url} className='autocompletes__link link'>\n                <AutoComplete searchTerm={searchTerm} item={item.title} />\n                {item.contentType && (\n                  <span className='autocompletes__type'>\n                    {item.contentType}\n                  </span>\n                )}\n              </a>\n            </li>\n          )\n        })}\n        {suggestions.map((suggestion, index) => {\n          return (\n            <li\n              role='option'\n              className='autocompletes__item'\n              key={`${index}-suggestion-${suggestion}`}>\n              <a\n                href='#'\n                onClick={(e) => {\n                  e.preventDefault()\n                  suggestionsCallBack(suggestion)\n                }}\n                className='autocompletes__link link'>\n                <span>\n                  <AutoComplete searchTerm={searchTerm} item={suggestion} />\n                  ...\n                </span>\n              </a>\n            </li>\n          )\n        })}\n      </ul>\n    </div>\n  )\n}\n\nexport default AutoCompletes\n","import React, { MouseEventHandler } from 'react'\nimport classNames from 'classnames'\n\nimport { IPromptFilter } from '../../Utils/interface'\n\ntype subFiltersProps = {\n  currentGroupFacetName: string\n  filtersCount: number\n  filtersDropdownOpen: boolean\n  tempFilters: IPromptFilter | null\n  callBack: {\n    dropdown: MouseEventHandler<HTMLButtonElement>\n    select: Function\n    clear: MouseEventHandler<HTMLButtonElement>\n    apply: MouseEventHandler<HTMLButtonElement>\n  }\n}\n\nconst SubFilters = (props: subFiltersProps) => {\n  const {\n    currentGroupFacetName,\n    filtersCount,\n    filtersDropdownOpen,\n    tempFilters,\n    callBack,\n  } = props\n\n  return (\n    <div className='searchPrompt__filter-dropdown-wrapper'>\n      <button\n        tabIndex={0}\n        className={classNames(`searchPrompt__filter-dropdown-button`, {\n          'searchPrompt__filter-dropdown-button--open': filtersDropdownOpen,\n        })}\n        onClick={callBack.dropdown}>\n        <span className='searchPrompt__filter-dropdown-button-content'>\n          {currentGroupFacetName}\n          {filtersCount ? (\n            <span className='searchPrompt__filters-count'>{filtersCount}</span>\n          ) : null}\n        </span>\n        <i\n          className='icon__lg searchPrompt__filter-dropdown-icon'\n          aria-hidden='true'>\n          keyboard_arrow_down\n        </i>\n      </button>\n      <div\n        aria-hidden={!filtersDropdownOpen}\n        className={classNames(`searchPrompt__filter-dropdown`, {\n          'searchPrompt__filter-dropdown--show': filtersDropdownOpen,\n        })}>\n        <ul className='searchPrompt__filter-dropdown-list'>\n          {tempFilters?.options.map((option) => (\n            <li\n              key={option.value}\n              className='searchPrompt__filter-dropdown-list-item'>\n              <button\n                className='group searchPrompt__filter-select-button'\n                onClick={() => callBack.select(option)}\n                aria-checked={option.selected}>\n                <span className='searchPrompt__filter-label'>\n                  {option.name}\n                </span>\n                <span\n                  className={classNames(`searchPrompt__filter-selected`, {\n                    'searchPrompt__filter-selected--active': option.selected,\n                  })}>\n                  <i className='icon__md' aria-hidden='true'>\n                    check\n                  </i>\n                </span>\n              </button>\n            </li>\n          ))}\n        </ul>\n        <div className='searchPrompt__button-wrapper'>\n          <button\n            className='button link__color--primary button__type--secondary button__size--base searchPrompt__clear-filter-button'\n            onClick={callBack.clear}>\n            Clear All\n          </button>\n          <button\n            className='button button__color--primary button__type--primary button__size--base searchPrompt__apply-filter-button'\n            onClick={callBack.apply}>\n            Apply\n          </button>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default SubFilters\n","import React, { useMemo, useState, useEffect } from 'react'\n\nimport { useDebounce, defaults, filtersJoint } from '../../Utils/utils'\nimport { IPromptFilter, ISubPromptFilter } from '../../Utils/interface'\nimport IProps from './interface'\nimport ContentTypeFilter from '../../Element/ContentTypeFilter/ContentTypeFilter'\nimport CurrentQuickLinks from './CurrentQuickLinks'\nimport AutoCompletes, {\n  getAutoCompletes,\n} from '../../Element/AutoCompletes/AutoCompletes'\nimport SubFilters from './SubFilters'\nimport { IAutoCompleteItem } from '../../Element/AutoCompletes/interface'\n\nconst SearchPrompt = (props: IProps) => {\n  const {\n    baseURL = '',\n    resultsURL,\n    introText,\n    placeholders,\n    promptContentTypes,\n  } = props\n\n  const [currentContentType, setContentType] = useState<string | null>(null)\n  const [filtersDropdownOpen, setfiltersDropdown] = useState<boolean>(false)\n  const [searchInput, setSearchInput] = useState<string>('')\n  const [autoCompletes, setAutoCompletes] = useState<\n    { items: IAutoCompleteItem[]; suggestions: string[] } | undefined\n  >()\n  const [filters, setFilters] = useState<IPromptFilter | null>(null)\n  const [placeholder, setPlaceholder] = useState(placeholders.default)\n  const [tempFilters, setTempFilters] = useState<IPromptFilter | null>(null)\n  const debouncedSearchTerm = useDebounce(searchInput, 700)\n\n  /**\n   * This reads the current filters selected and returns an array of their values.\n   * To be used in data sent to the back-end.\n   * @returns string[]\n   */\n  const getSelectedFilters = () => {\n    const appliedFilters: ISubPromptFilter[] | undefined =\n      filters?.options.filter((option: ISubPromptFilter) => option.selected)\n    const filtersList: string[] = []\n    appliedFilters?.map((filter) => {\n      filtersList.push(filter.value)\n    })\n    return filtersList\n  }\n\n  const toggleDropdown = () => {\n    setfiltersDropdown(!filtersDropdownOpen)\n  }\n\n  const filtersCount = useMemo(() => {\n    return filters?.options.filter((option) => option.selected).length\n  }, [filters])\n\n  const currentQuickLinks = useMemo(() => {\n    return (\n      promptContentTypes.find((item) => item.value === currentContentType)\n        ?.quicklinks || null\n    )\n  }, [currentContentType])\n\n  const clearInput = () => {\n    setSearchInput('')\n  }\n\n  const currentGroupFacet = useMemo(() => {\n    return promptContentTypes.find((item) => item.value === currentContentType)\n      ?.filters\n  }, [currentContentType])\n\n  const clearFilters = () => {\n    if (filters) {\n      setFilters({\n        ...filters,\n        options: filters?.options.map((option) => ({\n          ...option,\n          selected: false,\n        })),\n      })\n\n      setfiltersDropdown(false)\n    }\n  }\n\n  const applyFilters = () => {\n    setFilters(tempFilters)\n    setfiltersDropdown(false)\n  }\n\n  const selectFilterOption = ({ value }) => {\n    if (tempFilters) {\n      const updatedFilters: IPromptFilter | null = { ...tempFilters }\n      const updatedOptions = updatedFilters?.options.map((option) => {\n        if (option.value === value) {\n          return { ...option, selected: !option.selected }\n        }\n        return option\n      })\n      updatedFilters.options = updatedOptions\n      setTempFilters(updatedFilters)\n    }\n  }\n\n  const handleContentTypeChange = (value: string) => {\n    setContentType(value)\n    setfiltersDropdown(false)\n  }\n\n  const sendToResultsPage = () => {\n    if (searchInput.length > 0) {\n      const body = {\n        term: searchInput,\n        group: currentContentType || defaults.group,\n        filters: getSelectedFilters().join(filtersJoint),\n      }\n\n      const bodyToParams = new URLSearchParams(body).toString()\n      location.href = `${resultsURL}?${bodyToParams}`\n    }\n  }\n\n  /**\n   * This listens to key strokes in the search input, and if there is a search term, and the enter key is hit, it submits the search\n   * @param key string\n   */\n  const supportEnterKey = (key: string) => {\n    if (searchInput.length > 0 && key === 'Enter') {\n      sendToResultsPage()\n    }\n  }\n\n  useEffect(() => {\n    if (debouncedSearchTerm) {\n      // Query API and populate the auto completes array\n      getAutoCompletes({\n        baseURL,\n        searchTerm: debouncedSearchTerm,\n        contentType: currentContentType,\n        callBack: setAutoCompletes,\n      })\n    }\n  }, [debouncedSearchTerm])\n\n  useEffect(() => {\n    setFilters(\n      promptContentTypes.find((item) => item.value === currentContentType)\n        ?.filters || null\n    )\n    setPlaceholder(\n      placeholders[(currentContentType || '').toLowerCase()] ||\n        placeholders.default\n    )\n  }, [currentContentType])\n\n  useEffect(() => {\n    // Clear the auto-complete array\n    setAutoCompletes(undefined)\n  }, [searchInput, currentContentType])\n\n  useEffect(() => {\n    if (filtersDropdownOpen) setTempFilters(filters)\n  }, [filtersDropdownOpen])\n\n  return (\n    <div className='searchPrompt'>\n      <div className={`searchPrompt__inner`}>\n        <div className='searchPrompt__heading-wrapper'>\n          <div className='searchPrompt__heading'>{introText}</div>\n          <ContentTypeFilter\n            groupFacets={promptContentTypes}\n            callBack={(value: string) => handleContentTypeChange(value)}\n            allowUnselect\n            isHeader\n          />\n        </div>\n        <div className='searchPrompt__form-wrapper'>\n          <div>\n            <div className='searchPrompt__search-input-wrapper'>\n              <label\n                htmlFor='global-search'\n                className='sr-only'\n                id='global-search-label'>\n                Search:\n              </label>\n              <input\n                type='text'\n                id='global-search'\n                aria-controls='suggestions-list'\n                aria-labelledby='global-search-label'\n                className='searchPrompt__search-input'\n                placeholder={placeholder}\n                value={searchInput}\n                onChange={(e) => {\n                  setSearchInput(e.target.value)\n                }}\n                onKeyUp={(e) => supportEnterKey(e.key)}\n                autoComplete='off'\n              />\n              {searchInput?.length ? (\n                <button\n                  className='button button__color--tertiary button__type--secondary button__size--base button__icon searchPrompt__input-clear-button'\n                  aria-label='clear input'\n                  onClick={clearInput}\n                  tabIndex={0}>\n                  <i className='searchPrompt__clear-icon' aria-hidden='true'>\n                    close\n                  </i>\n                </button>\n              ) : null}\n              {currentGroupFacet && typeof filtersCount === 'number' && (\n                <SubFilters\n                  filtersCount={filtersCount}\n                  currentGroupFacetName={currentGroupFacet.name}\n                  filtersDropdownOpen={filtersDropdownOpen}\n                  tempFilters={tempFilters}\n                  callBack={{\n                    dropdown: toggleDropdown,\n                    select: selectFilterOption,\n                    clear: clearFilters,\n                    apply: applyFilters,\n                  }}\n                />\n              )}\n              <button\n                className='button button__color--primary button__type--primary button__size--base button__icon searchPrompt__input-search-button'\n                tabIndex={0}\n                onClick={() => sendToResultsPage()}>\n                <i className='icon__lg' aria-hidden='true'>\n                  search\n                </i>\n              </button>\n            </div>\n            <button\n              className='button button__color--primary button__type--primary button__size--base button__fullWidth searchPrompt__input-search-button-mobile'\n              onClick={() => sendToResultsPage()}>\n              <span className='searchPrompt__input-button-mobile-content'>\n                Search\n                <i className='icon__lg' aria-hidden='true'>\n                  search\n                </i>\n              </span>\n            </button>\n          </div>\n          {searchInput &&\n          (autoCompletes?.items || autoCompletes?.suggestions) ? (\n            <AutoCompletes\n              items={autoCompletes.items}\n              suggestions={autoCompletes.suggestions}\n              searchTerm={searchInput}\n              suggestionsCallBack={setSearchInput}\n            />\n          ) : null}\n        </div>\n        {currentQuickLinks?.links.length && (\n          <CurrentQuickLinks\n            links={currentQuickLinks.links}\n            label={currentQuickLinks.label}\n          />\n        )}\n      </div>\n    </div>\n  )\n}\n\nexport default SearchPrompt\n"],"names":["serverURL","defaults","error","minSearchString","group","groupCourses","pageSize","authorizedKeys","sortOptions","name","label","prefix","optionsLabel","clearFlag","filter","status","END_POINTS","search","concat","autocomplete","courses","filtersJoint","dataFetcher","endpoint","body","__awaiter","response","fetch","method","headers","JSON","stringify","_a","sent","ok","Error","data","json","useDebounce","inputValue","delay","__read","useState","debouncedValue","setDebouncedValue","useEffect","handler","setTimeout","clearTimeout","getType","obj","lowerCaseTheFirstLetter","str","toLowerCase","slice","type","_typeof","Object","prototype","toString","call","replace","validateAutoCompleteData","defaultResponse","results","suggestions","log","updatedResponse","__assign","length","tempInvalidResults_2","map","result","contentType","title","url","push","__spreadArray","Set","entry","tempInvalidSuggestions_1","suggestion","hasOwn","hasOwnProperty","classNames","classes","i","arguments","arg","appendClass","parseValue","Array","isArray","apply","includes","key","value","newClass","module","exports","window","ContentTypeFilter","props","introText","groupFacets","callBack","_b","allowUnselect","_c","isHeader","preSelected","_d","selectedValue","setSelectedValue","handleSelect","React","createElement","className","role","id","groupFacet","count","disabled","undefined","onClick","toLocaleString","CurrentQuickLinks","links","link","text","href","target","getAutoCompletes","baseURL","searchTerm","Term","Group","Filters","validData","console","aggregatedAutocompleteItems","items","AutoComplete","item","regex","RegExp","split","matches","match","AutoCompletes","suggestionsCallBack","tabIndex","index","e","preventDefault","SubFilters","currentGroupFacetName","filtersCount","filtersDropdownOpen","tempFilters","dropdown","options","option","select","selected","clear","SearchPrompt","resultsURL","placeholders","promptContentTypes","currentContentType","setContentType","setfiltersDropdown","searchInput","setSearchInput","_e","autoCompletes","setAutoCompletes","_f","filters","setFilters","_g","placeholder","setPlaceholder","_h","setTempFilters","debouncedSearchTerm","getSelectedFilters","appliedFilters","filtersList","toggleDropdown","useMemo","currentQuickLinks","find","quicklinks","clearInput","currentGroupFacet","clearFilters","applyFilters","selectFilterOption","updatedFilters","updatedOptions","handleContentTypeChange","sendToResultsPage","term","join","bodyToParams","URLSearchParams","location","supportEnterKey","htmlFor","onChange","onKeyUp","autoComplete"],"mappings":"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","x_google_ignoreList":[1]}