{"version":3,"file":"error-ffd3a631.js","sources":["../../../../src/scripts/coveo/components/searchbox.tsx","../../../../src/scripts/coveo/components/did-you-mean.tsx","../../../../src/scripts/react-components/listing-states/error.tsx"],"sourcesContent":["import React, {\n  useEffect,\n  useState,\n  FunctionComponent,\n  useId,\n  useRef\n} from 'react';\nimport { rovingIndex } from 'roving-ux';\nimport { SearchBox as HeadlessSearchBox } from '@coveo/headless';\n\ninterface SearchBoxProps {\n  controller: HeadlessSearchBox;\n  searchLabel: string;\n  searchPlaceholder: string;\n  submitLabel: string;\n  clearLabel: string;\n  maxSuggestions?: number;\n  onSearchSubmit?: (value: string, type?: string) => void;\n}\n\nexport const SEARCH_BOX_EVENTS = Object.freeze({\n  updateDidYouMean: 'searchbox:updateDidYouMean'\n});\n\nexport const SearchBox: FunctionComponent<SearchBoxProps> = props => {\n  const id = useId();\n  const {\n    controller,\n    searchLabel,\n    searchPlaceholder,\n    submitLabel,\n    clearLabel,\n    maxSuggestions,\n    onSearchSubmit\n  } = props;\n  const [state, setState] = useState(controller.state);\n  const [value, setValue] = useState(controller.state.value);\n  const [focus, setFocus] = useState(false);\n  const listRef = useRef<HTMLUListElement>(null);\n  const input = useRef<HTMLInputElement>(null);\n\n  const isEnterKey = (e: React.KeyboardEvent<HTMLDivElement>) =>\n    e.key === 'Enter';\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n    if (input.current === document.activeElement) {\n      if (isEnterKey(e)) {\n        e.preventDefault();\n        onSearchSubmit && onSearchSubmit(value, 'search box');\n        controller.updateText(value);\n        setFocus(false);\n        controller.submit();\n      }\n\n      if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n        e.preventDefault();\n        if (listRef.current) {\n          if (e.key === 'ArrowDown') {\n            const firstElement = listRef.current.querySelector('li');\n            if (firstElement) {\n              firstElement.querySelector('button')?.focus();\n              setFocus(true);\n            }\n          } else {\n            const lastElement = listRef.current.querySelector('li:last-child');\n            if (lastElement) {\n              (lastElement as HTMLLIElement).querySelector('button')?.focus();\n              setFocus(true);\n            }\n          }\n        }\n      }\n\n      if (e.key === 'Escape') {\n        e.preventDefault();\n        setFocus(false);\n        input.current?.blur();\n      }\n    } else if (e.key === 'Escape') {\n      e.preventDefault();\n      input.current?.focus();\n      setFocus(false);\n    }\n  };\n\n  const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    if (e.target.value.length > 2) {\n      controller.updateText(e.target.value);\n      setFocus(true);\n    }\n\n    if (e.target.value.length === 0) {\n      handleClear();\n    }\n  };\n\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    setValue(e.target.value);\n    if (e.target.value.length > 2) {\n      controller.updateText(e.target.value);\n    }\n  };\n\n  const handleSuggestionClick = (value: string) => {\n    onSearchSubmit && onSearchSubmit(value, 'suggestion box');\n    setValue(value);\n    controller.selectSuggestion(value);\n  };\n\n  const handleMouseDown = (e: Event) => {\n    if ((e.target as HTMLElement)?.closest('.searchbox__input-wrapper')) {\n      return;\n    } else {\n      setFocus(false);\n    }\n  };\n\n  const handleInputBlur = (e: React.FocusEvent<HTMLElement>) => {\n    if (\n      !(e.relatedTarget as HTMLElement)?.closest('.searchbox__input-wrapper')\n    ) {\n      setFocus(false);\n    }\n  };\n\n  const handleDidYouMean = (e: CustomEventInit) => {\n    const query = e.detail.query;\n    setValue(query);\n    onSearchSubmit && onSearchSubmit(query);\n  };\n\n  const handleClear = (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n    e?.preventDefault();\n    setValue('');\n    onSearchSubmit && onSearchSubmit('');\n    controller.updateText('');\n    controller.submit();\n  };\n\n  const handleSearchSubmit = (value: string) => {\n    onSearchSubmit && onSearchSubmit(value, 'search box');\n    controller.updateText(value);\n    setFocus(false);\n    controller.submit();\n  };\n\n  useEffect(() => {\n    controller.subscribe(() => setState(controller.state));\n    window.addEventListener(\n      SEARCH_BOX_EVENTS.updateDidYouMean,\n      handleDidYouMean\n    );\n    window.addEventListener('mousedown', e => handleMouseDown(e));\n\n    return () => {\n      window.removeEventListener(\n        SEARCH_BOX_EVENTS.updateDidYouMean,\n        handleDidYouMean\n      );\n\n      window.removeEventListener('mousedown', e => handleMouseDown(e));\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!value) {\n      setValue(state.value);\n      onSearchSubmit && onSearchSubmit(state.value);\n    }\n  }, [state.value]);\n\n  useEffect(() => {\n    if (listRef.current) {\n      rovingIndex({\n        element: listRef.current,\n        target: '.predictive-search__item'\n      });\n    }\n  }, [state.suggestions]);\n\n  return (\n    <div\n      className=\"searchbox\"\n      onKeyDown={e => {\n        handleKeyDown(e);\n      }}\n    >\n      <div className=\"field \">\n        <label className=\"field__label \" htmlFor={`searchbox-${id}`}>\n          {searchLabel}\n        </label>\n        <div className=\"searchbox__input-wrapper\">\n          <input\n            className=\"field__input\"\n            id={`searchbox-${id}`}\n            name={`searchbox-${id}`}\n            placeholder={searchPlaceholder}\n            value={value}\n            onChange={handleChange}\n            onInput={handleInputChange}\n            onFocus={() => setFocus(true)}\n            ref={input}\n          />\n          {state.suggestions.length > 0 && value.length > 2 && focus && (\n            <ul\n              className=\"predictive-search__list\"\n              ref={listRef}\n              onFocus={() => setFocus(true)}\n              onBlur={handleInputBlur}\n            >\n              {state.suggestions.map((suggestion, index) => {\n                const value = suggestion.rawValue;\n                if (maxSuggestions && index >= maxSuggestions - 1) {\n                  return null;\n                }\n                return (\n                  <li key={value}>\n                    <button\n                      className=\"predictive-search__item\"\n                      title={suggestion.rawValue}\n                      onClick={() => handleSuggestionClick(value)}\n                      dangerouslySetInnerHTML={{\n                        __html: suggestion.highlightedValue\n                      }}\n                      onFocus={() => {\n                        setFocus(true);\n                      }}\n                    />\n                  </li>\n                );\n              })}\n            </ul>\n          )}\n        </div>\n        {value.length > 0 && (\n          <button\n            className=\"field__input-close\"\n            title={clearLabel}\n            onClick={handleClear}\n          >\n            <span className=\"sr-only\">{clearLabel}</span>\n          </button>\n        )}\n        <button\n          className=\"field__input-search\"\n          title={searchLabel}\n          onClick={() => handleSearchSubmit(value)}\n          disabled={state.value.length === 0}\n          onBlur={e => handleInputBlur(e)}\n        >\n          <span className=\"sr-only\">{submitLabel}</span>\n        </button>\n      </div>\n    </div>\n  );\n};\n","import React, { useState, useEffect } from 'react';\nimport {\n  DidYouMean,\n  buildDidYouMean,\n  QuerySummary,\n  SearchEngine,\n  ResultList,\n  SearchBox\n} from '@coveo/headless';\nimport { ExtendedWindowType, headlessEngine } from '../engine';\nimport { labelsObj, querySummary } from '../controllers/controller';\nimport { SEARCH_BOX_EVENTS } from './searchbox';\n\nexport const SITE_TYPES = Object.freeze({\n  searchListing: 'search-listing',\n  documentListing: 'document-listing'\n});\n\nconst REPLACE_PLACEHOLDERS = Object.freeze({\n  queryPlaceholder: '{{query}}',\n  total: '{{totalResults}}'\n});\n\ntype DidYouMeanProps = {\n  correctionOnly?: boolean;\n  hideOnNoResults?: boolean;\n  siteType?: string;\n  resultController?: ResultList;\n  searchBoxController?: SearchBox;\n  searchType?: string;\n};\n\nconst DidYouMean = ({\n  correctionOnly,\n  hideOnNoResults,\n  siteType,\n  resultController,\n  searchBoxController,\n  searchType\n}: DidYouMeanProps) => {\n  const controller: DidYouMean = buildDidYouMean(\n    headlessEngine as SearchEngine\n  );\n  const [state, setState] = useState(controller.state);\n  const [summaryState, setSummaryState] = useState(\n    (querySummary as QuerySummary).state\n  );\n\n  useEffect(() => {\n    controller.subscribe(() => setState(controller.state));\n    (querySummary as QuerySummary).subscribe(() =>\n      setSummaryState((querySummary as QuerySummary).state)\n    );\n  }, []);\n\n  useEffect(() => {\n    if (\n      resultController?.state.searchResponseId &&\n      searchBoxController?.state.value &&\n      siteType === SITE_TYPES.searchListing\n    ) {\n      const global = window as ExtendedWindowType;\n\n      const resultsCount = (querySummary as QuerySummary).state.total;\n      const searchTerm = state.originalQuery;\n      const didYouMeanKeyword = state.queryCorrection?.correctedQuery;\n\n      global?.dataLayer.push({\n        event: 'results_viewed',\n        event_category: 'results page viewed',\n        event_action: 'internal search',\n        event_attributes: {\n          results_count: resultsCount,\n          search_term: searchTerm,\n          did_you_mean_keyword: didYouMeanKeyword,\n          search_type: searchType\n        }\n      });\n    }\n\n    if (\n      resultController?.state.searchResponseId &&\n      searchBoxController?.state.value &&\n      siteType === SITE_TYPES.documentListing\n    ) {\n      const global = window as ExtendedWindowType;\n\n      global.dataLayer?.push({\n        event_action: resultController.state.hasResults ? 'success' : 'failure',\n        event_attributes: {\n          results_count: (querySummary as QuerySummary).state.total,\n          search_term: state.originalQuery,\n          search_type: searchType\n        },\n        event_category: 'site search',\n        event: 'document_library_search'\n      });\n    }\n  }, [resultController?.state.searchResponseId]);\n\n  if (state?.originalQuery.length === 0) {\n    return <></>;\n  }\n\n  const handleClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n    e.preventDefault();\n    controller.applyCorrection();\n    window.dispatchEvent(\n      new CustomEvent(SEARCH_BOX_EVENTS.updateDidYouMean, {\n        detail: {\n          query: state?.queryCorrection?.correctedQuery\n        },\n        bubbles: true\n      })\n    );\n  };\n\n  return (\n    <>\n      <div\n        className={`did-you-mean ${\n          hideOnNoResults && summaryState.total === 0\n            ? 'did-you-mean--hidden'\n            : ''\n        }`}\n      >\n        {!correctionOnly && (\n          <p className=\"did-you-mean__search\">{`${labelsObj.didYouMeanSearch\n            .replace(\n              REPLACE_PLACEHOLDERS.queryPlaceholder,\n              state?.originalQuery\n            )\n            .replace(REPLACE_PLACEHOLDERS.total, summaryState?.total)}`}</p>\n        )}\n        {state.hasQueryCorrection && (\n          <p className=\"did-you-mean__correction\">\n            <span>{labelsObj.didYouMeanCorrection}</span>{' '}\n            <button className=\"link--inline link--arrow\" onClick={handleClick}>\n              <span>{state?.queryCorrection?.correctedQuery}</span>\n              <p className=\"did-you-mean__question-mark\">?</p>\n            </button>\n          </p>\n        )}\n      </div>\n    </>\n  );\n};\n\nexport default DidYouMean;\n","import React from 'react';\nimport DidYouMean from '../../coveo/components/did-you-mean';\n\nexport type ErrorProps = {\n  errorMessage: string;\n  noResultsMessage: string;\n  noResultsKeywordMessage: string;\n  noResultsAdditionalMessage?: string;\n  keyword?: string;\n  showError?: boolean;\n  withDidYouMean?: boolean;\n};\n\nfunction Error({\n  errorMessage,\n  noResultsMessage,\n  noResultsKeywordMessage,\n  noResultsAdditionalMessage,\n  keyword,\n  showError,\n  withDidYouMean\n}: ErrorProps) {\n  return (\n    <div className=\"error-message\">\n      {showError ? (\n        <div\n          className=\"error-message__error rtf\"\n          dangerouslySetInnerHTML={{ __html: errorMessage }}\n        />\n      ) : (\n        <>\n          {keyword ? (\n            <div className=\"error-message__error\">\n              {noResultsKeywordMessage.replace('{{KEYWORD}}', keyword)}\n            </div>\n          ) : (\n            <div className=\"error-message__error\">{noResultsMessage}</div>\n          )}\n          {withDidYouMean && <DidYouMean correctionOnly={true} />}\n          {noResultsAdditionalMessage && (\n            <div\n              className=\"error-message__additional-message rtf\"\n              dangerouslySetInnerHTML={{ __html: noResultsAdditionalMessage }}\n            />\n          )}\n        </>\n      )}\n    </div>\n  );\n}\n\nexport default Error;\n"],"names":["SEARCH_BOX_EVENTS","SearchBox","props","id","useId","controller","searchLabel","searchPlaceholder","submitLabel","clearLabel","maxSuggestions","onSearchSubmit","state","setState","useState","value","setValue","focus","setFocus","listRef","useRef","input","isEnterKey","handleKeyDown","firstElement","_a","lastElement","_b","_c","_d","handleInputChange","handleClear","handleChange","handleSuggestionClick","handleMouseDown","handleInputBlur","handleDidYouMean","query","handleSearchSubmit","useEffect","rovingIndex","React","suggestion","index","SITE_TYPES","REPLACE_PLACEHOLDERS","DidYouMean","correctionOnly","hideOnNoResults","siteType","resultController","searchBoxController","searchType","buildDidYouMean","headlessEngine","summaryState","setSummaryState","querySummary","global","resultsCount","searchTerm","didYouMeanKeyword","handleClick","e","labelsObj","Error","errorMessage","noResultsMessage","noResultsKeywordMessage","noResultsAdditionalMessage","keyword","showError","withDidYouMean"],"mappings":"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"}