import { Search, X } from 'lucide-react'; import { useCallback, useEffect, useRef, useState } from 'react'; interface SearchBarProps { value: string; onChange: (value: string) => void; placeholder?: string; debounceMs?: number; } export default function SearchBar({ value, onChange, placeholder = 'Suchen...', debounceMs = 300, }: SearchBarProps) { const [internal, setInternal] = useState(value); const timerRef = useRef>(); useEffect(() => { setInternal(value); }, [value]); const handleChange = useCallback( (val: string) => { setInternal(val); clearTimeout(timerRef.current); timerRef.current = setTimeout(() => onChange(val), debounceMs); }, [onChange, debounceMs] ); useEffect(() => () => clearTimeout(timerRef.current), []); return (
handleChange(e.target.value)} placeholder={placeholder} className="input-field pl-10 pr-9" /> {internal && ( )}
); }