import { BomCombo } from "@/app/api/bom"; import { JoDetail } from "@/app/api/jo"; import { SaveJo, manualCreateJo } from "@/app/api/jo/actions"; import { OUTPUT_DATE_FORMAT, OUTPUT_TIME_FORMAT, dateStringToDayjs, dayjsToDateString, dayjsToDateTimeString } from "@/app/utils/formatUtil"; import { Check } from "@mui/icons-material"; import { Autocomplete, Box, Button, Card, Grid, Modal, Stack, TextField, Typography ,FormControl, InputLabel, Select, MenuItem,InputAdornment} from "@mui/material"; import { DatePicker, DateTimePicker, LocalizationProvider } from "@mui/x-date-pickers"; import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; import dayjs, { Dayjs } from "dayjs"; import { isFinite } from "lodash"; import React, { SetStateAction, SyntheticEvent, useCallback, useEffect } from "react"; import { Controller, FormProvider, SubmitErrorHandler, SubmitHandler, useForm, useFormContext } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { msg } from "../Swal/CustomAlerts"; interface Props { open: boolean; bomCombo: BomCombo[]; onClose: () => void; onSearch: () => void; } const JoCreateFormModal: React.FC = ({ open, bomCombo, onClose, onSearch, }) => { const { t } = useTranslation("jo"); const formProps = useForm({ mode: "onChange", }); const { reset, trigger, watch, control, register, formState: { errors } } = formProps const onModalClose = useCallback(() => { reset() onClose() }, []) const handleAutoCompleteChange = useCallback((event: SyntheticEvent, value: BomCombo, onChange: (...event: any[]) => void) => { onChange(value.id) if (value.outputQty != null) { formProps.setValue("reqQty", Number(value.outputQty), { shouldValidate: true, shouldDirty: true }) } }, []) const handleDateTimePickerChange = useCallback((value: Dayjs | null, onChange: (...event: any[]) => void) => { if (value != null) { const updatedValue = dayjsToDateTimeString(value) onChange(updatedValue) } else { onChange(value) } }, []) const onSubmit = useCallback>(async (data) => { data.type = "manual" if (data.planStart) { const dateDayjs = dateStringToDayjs(data.planStart) data.planStart = dayjsToDateTimeString(dateDayjs.startOf('day')) } data.jobTypeId = Number(data.jobTypeId); const response = await manualCreateJo(data) if (response) { onSearch(); msg(t("update success")); onModalClose(); } }, [onSearch, onModalClose, t]) const onSubmitError = useCallback>((error) => { console.log(error) }, []) const planStart = watch("planStart") const planEnd = watch("planEnd") useEffect(() => { trigger(['planStart', 'planEnd']); }, [trigger, planStart, planEnd]) return ( {t("Create Job Order")} isFinite(value) }} render={({ field, fieldState: { error } }) => ( { handleAutoCompleteChange(event, value, field.onChange) }} onBlur={field.onBlur} renderInput={(params) => ( )} /> )} /> value > 0 }} render={({ field, fieldState: { error } }) => { const selectedBom = bomCombo.find(bom => bom.id === formProps.watch("bomId")); const uom = selectedBom?.outputQtyUom || ""; return ( { const val = e.target.value === "" ? undefined : Number(e.target.value); field.onChange(val); }} InputProps={{ endAdornment: uom ? ( {uom} ) : null }} /> ); }} /> ( {t("Job Type")} {/*{error && {error.message}}*/} )} /> dateStringToDayjs(value).isValid(), // isBeforePlanEnd: (value) => { // const planStartDayjs = dateStringToDayjs(value) // const planEndDayjs = dateStringToDayjs(planEnd) // return planStartDayjs.isBefore(planEndDayjs) || planStartDayjs.isSame(planEndDayjs) // } } }} render={({ field, fieldState: { error } }) => ( // { handleDateTimePickerChange(newValue, field.onChange) }} slotProps={{ textField: { fullWidth: true, error: Boolean(error) } }} /> )} /> {/* dateStringToDayjs(value).isValid(), isBeforePlanEnd: (value) => { const planStartDayjs = dateStringToDayjs(planStart) const planEndDayjs = dateStringToDayjs(value) return planEndDayjs.isAfter(planStartDayjs) || planEndDayjs.isSame(planStartDayjs) } } }} render={({ field, fieldState: { error } }) => ( { handleDateTimePickerChange(newValue, field.onChange) }} slotProps={{ textField: { fullWidth: true } }} /> )} /> */} ) } export default JoCreateFormModal;