"use client"; import { useEffect, useRef, useState } from "react"; type CountryPickerProps = { value: string; onChange: (value: string) => void; countries: string[]; placeholder?: string; }; // Searchable text combobox constrained to a fixed list (UN member states) // rather than a Lookup-style "selected card" — a country is a single text // value, not an object with its own detail fields. export function CountryPicker({ value, onChange, countries, placeholder = "Land suchen…" }: CountryPickerProps) { const [query, setQuery] = useState(value); const [open, setOpen] = useState(false); const containerRef = useRef(null); useEffect(() => setQuery(value), [value]); useEffect(() => { function onClickOutside(e: MouseEvent) { if (containerRef.current && !containerRef.current.contains(e.target as Node)) { setOpen(false); setQuery(value); } } document.addEventListener("mousedown", onClickOutside); return () => document.removeEventListener("mousedown", onClickOutside); }, [value]); const filtered = query.trim() ? countries.filter((c) => c.toLowerCase().includes(query.trim().toLowerCase())) : countries; return (
{ setQuery(e.target.value); setOpen(true); }} onFocus={() => setOpen(true)} placeholder={placeholder} className="w-full rounded border border-border px-3 py-2 text-sm" /> {open && (
{filtered.length === 0 &&
Keine Treffer
} {filtered.slice(0, 50).map((c) => ( ))}
)}
); }