Added signalR functionality in Project Infrastructure
This commit is contained in:
parent
782ace9d1c
commit
8431e856aa
@ -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>
|
||||
|
@ -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 && (
|
||||
|
@ -482,7 +482,7 @@ const ProjectInfra = ({
|
||||
{project && project.buildings?.length > 0 && (
|
||||
<InfraTable
|
||||
buildings={project?.buildings}
|
||||
project={project}
|
||||
projectId={project.id}
|
||||
handleFloor={submitData}
|
||||
/>
|
||||
)}
|
||||
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user