"use client"; import { useCallback, useEffect, useMemo, useState } from "react"; import { useRouter, useSearchParams } from "next/navigation"; 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 { useGridApiRef } from "@mui/x-data-grid"; import {CreateItemInputs, saveItem} from "@/app/api/settings/item/actions"; import {saveItemQcChecks} from "@/app/api/settings/qcCheck/actions"; import {useTranslation} from "react-i18next/index"; import {ItemQc} from "@/app/api/settings/item"; type Props = { isEditMode: boolean; // type: TypeEnum; defaultValues: Partial | undefined; qcChecks: ItemQc[] }; const CreateItem: React.FC = ({ isEditMode, // type, defaultValues, qcChecks }) => { // 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(); const router = useRouter(); const title = "Product / Material" const [mode, redirPath] = useMemo(() => { // var typeId = TypeEnum.CONSUMABLE_ID var title = ""; var mode = ""; var redirPath = ""; // if (type === TypeEnum.MATERIAL) { // typeId = TypeEnum.MATERIAL_ID // title = "Material"; // redirPath = "/settings/material"; // } // if (type === TypeEnum.PRODUCT) { // typeId = TypeEnum.PRODUCT_ID title = "Rough Schedule"; redirPath = "/settings/rss"; // } // 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 handleCancel = () => { router.replace(`/settings/product`); }; const onSubmit = useCallback>( async (data, event) => { let 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.") as String); 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") var responseI = await saveItem(data); console.log("asdad") var 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;