import { useEffect, useState } from 'react'; type Cat = { id: number; nombre: string }; type Props = { categorias: Cat[] }; const ALL = 'all'; function applyFilter(value: string) { const cards = document.querySelectorAll('[data-cat]'); cards.forEach((el) => { const cat = el.dataset.cat; const show = value === ALL || cat === value; if (show) delete el.dataset.hiddenByCat; else el.dataset.hiddenByCat = 'true'; }); // El buscador (BuscadorCatalogo, client:load) define este helper y unifica // ambos flags (cat + search). Fallback si aún no montó: aplicar directo. if (typeof window !== 'undefined' && window.__labreFiltrar) { window.__labreFiltrar(); } else { let anyVisible = false; cards.forEach((el) => { el.hidden = el.dataset.hiddenByCat === 'true'; if (!el.hidden) anyVisible = true; }); const empty = document.getElementById('catalogo-empty-filter'); if (empty) empty.hidden = anyVisible || cards.length === 0; } } export default function FiltroCategorias({ categorias }: Props) { const [active, setActive] = useState(ALL); useEffect(() => { const url = new URL(location.href); const cat = url.searchParams.get('cat'); const initial = cat && categorias.some((c) => String(c.id) === cat) ? cat : ALL; setActive(initial); applyFilter(initial); }, [categorias]); const pick = (value: string) => { setActive(value); const url = new URL(location.href); if (value === ALL) url.searchParams.delete('cat'); else url.searchParams.set('cat', value); history.replaceState(null, '', url.toString()); applyFilter(value); }; const chipClass = (v: string) => v === active ? 'btn' : 'btn btn-ghost'; const chipStyle = (v: string): React.CSSProperties => v === active ? { background: 'var(--color-primary)', color: 'white', minHeight: '40px', paddingBlock: '0.375rem' } : { minHeight: '40px', paddingBlock: '0.375rem' }; return (
{categorias.map((c) => { const v = String(c.id); return ( ); })}
); }