import { forwardRef, useState, useEffect, Ref } from 'react'; import { Search, X } from 'lucide-react'; import { useRecoilState } from 'recoil'; import { useLocalize } from '~/hooks'; import store from '~/store'; type SearchBarProps = { clearSearch: () => void; }; const SearchBar = forwardRef((props: SearchBarProps, ref: Ref) => { const { clearSearch } = props; const [searchQuery, setSearchQuery] = useRecoilState(store.searchQuery); const [showClearIcon, setShowClearIcon] = useState(false); const localize = useLocalize(); const handleKeyUp = (e: React.KeyboardEvent) => { const { value } = e.target as HTMLInputElement; /* TODO: deprecated keyCode */ if (e.keyCode === 8 && value === '') { setSearchQuery(''); clearSearch(); } }; const onChange = (e: React.FormEvent) => { const { value } = e.target as HTMLInputElement; setSearchQuery(value); setShowClearIcon(value.length > 0); }; useEffect(() => { if (searchQuery.length === 0) { setShowClearIcon(false); } else { setShowClearIcon(true); } }, [searchQuery]); return (
{} { e.code === 'Space' ? e.stopPropagation() : null; }} placeholder={localize('com_nav_search_placeholder')} onKeyUp={handleKeyUp} /> { setSearchQuery(''); clearSearch(); }} />
); }); export default SearchBar;