"use client"; import Image from "next/image"; import Link from "next/link"; import { usePathname, useSearchParams } from "next/navigation"; import { Heart, Menu, MessageCircle, PackageCheck, ShoppingCart, UserRound } from "lucide-react"; import { Suspense, useState } from "react"; import { PredictiveSearch } from "@/components/search/predictive-search"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent } from "@/components/ui/dialog"; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from "@/components/ui/sheet"; import type { Product } from "@/lib/headless/types"; import { useCartStore } from "@/store/cart-store"; import { useWishlistStore } from "@/store/wishlist-store"; type CategoryLink = { label: string; href: string; category?: string; collection?: string; section?: string; root?: boolean; }; const categories: CategoryLink[] = [ { label: "Juguetes para bebés", href: "/catalog?category=Figuras", category: "Figuras" }, { label: "Educativos", href: "/catalog?category=Figuras§ion=educativos", category: "Figuras", section: "educativos", }, { label: "Muñecas y peluches", href: "/catalog?category=Peluches", category: "Peluches" }, { label: "Acción y aventura", href: "/catalog?collection=Marvel", collection: "Marvel" }, { label: "Mochilas", href: "/catalog?category=Mochilas", category: "Mochilas" }, { label: "Variedades", href: "/catalog", root: true }, ]; const collections = ["Toy Story", "Marvel", "Intensamente", "Lilo & Stitch", "Frozen"]; export function Navbar({ products }: { products: Product[] }) { const [menuOpen, setMenuOpen] = useState(false); const [accountOpen, setAccountOpen] = useState(false); const items = useCartStore((state) => state.items); const cartHydrated = useCartStore((state) => state.hasHydrated); const openCart = useCartStore((state) => state.openCart); const wishlistProducts = useWishlistStore((state) => state.products); const wishlistHydrated = useWishlistStore((state) => state.hasHydrated); const openWishlist = useWishlistStore((state) => state.openWishlist); const count = cartHydrated ? items.reduce((sum, item) => sum + item.quantity, 0) : 0; const wishlistCount = wishlistHydrated ? wishlistProducts.length : 0; return ( Paga tus compras a cuotas · Envíos nacionales · Compra segura con ARI setAccountOpen(true)}> {wishlistCount > 0 && {wishlistCount}} {count} setMenuOpen(true)} />}> setMenuOpen(true)} /> Explora ARI Categorías y colecciones del catálogo. Categorías setMenuOpen(false)} />}> setMenuOpen(false)} /> Colecciones {collections.map((collection) => setMenuOpen(false)} className="rounded-full bg-slate-100 px-4 py-2 text-sm font-bold hover:bg-violet-100 hover:text-violet-700">{collection})} { setMenuOpen(false); setAccountOpen(true); }}>Cuenta { setMenuOpen(false); openWishlist(); }}>Favoritos Atención personalizada Tu cuenta ARI El inicio de sesión quedará conectado al backend headless. Mientras tanto, puedes gestionar pedidos y disponibilidad directamente por WhatsApp. Hablar con ARI setAccountOpen(false)}>Ver mis opciones de compra ); } function useCategoryNavigationState() { const pathname = usePathname(); const searchParams = useSearchParams(); const currentCategory = searchParams.get("category") ?? ""; const currentCollection = searchParams.get("collection") ?? ""; const currentSection = searchParams.get("section") ?? ""; const isCatalog = pathname === "/catalog"; const isCategoryActive = (item: CategoryLink) => { if (!isCatalog) return false; if (item.root) { return !currentCategory && !currentCollection && !currentSection; } return ( (item.category ?? "") === currentCategory && (item.collection ?? "") === currentCollection && (item.section ?? "") === currentSection ); }; return { isCategoryActive }; } function DesktopCategoryNavigation({ onOpenMenu }: { onOpenMenu: () => void }) { const { isCategoryActive } = useCategoryNavigationState(); return ( {categories.map((category) => { const active = isCategoryActive(category); return ( {category.label} ); })} ); } function DesktopCategoryNavigationFallback({ onOpenMenu }: { onOpenMenu: () => void }) { return ( {categories.map((category) => ( {category.label} ))} ); } function MobileCategoryLinks({ onNavigate }: { onNavigate: () => void }) { const { isCategoryActive } = useCategoryNavigationState(); return ( <> {categories.map((category) => { const active = isCategoryActive(category); return ( {category.label} ); })} > ); } function MobileCategoryLinksFallback({ onNavigate }: { onNavigate: () => void }) { return ( <> {categories.map((category) => ( {category.label} ))} > ); }
Categorías
Colecciones
El inicio de sesión quedará conectado al backend headless. Mientras tanto, puedes gestionar pedidos y disponibilidad directamente por WhatsApp.