import { Component, Show, For, createSignal, onCleanup, createEffect } from 'solid-js'; import type { ColumnDef } from '@/hooks/useColumnVisibility'; interface ColumnPickerProps { /** Columns that can be toggled */ columns: ColumnDef[]; /** Check if a column is currently hidden */ isHidden: (id: string) => boolean; /** Toggle a column's visibility */ onToggle: (id: string) => void; /** Reset all columns to visible */ onReset?: () => void; } export const ColumnPicker: Component = (props) => { const [isOpen, setIsOpen] = createSignal(false); let containerRef: HTMLDivElement | undefined; // Close on click outside const handleClickOutside = (e: MouseEvent) => { if (containerRef && !containerRef.contains(e.target as Node)) { setIsOpen(false); } }; createEffect(() => { if (isOpen()) { document.addEventListener('mousedown', handleClickOutside); } else { document.removeEventListener('mousedown', handleClickOutside); } }); onCleanup(() => { document.removeEventListener('mousedown', handleClickOutside); }); // Count how many are hidden const hiddenCount = () => props.columns.filter(c => props.isHidden(c.id)).length; return (
Show Columns 0}>
{(col) => { const isChecked = () => !props.isHidden(col.id); return ( ); }}
No columns available to toggle at this screen size
); };