import { useEffect, useId, useRef } from "react"; import type { ReactNode } from "react"; export type SearchToolbarProps = { readonly filters?: ReactNode; readonly onQueryChange: (query: string) => void; readonly onSearchChange: (search: string) => void; readonly search: string; }; export function SearchToolbar({ filters, onQueryChange, onSearchChange, search }: SearchToolbarProps) { const searchId = useId(); const didMountRef = useRef(false); useEffect(() => { if (!didMountRef.current) { didMountRef.current = true; return undefined; } const timeoutId = window.setTimeout(() => onQueryChange(search), 300); return () => window.clearTimeout(timeoutId); }, [onQueryChange, search]); return (
onSearchChange(event.currentTarget.value)} type="search" value={search} />
{filters === undefined ? null :
{filters}
}
); }