import React, { useEffect, useMemo, useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { useDispatch, useSelector } from "react-redux"; import { useActivitiesMaster, useWorkCategoriesMaster, } from "../../../hooks/masterHook/useMaster"; import { useManageTask } from "../../../hooks/useProjects"; import { cacheData, getCachedData } from "../../../slices/apiDataManager"; import { refreshData } from "../../../slices/localVariablesSlice"; import showToast from "../../../services/toastService"; const taskSchema = z .object({ activityID: z.string().min(1, "Activity is required"), workCategoryId: z.string().min(1, "Work Category is required"), plannedWork: z.number().min(1, "Planned Work must be greater than 0"), completedWork: z.number().min(0, "Completed Work must be ≥ 0"), comment: z.string(), }) .refine((data) => data.completedWork <= data.plannedWork, { message: "Completed Work cannot be greater than Planned Work", path: ["completedWork"], }); const EditActivityModal = ({ workItem, workArea, building, floor, onClose, } ) => { const { activities, loading: loadingActivities } = useActivitiesMaster(); const { categories, loading: loadingCategories } = useWorkCategoriesMaster(); const [selectedActivity, setSelectedActivity] = useState(null); const { register, handleSubmit, formState: { errors }, reset, setValue, getValues, watch, } = useForm({ resolver: zodResolver(taskSchema), defaultValues: { activityID: "", workCategoryId: "", plannedWork: 0, completedWork: 0, comment: "", }, }); const { mutate: UpdateTask, isPending } = useManageTask({ onSuccessCallback: () => onClose?.() }); const activityID = watch("activityID"); const sortedActivities = useMemo( () => [...(activities || [])].sort((a, b) => a.activityName?.localeCompare(b.activityName) ), [activities] ); const sortedCategories = useMemo( () => [...(categories || [])].sort((a, b) => a.name?.localeCompare(b.name)), [categories] ); useEffect(() => { reset({ activityID: String( workItem?.workItem?.activityId || workItem?.activityId || "" ), workCategoryId: String( workItem?.workItem?.workCategoryId || workItem?.workCategoryId || "" ), plannedWork: workItem?.workItem?.plannedWork || workItem?.plannedWork || 0, completedWork: workItem?.workItem?.completedWork || workItem?.completedWork || 0, comment: workItem?.workItem?.description || workItem?.description || "", }); }, [workItem, activities]); useEffect(() => { const selected = activities?.find((a) => a.id === activityID); setSelectedActivity(selected || null); }, [activityID, activities]); const onSubmitForm = (data) => { const payload = { ...data, id: workItem?.workItem?.id ?? workItem?.id, buildingID: building?.id, floorId: floor?.id, workAreaId: workArea?.id, }; UpdateTask([payload]) } return (
Manage Task
{errors.activityID && (

{errors.activityID.message}

)}
{errors.workCategoryId && (

{errors.workCategoryId.message}

)}
{errors.plannedWork && (

{errors.plannedWork.message}

)}
0} className="form-control form-control-sm" /> {errors.completedWork && (

{errors.completedWork.message}

)}