"use client"; import { useManager } from "@/lib/manager-context"; import type { Product } 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") + "đ"; } export default function ProductsTab() { const { products, categories, addProduct, updateProduct, deleteProduct, toggleProductAvailability, } = useManager(); const [filterCategory, setFilterCategory] = useState("all"); const [filterStatus, setFilterStatus] = useState< "all" | "available" | "unavailable" >("all"); const [search, setSearch] = useState(""); const [modalProduct, setModalProduct] = useState( null, ); const [deleteTarget, setDeleteTarget] = useState(null); const filtered = products.filter((p) => { if (filterCategory !== "all" && p.category !== filterCategory) return false; 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; }); const getCategoryName = (id: string) => categories.find((c) => c.id === id)?.name ?? id; return (
{/* Toolbar */}
{/* Search */}
setSearch(e.target.value)} placeholder="Tìm kiếm món..." 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 && ( )}

Hiển thị {filtered.length}{" "} / {products.length} món

{/* Table */}
{filtered.length === 0 ? ( ) : ( filtered.map((p) => ( )) )}
Tên món Danh mục Giá Trạng thái Thao tác
Không tìm thấy món nào

{p.name}

{p.description && (

{p.description}

)}
c.id === p.category)?.icon ?? "fa-solid fa-tag"} text-[10px]`} > {getCategoryName(p.category)} {formatPrice(p.price)}
{modalProduct !== null && ( { if ("id" in data) { updateProduct(data as Product); } else { addProduct(data); } setModalProduct(null); }} onClose={() => setModalProduct(null)} /> )} {deleteTarget !== null && ( { deleteProduct(deleteTarget.id); setDeleteTarget(null); }} onClose={() => setDeleteTarget(null)} /> )}
); }