// import { insertBatch, search as searchDb } from '@lyrasearch/lyra'; // import type { ApiItemKind } from '@microsoft/api-extractor-model'; import { Dialog, useDialogState } from 'ariakit/dialog'; import { Command } from 'cmdk'; import { useRouter } from 'next/router'; import { useEffect, useMemo, useState } from 'react'; import { VscArrowRight, VscPackage, // VscSymbolClass, // VscSymbolEnum, // VscSymbolField, // VscSymbolInterface, // VscSymbolMethod, // VscSymbolProperty, // VscSymbolVariable, VscVersions, } from 'react-icons/vsc'; import { useKey } from 'react-use'; import useSWR from 'swr'; import { PACKAGES } from '~/util/constants'; import { fetcher } from '~/util/fetcher'; // function resolveIcon(item: keyof ApiItemKind) { // switch (item) { // case 'Class': // return ; // case 'Enum': // return ; // case 'Interface': // return ; // case 'Property': // return ; // case 'TypeAlias': // return ; // case 'Variables': // return ; // default: // return ; // } // } // const searchIndex: any[] = []; export function CmdkDialog() { const router = useRouter(); const dialog = useDialogState(); const [search, setSearch] = useState(''); const [page, setPage] = useState(''); const [packageName, setPackageName] = useState(''); // const [searchResults, setSearchResults] = useState([]); const { data: versions, isValidating } = useSWR( packageName ? `https://docs.discordjs.dev/api/info?package=${packageName}` : null, fetcher, ); // const { data: searchIndex } = useSWR( // packageName ? `http://localhost:3000/searchIndex/${packageName}-main-index.json` : null, // fetcher, // ); const packageCommandItems = useMemo( () => PACKAGES.map((pkg) => ( { setPackageName(pkg); setPage('version'); setSearch(''); }} >

{pkg}

)), [], ); const versionCommandItems = useMemo( () => versions ?.map((version) => ( { void router.push(`/docs/packages/${packageName}/${version}`); dialog.setOpen(false); }} >

{version}

)) .reverse() ?? [], // eslint-disable-next-line react-hooks/exhaustive-deps [packageName], ); // const searchResultItems = useMemo( // () => // searchResults?.map((item) => ( // { // void router.push(item.path); // dialog.setOpen(false); // }} // > //
//
//
// {resolveIcon(item.kind)} //
//

{item.name}

// {item.summary} //
//
//
// //
//
// )) ?? [], // // eslint-disable-next-line react-hooks/exhaustive-deps // [searchResults], // ); useKey((event) => event.key === 'k' && event.metaKey, dialog.toggle, { event: 'keydown' }, []); useKey( (event) => event.key === 'Backspace' && !search, () => setPage(''), { event: 'keydown' }, [], ); useEffect(() => { if (!dialog.open) { setSearch(''); setPage(''); } }, [dialog.open]); // useEffect(() => { // if (searchIndex?.length) { // void insertBatch(db, searchIndex); // } // // eslint-disable-next-line react-hooks/exhaustive-deps // }, [searchIndex]); // useEffect(() => { // if (search) { // const results = searchDb(db, { // term: search, // properties: ['name', 'kind', 'summary'], // }); // setSearchResults(results.hits); // } // // eslint-disable-next-line react-hooks/exhaustive-deps // }, [search]); return ( No results found {isValidating ? (
Loading...
) : null} {page /* || search */ ? null : packageCommandItems} {page === 'version' /* && !search */ ? versionCommandItems : null} {/* {search && !page ? searchResultItems : null} */}
); }