"use client"; import { X } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; interface FilterBadgeProps { label: string; onRemove: () => void; variant?: "default" | "secondary" | "destructive" | "outline"; color?: string; } export function FilterBadge({ label, onRemove, variant = "secondary", color, }: FilterBadgeProps) { return ( {label} ); } interface FilterBadgesProps { filters: Record; onRemoveFilter: (key: string, value?: string) => void; onClearAll: () => void; } export function FilterBadges({ filters, onRemoveFilter, onClearAll, }: FilterBadgesProps) { const activeFilters = Object.entries(filters).filter(([, 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 !== ""; }); if (activeFilters.length === 0) { return null; } return (
Filtros ativos:
{activeFilters.map(([key, value]) => { if (Array.isArray(value)) { return value.map((item, index) => ( onRemoveFilter(key, item)} color={getFilterColor(key, item)} /> )); } if (typeof value === "object" && value !== null) { return Object.entries(value) .map(([rangeKey, rangeValue]) => { const range = rangeValue as { min?: number; max?: number }; if (range?.min !== undefined || range?.max !== undefined) { return ( onRemoveFilter(key, rangeKey)} /> ); } return null; }) .filter(Boolean); } return ( onRemoveFilter(key)} color={getFilterColor(key, value)} /> ); })}
); } function getFilterLabel(key: string, value: unknown): string { const labels: Record string> = { nutrition_grades: (v) => `Nutri-Score ${String(v).toUpperCase()}`, nova_groups: (v) => `NOVA ${v}`, categories: (v) => String(v), brands: (v) => String(v), allergens: (v) => `Alérgeno: ${v}`, exclude_allergens: (v) => `Sem: ${v}`, additives: (v) => `Aditivo: ${v}`, exclude_additives: (v) => `Sem aditivo: ${v}`, no_additives: () => "Sem aditivos", countries: (v) => String(v), sort_by: (v) => `Ordenar por: ${v}`, sort_order: (v) => (v === "asc" ? "Crescente" : "Decrescente"), }; return labels[key] ? labels[key](value) : `${key}: ${value}`; } function getFilterColor(key: string, value: unknown): string { if (key === "nutrition_grades") { const colors: Record = { a: "bg-green-100 text-green-800 border-green-200", b: "bg-green-100 text-green-800 border-green-200", c: "bg-yellow-100 text-yellow-800 border-yellow-200", d: "bg-orange-100 text-orange-800 border-orange-200", e: "bg-red-100 text-red-800 border-red-200", }; return colors[String(value)] || ""; } if (key === "nova_groups") { const colors: Record = { 1: "bg-green-100 text-green-800 border-green-200", 2: "bg-yellow-100 text-yellow-800 border-yellow-200", 3: "bg-orange-100 text-orange-800 border-orange-200", 4: "bg-red-100 text-red-800 border-red-200", }; return colors[String(value)] || ""; } if (key === "allergens" || key === "exclude_allergens") { return "bg-yellow-100 text-yellow-800 border-yellow-200"; } if ( key === "additives" || key === "exclude_additives" || key === "no_additives" ) { return "bg-blue-100 text-blue-800 border-blue-200"; } return ""; }