'use client' import { useState, useEffect } from 'react' import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger, DropdownMenuCheckboxItem, DropdownMenuSeparator, DropdownMenuLabel, } from '@/components/ui/dropdown-menu' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Filter, X } from 'lucide-react' import { getAllLabelColors, getLabelColor } from '@/lib/label-storage' import { LABEL_COLORS } from '@/lib/types' import { cn } from '@/lib/utils' interface LabelFilterProps { selectedLabels: string[] onFilterChange: (labels: string[]) => void } export function LabelFilter({ selectedLabels, onFilterChange }: LabelFilterProps) { const [allLabels, setAllLabels] = useState([]) useEffect(() => { // Load all labels from localStorage const labelColors = getAllLabelColors() setAllLabels(Object.keys(labelColors).sort()) }, []) const handleToggleLabel = (label: string) => { if (selectedLabels.includes(label)) { onFilterChange(selectedLabels.filter(l => l !== label)) } else { onFilterChange([...selectedLabels, label]) } } const handleClearAll = () => { onFilterChange([]) } if (allLabels.length === 0) return null return (
Filter by Labels {selectedLabels.length > 0 && ( )} {allLabels.map((label) => { const colorName = getLabelColor(label) const colorClasses = LABEL_COLORS[colorName] const isSelected = selectedLabels.includes(label) return ( handleToggleLabel(label)} > {label} ) })} {/* Active filters display */} {selectedLabels.length > 0 && (
{selectedLabels.map((label) => { const colorName = getLabelColor(label) const colorClasses = LABEL_COLORS[colorName] return ( handleToggleLabel(label)} > {label} ) })}
)}
) }