Added signalR functionality in Project Infrastructure

This commit is contained in:
ashutosh.nehete 2025-06-17 17:05:33 +05:30
parent 782ace9d1c
commit 8431e856aa
4 changed files with 80 additions and 31 deletions

View File

@ -72,7 +72,7 @@ const InfraPlanning = () =>
{(!project_deatilsLoader && projects_Details?.buildings?.length > 0) && (<InfraTable buildings={projects_Details?.buildings}/>)}
{(!project_deatilsLoader && projects_Details?.buildings?.length > 0) && (<InfraTable buildings={projects_Details?.buildings} projectId={projects_Details.id}/>)}
</div>
</div>
</div>

View File

@ -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 (
<div>
{projectBuilding && projectBuilding.length > 0 && (

View File

@ -482,7 +482,7 @@ const ProjectInfra = ({
{project && project.buildings?.length > 0 && (
<InfraTable
buildings={project?.buildings}
project={project}
projectId={project.id}
handleFloor={submitData}
/>
)}

View File

@ -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);
}
});