view-options.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { type Table } from '@tanstack/react-table'
  2. import { useTranslation } from 'react-i18next'
  3. import { Button } from '@/components/ui/button'
  4. import {
  5. DropdownMenu,
  6. DropdownMenuCheckboxItem,
  7. DropdownMenuContent,
  8. DropdownMenuGroup,
  9. DropdownMenuLabel,
  10. DropdownMenuTrigger,
  11. } from '@/components/ui/dropdown-menu'
  12. type DataTableViewOptionsProps<TData> = {
  13. table: Table<TData>
  14. }
  15. export function DataTableViewOptions<TData>({
  16. table,
  17. }: DataTableViewOptionsProps<TData>) {
  18. const { t } = useTranslation()
  19. return (
  20. <DropdownMenu modal={false}>
  21. <DropdownMenuTrigger
  22. render={
  23. <Button
  24. variant='outline'
  25. className='shrink-0'
  26. aria-label={t('View')}
  27. />
  28. }
  29. >
  30. {t('View')}
  31. </DropdownMenuTrigger>
  32. <DropdownMenuContent align='end' className='w-[150px]'>
  33. <DropdownMenuGroup>
  34. <DropdownMenuLabel>{t('Toggle columns')}</DropdownMenuLabel>
  35. {table
  36. .getAllColumns()
  37. .filter(
  38. (column) =>
  39. typeof column.accessorFn !== 'undefined' && column.getCanHide()
  40. )
  41. .map((column) => {
  42. return (
  43. <DropdownMenuCheckboxItem
  44. key={column.id}
  45. className='capitalize'
  46. checked={column.getIsVisible()}
  47. onCheckedChange={(value) => column.toggleVisibility(!!value)}
  48. >
  49. {column.columnDef.meta?.label ?? column.id}
  50. </DropdownMenuCheckboxItem>
  51. )
  52. })}
  53. </DropdownMenuGroup>
  54. </DropdownMenuContent>
  55. </DropdownMenu>
  56. )
  57. }