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"; import showToast from "../../../services/toastService"; // 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); } else { setFormData({ id: "0", floorName: "", buildingId: selectedBuilding.id, }); setValue("floorName", ""); } }; // Handle form submission const onFormSubmit = (data) => { onSubmit(data); reset({ floorName: "", }); if (data.id !== "0") { showToast("Floor updated successfully.", "success"); } else { showToast("Floor created successfully.", "success"); } }; return (