import React, { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { string, z } from "zod"; import { useActivitiesMaster, useWorkCategoriesMaster, } from "../../hooks/masterHook/useMaster"; import showToast from "../../services/toastService"; import ProjectRepository from "../../repositories/ProjectRepository"; import { useTaskById } from "../../hooks/useTasks"; const subTaskSchema = z.object({ activityId: z.string().min(1, "Activity is required"), workCategoryId: z.string().min(1, "Category is required"), plannedWork: z.number().min(1, "Planned work is required"), completedWork: z.number().min(0, "Completed work cannot be negative"), comment: z.string().min(1, "Comment is required"), }); const SubTask = ({ activity, onClose }) => { const [selectedCategory, setSelectedCategory] = useState(null); const [categoryData, setCategoryData] = useState([]); const { activities, loading } = useActivitiesMaster(); const { categories, categoryLoading } = useWorkCategoriesMaster(); const [isSubmitting, setIsSubmitting] = useState(false); const { Task, loading: TaskLoading } = useTaskById(activity?.id); const { register, handleSubmit, formState: { errors }, reset, setValue, watch, } = useForm({ resolver: zodResolver(subTaskSchema), }); const selectedActivityId = watch("activityId"); const selectedActivity = activities?.find((a) => a.id === selectedActivityId); // Set categories when fetched useEffect(() => { setCategoryData(categories); }, [categories]); // Set initial values from activity useEffect(() => { if (Task?.workItem) { reset({ workCategoryId: Task?.workItem?.workCategoryId || "", activityId: Task?.workItem?.activityId || "", plannedWork: Number(Task.notApprovedTask || Task.workItem?.plannedWork), completedWork: 0, comment: "", }); } }, [Task, reset]); const handleCategoryChange = (e) => { const value = e.target.value; const category = categoryData.find((b) => b.id === String(value)); setSelectedCategory(category); setValue("workCategoryId", value); }; const onSubmitForm = async (formData) => { let payload = { workAreaID: Task.workItem.workAreaId, workCategoryId: formData.workCategoryId, activityID: formData.activityId, plannedWork: formData.plannedWork, completedWork: formData.completedWork, parentTaskId: activity?.id, comment: formData.comment, }; setIsSubmitting(true); try { await ProjectRepository.manageProjectTasks([payload]); showToast("SubTask Created Successfully", "success"); setIsSubmitting(false); reset(); onClose(); } catch (error) { setIsSubmitting(false); const msg = error.response.message || error.message || "Error occured during API calling"; showToast(msg, "error"); } }; return (
Create Sub Task