From 03fb762f2453d090a58da42dcee47519a9ec3f83 Mon Sep 17 00:00:00 2001 From: pramod mahajan Date: Sat, 2 Aug 2025 17:12:22 +0530 Subject: [PATCH] prevent to select checkout before check in time --- .../Activities/CheckCheckOutForm.jsx | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/components/Activities/CheckCheckOutForm.jsx b/src/components/Activities/CheckCheckOutForm.jsx index 48ba73d8..333b60f8 100644 --- a/src/components/Activities/CheckCheckOutForm.jsx +++ b/src/components/Activities/CheckCheckOutForm.jsx @@ -10,13 +10,37 @@ 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 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 }) => { const projectId = useSelector((store) => store.localVariables.projectId); @@ -41,7 +65,7 @@ const CheckCheckOutmodel = ({ modeldata, closeModal, handleSubmitForm }) => { reset, setValue, } = useForm({ - resolver: zodResolver(schema), + resolver: zodResolver(createSchema(modeldata)), mode: "onChange", });