{"version":3,"file":"url-manager-7b9dc7f9.js","sources":["../../../../src/scripts/coveo/components/second-call-context.tsx","../../../../src/scripts/coveo/components/result-list.tsx","../../../../src/scripts/coveo/components/clear.tsx","../../../../src/scripts/coveo/components/url-manager.tsx"],"sourcesContent":["import { createContext } from 'react';\nimport { Result } from '@coveo/headless';\n\nconst SecondCall = createContext<{\n secondCall: boolean;\n selectedPage: number;\n setSelectedPage: React.Dispatch> | undefined;\n limitValue: number;\n originalContext: string | undefined;\n originalResults: Result[];\n filteredResults: Result[];\n selectedFacets: {\n facetId: string;\n value: string | { start: number; end: number };\n }[];\n setSelectedFacets:\n | React.Dispatch<\n React.SetStateAction<\n { facetId: string; value: string | { start: number; end: number } }[]\n >\n >\n | undefined;\n setFilteredResults:\n | React.Dispatch>\n | undefined;\n setOriginalContext:\n | React.Dispatch>\n | undefined;\n}>({\n secondCall: false,\n limitValue: 20,\n originalContext: undefined,\n setOriginalContext: undefined,\n originalResults: [],\n filteredResults: [],\n setFilteredResults: undefined,\n selectedPage: 1,\n setSelectedPage: undefined,\n selectedFacets: [],\n setSelectedFacets: undefined\n});\n\nexport default SecondCall;\n","import React, { useContext, useEffect, useState } from 'react';\nimport {\n Result,\n ResultList as ResultListType,\n ResultTemplatesManager,\n SearchEngine,\n loadSearchActions,\n loadSearchAnalyticsActions\n} from '@coveo/headless';\nimport { headlessEngine } from '../engine';\nimport ErrorMessage from '../../react-components/listing-states/error';\nimport Loader from '../../react-components/listing-states/loader';\nimport SecondCall from './second-call-context';\nimport { maxResultsPerPage } from '../controllers/controller';\n\ntype ResultListProps = {\n className?: string;\n additionalSettings?: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n };\n resultTemplatesManager: ResultTemplatesManager;\n controller: ResultListType;\n preventFirstCall?: boolean;\n keyword?: string;\n resultsCustomizer?: (result: Result[]) => Result[];\n};\n\nfunction ResultList({\n className,\n additionalSettings,\n resultTemplatesManager,\n controller,\n preventFirstCall,\n keyword,\n resultsCustomizer\n}: ResultListProps) {\n const classes = className || undefined;\n const { dataset } = document.getElementsByClassName(\n 'coveo-listing__data-wrapper'\n )[0] as HTMLElement;\n const errorMessage = dataset.errorMessage as string;\n const noResultsMessage = dataset.noResultsMessage as string;\n const noResultsKeywordMessage = dataset.noResultsKeywordMessage as string;\n const noResultsAdditionalMessage =\n dataset.noResultsAdditionalMessage as string;\n const loaderText = dataset.loaderText as string;\n const [state, setState] = useState(controller.state);\n const [results, setResults] = useState([]);\n const secondCallContext = useContext(SecondCall);\n\n useEffect(() => {\n if (!preventFirstCall) {\n const { logInterfaceLoad } = loadSearchAnalyticsActions(\n headlessEngine as SearchEngine\n );\n const { executeSearch } = loadSearchActions(\n headlessEngine as SearchEngine\n );\n (headlessEngine as SearchEngine).dispatch(\n executeSearch(logInterfaceLoad())\n );\n }\n controller.subscribe(() => setState(controller.state));\n }, [controller]);\n\n useEffect(() => {\n if (resultsCustomizer) {\n setResults(resultsCustomizer(state.results));\n } else {\n setResults(state.results);\n }\n }, [state.results]);\n\n if (state.isLoading) {\n return ;\n }\n\n if (state.hasError) {\n ;\n }\n\n if (!results.length) {\n return (\n \n );\n }\n\n const renderResult = (result: Result, index: number) => {\n const customResult = {\n ...result,\n index: index + 1,\n additionalSettings\n };\n\n const template = resultTemplatesManager.selectTemplate(\n customResult\n ) as CallableFunction;\n\n if (!template)\n throw new Error(`No result template provided for ${customResult.title}.`);\n\n return template(customResult);\n };\n\n return (\n
    \n {secondCallContext.secondCall\n ? secondCallContext.filteredResults.map((result, index) => {\n const page = secondCallContext.selectedPage;\n const start = (page - 1) * maxResultsPerPage;\n const end = page * maxResultsPerPage;\n\n if (index >= start && index < end)\n return renderResult(result, index);\n else return null;\n })\n : results?.map((result, index) => renderResult(result, index))}\n
\n );\n}\n\nexport default ResultList;\n","import React, { useState, useEffect } from 'react';\nimport {\n BreadcrumbManager,\n BreadcrumbManagerState,\n QuerySummary,\n QuerySummaryState\n} from '@coveo/headless';\nimport { headlessEngine } from '../engine';\nimport { facetBreadcrumb, querySummary } from '../controllers/controller';\nimport { createDataLayerString } from '../../helpers/helpers';\n\ntype ClearProps = {\n label: string;\n};\n\nfunction Clear({ label }: ClearProps) {\n const [controller, setController] = useState(null);\n const [state, setState] = useState(null);\n\n const [, setSearchController] = useState(null);\n const [searchState, setSearchState] = useState(\n null\n );\n\n useEffect(() => {\n if (headlessEngine) {\n setController(facetBreadcrumb as BreadcrumbManager);\n setState((facetBreadcrumb as BreadcrumbManager).state);\n (facetBreadcrumb as BreadcrumbManager).subscribe(() => {\n setState((facetBreadcrumb as BreadcrumbManager).state);\n });\n\n setSearchController(querySummary as QuerySummary);\n setSearchState((querySummary as QuerySummary).state);\n (querySummary as QuerySummary).subscribe(() => {\n setSearchState((querySummary as QuerySummary).state);\n });\n }\n }, []);\n\n const handleClearAllFilters = () => {\n if (controller) controller.deselectAll();\n };\n\n return (\n <>\n {state?.hasBreadcrumbs || searchState?.hasQuery ? (\n \n {label}\n \n ) : null}\n \n );\n}\n\nexport default Clear;\n","import {\n SearchEngine,\n buildSearchStatus,\n buildUrlManager\n} from '@coveo/headless';\n\n/**\n * Search parameters, defined in the url's hash, should not be restored until all components are registered.\n *\n * Additionally, a search should not be executed until search parameters are restored.\n *\n * @param engine - A headless search engine instance.\n * @returns An unsubscribe function to remove attached event listeners.\n */\n\nexport function bindUrlManager(engine: SearchEngine) {\n const fragment = window.location.hash.slice(1);\n const urlManager = buildUrlManager(engine, {\n initialState: { fragment }\n });\n\n const searchStatus = buildSearchStatus(engine);\n\n const onHashChange = () => {\n const fragment = window.location.hash.slice(1);\n urlManager.synchronize(fragment);\n };\n\n window.addEventListener('hashchange', onHashChange);\n const unsubscribeManager = urlManager.subscribe(() => {\n const hash = `#${urlManager.state.fragment}`;\n if (!searchStatus.state.firstSearchExecuted) {\n history.replaceState(null, document.title, hash);\n\n return;\n }\n\n history.pushState(null, document.title, hash);\n });\n\n return () => {\n window.removeEventListener('hashchange', onHashChange);\n unsubscribeManager();\n };\n}\n"],"names":["SecondCall","createContext","ResultList","className","additionalSettings","resultTemplatesManager","controller","preventFirstCall","keyword","resultsCustomizer","classes","dataset","errorMessage","noResultsMessage","noResultsKeywordMessage","noResultsAdditionalMessage","loaderText","state","setState","useState","results","setResults","secondCallContext","useContext","useEffect","logInterfaceLoad","loadSearchAnalyticsActions","headlessEngine","executeSearch","loadSearchActions","React","Loader","ErrorMessage","renderResult","result","index","customResult","template","page","start","maxResultsPerPage","end","Clear","label","setController","setSearchController","searchState","setSearchState","facetBreadcrumb","querySummary","handleClearAllFilters","createDataLayerString","bindUrlManager","engine","fragment","urlManager","buildUrlManager","searchStatus","buildSearchStatus","onHashChange","unsubscribeManager","hash"],"mappings":"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"}