"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 (