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;