Files
oranguru/src/Griddy/features/columnVisibility/ColumnVisibilityMenu.tsx
Hein ad325d94a9 feat(toolbar): add column visibility and CSV export features
- Implemented GridToolbar component for column visibility and CSV export
- Added ColumnVisibilityMenu for toggling column visibility
- Created exportToCsv function for exporting visible data to CSV
- Updated Griddy component to integrate toolbar functionality
- Enhanced documentation with examples for new features
2026-02-14 14:51:53 +02:00

49 lines
1.3 KiB
TypeScript

import type { Table } from '@tanstack/react-table'
import { ActionIcon, Checkbox, Menu, Stack } from '@mantine/core'
import { IconColumns } from '@tabler/icons-react'
interface ColumnVisibilityMenuProps<T> {
table: Table<T>
}
export function ColumnVisibilityMenu<T>({ table }: ColumnVisibilityMenuProps<T>) {
const columns = table.getAllColumns().filter(col =>
col.id !== '_selection' && col.getCanHide()
)
if (columns.length === 0) {
return null
}
return (
<Menu position="bottom-end" shadow="md" width={200}>
<Menu.Target>
<ActionIcon aria-label="Toggle columns" size="sm" variant="subtle">
<IconColumns size={16} />
</ActionIcon>
</Menu.Target>
<Menu.Dropdown>
<Menu.Label>Toggle Columns</Menu.Label>
<Stack gap="xs" p="xs">
{columns.map(column => {
const header = column.columnDef.header
const label = typeof header === 'string' ? header : column.id
return (
<Checkbox
checked={column.getIsVisible()}
key={column.id}
label={label}
onChange={column.getToggleVisibilityHandler()}
size="xs"
/>
)
})}
</Stack>
</Menu.Dropdown>
</Menu>
)
}