import * as React from 'react' import { CheckIcon, PlusCircledIcon } from '@radix-ui/react-icons' import { Column } from '@tanstack/react-table' import { cn } from '@/lib/utils' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger, } from '@/components/ui/popover' import { Separator } from '@/components/ui/separator' interface DataTableFacetedFilterProps { column?: Column title?: string options: { label: string value: string icon?: React.ComponentType<{ className?: string }> }[] } export function DataTableFacetedFilter({ column, title, options, }: DataTableFacetedFilterProps) { const facets = column?.getFacetedUniqueValues() const selectedValues = new Set(column?.getFilterValue() as string[]) return ( No results found. {options.map((option) => { const isSelected = selectedValues.has(option.value) return ( { if (isSelected) { selectedValues.delete(option.value) } else { selectedValues.add(option.value) } const filterValues = Array.from(selectedValues) column?.setFilterValue( filterValues.length ? filterValues : undefined ) }} >
{option.icon && ( )} {option.label} {facets?.get(option.value) && ( {facets.get(option.value)} )}
) })}
{selectedValues.size > 0 && ( <> column?.setFilterValue(undefined)} className='justify-center text-center' > Clear filters )}
) }