data-table-view-options.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { DropdownMenuTrigger } from '@radix-ui/react-dropdown-menu'
  2. import { MixerHorizontalIcon } from '@radix-ui/react-icons'
  3. import { Table } from '@tanstack/react-table'
  4. import { Button } from '@/components/ui/button'
  5. import {
  6. DropdownMenu,
  7. DropdownMenuCheckboxItem,
  8. DropdownMenuContent,
  9. DropdownMenuLabel,
  10. DropdownMenuSeparator,
  11. } from '@/components/ui/dropdown-menu'
  12. interface DataTableViewOptionsProps<TData> {
  13. table: Table<TData>
  14. }
  15. export function DataTableViewOptions<TData>({
  16. table,
  17. }: DataTableViewOptionsProps<TData>) {
  18. return (
  19. <DropdownMenu modal={false}>
  20. <DropdownMenuTrigger asChild>
  21. <Button
  22. variant='outline'
  23. size='sm'
  24. className='ml-auto hidden h-8 lg:flex'
  25. >
  26. <MixerHorizontalIcon className='mr-2 h-4 w-4' />
  27. View
  28. </Button>
  29. </DropdownMenuTrigger>
  30. <DropdownMenuContent align='end' className='w-[150px]'>
  31. <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>
  32. <DropdownMenuSeparator />
  33. {table
  34. .getAllColumns()
  35. .filter(
  36. (column) =>
  37. typeof column.accessorFn !== 'undefined' && column.getCanHide()
  38. )
  39. .map((column) => {
  40. return (
  41. <DropdownMenuCheckboxItem
  42. key={column.id}
  43. className='capitalize'
  44. checked={column.getIsVisible()}
  45. onCheckedChange={(value) => column.toggleVisibility(!!value)}
  46. >
  47. {column.id}
  48. </DropdownMenuCheckboxItem>
  49. )
  50. })}
  51. </DropdownMenuContent>
  52. </DropdownMenu>
  53. )
  54. }