'use client' import { useState, useCallback, useEffect } from 'react' import { ColumnVisibilityState } from '../types' export interface UseColumnVisibilityOptions { defaultVisibility?: ColumnVisibilityState persistKey?: string onVisibilityChange?: (visibility: ColumnVisibilityState) => void } export function useColumnVisibility({ defaultVisibility = {}, persistKey, onVisibilityChange }: UseColumnVisibilityOptions = {}) { const [columnVisibility, setColumnVisibility] = useState(() => { if (persistKey && typeof window !== 'undefined') { const stored = localStorage.getItem(`column-visibility-${persistKey}`) if (stored) { try { return JSON.parse(stored) } catch { return defaultVisibility } } } return defaultVisibility }) useEffect(() => { if (persistKey && typeof window !== 'undefined') { localStorage.setItem(`column-visibility-${persistKey}`, JSON.stringify(columnVisibility)) } onVisibilityChange?.(columnVisibility) }, [columnVisibility, persistKey, onVisibilityChange]) const toggleColumn = useCallback((columnId: string) => { setColumnVisibility((prev) => ({ ...prev, [columnId]: !(prev[columnId] ?? true) })) }, []) const showColumn = useCallback((columnId: string) => { setColumnVisibility((prev) => ({ ...prev, [columnId]: true })) }, []) const hideColumn = useCallback((columnId: string) => { setColumnVisibility((prev) => ({ ...prev, [columnId]: false })) }, []) const showAllColumns = useCallback(() => { setColumnVisibility({}) }, []) const hideAllColumns = useCallback((exceptColumns: string[] = []) => { setColumnVisibility((prev) => { const newVisibility: ColumnVisibilityState = {} Object.keys(prev).forEach((key) => { newVisibility[key] = exceptColumns.includes(key) }) return newVisibility }) }, []) const resetVisibility = useCallback(() => { setColumnVisibility(defaultVisibility) }, [defaultVisibility]) const isColumnVisible = useCallback((columnId: string): boolean => { return columnVisibility[columnId] ?? true }, [columnVisibility]) return { columnVisibility, setColumnVisibility, toggleColumn, showColumn, hideColumn, showAllColumns, hideAllColumns, resetVisibility, isColumnVisible, } }