From 8431e856aa718ba2d9d8bf7cdfd3ac2eda923194 Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Tue, 17 Jun 2025 17:05:33 +0530 Subject: [PATCH] Added signalR functionality in Project Infrastructure --- src/components/Activities/InfraPlanning.jsx | 2 +- .../Project/Infrastructure/InfraTable.jsx | 48 +++++++++++++-- src/components/Project/ProjectInfra.jsx | 2 +- src/services/signalRService.js | 59 +++++++++++-------- 4 files changed, 80 insertions(+), 31 deletions(-) diff --git a/src/components/Activities/InfraPlanning.jsx b/src/components/Activities/InfraPlanning.jsx index 539f0a01..47c4dba9 100644 --- a/src/components/Activities/InfraPlanning.jsx +++ b/src/components/Activities/InfraPlanning.jsx @@ -72,7 +72,7 @@ const InfraPlanning = () => - {(!project_deatilsLoader && projects_Details?.buildings?.length > 0) && ()} + {(!project_deatilsLoader && projects_Details?.buildings?.length > 0) && ()} diff --git a/src/components/Project/Infrastructure/InfraTable.jsx b/src/components/Project/Infrastructure/InfraTable.jsx index 354c36a4..ea03b3d2 100644 --- a/src/components/Project/Infrastructure/InfraTable.jsx +++ b/src/components/Project/Infrastructure/InfraTable.jsx @@ -1,11 +1,13 @@ -import { useEffect, useState } from "react"; +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 } from "../../../slices/apiDataManager"; -const InfraTable = ({ buildings }) => { +const InfraTable = ({ buildings, projectId }) => { const [projectBuilding, setProjectBuilding] = useState([]); const [expandedBuildings, setExpandedBuildings] = useState([]); const [showFloorModal, setShowFloorModal] = useState(false); @@ -108,12 +110,46 @@ const InfraTable = ({ buildings }) => { ); }; useEffect(() => { - if (buildings && buildings.length > 0) { - setProjectBuilding(buildings); - setExpandedBuildings([buildings[0].id]); - } + if (buildings && buildings.length > 0) { + setProjectBuilding(buildings); + setExpandedBuildings([buildings[0].id]); + } }, [buildings]); + const handler = useCallback( + (msg) => { + console.log(msg.projectIds.some((item) => item == projectId)); + if (msg.projectIds.some((item) => item == projectId)) { + console.log("caling APi"); + try { + clearCacheKey("projectInfo"); + ProjectRepository.getProjectByprojectId(projectId) + .then((response) => { + console.log("API Called"); + cacheData("projectInfo", { + projectId: projectId, + data: response.data, + }); + + // console.log(response?.data?.buildings); + setProjectBuilding(response?.data?.buildings); + showToast(msg.message,"info") + }) + .catch((error) => { + console.error(error); + }); + } catch (e) { + console.error(error); + } + } + }, + [buildings] + ); + useEffect(() => { + eventBus.on("infra", handler); + return () => eventBus.off("infra", handler); + }, [handler]); + return (
{projectBuilding && projectBuilding.length > 0 && ( diff --git a/src/components/Project/ProjectInfra.jsx b/src/components/Project/ProjectInfra.jsx index 9841f014..e8178bee 100644 --- a/src/components/Project/ProjectInfra.jsx +++ b/src/components/Project/ProjectInfra.jsx @@ -482,7 +482,7 @@ const ProjectInfra = ({ {project && project.buildings?.length > 0 && ( )} diff --git a/src/services/signalRService.js b/src/services/signalRService.js index 16d7c7de..9b9e2cc1 100644 --- a/src/services/signalRService.js +++ b/src/services/signalRService.js @@ -1,5 +1,9 @@ import * as signalR from "@microsoft/signalr"; -import { cacheData, clearCacheKey, getCachedData } from "../slices/apiDataManager"; +import { + cacheData, + clearCacheKey, + getCachedData, +} from "../slices/apiDataManager"; import showToast from "./toastService"; import eventBus from "./eventBus"; import { useSelector } from "react-redux"; @@ -27,11 +31,11 @@ export function startSignalR(loggedUser) { .toISOString() .split("T")[0]; connection.on("NotificationEventHandler", (data) => { - // console.log("Notification received:", data); - // if action taken on attendance module - if (data.keyword == "Attendance") { - const checkIn = data.response.checkInTime.substring(0, 10); - if (data.loginUserId != loggedUser?.employeeInfo.id) { + if (data.loggedInUserId != loggedUser?.employeeInfo.id) { + console.log("Notification received:", data); + // if action taken on attendance module + if (data.keyword == "Attendance") { + const checkIn = data.response.checkInTime.substring(0, 10); if (today === checkIn) { eventBus.emit("attendance", data); } @@ -47,26 +51,35 @@ export function startSignalR(loggedUser) { } eventBus.emit("attendance_log", data); } - } - // if create or update project - if (data.keyword == "Create_Project" || data.keyword == "Update_Project") { - clearCacheKey("projectslist"); - eventBus.emit("project", data); - } - // if assign or deassign employee to any project - if (data.keyword == "Assign_Project") { + + // if create or update project if ( - data.employeeList.some((item) => item === loggedUser?.employeeInfo.id) + data.keyword == "Create_Project" || + data.keyword == "Update_Project" ) { - try { - cacheData("hasReceived", false); - eventBus.emit("assign_project_one", data); - } catch (e) { - console.error("Error in cacheData:", e); - } - + clearCacheKey("projectslist"); + eventBus.emit("project", data); + } + + // if assign or deassign employee to any project + if (data.keyword == "Assign_Project") { + if ( + data.employeeList.some((item) => item === loggedUser?.employeeInfo.id) + ) { + try { + cacheData("hasReceived", false); + eventBus.emit("assign_project_one", data); + } catch (e) { + console.error("Error in cacheData:", e); + } + } + eventBus.emit("assign_project_all", data); + } + // if created or updated infra + if (data.keyword == "Infra") { + console.log("Infra") + eventBus.emit("infra", data); } - eventBus.emit("assign_project_all", data); } });