/** * ColumnSelector Component * Dropdown with checkboxes to show/hide table columns */ import React, { useState, useRef, useEffect } from 'react'; import { ChevronDownIcon } from '../../icons'; import Checkbox from '../form/input/Checkbox'; interface ColumnSelectorProps { columns: Array<{ key: string; label: string; defaultVisible?: boolean }>; visibleColumns: Set; onToggleColumn: (columnKey: string) => void; className?: string; } export default function ColumnSelector({ columns, visibleColumns, onToggleColumn, className = '', }: ColumnSelectorProps) { const [isOpen, setIsOpen] = useState(false); const dropdownRef = useRef(null); const buttonRef = useRef(null); // Close dropdown when clicking outside useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if ( dropdownRef.current && !dropdownRef.current.contains(event.target as Node) && buttonRef.current && !buttonRef.current.contains(event.target as Node) ) { setIsOpen(false); } }; if (isOpen) { document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; } }, [isOpen]); const visibleCount = visibleColumns.size; const totalCount = columns.length; return (
{isOpen && (
Show Columns
{columns.map((column) => { const isVisible = visibleColumns.has(column.key); return ( ); })}
)}
); }