'use client';
import { DashboardLayout } from '@/components/layout/dashboard-layout';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Input } from '@/components/ui/input';
import { Textarea } from '@/components/ui/textarea';
import {
Plus,
Search,
MoreHorizontal,
GripVertical,
Pencil,
Trash2,
Eye,
EyeOff,
Star,
Clock,
Flame,
ChevronDown,
ChevronRight,
X,
Image as ImageIcon,
DollarSign,
Tag,
AlertCircle,
} from 'lucide-react';
import { useState } from 'react';
import { demoCategories, demoProducts } from '@/lib/demo-data';
import { formatCurrency, cn } from '@/lib/utils';
import { Product, Category } from '@/types/database';
function ProductCard({ product, onEdit }: { product: Product; onEdit: () => void }) {
return (
{/* Image placeholder */}
{product.name}
{product.is_featured && }
{product.description}
{formatCurrency(product.price)}
{product.is_available ? (
Available
) : (
Hidden
)}
{product.preparation_time && (
{product.preparation_time}m
)}
{product.calories && (
{product.calories} cal
)}
{product.tags?.map((tag) => (
{tag}
))}
);
}
function ProductModal({ product, onClose }: { product?: Product; onClose: () => void }) {
return (
{product ? 'Edit Product' : 'Add Product'}
);
}
export default function MenuBuilderPage() {
const [search, setSearch] = useState('');
const [expandedCategories, setExpandedCategories] = useState(demoCategories.map((c) => c.id));
const [editingProduct, setEditingProduct] = useState(null);
const [showAddProduct, setShowAddProduct] = useState(false);
const toggleCategory = (id: string) => {
setExpandedCategories((prev) =>
prev.includes(id) ? prev.filter((c) => c !== id) : [...prev, id]
);
};
const filteredProducts = search
? demoProducts.filter((p) => p.name.toLowerCase().includes(search.toLowerCase()) || p.description?.toLowerCase().includes(search.toLowerCase()))
: demoProducts;
return (
{/* Header */}
Menu Builder
Manage your menus, categories, and products.
{/* Search */}
setSearch(e.target.value)}
className="pl-10 max-w-sm"
/>
{/* Categories & Products */}
{demoCategories.map((category) => {
const categoryProducts = filteredProducts.filter((p) => p.category_id === category.id);
const isExpanded = expandedCategories.includes(category.id);
return (
toggleCategory(category.id)}
>
{isExpanded ? (
) : (
)}
{category.name}
{categoryProducts.length} items{category.description && ` • ${category.description}`}
{category.is_active ? 'Active' : 'Hidden'}
{isExpanded && (
{categoryProducts.length > 0 ? (
{categoryProducts.map((product) => (
setEditingProduct(product)}
/>
))}
) : (
No products in this category
)}
)}
);
})}
{/* Modals */}
{(editingProduct || showAddProduct) && (
{
setEditingProduct(null);
setShowAddProduct(false);
}}
/>
)}
);
}