import { SearchIcon } from '@chakra-ui/icons'
import {
HStack,
HTMLChakraProps,
Kbd,
Portal,
Text,
VisuallyHidden,
chakra,
} from '@chakra-ui/react'
import { DocSearchModal, useDocSearchKeyboardEvents } from '@docsearch/react'
import type {
InternalDocSearchHit,
StoredDocSearchHit,
} from '@docsearch/react/dist/esm/types'
import Head from 'next/head'
import Link from 'next/link'
import { useRouter } from 'next/router'
import * as React from 'react'
import SearchStyle from './search.styles'
import { t } from 'utils/i18n'
const ACTION_KEY_DEFAULT = ['Ctrl', 'Control']
const ACTION_KEY_APPLE = ['⌘', 'Command']
interface HitProps {
hit: InternalDocSearchHit | StoredDocSearchHit
children: React.ReactNode
}
function Hit({ hit, children }: HitProps) {
return (
{children}
)
}
export const SearchButton = React.forwardRef(function SearchButton(
props: HTMLChakraProps<'button'>,
ref: React.Ref,
) {
const [actionKey, setActionKey] = React.useState(ACTION_KEY_APPLE)
React.useEffect(() => {
if (typeof navigator === 'undefined') return
const isMac = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)
if (!isMac) {
setActionKey(ACTION_KEY_DEFAULT)
}
}, [])
return (
{t('component.algolia-search.search-the-docs')}
{t('component.algolia-search.press')}{' '}
{actionKey[0]}
{t('component.algolia-search.and')}
K
{' '}
{t('component.algolia-search.to-search')}
)
})
function AlgoliaSearch() {
const router = useRouter()
const [isOpen, setIsOpen] = React.useState(false)
const searchButtonRef = React.useRef()
const [initialQuery, setInitialQuery] = React.useState(null)
const onOpen = React.useCallback(() => {
setIsOpen(true)
}, [setIsOpen])
const onClose = React.useCallback(() => {
setIsOpen(false)
}, [setIsOpen])
const onInput = React.useCallback(
(e) => {
setIsOpen(true)
setInitialQuery(e.key)
},
[setIsOpen, setInitialQuery],
)
useDocSearchKeyboardEvents({
isOpen,
onOpen,
onClose,
onInput,
searchButtonRef,
})
return (
<>
{isOpen && (
{
return items.map((item) => {
const a = document.createElement('a')
a.href = item.url
const hash = a.hash === '#content-wrapper' ? '' : a.hash
item.url = `${a.pathname}${hash}`
return item
})
}}
/>
)}
>
)
}
export default AlgoliaSearch