import Table from '@mui/material/Table'; import TableBody from '@mui/material/TableBody'; import TableCell from '@mui/material/TableCell'; import TableContainer from '@mui/material/TableContainer'; import TableHead from '@mui/material/TableHead'; import TableRow from '@mui/material/TableRow'; import Paper from '@mui/material/Paper'; const TAX_RATE = 0.07; function ccyFormat(num: number) { return `${num.toFixed(2)}`; } function priceRow(qty: number, unit: number) { return qty * unit; } function createRow(desc: string, qty: number, unit: number) { const price = priceRow(qty, unit); return { desc, qty, unit, price }; } interface Row { desc: string; qty: number; unit: number; price: number; } function subtotal(items: readonly Row[]) { return items.map(({ price }) => price).reduce((sum, i) => sum + i, 0); } const rows = [ createRow('Paperclips (Box)', 100, 1.15), createRow('Paper (Case)', 10, 45.99), createRow('Waste Basket', 2, 17.99), ]; const invoiceSubtotal = subtotal(rows); const invoiceTaxes = TAX_RATE * invoiceSubtotal; const invoiceTotal = invoiceTaxes + invoiceSubtotal; export default function SpanningTable() { return ( Details Price Desc Qty. Unit Sum {rows.map((row) => ( {row.desc} {row.qty} {row.unit} {ccyFormat(row.price)} ))} Subtotal {ccyFormat(invoiceSubtotal)} Tax {`${(TAX_RATE * 100).toFixed(0)} %`} {ccyFormat(invoiceTaxes)} Total {ccyFormat(invoiceTotal)}
); }