"use client"; import { useCallback, useEffect, useMemo, useState } from "react"; import { useRouter, useSearchParams } from "next/navigation"; import { useTranslation } from "react-i18next"; import { CreateItemInputs, saveItem } from "@/app/api/settings/item/actions"; import { FormProvider, SubmitErrorHandler, SubmitHandler, useForm, } from "react-hook-form"; import { deleteDialog } from "../Swal/CustomAlerts"; import { Box, Button, Grid, Stack, Tab, Tabs, TabsProps, Typography, } from "@mui/material"; import { Check, Close, EditNote } from "@mui/icons-material"; import { TypeEnum } from "@/app/utils/typeEnum"; import ProductDetails from "./ProductDetails"; import { CreateItemResponse } from "@/app/api/utils"; import QcDetails from "./QcDetails"; import { ItemQc } from "@/app/api/settings/item"; import { saveItemQcChecks } from "@/app/api/settings/qcCheck/actions"; import { useGridApiRef } from "@mui/x-data-grid"; import { QcCategoryCombo } from "@/app/api/settings/qcCategory"; type Props = { isEditMode: boolean; // type: TypeEnum; defaultValues: Partial | undefined; qcChecks: ItemQc[]; qcCategoryCombo: QcCategoryCombo[] }; const CreateItem: React.FC = ({ isEditMode, // type, defaultValues, qcChecks, qcCategoryCombo, }) => { // console.log(type) const apiRef = useGridApiRef(); const params = useSearchParams(); console.log(params.get("id")); const [serverError, setServerError] = useState(""); const [tabIndex, setTabIndex] = useState(0); const { t } = useTranslation("items"); const router = useRouter(); const title = "Product / Material"; const [mode, redirPath] = useMemo(() => { // var typeId = TypeEnum.CONSUMABLE_ID let title = ""; let mode = ""; let redirPath = ""; // if (type === TypeEnum.MATERIAL) { // typeId = TypeEnum.MATERIAL_ID // title = "Material"; // redirPath = "/settings/material"; // } // if (type === TypeEnum.PRODUCT) { // typeId = TypeEnum.PRODUCT_ID title = "Product"; redirPath = "/settings/items"; // } // if (type === TypeEnum.BYPRODUCT) { // typeId = TypeEnum.BYPRODUCT_ID // title = "By-Product"; // redirPath = "/settings/byProduct"; // } if (isEditMode) { mode = "Edit"; } else { mode = "Create"; } return [mode, redirPath]; }, [isEditMode]); // console.log(typeId) const formProps = useForm({ defaultValues: defaultValues ? defaultValues : {}, }); const errors = formProps.formState.errors; const handleTabChange = useCallback>( (_e, newValue) => { setTabIndex(newValue); }, [], ); const handleCancel = () => { router.replace(`/settings/product`); }; const onSubmit = useCallback>( async (data, event) => { const hasErrors = false; console.log(errors); // console.log(apiRef.current.getCellValue(2, "lowerLimit")) // apiRef.current. try { if (hasErrors) { setServerError(t("An error has occurred. Please try again later.")); return false; } console.log("data posted"); console.log(data); const qcCheck = data.qcChecks.length > 0 ? data.qcChecks .filter((q) => data.qcChecks_active.includes(q.id!)) .map((qc) => { return { qcItemId: qc.id, instruction: qc.instruction, lowerLimit: qc.lowerLimit, upperLimit: qc.upperLimit, itemId: parseInt(params.get("id")!.toString()), }; }) : []; const test = data.qcChecks.filter((q) => data.qcChecks_active.includes(q.id!), ); // TODO: // 1. check field ( directly modify col def / check here ) // 2. set error change tab index console.log(test); console.log(qcCheck); // return // do api console.log("asdad"); const responseI = await saveItem(data); console.log("asdad"); const responseQ = await saveItemQcChecks(qcCheck); if (responseI && responseQ) { if (!Boolean(responseI.id)) { formProps.setError( responseI.errorPosition! as keyof CreateItemInputs, { message: responseI.message!, type: "required", }, ); } else if (!Boolean(responseQ.id)) { } else if (Boolean(responseI.id) && Boolean(responseQ.id)) { router.replace(redirPath); } } } catch (e) { // backend error setServerError(t("An error has occurred. Please try again later.")); console.log(e); } }, [apiRef, router, t], ); // multiple tabs const onSubmitError = useCallback>( (errors) => {}, [], ); return ( <> {t(`${mode} ${title}`)} {serverError && ( {serverError} )} {tabIndex === 0 && } {tabIndex === 1 && } {/* {type === TypeEnum.MATERIAL && } */} {/* {type === TypeEnum.BYPRODUCT && } */} {/* */} ); }; export default CreateItem;