docs: enable and send algolia events (#12416)
This commit is contained in:
1 parent
c2914f2ebd
commit
7c7e44d9fe
3 files changed
+3
-165
No files matched your search
@@ -102,7 +102,7 @@ export const SearchHits = ({
|
|||||||
setNoResults,
|
setNoResults,
|
||||||
checkInternalPattern,
|
checkInternalPattern,
|
||||||
}: SearchHitsProps) => {
|
}: SearchHitsProps) => {
|
||||||
const { items: hits } = useHits<HitType>()
|
const { items: hits, sendEvent } = useHits<HitType>()
|
||||||
const { status } = useInstantSearch()
|
const { status } = useInstantSearch()
|
||||||
const { setIsOpen } = useSearch()
|
const { setIsOpen } = useSearch()
|
||||||
|
|
||||||
@@ -182,6 +182,7 @@ export const SearchHits = ({
|
|||||||
className="absolute top-0 left-0 h-full w-full"
|
className="absolute top-0 left-0 h-full w-full"
|
||||||
target="_self"
|
target="_self"
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
|
sendEvent("click", item, "Search Result Clicked")
|
||||||
if (checkIfInternal(item.url)) {
|
if (checkIfInternal(item.url)) {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
window.location.href = item.url
|
window.location.href = item.url
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ export const Search = ({
|
|||||||
future={{
|
future={{
|
||||||
preserveSharedStateOnUnmount: true,
|
preserveSharedStateOnUnmount: true,
|
||||||
}}
|
}}
|
||||||
|
insights={true}
|
||||||
>
|
>
|
||||||
<div className={clsx("bg-medusa-bg-base flex z-[1]")}>
|
<div className={clsx("bg-medusa-bg-base flex z-[1]")}>
|
||||||
{/* @ts-expect-error React v19 doesn't see this type as a React element */}
|
{/* @ts-expect-error React v19 doesn't see this type as a React element */}
|
||||||
|
|||||||
@@ -84,170 +84,6 @@ export const SearchProvider = ({
|
|||||||
const algoliaClient = algoliasearch(algolia.appId, algolia.apiKey)
|
const algoliaClient = algoliasearch(algolia.appId, algolia.apiKey)
|
||||||
return {
|
return {
|
||||||
...algoliaClient,
|
...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<string, unknown>
|
|
||||||
// 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<string, unknown>
|
|
||||||
// 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<ExpandedHits>(newRequests)
|
|
||||||
// .then((response) => {
|
|
||||||
// if (newRequests.length === 1) {
|
|
||||||
// return response
|
|
||||||
// }
|
|
||||||
// // combine results of the same index and return the results
|
|
||||||
// const resultsByIndex: {
|
|
||||||
// [indexName: string]: SearchResponse<ExpandedHits>
|
|
||||||
// } = {}
|
|
||||||
// // 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<any>
|
|
||||||
// })
|
|
||||||
// },
|
|
||||||
}
|
}
|
||||||
}, [algolia.appId, algolia.apiKey])
|
}, [algolia.appId, algolia.apiKey])
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user