"use client"; import { SlidersHorizontal, X } from "lucide-react"; import { useMemo, useState } from "react"; import { ProductCard } from "@/components/product/product-card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import type { Product } from "@/lib/headless/types"; export function CatalogClient({ products, initialCategory = "Todos", initialCollection = "", initialQuery = "" }: { products: Product[]; initialCategory?: string; initialCollection?: string; initialQuery?: string }) { const [query, setQuery] = useState(initialQuery); const [category, setCategory] = useState(initialCategory); const [collection, setCollection] = useState(initialCollection); const [brand, setBrand] = useState("Todas"); const [age, setAge] = useState("Todas"); const [sort, setSort] = useState("featured"); const categories = ["Todos", ...new Set(products.map((product) => product.category))]; const brands = ["Todas", ...new Set(products.map((product) => product.brand))]; const ages = ["Todas", ...new Set(products.map((product) => product.ageRange))]; const pricedProducts = products.filter((product) => product.price !== null); const maxCatalogPrice = pricedProducts.length ? Math.max(...pricedProducts.map((product) => product.price ?? 0)) : 0; const [maxPrice, setMaxPrice] = useState(maxCatalogPrice); const filtered = useMemo(() => products.filter((product) => { const search = [product.name, product.category, product.collection, product.brand].join(" ").toLowerCase(); return (!query || search.includes(query.toLowerCase())) && (category === "Todos" || product.category === category) && (!collection || product.collection === collection) && (brand === "Todas" || product.brand === brand) && (age === "Todas" || product.ageRange === age) && (product.price === null || maxPrice === 0 || product.price <= maxPrice); }).sort((a, b) => sort === "name" ? a.name.localeCompare(b.name, "es") : sort === "new" ? Number(b.isNew) - Number(a.isNew) : Number(b.featured) - Number(a.featured)), [age, brand, category, products, query, sort]); const reset = () => { setQuery(""); setCategory("Todos"); setCollection(""); setBrand("Todas"); setAge("Todas"); setMaxPrice(maxCatalogPrice); setSort("featured"); }; return
Catálogo completo

Todos los tesoros

Filtra por categoría, marca o edad sin recargar la página.

{filtered.length} productos

{filtered.length ?
{filtered.map((product) => )}
:

No encontramos productos

}
; } function Filter({ title, values, selected, onChange }: { title: string; values: string[]; selected: string; onChange: (value: string) => void }) { return
{title}
{values.map((value) => )}
; }