/* eslint-disable @typescript-eslint/ban-ts-comment */ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck import { createAutocomplete } from '@algolia/autocomplete-core'; import { getAlgoliaResults } from '@algolia/autocomplete-preset-algolia'; import { Dialog, Transition } from '@headlessui/react'; import algoliasearch from 'algoliasearch/lite'; import clsx from 'clsx'; import { useRouter } from 'next/router'; import { forwardRef, Fragment, useEffect, useId, useRef, useState, } from 'react'; import clsxm from '@/lib/clsxm'; const searchClient = algoliasearch( process.env.NEXT_PUBLIC_DOCSEARCH_APP_ID, process.env.NEXT_PUBLIC_DOCSEARCH_API_KEY ); function useAutocomplete() { const id = useId(); const router = useRouter(); const [autocompleteState, setAutocompleteState] = useState({}); const [autocomplete] = useState(() => createAutocomplete({ id, placeholder: 'Find something...', defaultActiveItemId: 0, onStateChange({ state }) { setAutocompleteState(state); }, shouldPanelOpen({ state }) { return state.query !== ''; }, navigator: { navigate({ itemUrl }) { autocomplete.setIsOpen(true); router.push(itemUrl); }, }, /* @ts-ignore */ getSources() { return [ { sourceId: 'documentation', getItemInputValue({ item }) { return item.query; }, getItemUrl({ item }) { if (item.url) { const url = new URL(item.url as URL); return `${url.pathname}${url.hash}`; } return ''; }, onSelect({ itemUrl }) { router.push(itemUrl); }, getItems({ query }) { return getAlgoliaResults({ searchClient, queries: [ { query, indexName: process.env.NEXT_PUBLIC_DOCSEARCH_INDEX_NAME, params: { hitsPerPage: 5, highlightPreTag: '', highlightPostTag: '', }, }, ], }); }, }, ]; }, }) ); return { autocomplete, autocompleteState }; } function resolveResult(result) { const allLevels = Object.keys(result.hierarchy); const hierarchy = Object.entries(result._highlightResult.hierarchy).filter( ([, { value }]) => Boolean(value) ); const levels = hierarchy.map(([level]) => level); const level = result.type === 'content' ? levels.pop() : levels .filter( (level) => allLevels.indexOf(level) <= allLevels.indexOf(result.type) ) .pop(); return { titleHtml: result._highlightResult.hierarchy[level].value, hierarchyHtml: hierarchy .slice(0, levels.indexOf(level)) .map(([, { value }]) => value), }; } function SearchIcon(props) { return ( ); } function NoResultsIcon(props) { return ( ); } function LoadingIcon(props) { const id = useId(); return ( ); } function SearchResult({ result, resultIndex, autocomplete, collection }) { const id = useId(); const { titleHtml, hierarchyHtml } = resolveResult(result); return (
Nothing found for{' '} ‘{query}’ . Please try again.