"use client"; import { PurchaseQcResult, PurchaseQCInput } from "@/app/api/po/actions"; import { Box, Card, CardContent, Grid, Stack, TextField, Tooltip, Typography, } from "@mui/material"; import { useFormContext } from "react-hook-form"; import { useTranslation } from "react-i18next"; import StyledDataGrid from "../StyledDataGrid"; import { useCallback, useEffect, useMemo, useState } from "react"; import { GridColDef, GridRowIdGetter, GridRowModel, useGridApiContext, GridRenderCellParams, GridRenderEditCellParams, useGridApiRef, } from "@mui/x-data-grid"; import InputDataGrid from "../InputDataGrid"; import { TableRow } from "../InputDataGrid/InputDataGrid"; import { GridEditInputCell } from "@mui/x-data-grid"; import { StockInLine } from "@/app/api/po"; import { stockInLineStatusMap } from "@/app/utils/formatUtil"; import { fetchQcItemCheck, fetchQcResult } from "@/app/api/qc/actions"; import { QcItemWithChecks } from "@/app/api/qc"; import axios from "@/app/(main)/axios/axiosInstance"; import { NEXT_PUBLIC_API_URL } from "@/config/api"; import axiosInstance from "@/app/(main)/axios/axiosInstance"; import TwoLineCell from "../PoDetail/TwoLineCell"; import QcSelect from "../PoDetail/QcSelect"; import { PickOrderQcInput } from "@/app/api/pickOrder/actions"; interface Props { qcDefaultValues: PickOrderQcInput; qc: QcItemWithChecks[]; disabled: boolean; } type EntryError = | { [field in keyof PurchaseQcResult]?: string; } | undefined; type PoQcRow = TableRow, EntryError>; // fetchQcItemCheck const QcContent: React.FC = ({ qc, qcDefaultValues, disabled }) => { const { t } = useTranslation("purchaseOrder"); const apiRef = useGridApiRef(); const { register, formState: { errors, defaultValues, touchedFields }, watch, control, setValue, getValues, reset, resetField, setError, clearErrors, } = useFormContext(); console.log(qcDefaultValues); console.log(defaultValues); //// validate form const accQty = watch("qty"); const validateForm = useCallback(() => { console.log(accQty); if (accQty > qcDefaultValues.qty) { setError("qty", { message: `${t("qty must not greater than")} ${qcDefaultValues.qty}`, type: "required", }); } if (accQty < 1) { setError("qty", { message: t("minimal value is 1"), type: "required", }); } if (isNaN(accQty)) { setError("qty", { message: t("value must be a number"), type: "required", }); } }, [accQty]); useEffect(() => { clearErrors(); validateForm(); }, [validateForm]); // const [recordQty, setRecordQty] = useState(0); const columns = useMemo( () => [ { field: "qcItemId", headerName: t("qc Check"), flex: 1, editable: !disabled, valueFormatter(params) { const row = params.id ? params.api.getRow(params.id) : null; if (!row) { return null; } const Qc = qc.find((q) => q.id === row.qcItemId); return Qc ? `${Qc.code} - ${Qc.name}` : t("Please select QC"); }, renderCell(params: GridRenderCellParams) { console.log(params.value); return {params.formattedValue}; }, renderEditCell(params: GridRenderEditCellParams) { const errorMessage = params.row._error?.[params.field as keyof PurchaseQcResult]; console.log(errorMessage); const content = ( { await params.api.setEditCellValue({ id: params.id, field: "qcItemId", value: qcItemId, }); // await params.api.setEditCellValue({ // id: params.id, // field: "type", // value: "determine1", // }); }} /> ); return errorMessage ? ( {content} ) : ( content ); }, }, { field: "failQty", headerName: t("failQty"), flex: 1, editable: !disabled, type: "number", renderEditCell(params: GridRenderEditCellParams) { // const recordQty = params.row.qty // if (recordQty !== undefined) { // setUnrecordQty((prev) => prev - recordQty) // } const errorMessage = params.row._error?.[params.field as keyof PurchaseQcResult]; const content = ; return errorMessage ? ( {content} ) : ( content ); }, }, ], [qc], ); /// validate datagrid const validation = useCallback( (newRow: GridRowModel): EntryError => { const error: EntryError = {}; const { qcItemId, failQty } = newRow; if (!qcItemId || qcItemId <= 0) { error["qcItemId"] = t("select qc"); } if (!failQty || failQty <= 0) { error["failQty"] = t("enter a failQty"); } if (failQty && failQty > qcDefaultValues.qty) { error["failQty"] = t("qty too big"); } return Object.keys(error).length > 0 ? error : undefined; }, [], ); return ( {t("Qc Detail")} apiRef={apiRef} checkboxSelection={false} _formKey={"qcResult"} columns={columns} validateRow={validation} needAdd={!disabled} /> ); }; export default QcContent;