comissions-app-ui/views/tables/TableSpanning.tsx
2024-02-18 01:44:48 -05:00

95 lines
2.8 KiB
TypeScript

// ** MUI Imports
import Paper from '@mui/material/Paper'
import Table from '@mui/material/Table'
import TableRow from '@mui/material/TableRow'
import TableHead from '@mui/material/TableHead'
import TableBody from '@mui/material/TableBody'
import TableCell from '@mui/material/TableCell'
import TableContainer from '@mui/material/TableContainer'
interface Row {
desc: string
qty: number
unit: number
price: number
}
const TAX_RATE = 0.07
const ccyFormat = (num: number) => {
return `${num.toFixed(2)}`
}
const priceRow = (qty: number, unit: number) => {
return qty * unit
}
const createRow = (desc: string, qty: number, unit: number) => {
const price = priceRow(qty, unit)
return { desc, qty, unit, price }
}
const 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
const TableSpanning = () => {
return (
<TableContainer component={Paper}>
<Table sx={{ minWidth: 700 }} aria-label='spanning table'>
<TableHead>
<TableRow>
<TableCell align='center' colSpan={3}>
Details
</TableCell>
<TableCell align='right'>Price</TableCell>
</TableRow>
<TableRow>
<TableCell>Desc</TableCell>
<TableCell align='right'>Qty.</TableCell>
<TableCell align='right'>Unit</TableCell>
<TableCell align='right'>Sum</TableCell>
</TableRow>
</TableHead>
<TableBody>
{rows.map(row => (
<TableRow key={row.desc}>
<TableCell>{row.desc}</TableCell>
<TableCell align='right'>{row.qty}</TableCell>
<TableCell align='right'>{row.unit}</TableCell>
<TableCell align='right'>{ccyFormat(row.price)}</TableCell>
</TableRow>
))}
<TableRow>
<TableCell rowSpan={3} />
<TableCell colSpan={2}>Subtotal</TableCell>
<TableCell align='right'>{ccyFormat(invoiceSubtotal)}</TableCell>
</TableRow>
<TableRow>
<TableCell>Tax</TableCell>
<TableCell align='right'>{`${(TAX_RATE * 100).toFixed(0)} %`}</TableCell>
<TableCell align='right'>{ccyFormat(invoiceTaxes)}</TableCell>
</TableRow>
<TableRow>
<TableCell colSpan={2}>Total</TableCell>
<TableCell align='right'>{ccyFormat(invoiceTotal)}</TableCell>
</TableRow>
</TableBody>
</Table>
</TableContainer>
)
}
export default TableSpanning