import { useEffect, useState } from 'react'; import { type Table as TableType } from '@tanstack/react-table'; import { SlidersHorizontal } from 'lucide-react'; import { __ } from '@/utils/i18n'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { cn } from '@/lib/utils'; interface DataTableViewOptionsProps { table: TableType; hideColumnTextOnMobile?: boolean } export function DataTableViewOptions({ table, hideColumnTextOnMobile = true, }: DataTableViewOptionsProps) { const columns = table .getAllLeafColumns() .filter((column) => column.getCanHide()); const visibilityStates = columns.map((col) => col.getIsVisible()).join(','); const [, forceUpdate] = useState(0); useEffect(() => { forceUpdate((prev) => prev + 1); }, [visibilityStates]); if (columns.length === 0) { return null; } return ( {columns.map((column) => { const label: string = typeof column.columnDef.header === 'string' ? column.columnDef.header : ((column.columnDef.meta as Record)?.label as string) ?? column.id.replace(/_/g, ' '); return ( column.toggleVisibility(!!value) } > {label} ); })} ); }