"use client"; import { useRef, useState } from "react"; import { X } from "lucide-react"; import type { SeriesResponse } from "@/lib/types"; interface SeriesPickerProps { value: string | null; onChange: (v: string | null) => void; series: SeriesResponse[]; isLoading?: boolean; } export function SeriesPicker({ value, onChange, series, isLoading }: SeriesPickerProps) { const [search, setSearch] = useState(""); const [open, setOpen] = useState(false); const inputRef = useRef(null); const filtered = search.trim() ? series.filter((s) => s.name.toLowerCase().includes(search.toLowerCase())).slice(0, 40) : series.slice(0, 40); const handleSelect = (name: string) => { onChange(name); setSearch(""); setOpen(false); }; const handleClear = () => { onChange(null); setSearch(""); setTimeout(() => inputRef.current?.focus(), 0); }; // Delay blur so clicks inside the dropdown register before closing const handleBlur = () => setTimeout(() => setOpen(false), 150); if (value) { return (
{value}
); } return (
{ setSearch(e.target.value); setOpen(true); }} onFocus={() => setOpen(true)} onBlur={handleBlur} onKeyDown={(e) => { if (e.key === "Escape") setOpen(false); }} className="w-full rounded-md border border-zinc-700 bg-zinc-800 px-3 py-2 text-sm text-zinc-100 placeholder:text-zinc-600 focus:border-zinc-500 focus:outline-none disabled:opacity-50" /> {open && filtered.length > 0 && ( )} {open && !isLoading && series.length === 0 && (
No series found in library.
)}
); }