"use client"; import { useState, useEffect } from "react"; import { Search, Filter, X, AlertTriangle, Zap } from "lucide-react"; import * as LucideIcons from "lucide-react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Checkbox } from "@/components/ui/checkbox"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; import { Switch } from "@/components/ui/switch"; import { Slider } from "@/components/ui/slider"; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Separator } from "@/components/ui/separator"; import { ProductFilters, NUTRITION_GRADES, NOVA_GROUPS, POPULAR_CATEGORIES, POPULAR_CATEGORIES_WITH_ICONS, COMMON_ALLERGENS, COMMON_ADDITIVES, } from "@/lib/types"; interface FilterSidebarProps { filters: ProductFilters; onFiltersChange: (filters: ProductFilters) => void; onClearFilters: () => void; isLoading?: boolean; totalResults?: number; className?: string; } export function FilterSidebar({ filters, onFiltersChange, onClearFilters, isLoading = false, totalResults = 0, className = "", }: FilterSidebarProps) { const [searchBrands, setSearchBrands] = useState(""); const [searchCategories, setSearchCategories] = useState(""); const [searchAllergens, setSearchAllergens] = useState(""); const updateFilter = (key: keyof ProductFilters, value: any) => { onFiltersChange({ ...filters, [key]: value }); }; const updateArrayFilter = ( key: keyof ProductFilters, value: string, checked: boolean ) => { const currentArray = (filters[key] as string[]) || []; const newArray = checked ? [...currentArray, value] : currentArray.filter((item) => item !== value); updateFilter(key, newArray); }; const updateNutritionRange = ( nutrient: string, type: "min" | "max", value: number ) => { const currentRanges = filters.nutritionRanges || {}; const currentRange = currentRanges[nutrient as keyof typeof currentRanges] || {}; updateFilter("nutritionRanges", { ...currentRanges, [nutrient]: { ...currentRange, [type]: value, }, }); }; const hasActiveFilters = Object.values(filters).some((value) => { if (Array.isArray(value)) return value.length > 0; if (typeof value === "object" && value !== null) { return Object.values(value).some((v) => v !== undefined && v !== null); } return value !== undefined && value !== null && value !== ""; }); return (