From 7c7e44d9fe82db718f18e9476f8477ab94922e25 Mon Sep 17 00:00:00 2001 From: Shahed Nasser Date: Thu, 8 May 2025 18:59:21 +0300 Subject: [PATCH] docs: enable and send algolia events (#12416) --- .../src/components/Search/Hits/index.tsx | 3 +- .../docs-ui/src/components/Search/index.tsx | 1 + .../docs-ui/src/providers/Search/index.tsx | 164 ------------------ 3 files changed, 3 insertions(+), 165 deletions(-) diff --git a/www/packages/docs-ui/src/components/Search/Hits/index.tsx b/www/packages/docs-ui/src/components/Search/Hits/index.tsx index 2e61716f27..b431a795b5 100644 --- a/www/packages/docs-ui/src/components/Search/Hits/index.tsx +++ b/www/packages/docs-ui/src/components/Search/Hits/index.tsx @@ -102,7 +102,7 @@ export const SearchHits = ({ setNoResults, checkInternalPattern, }: SearchHitsProps) => { - const { items: hits } = useHits() + const { items: hits, sendEvent } = useHits() const { status } = useInstantSearch() const { setIsOpen } = useSearch() @@ -182,6 +182,7 @@ export const SearchHits = ({ className="absolute top-0 left-0 h-full w-full" target="_self" onClick={(e) => { + sendEvent("click", item, "Search Result Clicked") if (checkIfInternal(item.url)) { e.preventDefault() window.location.href = item.url diff --git a/www/packages/docs-ui/src/components/Search/index.tsx b/www/packages/docs-ui/src/components/Search/index.tsx index d5a9f51720..8dd684ffe0 100644 --- a/www/packages/docs-ui/src/components/Search/index.tsx +++ b/www/packages/docs-ui/src/components/Search/index.tsx @@ -107,6 +107,7 @@ export const Search = ({ future={{ preserveSharedStateOnUnmount: true, }} + insights={true} >
{/* @ts-expect-error React v19 doesn't see this type as a React element */} diff --git a/www/packages/docs-ui/src/providers/Search/index.tsx b/www/packages/docs-ui/src/providers/Search/index.tsx index d9b1bfb43e..03f8c1a3d3 100644 --- a/www/packages/docs-ui/src/providers/Search/index.tsx +++ b/www/packages/docs-ui/src/providers/Search/index.tsx @@ -84,170 +84,6 @@ export const SearchProvider = ({ const algoliaClient = algoliasearch(algolia.appId, algolia.apiKey) return { ...algoliaClient, - // async search(searchParams) { - // const requests = - // "requests" in searchParams ? searchParams.requests : searchParams - // // always send this request, which is the main request with no filters - // const mainRequest = requests[0] - // const params = (mainRequest.params || {}) as Record - // if (!params.query) { - // return Promise.resolve({ - // results: requests.map(() => ({ - // hits: [], - // nbHits: 0, - // nbPages: 0, - // page: 0, - // processingTimeMS: 0, - // hitsPerPage: 0, - // exhaustiveNbHits: false, - // query: "", - // params: "", - // })), - // }) - // } - - // // retrieve only requests that have filters - // // this is to ensure that we show no result if no filter is selected - // const requestsWithFilters = requests.filter((item) => { - // if ( - // !item.params || - // typeof item.params !== "object" || - // !("facetFilters" in item.params) - // ) { - // return false - // } - - // const facetFilters = item.params.facetFilters as string[] - - // // if no tag filters are specified, there's still one item, - // // which is an empty array - // return facetFilters.length >= 1 && facetFilters[0].length > 0 - // }) - - // // check whether a query is entered in the search box - // const noQueries = requestsWithFilters.every( - // (item) => - // !item.facetQuery && - // (!item.params || - // typeof item.params !== "object" || - // !("query" in item.params) || - // !item.params.query) - // ) - - // const newRequests: typeof requestsWithFilters = [mainRequest] - // if (!noQueries) { - // // split requests per tags - // for (const request of requestsWithFilters) { - // const params = request.params as Record - // const facetFilters = (params.facetFilters as string[][])[0] - - // // if only one tag is selected, keep the request as-is - // if (facetFilters.length === 1) { - // newRequests.push(request) - - // continue - // } - - // // if multiple tags are selected, split the tags - // // to retrieve a small subset of results per each tag. - // newRequests.push( - // ...facetFilters.map((tag) => { - // // get the filter's details in case it has custom hitsPerPage - // const filterDetails = searchFilters.find( - // (item) => `_tags:${item.value}` === tag - // ) - // return { - // ...request, - // params: { - // ...params, - // facetFilters: [tag], - // }, - // hitsPerPage: filterDetails?.hitsPerPage || 3, - // } - // }) - // ) - // } - // } - - // return algoliaClient - // .search(newRequests) - // .then((response) => { - // if (newRequests.length === 1) { - // return response - // } - // // combine results of the same index and return the results - // const resultsByIndex: { - // [indexName: string]: SearchResponse - // } = {} - // // extract the response of the main request - // const mainResult = response.results[0] - - // response.results.forEach((result, indexNum) => { - // if (indexNum === 0) { - // // ignore the main request's result - // return - // } - // const resultIndex = "index" in result ? result.index : undefined - // const resultHits = "hits" in result ? result.hits : [] - - // if (!resultIndex) { - // return - // } - - // resultsByIndex[resultIndex] = { - // ...result, - // ...(resultsByIndex[resultIndex] || {}), - // hits: [ - // ...(resultsByIndex[resultIndex]?.hits || []), - // ...resultHits, - // ], - // nbHits: - // (resultsByIndex[resultIndex]?.nbHits || 0) + - // resultHits.length, - // } - // }) - - // const newResults = Object.values(resultsByIndex).flatMap( - // (result) => ({ - // ...result, - // hits: ("hits" in result ? result.hits : []).sort((a, b) => { - // const typosA = a._rankingInfo?.nbTypos || 0 - // const typosB = b._rankingInfo?.nbTypos || 0 - // const tagASortOrder = - // searchFilters.find((item) => - // a._tags.find((tag) => tag === item.value) - // )?.internalSortOrder || 0 - // const tagBSortorder = - // searchFilters.find((item) => - // b._tags.find((tag) => tag === item.value) - // )?.internalSortOrder || 0 - // if ( - // a.type === "lvl1" && - // typosA <= typosB && - // tagASortOrder >= tagBSortorder - // ) { - // return -1 - // } - - // if ( - // b.type === "lvl1" && - // typosB <= typosA && - // tagBSortorder >= tagASortOrder - // ) { - // return 1 - // } - - // return 0 - // }), - // }) - // ) - - // return { - // // append the results with the main request's results - // results: [mainResult, ...newResults], - // } as SearchResponses - // }) - // }, } }, [algolia.appId, algolia.apiKey])