'use client'; import React, { useState } from 'react'; export interface Product { _id: string; code: string; name: string; category: string; subcategory: string; quantity: number; unit: string; unitPrice: number; vat: number; supplier: string; createdAt: string; updatedAt: string; } interface ProductTableProps { products: Product[]; } export default function ProductTable({ products }: ProductTableProps) { const [selectedProducts, setSelectedProducts] = useState>(new Set()); const toggleProduct = (id: string) => { const newSelected = new Set(selectedProducts); if (newSelected.has(id)) { newSelected.delete(id); } else { newSelected.add(id); } setSelectedProducts(newSelected); }; const toggleAll = () => { if (selectedProducts.size === products.length) { setSelectedProducts(new Set()); } else { setSelectedProducts(new Set(products.map(p => p._id))); } }; const calculateNetPrice = (unitPrice: number, vat: number) => { return unitPrice * (1 + vat / 100); }; return ( <> {/* Desktop & Tablet Table View */}
{products.map((product) => ( ))}
0} onChange={toggleAll} className="w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500" /> Product Category Subcategory Quantity Unit Price VAT Net Price Supplier Actions
toggleProduct(product._id)} className="w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500" />

{product.name}

ID: {product.code}

{product.category} • {product.quantity} {product.unit}

{product.category} {product.subcategory} {product.quantity} {product.unit} €{product.unitPrice.toFixed(2)} {product.vat}% €{calculateNetPrice(product.unitPrice, product.vat).toFixed(2)} {product.supplier}
{/* Mobile Card View */}
{products.map((product) => (
toggleProduct(product._id)} className="w-4 h-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 mt-1" />

{product.name}

ID: {product.code}

Category

{product.category}

Subcategory

{product.subcategory}

Quantity

{product.quantity} {product.unit}

Unit Price

€{product.unitPrice.toFixed(2)}

VAT

{product.vat}%

Net Price

€{calculateNetPrice(product.unitPrice, product.vat).toFixed(2)}

Updated

{new Date(product.updatedAt).toLocaleDateString()}

))}
); }