import React, { useEffect, useState } from "react"; import { TableBody, TableRow } from "@mui/material"; import Checkbox from "@mui/material/Checkbox"; import Input from "@mui/material/Input"; import Table from "../../../../components/Table"; import { TableCell } from "../../../../components/Table/TableCell"; import TableHead from "../../../../components/Table/TableHead"; import TableHeading from "../../../../components/Table/TableHeading"; import { useCardContext } from "../../../../contexts/CardContext"; import { useI18n } from "../../../../contexts/I18nContext"; import { OrderItem } from "../../types/order"; export interface ShipmentItemsTableProps { items: OrderItem[]; isPending: boolean; onSelect?: (selected: OrderItem[]) => void; } export const OrderItemsTable: React.FC = ({ items, isPending, onSelect, }) => { const { t } = useI18n(); const [selected, setSelected] = useState([]); const { isEditing } = useCardContext(); const toggleSelectAll = (_: React.ChangeEvent, checked: boolean) => { setSelected(checked ? items : []); }; const toggleItem = (item: OrderItem, checked: boolean) => { const index = selected.map(({ code }) => code).indexOf(item.code); if (checked && index === -1) { setSelected([...selected, item]); } else { const unselected = [...selected]; unselected.splice(index, 1); setSelected(unselected); } }; const itemQuantityChange = (item: OrderItem) => { const index = selected.map(({ code }) => code).indexOf(item.code); const changed = [...selected]; changed[index] = item; setSelected(changed); }; useEffect(() => { if (onSelect != null) onSelect(selected); }, [onSelect, selected]); return ( {isEditing && isPending && ( 0 && selected.length < items.length} onChange={toggleSelectAll} /> )} {t("Item")} {t("SKU")} {t("Quantity")} {items.map((item) => { const isSelected = selected.map(({ code }) => code).includes(item.code); return ( {isEditing && isPending ? ( toggleItem(item, checked)} /> ) : null} {item.name} {item.code} {isEditing && isPending ? ( itemQuantityChange({ ...item, quantity: Number.parseInt(event.target.value), }) } /> ) : ( item.quantity )} ); })}
); }; export default OrderItemsTable;