import React, { useState } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import TimePicker from "../common/TimePicker"; import { usePositionTracker } from "../../hooks/usePositionTracker"; import { useDispatch, useSelector } from "react-redux"; import showToast from "../../services/toastService"; import { checkIfCurrentDate } from "../../utils/dateUtils"; import { useMarkAttendance } from "../../hooks/useAttendance"; import { useSelectedProject } from "../../slices/apiDataManager"; 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 CheckInCheckOut = ({ modeldata, closeModal, handleSubmitForm }) => { const projectId = useSelectedProject(); const { mutate: MarkAttendance } = useMarkAttendance(); const [isLoading, setIsLoading] = useState(false); const coords = usePositionTracker(); const dispatch = useDispatch(); const today = new Date().toISOString().split("T")[0]; const formatDate = (dateString) => { if (!dateString) { return ""; } const [year, month, day] = dateString.split("-"); return `${day}-${month}-${year}`; }; const { 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, }; 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 }); closeModal(); }; return (
setValue("markTime", e)} interval={10} checkOutTime={modeldata?.checkOutTime} checkInTime={modeldata?.checkInTime} /> {errors.markTime && (

{errors.markTime.message}

)}