diff --git a/src/components/Activities/CheckCheckOutForm.jsx b/src/components/Activities/CheckCheckOutForm.jsx index 11dfab8e..230b1916 100644 --- a/src/components/Activities/CheckCheckOutForm.jsx +++ b/src/components/Activities/CheckCheckOutForm.jsx @@ -8,13 +8,45 @@ import { useDispatch, useSelector } from "react-redux"; import { markAttendance } from "../../slices/apiSlice/attedanceLogsSlice"; import showToast from "../../services/toastService"; import { checkIfCurrentDate } from "../../utils/dateUtils"; -import { useMarkAttendance } from "../../hooks/useAttendance"; -const schema = z.object({ - markTime: z.string().nonempty({ message: "Time is required" }), - description: z.string().max(200, "description should less than 200 chracters").optional() -}); +// const schema = z.object({ +// markTime: z.string().nonempty({ message: "Time is required" }), +// description: z.string().max(200, "description should less than 200 chracters").optional() +// }); + +const createSchema = (modeldata) => { + return z + .object({ + markTime: z.string().nonempty({ message: "Time is required" }), + description: z + .string() + .max(200, "Description should be less than 200 characters") + .optional(), + }) + .refine((data) => { + if (modeldata?.checkInTime && !modeldata?.checkOutTime) { + const checkIn = new Date(modeldata.checkInTime); + const [time, modifier] = data.markTime.split(" "); + const [hourStr, minuteStr] = time.split(":"); + let hour = parseInt(hourStr, 10); + const minute = parseInt(minuteStr, 10); + + if (modifier === "PM" && hour !== 12) hour += 12; + if (modifier === "AM" && hour === 12) hour = 0; + + const checkOut = new Date(checkIn); + checkOut.setHours(hour, minute, 0, 0); + + return checkOut > checkIn; + } + return true; + }, { + message: "Checkout time must be later than check-in time", + path: ["markTime"], + }); +}; + const CheckCheckOutmodel = ({ modeldata, closeModal, handleSubmitForm, }) => { @@ -33,38 +65,38 @@ const CheckCheckOutmodel = ({ modeldata, closeModal, handleSubmitForm, }) => { return `${day}-${month}-${year}`; }; + // const { + // register, + // handleSubmit, + // formState: { errors }, + // reset, + // setValue, + // } = useForm({ + // resolver: zodResolver(schema), + // mode: "onChange" + // }); + const { - register, - handleSubmit, - formState: { errors }, - reset, - setValue, - } = useForm({ - resolver: zodResolver(schema), - mode: "onChange" - }); + register, + handleSubmit, + formState: { errors }, + reset, + setValue, +} = useForm({ + resolver: zodResolver(createSchema(modeldata)), + mode: "onChange", +}); + const onSubmit = (data) => { let record = { ...data, date: new Date().toLocaleDateString(), latitude: coords.latitude, longitude: coords.longitude, employeeId: modeldata.employeeId, action: modeldata.action, id: modeldata?.id || null } - // if (modeldata.forWhichTab === 1 || modeldata.forWhichTab === 2) { - // handleSubmitForm(record) - const payload = { - Id: modeldata?.id || null, - comment: data.description, - employeeID: modeldata.employeeId, - projectId: projectId, - date: new Date().toISOString(), - markTime: data.markTime, - latitude: coords.latitude.toString(), - longitude: coords.longitude.toString(), - action: modeldata.action, - image: null, - }; - MarkAttendance({payload,forWhichTab:modeldata.forWhichTab}) - // } else { - // dispatch(markAttendance(record)) - // .unwrap() - // .then((data) => { + if (modeldata.forWhichTab === 1) { + handleSubmitForm(record) + } else { + + dispatch(markAttendance(record)) + .unwrap() + .then((data) => { // showToast("Attendance Marked Successfully", "success"); // }) @@ -72,8 +104,8 @@ const CheckCheckOutmodel = ({ modeldata, closeModal, handleSubmitForm, }) => { // showToast(error, "error"); - // }); - // } + }); + } closeModal() };