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 DataTableFacetedFilter { column?: Column; title?: string; options: { label: string; value: string; icon?: React.ComponentType<{ className?: string }>; }[]; } export function DataTableFacetedFilter({ column, title, options, }: DataTableFacetedFilter) { 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 )}
); }