"use client"; import { Button } from "@app/components/ui/button"; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "@app/components/ui/command"; import { Popover, PopoverContent, PopoverTrigger } from "@app/components/ui/popover"; import { cn } from "@app/lib/cn"; import { dataTableFilterPopoverContentClassName } from "@app/lib/dataTableFilterPopover"; import { CheckIcon, Funnel } from "lucide-react"; import { useTranslations } from "next-intl"; import { useMemo, useState } from "react"; import { Badge } from "./ui/badge"; import { orgQueries } from "@app/lib/queries"; import { useQuery } from "@tanstack/react-query"; import { useDebounce } from "use-debounce"; type LabelColumnFilterButtonProps = { selectedValues: string[]; onSelectedValuesChange: (values: string[]) => void; className?: string; label: string; orgId: string; }; export function LabelColumnFilterButton({ selectedValues, onSelectedValuesChange, className, label, orgId }: LabelColumnFilterButtonProps) { const [open, setOpen] = useState(false); const t = useTranslations(); const [labelSearchQuery, setlabelsSearchQuery] = useState(""); const [debouncedQuery] = useDebounce(labelSearchQuery, 150); const { data: labels = [] } = useQuery( orgQueries.labels({ orgId, query: debouncedQuery, perPage: 500 }) ); const selectedSet = useMemo( () => new Set(selectedValues), [selectedValues] ); const summary = useMemo(() => { if (selectedValues.length === 0) { return null; } if (selectedValues.length === 1) { const foundLabel = labels.find((o) => o.name === selectedValues[0]); if (foundLabel) { return (
{foundLabel.name}
); } return selectedValues[0]; } return t("accessLabelFilterCount", { count: selectedValues.length }); }, [selectedValues, labels, t]); function toggle(value: string) { const next = selectedSet.has(value) ? selectedValues.filter((v) => v !== value) : [...selectedValues, value]; onSelectedValuesChange(next); } return (
{t("labelsNotFound")} {selectedValues.length > 0 && ( { onSelectedValuesChange([]); setOpen(false); }} className="text-muted-foreground" > {t("accessLabelFilterClear")} )} {labels.map((label) => ( { toggle(label.name); }} className="flex items-center gap-2" >
{label.name} ))}
); }