import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Edit, Trash, AlertTriangle, CheckCircle, AlertCircle, Calculator, Copy, } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Product } from "@/models/products"; import { Badge } from "@/components/ui/badge"; import { Switch } from "@/components/ui/switch"; interface ProductTableProps { products: Product[]; loading: boolean; onEdit: (product: Product) => void; onClone?: (product: Product) => void; onDelete: (productId: string) => void; onToggleEnabled: (productId: string, enabled: boolean) => void; onProfitAnalysis?: (productId: string, productName: string) => void; getCategoryNameById: (categoryId: string) => string; } const ProductTable = ({ products, loading, onEdit, onClone, onDelete, onToggleEnabled, onProfitAnalysis, getCategoryNameById, }: ProductTableProps) => { // Separate enabled and disabled products const enabledProducts = products.filter((p) => p.enabled !== false); const disabledProducts = products.filter((p) => p.enabled === false); const sortByCategory = (productList: Product[]) => { return [...productList].sort((a, b) => { const categoryNameA = getCategoryNameById(a.category); const categoryNameB = getCategoryNameById(b.category); return categoryNameA.localeCompare(categoryNameB); }); }; const sortedEnabledProducts = sortByCategory(enabledProducts); const sortedDisabledProducts = sortByCategory(disabledProducts); const getStockIcon = (product: Product) => { if (!product.stockTracking) return null; if (product.stockStatus === "out_of_stock") { return ; } else if (product.stockStatus === "low_stock") { return ; } else { return ; } }; const renderProductRow = (product: Product, isDisabled: boolean = false) => (
{product.name}
{getCategoryNameById(product.category)}
{getCategoryNameById(product.category)} {product.unitType} {product.stockTracking ? (
{getStockIcon(product)} {product.currentStock !== undefined ? product.currentStock : 0}{" "} {product.unitType}
) : ( Not Tracked )}
onToggleEnabled(product._id as string, checked) } /> {onProfitAnalysis && ( )} {onClone && ( )}
); const renderTableHeader = () => ( Product Category Unit Stock Enabled Actions ); return (
{/* Enabled Products Table */}
{renderTableHeader()} {loading ? ( Array.from({ length: 1 }).map((_, index) => ( Loading... Loading... Loading... Loading... Loading... Loading... )) ) : sortedEnabledProducts.length > 0 ? ( sortedEnabledProducts.map((product) => renderProductRow(product)) ) : ( No enabled products found. )}
{/* Disabled Products Section */} {!loading && disabledProducts.length > 0 && (
{renderTableHeader()} {sortedDisabledProducts.map((product) => renderProductRow(product, true), )}
)}
); }; export default ProductTable;