import type { AutocompleteApi, AutocompleteState } from '@algolia/autocomplete-core'; import type { MutableRefObject } from 'react'; import React from 'react'; import { MAX_QUERY_SIZE } from './constants'; import { LoadingIcon } from './icons/LoadingIcon'; import { ResetIcon } from './icons/ResetIcon'; import { SearchIcon } from './icons/SearchIcon'; import type { InternalDocSearchHit } from './types'; export type SearchBoxTranslations = Partial<{ resetButtonTitle: string; resetButtonAriaLabel: string; cancelButtonText: string; cancelButtonAriaLabel: string; searchInputLabel: string; }>; interface SearchBoxProps extends AutocompleteApi { state: AutocompleteState; autoFocus: boolean; inputRef: MutableRefObject; onClose: () => void; isFromSelection: boolean; translations?: SearchBoxTranslations; } export function SearchBox({ translations = {}, ...props }: SearchBoxProps): JSX.Element { const { resetButtonTitle = 'Clear the query', resetButtonAriaLabel = 'Clear the query', cancelButtonText = 'Cancel', cancelButtonAriaLabel = 'Cancel', searchInputLabel = 'Search', } = translations; const { onReset } = props.getFormProps({ inputElement: props.inputRef.current, }); React.useEffect(() => { if (props.autoFocus && props.inputRef.current) { props.inputRef.current.focus(); } }, [props.autoFocus, props.inputRef]); React.useEffect(() => { if (props.isFromSelection && props.inputRef.current) { props.inputRef.current.select(); } }, [props.isFromSelection, props.inputRef]); return ( <>
{ event.preventDefault(); }} onReset={onReset} >
); }