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"; import { useReportTask } from "../../hooks/useTasks"; export const ReportTask = ({ report, closeModal }) => { const { mutate: reportTask, isPending } = useReportTask({ onSuccessCallback: () => { reset(); closeModal(); }, }); 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: "" }); } }, [report, reset]); const onSubmit = (data) => { const reportData = { ...data, id: report?.id, reportedDate: new Date().toISOString(), checkList: [], }; reportTask({ reportData, workAreaId: report?.workItem?.workArea?.id, buildingId: report?.workItem?.workArea?.floor?.building.id, floorId: report?.workItem?.workArea?.floor?.id, }); }; const handleClose = () => { closeModal(); reset(); }; return (
Report Task