"use client"; import { Button, ButtonProps, Card, CardContent, CardHeader, CircularProgress, Grid, Stack, Typography, } from "@mui/material"; import { useTranslation } from "react-i18next"; import StyledDataGrid from "../StyledDataGrid"; import { useCallback, useEffect, useMemo, useState } from "react"; import { GridColDef } from "@mui/x-data-grid"; import { PlayArrow } from "@mui/icons-material"; import DoneIcon from "@mui/icons-material/Done"; import { GridRowSelectionModel } from "@mui/x-data-grid"; import { useQcCodeScanner } from "../QrCodeScannerProvider/QrCodeScannerProvider"; import { fetchPickOrderLineClient } from "@/app/api/pickorder/actions"; import { PickOrderLineWithSuggestedLot } from "@/app/api/pickorder"; import { Pageable } from "@/app/utils/fetchUtil"; import { QrCodeInfo } from "@/app/api/qrcode"; import { QrCode } from "../QrCode"; import { fetchLotDetail, LotLineInfo } from "@/app/api/inventory/actions"; import { GridRowModesModel } from "@mui/x-data-grid"; interface Props { consoCode: string; } interface IsLoadingModel { pickOrderLineTable: boolean; stockOutLineTable: boolean; } const PickOrderDetail: React.FC = ({ consoCode }) => { const { t } = useTranslation("pickOrder"); const [selectedRow, setSelectRow] = useState(); const [isLoadingModel, setIsLoadingModel] = useState({ pickOrderLineTable: false, stockOutLineTable: false, }); const [polCriteriaArgs, setPolCriteriaArgs] = useState({ pageNum: 1, pageSize: 10, }); const [solCriteriaArgs, setSolCriteriaArgs] = useState({ pageNum: 1, pageSize: 10, }); const [polTotalCount, setPolTotalCount] = useState(0); const [solTotalCount, setSolTotalCount] = useState(0); const [rowModesModel, setRowModesModel] = useState({}); const [pickOrderLine, setPickOrderLine] = useState< PickOrderLineWithSuggestedLot[] >([]); const pickOrderLineColumns = useMemo( () => [ { field: "id", headerName: "pickOrderLineId", flex: 1, }, { field: "itemName", headerName: "itemId", flex: 1, }, { field: "qty", headerName: "qty", flex: 1, }, { field: "uom", headerName: "uom", flex: 1, }, { field: "warehouse", headerName: "location", flex: 1, }, { field: "suggestedLotNo", headerName: "suggestedLotNo", flex: 1.2, }, ], [] ); const [stockOutLine, setStockOutLine] = useState([]); const stockOutLineColumns = useMemo( () => [ { field: "code", headerName: "actual lot (out line", flex: 1, }, ], [] ); const handleStartPickOrder = useCallback(async () => {}, []); const handleCompletePickOrder = useCallback(async () => {}, []); useEffect(() => { console.log(selectedRow); }, [selectedRow]); const buttonData = useMemo( () => ({ buttonName: "complete", title: t("Do you want to complete?"), confirmButtonText: t("Complete"), successTitle: t("Complete Success"), errorTitle: t("Complete Fail"), buttonText: t("Complete PO"), buttonIcon: , buttonColor: "info", disabled: true, }), [] ); const [isOpenScanner, setOpenScanner] = useState(false); const onOpenScanner = useCallback(() => { setOpenScanner((prev) => !prev); }, []); const fetchPickOrderLine = useCallback( async (params: Record) => { setIsLoadingModel((prev) => ({ ...prev, pickOrderLineTable: true, })); const res = await fetchPickOrderLineClient({ ...params, consoCode: consoCode, }); if (res) { console.log(res); setPickOrderLine(res.records); setPolTotalCount(res.total); } else { console.log("error"); console.log(res); } setIsLoadingModel((prev) => ({ ...prev, pickOrderLineTable: false, })); }, [fetchPickOrderLineClient, consoCode] ); const fetchStockOutLine = useCallback( async (params: Record) => {}, [] ); useEffect(() => { fetchPickOrderLine(polCriteriaArgs); }, [polCriteriaArgs]); useEffect(() => { fetchStockOutLine(solCriteriaArgs); }, [solCriteriaArgs]); const getLotDetail = useCallback( async (stockInLineId: number): Promise => { const res = await fetchLotDetail(stockInLineId); return res; }, [fetchLotDetail] ); const scanner = useQcCodeScanner(); useEffect(() => { if (isOpenScanner && !scanner.isScanning) { scanner.startScan(); } else if (!isOpenScanner && scanner.isScanning) { scanner.stopScan(); } }, [isOpenScanner]); useEffect(() => { if (scanner.values.length > 0) { console.log(scanner.values[0]); const data: QrCodeInfo = JSON.parse(scanner.values[0]); console.log(data); if (data.stockInLineId) { console.log("still got in"); console.log(data.stockInLineId); // fetch getLotDetail(data.stockInLineId).then((value) => {}); } scanner.resetScan(); } }, [scanner.values]); const homemade_Qrcode = { stockInLineId: 156, }; return ( <> {consoCode} {/* homemade qrcode for testing purpose */} {/* */} {/* */} {isLoadingModel.pickOrderLineTable ? ( ) : ( { setSelectRow(newRowSelectionModel); }} initialState={{ pagination: { paginationModel: { pageSize: 10, page: 0 }, }, }} pageSizeOptions={[10, 25, 50, 100]} onPaginationModelChange={async (model, details) => { setPolCriteriaArgs({ pageNum: model.page + 1, pageSize: model.pageSize, }); }} rowCount={polTotalCount} /> )} { setSolCriteriaArgs({ pageNum: model.page + 1, pageSize: model.pageSize, }); }} rowCount={solTotalCount} /> ); }; export default PickOrderDetail;