import { useState, useRef, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useSearch } from '../hooks/useSearch'; export function SearchBar() { const [query, setQuery] = useState(''); const [debounced, setDebounced] = useState(''); const [open, setOpen] = useState(false); const navigate = useNavigate(); const ref = useRef(null); useEffect(() => { const id = setTimeout(() => setDebounced(query), 300); return () => clearTimeout(id); }, [query]); const { data: results, isLoading } = useSearch(debounced); useEffect(() => { function handleClick(e: MouseEvent) { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); } document.addEventListener('mousedown', handleClick); return () => document.removeEventListener('mousedown', handleClick); }, []); const showResults = open && debounced.length >= 2; return (
{ setQuery(e.target.value); setOpen(true); }} onFocus={() => setOpen(true)} style={{ width: '100%', padding: '8px 12px', border: '1px solid #ccc', borderRadius: 6, fontSize: 14, }} /> {showResults && ( )}
); }