"use client"; import { useEffect, useRef, useState } from "react"; // Dropdown waarin meerdere opties aangevinkt kunnen worden. De keuzes gaan als // checkboxes met dezelfde `name` mee in het formulier (FormData.getAll). export function MultiSelectDropdown({ id, name, options, defaultValue, onChange, className, }: { id: string; name: string; options: string[]; defaultValue: string[]; onChange?: (values: string[]) => void; className: string; }) { const [open, setOpen] = useState(false); const [selected, setSelected] = useState(defaultValue); const rootRef = useRef(null); useEffect(() => { if (!open) return; const close = (e: MouseEvent | KeyboardEvent) => { if (e instanceof KeyboardEvent ? e.key === "Escape" : !rootRef.current?.contains(e.target as Node)) { setOpen(false); } }; document.addEventListener("mousedown", close); document.addEventListener("keydown", close); return () => { document.removeEventListener("mousedown", close); document.removeEventListener("keydown", close); }; }, [open]); function toggle(option: string, checked: boolean) { const next = checked ? options.filter((o) => o === option || selected.includes(o)) : selected.filter((o) => o !== option); setSelected(next); onChange?.(next); } const summary = selected.length === 0 ? "Maak een keuze" : selected.length === 1 ? selected[0] : `${selected.length} geselecteerd`; return (
{/* Altijd gerenderd zodat de checkboxes meegaan in het formulier, ook als de lijst dicht is. */} {selected.length > 1 && (

{selected.join(" ยท ")}

)}
); }