import React from 'react'; import { Box, Flex, Portal, space, Fade, themeColor, color, BoxProps } from '@blockstack/ui'; import { useDocSearchKeyboardEvents } from '@docsearch/react'; import { Text } from '@components/typography'; import { SearchIcon } from '@components/icons/search'; import Router from 'next/router'; import Link from 'next/link'; const getLocalUrl = href => { const _url = new URL(href); const url = href .replace(_url.origin, '') .replace('#__next', '') .replace('.html', '') .replace('storage/clidocs', 'core/cmdLineRef'); return url; }; function Hit({ hit, children }: any) { const url = getLocalUrl(hit.url); return ( {children} ); } const navigator = { navigate: async ({ suggestionUrl }: any) => { const url = getLocalUrl(suggestionUrl); return Router.push(url, url); }, }; const searchOptions = { apiKey: '9040ba6d60f5ecb36eafc26396288875', indexName: 'blockstack', navigator, }; let DocSearchModal: any = null; export const SearchBox: React.FC = React.memo(props => { const [isOpen, setIsOpen] = React.useState(false); const importDocSearchModalIfNeeded = React.useCallback(function importDocSearchModalIfNeeded() { if (DocSearchModal) { return Promise.resolve(); } return Promise.all([import('@docsearch/react/modal')]).then(([{ DocSearchModal: Modal }]) => { DocSearchModal = Modal; }); }, []); const onOpen = React.useCallback( function onOpen() { void importDocSearchModalIfNeeded().then(() => { setIsOpen(true); }); }, [importDocSearchModalIfNeeded, setIsOpen] ); const onClose = React.useCallback( function onClose() { setIsOpen(false); }, [setIsOpen] ); useDocSearchKeyboardEvents({ isOpen, onOpen, onClose }); return ( <> {styles => ( )} Search docs ); }); export default SearchBox;