import React, { useState, useEffect } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import {getCachedData} from "../../../slices/apiDataManager"; // Zod validation schema const floorSchema = z.object({ buildingId: z.string().min(1, "Building is required"), id: z.string().min(1, "Floor is required").optional(), floorName: z.string().min(1, "Floor Name is required"), }); // Default model const defaultModel = { id: "0", floorName: "", buildingId: "0", }; const FloorModel = ({ project, onClose, onSubmit, clearTrigger, onClearComplete, } ) => { const [formData, setFormData] = useState(defaultModel); const [ selectedBuilding, setSelectedBuilding ] = useState( {} ); const [buildings, setBuildings] = useState(project?.buildings || []); // Initialize the form with React Hook Form const { register, handleSubmit, setValue, getValues, reset, formState: { errors }, } = useForm({ resolver: zodResolver(floorSchema), defaultValues: defaultModel, }); useEffect( () => { if (clearTrigger) { reset(defaultModel); onClearComplete(); } }, [clearTrigger, onClearComplete, reset,]); // Handle building selection change const handleBuildigChange = (e) => { const buildingId = e.target.value; const building = buildings.find((b) => b.id === Number(buildingId)); if (building) { setSelectedBuilding(building); setFormData({ id: "", floorName: "", buildingId: building.id, }); setValue("buildingId", building.id); // Set value for validation setValue("id", "0"); // Reset floorId when changing building } else { setSelectedBuilding({}); setFormData({ id: "", floorName: "", buildingId: "0", }); setValue("buildingId", "0"); } }; // Handle floor selection change const handleFloorChange = (e) => { const id = e.target.value; const floor = selectedBuilding.floors.find((b) => b.id === Number(id)); if (floor) { setFormData({ id: floor.id, floorName: floor.floorName, buildingId: selectedBuilding.id, }); setValue("floorName", floor.floorName); // Set floor name for form } else { setFormData({ id: "0", floorName: "", buildingId: selectedBuilding.id, }); setValue("floorName", ""); } }; // Handle form submission const onFormSubmit = (data) => { onSubmit(data); }; return (
); }; export default FloorModel;