import React, { useState, useEffect } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import showToast from "../../../services/toastService"; const floorSchema = z.object({ buildingId: z .string() .refine((val) => val !== "0", { message: "Building is required", }), id: z.string().optional(), floorName: z.string().min(1, "Floor Name is required"), }); 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 || []); const { register, handleSubmit, setValue, reset, formState: { errors }, } = useForm({ resolver: zodResolver(floorSchema), defaultValues: defaultModel, }); useEffect(() => { if (clearTrigger) { reset(defaultModel); onClearComplete(); } }, [clearTrigger, onClearComplete, reset]); const handleBuildigChange = (e) => { const buildingId = e.target.value; const building = buildings.find((b) => b.id === String(buildingId)); if (building) { setSelectedBuilding(building); setFormData({ id: "", floorName: "", buildingId: building.id, }); setValue("buildingId", building.id, { shouldValidate: true }); // ✅ trigger validation setValue("id", "0"); } else { setSelectedBuilding({}); setFormData({ id: "", floorName: "", buildingId: "0", }); setValue("buildingId", "0", { shouldValidate: true }); // ✅ trigger validation } }; const handleFloorChange = (e) => { const id = e.target.value; const floor = selectedBuilding.floors?.find((b) => b.id === String(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", ""); } }; const onFormSubmit = (data) => { if (data.id === "0") { data.id = null; } onSubmit(data); reset({ floorName: "" }); if (data.id !== null) { showToast("Floor updated successfully.", "success"); } else { showToast("Floor created successfully.", "success"); } }; return (