"use client"; import { useManager } from "@/lib/manager-context"; import type { MenuItemEntity } from "@/lib/types"; import { useState } from "react"; import DeleteConfirm from "./DeleteConfirm"; import ProductModal from "./ProductModal"; import StatusBadge from "./StatusBadge"; function formatPrice(price: number) { return price.toLocaleString("vi-VN") + "đ"; } function toDisplayUrl(filename: string) { if (!filename) return "/imgs/products/placeholder.jpg"; if (filename.startsWith("/") || filename.startsWith("http")) return filename; return `/api/file/${filename}`; } export default function ProductsTab() { const { products, addProduct, updateProduct, deleteProduct, toggleProductAvailability, } = useManager(); const [filterStatus, setFilterStatus] = useState< "all" | "available" | "unavailable" >("all"); const [search, setSearch] = useState(""); const [modalProduct, setModalProduct] = useState< MenuItemEntity | null | "new" >(null); const [deleteTarget, setDeleteTarget] = useState(null!); const filtered = products.filter((p) => { if (filterStatus === "available" && p.available === false) return false; if (filterStatus === "unavailable" && p.available !== false) return false; if ( search && !p.name.toLowerCase().includes(search.toLowerCase()) && !p.description.toLowerCase().includes(search.toLowerCase()) ) return false; return true; }); return (
{/* Toolbar */}
{/* Search */}
setSearch(e.target.value)} placeholder="Search items..." className="text-foreground w-full rounded-xl border border-(--color-border) bg-white py-2 pr-9 pl-9 text-sm transition outline-none focus:border-(--color-primary) focus:ring-2 focus:ring-(--color-primary)/20" /> {search && ( )}

Showing {filtered.length}{" "} / {products.length} items

{/* Table */}
{filtered.length === 0 ? ( ) : ( filtered.map((p) => ( )) )}
Image Item name Price Status Actions
No items found
{p.name}

{p.name}

{p.description && (

{p.description}

)}
{formatPrice(p.price)}
{modalProduct !== null && ( { if ("id" in data) { updateProduct(data); } else { addProduct(data); } setModalProduct(null); }} onClose={() => setModalProduct(null)} /> )} {deleteTarget !== null && ( { deleteProduct(deleteTarget.id!); setDeleteTarget(null!); }} onClose={() => setDeleteTarget(null!)} /> )}
); }