"use client"; import { Box, Button, CircularProgress, Paper, Stack, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TextField, Typography, TablePagination, } from "@mui/material"; import { useCallback, useMemo } from "react"; import { useTranslation } from "react-i18next"; interface CombinedLotTableProps { combinedLotData: any[]; combinedDataLoading: boolean; pickQtyData: Record; paginationController: { pageNum: number; pageSize: number; }; onPickQtyChange: (lotKey: string, value: number | string) => void; onSubmitPickQty: (lot: any) => void; onRejectLot: (lot: any) => void; onPageChange: (event: unknown, newPage: number) => void; onPageSizeChange: (event: React.ChangeEvent) => void; } // Simple helper function to check if item is completed const isItemCompleted = (lot: any) => { const actualPickQty = Number(lot.actualPickQty) || 0; const requiredQty = Number(lot.requiredQty) || 0; return lot.stockOutLineStatus === 'completed' || (actualPickQty > 0 && requiredQty > 0 && actualPickQty >= requiredQty); }; const isItemRejected = (lot: any) => { return lot.stockOutLineStatus === 'rejected'; }; const CombinedLotTable: React.FC = ({ combinedLotData, combinedDataLoading, pickQtyData, paginationController, onPickQtyChange, onSubmitPickQty, onRejectLot, onPageChange, onPageSizeChange, }) => { const { t } = useTranslation("pickOrder"); // Paginated data const paginatedLotData = useMemo(() => { const startIndex = paginationController.pageNum * paginationController.pageSize; const endIndex = startIndex + paginationController.pageSize; return combinedLotData.slice(startIndex, endIndex); }, [combinedLotData, paginationController]); if (combinedDataLoading) { return ( ); } return ( <> {t("Pick Order Code")} {t("Item Code")} {t("Item Name")} {t("Lot No")} {/* {t("Expiry Date")} */} {t("Location")} {t("Current Stock")} {t("Lot Required Pick Qty")} {t("Qty Already Picked")} {t("Lot Actual Pick Qty")} {t("Stock Unit")} {t("Submit")} {t("Reject")} {paginatedLotData.length === 0 ? ( {t("No data available")} ) : ( paginatedLotData.map((lot: any) => { const lotKey = `${lot.pickOrderLineId}-${lot.lotId}`; const currentPickQty = pickQtyData[lotKey] ?? ''; const isCompleted = isItemCompleted(lot); const isRejected = isItemRejected(lot); // Green text color for completed items const textColor = isCompleted ? 'success.main' : isRejected ? 'error.main' : 'inherit'; return ( {lot.pickOrderCode} {lot.itemCode} {lot.itemName} {lot.lotNo} {/* {lot.expiryDate ? dayjs(lot.expiryDate).format(OUTPUT_DATE_FORMAT) : 'N/A'} */} {lot.location} {lot.availableQty} {lot.requiredQty} {lot.actualPickQty || 0} { onPickQtyChange(lotKey, e.target.value); }} onFocus={(e) => { e.target.select(); }} inputProps={{ min: 0, max: lot.availableQty, step: 0.01 }} disabled={ isCompleted || isRejected || lot.lotAvailability === 'expired' || lot.lotAvailability === 'status_unavailable' } sx={{ width: '80px', '& .MuiInputBase-input': { textAlign: 'right', } }} /> {lot.stockUnit} ); }) )}
`${from}-${to} of ${count !== -1 ? count : `more than ${to}`}` } /> ); }; export default CombinedLotTable;