import React, { useState, useEffect } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import {useActivitiesMaster} from "../../../hooks/masterHook/useMaster"; const taskSchema = z.object({ buildingID: z.string().min(1, "Building is required"), floorId: z.string().min(1, "Floor is required"), workAreaId: z.string().min(1, "Work Area is required"), activityID: z.string().min(1, "Activity is required"), plannedWork: z.number().min(1, "Planned Work must be greater than 0"), completedWork: z.number().min(0, "Completed Work must be greater than 0"), }); const defaultModel = { id: null, buildingID:"0", floorId: "0", workAreaId: "0", activityID: null, plannedWork: 0, completedWork: 0, }; const TaskModel = ({ project, onSubmit, clearTrigger, onClearComplete, onClose, }) => { const [formData, setFormData] = useState(defaultModel); const [selectedBuilding, setSelectedBuilding] = useState(null); const [selectedFloor, setSelectedFloor] = useState(null); const [selectedWorkArea, setSelectedWorkArea] = useState(null); const [selectedActivity, setSelectedActivity] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); const [activityData, setActivityData] = useState([]); const {activities, loading, error} = useActivitiesMaster(); const { register, handleSubmit, formState: { errors }, reset, setValue, } = useForm({ resolver: zodResolver(taskSchema), defaultValues: defaultModel, }); useEffect(() => { resetForm(); }, []); const handleBuildingChange = (e) => { const { value } = e.target; const building = project.buildings.find((b) => b.id === String(value)); setSelectedBuilding(building); setSelectedFloor(null); setSelectedWorkArea(null); setSelectedActivity(null); reset({ ...defaultModel, buildingID: value, }); }; const handleFloorChange = (e) => { const { value } = e.target; const floor = selectedBuilding.floors.find((b) => b.id === String(value)); setSelectedFloor(floor); setSelectedWorkArea(null); setSelectedActivity(null); reset((prev) => ({ ...prev, floorId: value, workAreaId: 0, activityID: 0, })); }; const handleWorkAreaChange = (e) => { const { value } = e.target; const workArea = selectedFloor.workAreas.find( (b) => b.id === String(value) ); setSelectedWorkArea(workArea); reset((prev) => ({ ...prev, workAreaId: String(value), })); }; const handleActivityChange = (e) => { const { value } = e.target; const activity = activityData.find((b) => b.id === String(value)); setSelectedActivity(activity); reset((prev) => ({ ...prev, activityID: String(value), })); }; const onSubmitForm = async ( data ) => { setIsSubmitting(true); await onSubmit(data); setValue("plannedWork", 0); setValue( "completedWork", 0 ); setValue("activityID",0) setIsSubmitting(false); }; const resetForm = () => { setFormData(defaultModel); setSelectedBuilding(null); // not "0" setSelectedFloor(null); setSelectedWorkArea(null); setSelectedActivity(null); reset(defaultModel); }; useEffect(() => { if (!loading && Array.isArray(activities) && activities.length > 0) { setActivityData(activities); } }, [activities, loading]); return (