"use client"; /** * ColumnToggle — Shared UI primitive (T-29) * * Dropdown menu for toggling table column visibility. * Used by RequestLoggerV2, ProxyLogger, etc. * * Usage: * setVisible({...visible, [key]: !visible[key]})} * /> */ import { useState, useRef, useEffect } from "react"; export default function ColumnToggle({ columns = [], visible = {}, onToggle }) { const [open, setOpen] = useState(false); const ref = useRef(null); // Close on outside click useEffect(() => { if (!open) return; const handler = (e) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); }; document.addEventListener("mousedown", handler); return () => document.removeEventListener("mousedown", handler); }, [open]); return (
{open && (
{columns.map((col) => ( ))}
)}
); }