"use client"; import { useState, useRef } from "react"; import { Search, X } from "lucide-react"; import { adminFetch } from "@/lib/csrf"; import type { SearchResult } from "./types"; export function SearchBar({ onResults, onClear, }: { onResults: (results: SearchResult[]) => void; onClear: () => void; }) { const [query, setQuery] = useState(""); const timerRef = useRef>(undefined); function handleChange(q: string) { setQuery(q); clearTimeout(timerRef.current); if (q.trim().length < 2) { onClear(); return; } timerRef.current = setTimeout(() => { adminFetch(`/api/admin/bookings/search?q=${encodeURIComponent(q.trim())}`) .then((r) => r.json()) .then((data: SearchResult[]) => onResults(data)) .catch(() => {}); }, 400); } function clear() { setQuery(""); onClear(); } return (
handleChange(e.target.value)} placeholder="Поиск по имени или телефону..." className="w-full rounded-lg border border-neutral-200 bg-neutral-100 py-2 pl-9 pr-8 text-sm text-neutral-900 placeholder-neutral-400 outline-none focus:border-gold/40 dark:border-white/[0.08] dark:bg-white/[0.04] dark:text-white dark:placeholder-neutral-500" /> {query && ( )}
); }