import React, { useState, useEffect } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import ProjectRepository from "../../../repositories/ProjectRepository"; import { useSelector } from "react-redux"; import { useProjectDetails } from "../../../hooks/useProjects"; import {getCachedData} from "../../../slices/apiDataManager"; import showToast from "../../../services/toastService"; // Zod validation schema const buildingSchema = z.object({ Id: z.string().optional(), name: z.string().min(1, "Building name is required"), description: z .string() .min(1, "Description is required") .max(160, "Description cannot exceed 160 characters"), }); const BuildingModel = ({ project, onClose, onSubmit, clearTrigger, onClearComplete, editingBuilding = null, }) => { const selectedProject = useSelector( (store) => store.localVariables.projectId ); const [buildings ,setBuildings] = useState([]) const projects_Details = getCachedData("projectInfo") const [formData, setFormData] = useState({ id: "", name: "", description: "", projectId: project?.id, }); useEffect(() => { if (clearTrigger) { setFormData({ id: "", name: "", description: "", projectId: project.id }); onClearComplete(); } else if (editingBuilding) { setFormData({ ...editingBuilding, projectId: project.id }); } return () => { setValue("name", null); }; }, [clearTrigger, onClearComplete, editingBuilding, project?.id]); const { register, handleSubmit, formState: { errors }, setValue, reset, getValues, } = useForm({ resolver: zodResolver(buildingSchema), defaultValues: formData, // Set default values from formData state }); const handleBuildingChange = (e) => { const selectedBuilding = project.buildings.find( (b) => b.id === +e.target.value ); if (selectedBuilding) { setFormData({ ...selectedBuilding, projectId: project.id }); setValue("name", selectedBuilding.name); // Update name field setValue("description", selectedBuilding.description); // Update description field } else { setFormData({ id: "", name: "", description: "", projectId: project.id }); setValue("name", ""); setValue("description", ""); } }; const onSubmitHandler = async (data) => { onSubmit({ ...data, projectId: project.id }); reset( { Id:"0", name: "", description: "", } ); if ( data.Id !== "0" ) { showToast( "Building updated successfully.", "success" ); } else { showToast( "Building created successfully.", "success" ); } }; useEffect( () => { setBuildings(projects_Details.data?.buildings) },[projects_Details]) return (