"use client"; import { ModalFormInput, PurchaseQCInput, PurchaseQcResult, StockInInput, StockInLineEntry, updateStockInLine } from "@/app/api/po/actions"; import { Box, Button, Modal, ModalProps, Stack } from "@mui/material"; import { Dispatch, SetStateAction, useCallback, useEffect, useMemo, useState } from "react"; import { FormProvider, SubmitHandler, useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import QcForm from "./QcForm"; import { QcItemWithChecks } from "@/app/api/qc"; import { Check, CurrencyYuanRounded } from "@mui/icons-material"; import { StockInLine } from "@/app/api/po"; import { useSearchParams } from "next/navigation"; import { StockInLineRow } from "./PoInputGrid"; import EscalationForm from "./EscalationForm"; import StockInForm from "./StockInForm"; import PutawayForm from "./PutawayForm"; import { stockInLineStatusMap } from "@/app/utils/formatUtil"; interface CommonProps extends Omit { setEntries: Dispatch> itemDetail: StockInLine & {qcResult?: PurchaseQcResult[]}; qc?: QcItemWithChecks[]; warehouse?: any[]; type: "qc" | "stockIn" | "escalation" | "putaway" } interface QcProps extends CommonProps { qc: QcItemWithChecks[]; type: "qc" } interface StockInProps extends CommonProps { // naming type: "stockIn" } interface PutawayProps extends CommonProps { // naming // warehouse: any[]; warehouse: any[]; type: "putaway" } interface EscalationProps extends CommonProps { // naming type: "escalation" } type Props = QcProps | StockInProps | EscalationProps | PutawayProps; const style = { position: "absolute", top: "50%", left: "50%", transform: "translate(-50%, -50%)", bgcolor: "background.paper", pt: 5, px: 5, pb: 10, width: { xs: "80%", sm: "80%", md: "80%" }, }; const PoQcStockInModal: React.FC = ({ type, setEntries, open, onClose, itemDetail, qc, warehouse, }) => { console.log(itemDetail) const [serverError, setServerError] = useState(""); const { t } = useTranslation(); const params = useSearchParams() console.log(params.get("id")) const [defaultValues, setDefaultValues] = useState({}); const defaultValue = useMemo(() => { // switch (type) { // case "qc": // return {qcResult: itemDetail.qcResult} // } // return {} return {...itemDetail} }, []) // const formProps = useForm({ // defaultValues: defaultValues ? defaultValues : {}, // }); const formProps = useForm({ defaultValues: defaultValue }); const errors = formProps.formState.errors; const closeHandler = useCallback>( (...args) => { onClose?.(...args); // reset(); }, [onClose] ); useEffect(() => { setDefaultValues({}); }, []); const onSubmit = useCallback>( async (data, event) => { let hasErrors = false; console.log(errors); console.log(data); console.log(itemDetail); try { // add checking // const qty = data.sampleRate //////////////////////// modify this mess later ////////////////////// var productionDate = null var acceptedQty = null if (data.productionDate && data.productionDate.length > 0) { productionDate = data.productionDate } if (data.qcResult) { acceptedQty = itemDetail.acceptedQty - data.qcResult.reduce((acc, curr) => acc + curr.failQty, 0) } const args = { id: itemDetail.id, purchaseOrderId: parseInt(params.get("id")!!), purchaseOrderLineId: itemDetail.purchaseOrderLineId, itemId: itemDetail.itemId, ...data, productionDate: productionDate, } as StockInLineEntry & ModalFormInput; ////////////////////////////////////////////////////////////////////// console.log(args) // return if (hasErrors) { setServerError(t("An error has occurred. Please try again later.")); return false; } const res = await updateStockInLine(args) if (Boolean(res.id)) { // update entries const newEntries = res.entity as StockInLine[] setEntries((prev) => { const updatedEntries = [...prev]; // Create a new array newEntries.forEach((item) => { const index = updatedEntries.findIndex(p => p.id === item.id); if (index !== -1) { // Update existing item updatedEntries[index] = item; } else { // Add new item updatedEntries.push(item); } }); return updatedEntries; // Return the new array }) // add loading closeHandler({}, "backdropClick") } console.log(res) // if (res) } catch (e) { // server error setServerError(t("An error has occurred. Please try again later.")); console.log(e); } }, [t, itemDetail] ); const renderSubmitButton = useMemo((): Boolean => { if (itemDetail) { const status = itemDetail.status console.log(status) switch (type) { case "qc": return stockInLineStatusMap[status] === 1 case "putaway": return stockInLineStatusMap[status] === 7 case "stockIn": return stockInLineStatusMap[status] === 6 default: return false; // Handle unexpected type } } else return false }, [type, itemDetail]) useEffect(() => { console.log(renderSubmitButton) }, [renderSubmitButton]) return ( <> {type === "qc" && } {type === "stockIn" && } {type === "escalation" && } {type === "putaway" && } {renderSubmitButton ? ( ) : undefined } ); }; export default PoQcStockInModal;