"use client"; import { PurchaseQcCheck, 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, 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 TwoLineCell from "./TwoLineCell"; import QcSelect from "./QcSelect"; import { QcItemWithChecks } from "@/app/api/qc"; import { GridEditInputCell } from "@mui/x-data-grid"; import { StockInLine } from "@/app/api/po"; interface Props { itemDetail: StockInLine; qc: QcItemWithChecks[]; } type EntryError = | { [field in keyof PurchaseQcCheck]?: string; } | undefined; type PoQcRow = TableRow, EntryError>; const QcForm: React.FC = ({ qc, itemDetail, }) => { const { t } = useTranslation(); const apiRef = useGridApiRef(); const { register, formState: { errors, defaultValues, touchedFields }, watch, control, setValue, getValues, reset, resetField, setError, clearErrors, } = useFormContext(); console.log(itemDetail) const [recordQty, setRecordQty] = useState(0) const columns = useMemo( () => [ { field: "qcCheckId", headerName: "qc Check", flex: 1, editable: true, valueFormatter(params) { const row = params.id ? params.api.getRow(params.id) : null; if (!row) { return null; } const Qc = qc.find((q) => q.id === row.qcCheckId); 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 PurchaseQcCheck]; console.log(errorMessage); const content = ( { await params.api.setEditCellValue({ id: params.id, field: "qcCheckId", value: qcCheckId, }); }} /> ); return errorMessage ? ( {content} ) : ( content ); }, }, { field: "qty", headerName: "qty", flex: 1, editable: true, 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 PurchaseQcCheck]; const content = ; return errorMessage ? ( {content} ) : ( content ); }, }, ], [] ); const validation = useCallback( (newRow: GridRowModel): EntryError => { const error: EntryError = {}; const { qcCheckId, qty } = newRow; if (!qcCheckId || qcCheckId <= 0) { error["qcCheckId"] = "select qc"; } if (!qty || qty <= 0) { error["qty"] = "enter a qty"; } if (qty && qty > itemDetail.acceptedQty) { error["qty"] = "qty too big"; } return Object.keys(error).length > 0 ? error : undefined; }, [] ); return ( {t("Qc Detail")} apiRef={apiRef} checkboxSelection={false} _formKey={"qcCheck"} columns={columns} validateRow={validation} /> ); }; export default QcForm;