"use client";
/**
* MENU PAGE — Premium Sidebar + Beautiful Loading Experience
*/
import { useEffect, useState, useMemo } from "react";
import { menuCategories } from "@/lib/menu-data";
import { gsap } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";
import Navbar from "@/components/Navbar";
import Footer from "@/components/Footer";
import { useCart } from "@/components/CartContext";
import { motion, AnimatePresence } from "framer-motion";
gsap.registerPlugin(ScrollTrigger);
export default function MenuPage() {
const [isLoading, setIsLoading] = useState(true);
const [activeCategory, setActiveCategory] = useState("All");
const [searchQuery, setSearchQuery] = useState("");
const [showVegetarianOnly, setShowVegetarianOnly] = useState(false);
const { addToCart } = useCart();
// Beautiful loading screen on initial load
useEffect(() => {
const timer = setTimeout(() => {
setIsLoading(false);
}, 1350);
return () => clearTimeout(timer);
}, []);
// Sidebar categories
const sidebarCategories = [
{ id: "All", name: "All Dishes" },
...menuCategories.map((cat) => ({ id: cat.id, name: cat.name })),
];
// Filtering logic
const filteredCategories = useMemo(() => {
return menuCategories
.map((category) => {
let items = category.items;
// Sidebar filter
if (activeCategory !== "All" && category.id !== activeCategory) {
items = [];
}
// Search
if (searchQuery.trim()) {
const q = searchQuery.toLowerCase().trim();
items = items.filter(
(item) =>
item.name.toLowerCase().includes(q) ||
(item.description && item.description.toLowerCase().includes(q))
);
}
// Vegetarian
if (showVegetarianOnly) {
items = items.filter((item) => item.isVegetarian);
}
return { ...category, items };
})
.filter((category) => category.items.length > 0);
}, [searchQuery, showVegetarianOnly, activeCategory]);
const handleCategorySelect = (id: string) => {
setActiveCategory(id);
window.scrollTo({ top: 220, behavior: "smooth" });
};
// === BEAUTIFUL LOADING SCREEN ===
if (isLoading) {
return (
Loading the Menu
Preparing the Royal Table...
{[0, 1, 2].map((i) => (
))}
);
}
return (
{/* Page Header */}
AUTHENTIC • GENEROUS • ROYAL
Our Menu
Traditional recipes. Generous portions. Made with heart.
{/* Main Layout */}
{/* BEAUTIFUL SIDEBAR */}
EXPLORE OUR
Signature Categories
{sidebarCategories.map((cat) => {
const isActive = activeCategory === cat.id;
const itemCount = cat.id === "All"
? menuCategories.reduce((sum, c) => sum + c.items.length, 0)
: menuCategories.find(c => c.id === cat.id)?.items.length || 0;
return (
);
})}
{/* MAIN CONTENT */}
{/* Search + Vegetarian Filter */}
setSearchQuery(e.target.value)}
className="w-full md:w-80 rounded-2xl border border-[#e5e1d7] bg-white px-5 py-3 text-sm placeholder:text-[#8A8478] focus:border-[#c99a2e] focus:ring-2 focus:ring-[#c99a2e]/20 transition-all"
/>
{(searchQuery || showVegetarianOnly || activeCategory !== "All") && (
)}
{/* Menu Items */}
{filteredCategories.length === 0 ? (
No dishes found matching your filters.
) : (
filteredCategories.map((category) => (
{category.name}
{category.items.length} dishes
{category.items.map((item) => (
addToCart({ id: item.id, name: item.name, price: item.price, image: item.image })}
>
{/* Media - Restored Premium Video Hover + Poster Logic */}
{item.video ? (
{
const video = e.currentTarget.querySelector("video");
if (video) video.play().catch(() => {});
}}
onMouseLeave={(e) => {
const video = e.currentTarget.querySelector("video");
if (video) {
video.pause();
video.currentTime = 0;
}
}}
onClick={() => addToCart({ id: item.id, name: item.name, price: item.price, image: item.image })}
>
{/* Static Poster (first frame) */}

{
// Fallback poster logic
const base = (item.video || item.image || "").replace(".mp4", "").replace(/-optimized/g, "");
const fallbacks = [
`/images/dishes/${base}-poster.jpg`,
`/images/dishes/${base}-optimized-poster.jpg`,
`/images/dishes/${item.image}`,
].filter(Boolean);
let i = 0;
const tryNext = () => {
if (i < fallbacks.length) {
(e.target as HTMLImageElement).src = fallbacks[i++];
}
};
tryNext();
}}
/>
{/* Video on Hover */}
) : (
/* Static Image for items without video */
addToCart({ id: item.id, name: item.name, price: item.price, image: item.image })}
>
)}
{item.description && (
{item.description}
)}
{item.isVegetarian && (
VEGETARIAN
)}
))}
))
)}
);
}