"use client"; import React, { useCallback, useEffect, useState } from "react"; import { Box, Button, Card, CardContent, CardActions, Stack, Typography, Chip, CircularProgress, TablePagination, Grid, } from "@mui/material"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import { useTranslation } from "react-i18next"; import { fetchAllJoPickOrders, AllJoPickOrderResponse } from "@/app/api/jo/actions"; import JobPickExecution from "./newJobPickExecution"; interface Props { onSwitchToRecordTab?: () => void; } const PER_PAGE = 6; const JoPickOrderList: React.FC = ({ onSwitchToRecordTab }) =>{ const { t } = useTranslation(["common", "jo"]); const [loading, setLoading] = useState(false); const [pickOrders, setPickOrders] = useState([]); const [page, setPage] = useState(0); const [selectedPickOrderId, setSelectedPickOrderId] = useState(undefined); const [selectedJobOrderId, setSelectedJobOrderId] = useState(undefined); type PickOrderFilter = "all" | "drink" | "other"; const [filter, setFilter] = useState("all"); const fetchPickOrders = useCallback(async () => { setLoading(true); try { const isDrinkParam = filter === "all" ? undefined : filter === "drink" ? true : false; const data = await fetchAllJoPickOrders(isDrinkParam); setPickOrders(Array.isArray(data) ? data : []); setPage(0); } catch (e) { console.error(e); setPickOrders([]); } finally { setLoading(false); } }, [filter]); useEffect(() => { fetchPickOrders( ); }, [fetchPickOrders, filter]); const handleBackToList = useCallback(() => { setSelectedPickOrderId(undefined); setSelectedJobOrderId(undefined); fetchPickOrders(); }, [fetchPickOrders]); // If a pick order is selected, show JobPickExecution detail view if (selectedPickOrderId !== undefined) { return ( ); } const startIdx = page * PER_PAGE; const paged = pickOrders.slice(startIdx, startIdx + PER_PAGE); return ( {loading ? ( ) : ( {t("Total pick orders")}: {pickOrders.length} {paged.map((pickOrder) => { const status = String(pickOrder.jobOrderStatus || ""); const statusLower = status.toLowerCase(); const statusColor = statusLower === "completed" ? "success" : statusLower === "pending" || statusLower === "processing" ? "primary" : "default"; const finishedCount = pickOrder.finishedPickOLineCount ?? 0; return ( {t("Job Order")}: {pickOrder.jobOrderCode || "-"} {t("Lot No")}: {pickOrder.lotNo || "-"} {t("Pick Order")}: {pickOrder.pickOrderCode || "-"} {t("Item Name")}: {pickOrder.itemName} {t("Required Qty")}: {pickOrder.reqQty} ({pickOrder.uomName}) {pickOrder.floorPickCounts?.map(({ floor, finishedCount, totalCount }) => ( {floor}: {finishedCount}/{totalCount} ))} {statusLower !== "pending" && finishedCount > 0 && ( {t("Finished lines")}: {finishedCount} )} ); })} {pickOrders.length > 0 && ( setPage(p)} rowsPerPageOptions={[PER_PAGE]} /> )} )} ); }; export default JoPickOrderList;