From 72b7a19b69e8b2ef75338b36f2268841a087a28a Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Fri, 13 Jun 2025 10:43:42 +0530 Subject: [PATCH] Implemented signalr for action assigning employee to project --- src/components/Activities/InfraPlanning.jsx | 2 +- src/components/Layout/Header.jsx | 31 ++++++++++++++++++--- src/components/Project/ProjectCard.jsx | 1 + src/hooks/useProfile.js | 28 ++++++++++++++++--- src/hooks/useProjects.js | 5 ++-- src/pages/project/ProjectList.jsx | 18 ++++++++++-- src/services/signalRService.js | 18 ++++++++---- 7 files changed, 84 insertions(+), 19 deletions(-) diff --git a/src/components/Activities/InfraPlanning.jsx b/src/components/Activities/InfraPlanning.jsx index 14e9732f..134cfd07 100644 --- a/src/components/Activities/InfraPlanning.jsx +++ b/src/components/Activities/InfraPlanning.jsx @@ -19,7 +19,7 @@ import InfraTable from "../Project/Infrastructure/InfraTable"; const InfraPlanning = () => { - const {profile: LoggedUser} = useProfile() + const {profile: LoggedUser, refetch : fetchData} = useProfile() const dispatch = useDispatch() const {projects,loading:project_listLoader,error:projects_error} = useProjects() diff --git a/src/components/Layout/Header.jsx b/src/components/Layout/Header.jsx index 176576a0..0a213333 100644 --- a/src/components/Layout/Header.jsx +++ b/src/components/Layout/Header.jsx @@ -1,5 +1,5 @@ import getGreetingMessage from "../../utils/greetingHandler"; -import { clearAllCache } from "../../slices/apiDataManager"; +import { cacheData, clearAllCache, getCachedData } from "../../slices/apiDataManager"; import AuthRepository from "../../repositories/AuthRepository"; import { useDispatch, useSelector } from "react-redux"; import { changeMaster, setProjectId } from "../../slices/localVariablesSlice"; @@ -9,8 +9,9 @@ import { useLocation, useNavigate, useParams } from "react-router-dom"; import Avatar from "../../components/common/Avatar"; import { useChangePassword } from "../Context/ChangePasswordContext"; import { useProjects } from "../../hooks/useProjects"; -import { useEffect, useState } from "react"; +import { useCallback, useEffect, useState } from "react"; import { useProjectName } from "../../hooks/useProjects"; +import eventBus from "../../services/eventBus"; const Header = () => { const { profile } = useProfile(); @@ -64,7 +65,7 @@ const Header = () => { navigate(`/employee/${profile?.employeeInfo?.id}?for=attendance`); }; // const { projects, loading: projectLoading } = useProjects(); - const { projectNames, loading: projectLoading } = useProjectName(); + const { projectNames, loading: projectLoading, fetchData } = useProjectName(); const selectedProject = useSelector( (store) => store.localVariables.projectId @@ -85,7 +86,11 @@ const Header = () => { const { openChangePassword } = useChangePassword(); useEffect(() => { - if (projectNames && selectedProject !== " ") { + if ( + projectNames && + selectedProject !== " " && + !getCachedData("hasReceived") + ) { dispatch(setProjectId(projectNames[0]?.id)); } }, [projectNames]); @@ -93,6 +98,24 @@ const Header = () => { /** Check if current page id project details page */ const isProjectPath = /^\/projects\/[a-f0-9-]{36}$/.test(location.pathname); + const handler = useCallback( + async (data) => { + + await fetchData(); + const projectExist = data.projectIds.some( + (item) => item == selectedProject + ); + if(projectExist){ + cacheData("hasReceived",false) + } + }, + [fetchData] + ); + + useEffect(() => { + eventBus.on("assign_project_one", handler); + return () => eventBus.off("assign_project_one", handler); + }, [handler]); return (