'use client' import { Button } from '@thedaviddias/design-system/button' import { Checkbox } from '@thedaviddias/design-system/checkbox' import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from '@thedaviddias/design-system/dropdown-menu' import { Filter, X } from 'lucide-react' import { useState } from 'react' import { categories } from '@/lib/categories' interface SearchFiltersProps { selectedCategories: string[] onCategoryChange: (categories: string[]) => void availableCategories?: string[] resultCount?: number } /** * Renders a category filter dropdown for search results */ export function SearchFilters({ selectedCategories, onCategoryChange, availableCategories = [] }: SearchFiltersProps) { const [isOpen, setIsOpen] = useState(false) // Get categories that have results or are selected const relevantCategories = categories.filter( category => availableCategories.includes(category.slug) || selectedCategories.includes(category.slug) ) /** * Toggles a category filter on or off */ const handleCategoryToggle = (categorySlug: string, checked: boolean) => { if (checked) { onCategoryChange([...selectedCategories, categorySlug]) } else { onCategoryChange(selectedCategories.filter(c => c !== categorySlug)) } } /** * Clears all active category filters */ const clearAllFilters = () => { onCategoryChange([]) } const activeFiltersCount = selectedCategories.length if (relevantCategories.length === 0) return null return (

Filter Results

{activeFiltersCount > 0 && ( )}
{relevantCategories.map(category => { const isSelected = selectedCategories.includes(category.slug) const categoryCount = availableCategories.filter(c => c === category.slug).length const Icon = category.icon return (
handleCategoryToggle(category.slug, checked as boolean) } />
) })}
{/* Active filter badges */} {activeFiltersCount > 0 && (
{selectedCategories.map(categorySlug => { const category = categories.find(c => c.slug === categorySlug) if (!category) return null return (
{category.name}
) })}
)}
) }