import React, { useState,useEffect } from "react"; import { formatDate } from "../../utils/dateUtils"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import showToast from "../../services/toastService"; import { TasksRepository } from "../../repositories/TaskRepository"; export const ReportTask = ({ report, closeModal, refetch }) => { const [loading, setloading] = useState(false); const maxPending = report?.workItem?.plannedWork - report?.workItem?.completedWork; const schema = z.object({ completedTask: z .preprocess( (val) => (val === "" || val === null || Number.isNaN(val) ? undefined : Number(val)), z .number({ required_error: "Completed Work must be a number", invalid_type_error: "Completed Work must be a number", }) .min(0, "Completed Work must be greater than 0") .max(maxPending, { message: `Completed task cannot exceed total pending tasks: ${maxPending}`, }) ), comment: z.string().min(1, "Comment cannot be empty"), }); const { register, handleSubmit, formState: {errors}, reset } = useForm({ resolver: zodResolver(schema), defaultValues: { completedTask: 0, comment: "" }, }); useEffect(() => { if (report) { reset({ completedTask: 0, comment: "" }); // optional: customize default if needed } }, [report, reset]); const onSubmit = async (data) => { try { setloading(true); const reportData = { ...data, id: report?.id, reportedDate: new Date().toISOString(), checkList: [], }; let response = await TasksRepository.reportTask(reportData); showToast("Task Reported Successfully.", "success"); refetch(); reset() setloading(false); closeModal(); } catch ( error ) { const msg = error.response.data.message || error.message || "Error Occur During Api Call" showToast(msg, "error"); } }; const handleClose = () => { closeModal(); reset(); }; return (
{errors.completedTask && (
{errors.completedTask.message}
)}