import { useCallback, useEffect, useState } from "react"; import Building from "./Building"; import Floor from "./Floor"; import FloorModel from "./FloorModel"; import showToast from "../../../services/toastService"; import ProjectRepository from "../../../repositories/ProjectRepository"; import eventBus from "../../../services/eventBus"; import { cacheData, clearCacheKey, getCachedData, } from "../../../slices/apiDataManager"; const InfraTable = ({ buildings, projectId}) => { const [projectBuilding, setProjectBuilding] = useState([]); const [expandedBuildings, setExpandedBuildings] = useState([]); const [showFloorModal, setShowFloorModal] = useState(false); const [selectedBuilding, setSelectedBuilding] = useState(null); const [clearTrigger, setClearTrigger] = useState(false); const toggleBuilding = (buildingId) => { setExpandedBuildings((prevExpanded) => prevExpanded.includes(buildingId) ? prevExpanded.filter((id) => id !== buildingId) : [...prevExpanded, buildingId] ); }; const handleAddFloor = (building) => { setSelectedBuilding(building); setShowFloorModal(true); }; const handleFloorSubmit = async (data) => { try { const payload = [ { building: null, floor: { id: data.id || null, floorName: data.floorName, buildingId: data.buildingId, }, workArea: null, }, ]; const res = await ProjectRepository.manageProjectInfra(payload); if (res?.success) { showToast("Floor saved successfully!", "success"); // Find and update the correct building const updatedBuildings = projectBuilding.map((b) => { if (b.id === parseInt(data.buildingId)) { const newFloor = { id: res.data?.[0]?.floor?.id || Math.random(), floorName: res.data?.[0]?.floor?.floorName || data.floorName, workAreas: [], }; return { ...b, floors: [...(b.floors || []), newFloor], }; } return b; }); setProjectBuilding(updatedBuildings); setShowFloorModal(false); setClearTrigger(true); } else { showToast("Failed to save floor", "error"); } } catch (err) { showToast("Error occurred while saving floor", "error"); } }; const handleClearComplete = () => { setClearTrigger(false); }; const getContent = (building) => { return building.floors?.length > 0 ? ( building.floors.map((floor) => ( )) ) : (

No floors have been added yet. Start by adding floors to manage this building.

); }; useEffect(() => { if (buildings && buildings.length > 0) { setProjectBuilding(buildings); setExpandedBuildings([buildings[0].id]); } }, [buildings]); // const handler = useCallback( // (msg) => { // if (msg.projectIds.some((item) => item == projectId)) { // try { // ProjectRepository.getProjectByprojectId(projectId) // .then((response) => { // cacheData("projectInfo", { // projectId: projectId, // data: response.data, // }); // setProjectBuilding(response?.data?.buildings); // signalRHandler?.(response?.data); // showToast(msg.message, "info"); // }) // .catch((error) => { // console.error(error); // }); // } catch (e) { // console.error(e); // } // } // }, // [buildings] // ); // useEffect(() => { // eventBus.on("infra", handler); // return () => eventBus.off("infra", handler); // }, [handler]); return (
{projectBuilding && projectBuilding.length > 0 && ( {projectBuilding.map((building) => ( ))}
)} {showFloorModal && selectedBuilding && ( )}
); }; export default InfraTable;