"use client"; import { SearchBar } from "@/components/molecules/search-bar"; import { CategorySidebar } from "@/components/organisms/navigation"; import { ProductGrid } from "@/components/organisms/product-grid"; import { MENU_CATEGORIES } from "@/lib/constants"; import { useMenu } from "@/lib/menu-context"; import { useEffect, useState } from "react"; /** * Main page — sidebar + product grid layout. * * Layout: * [Sidebar (sticky, collapsible)] | [Main content (scrollable)] * * Sidebar state: * - Desktop (≥ 1024px): expanded by default * - Mobile (< 1024px): collapsed by default */ export default function Home() { const { activeCategory, setActiveCategory } = useMenu(); const [isSidebarOpen, setIsSidebarOpen] = useState(false); const [searchQuery, setSearchQuery] = useState(""); useEffect(() => { const mq = window.matchMedia("(min-width: 1024px)"); // eslint-disable-next-line react-hooks/set-state-in-effect setIsSidebarOpen(mq.matches); const handler = (e: MediaQueryListEvent) => setIsSidebarOpen(e.matches); mq.addEventListener("change", handler); return () => mq.removeEventListener("change", handler); }, []); useEffect(() => { // eslint-disable-next-line react-hooks/set-state-in-effect setSearchQuery(""); }, [activeCategory]); const activeCategoryLabel = MENU_CATEGORIES.find((c) => c.id === activeCategory)?.name ?? "Tất cả"; return (
{/* ── Sidebar ── */} setIsSidebarOpen((prev) => !prev)} activeCategory={activeCategory} onCategoryChange={setActiveCategory} /> {/* ── Main content ── */}
{/* ── Section heading + search bar ── */}
{/* Title + count */}

{activeCategoryLabel}

{/* Search bar */} { if (q && activeCategory !== "all") setActiveCategory("all"); setSearchQuery(q); }} onClear={() => setSearchQuery("")} placeholder="Tìm kiếm món..." className="sm:max-w-xs" />
{/* ── Product grid (organism handles mobile category menu + grid) ── */}
); }