import React from 'react'; import { makeStyles } from '@material-ui/core/styles'; import Table from '@material-ui/core/Table'; import TableBody from '@material-ui/core/TableBody'; import TableCell from '@material-ui/core/TableCell'; import TableContainer from '@material-ui/core/TableContainer'; import TableHead from '@material-ui/core/TableHead'; import TableRow from '@material-ui/core/TableRow'; import Paper from '@material-ui/core/Paper'; const TAX_RATE = 0.07; const useStyles = makeStyles({ table: { minWidth: 700, }, }); 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: 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() { const classes = useStyles(); 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)}
); }