'use client'; import { useState, useEffect, useRef, useCallback } from 'react'; import { Search, X } from 'lucide-react'; interface TemplateSearchProps { onSearch: (query: string) => void; placeholder?: string; initialValue?: string; } export function TemplateSearch({ onSearch, placeholder = 'Search templates...', initialValue = '', }: TemplateSearchProps) { const [value, setValue] = useState(initialValue); const timerRef = useRef | null>(null); const inputRef = useRef(null); const debouncedSearch = useCallback( (q: string) => { if (timerRef.current) clearTimeout(timerRef.current); timerRef.current = setTimeout(() => { onSearch(q); }, 300); }, [onSearch], ); useEffect(() => { return () => { if (timerRef.current) clearTimeout(timerRef.current); }; }, []); const handleChange = (e: React.ChangeEvent) => { const q = e.target.value; setValue(q); debouncedSearch(q); }; const handleClear = () => { setValue(''); onSearch(''); inputRef.current?.focus(); }; return (
{value && ( )}
); }