import getGreetingMessage from "../../utils/greetingHandler"; import { cacheData, clearAllCache, getCachedData, } from "../../slices/apiDataManager"; import AuthRepository from "../../repositories/AuthRepository"; import { useDispatch, useSelector } from "react-redux"; import { changeMaster, setProjectId } from "../../slices/localVariablesSlice"; import useMaster from "../../hooks/masterHook/useMaster"; import { useProfile } from "../../hooks/useProfile"; 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 { useCallback, useEffect, useState } from "react"; import { useProjectName } from "../../hooks/useProjects"; import eventBus from "../../services/eventBus"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { MANAGE_PROJECT } from "../../utils/constants"; const Header = () => { const { profile } = useProfile(); const location = useLocation(); const dispatch = useDispatch(); const { data, loading } = useMaster(); const navigate = useNavigate(); const HasManageProjectPermission = useHasUserPermission(MANAGE_PROJECT); const isDirectoryPath = /^\/directory$/.test(location.pathname); const isProjectPath = /^\/projects$/.test(location.pathname); const isDashboard = /^\/dashboard$/.test(location.pathname) || /^\/$/.test(location.pathname) ; const getRole = (roles, joRoleId) => { if (!Array.isArray(roles)) return "User"; let role = roles.find((role) => role.id === joRoleId); return role ? role.name : "User"; }; const handleLogout = (e) => { e.preventDefault(); logout(); }; const logout = async () => { try { let data = { refreshToken: localStorage.getItem("refreshToken"), }; AuthRepository.logout(data) .then((response) => { localStorage.removeItem("jwtToken"); localStorage.removeItem("refreshToken"); localStorage.removeItem("user"); localStorage.clear(); clearAllCache(); window.location.href = "/auth/login"; }) .catch((error) => { // Even if logout API fails, clear local storage and redirect localStorage.removeItem("jwtToken"); localStorage.removeItem("refreshToken"); localStorage.removeItem("user"); clearAllCache(); window.location.href = "/auth/login"; }); } catch (error) { console.error( "Error during logout:", error?.response?.data || error.message ); } }; const handleProfilePage = () => { navigate(`/employee/${profile?.employeeInfo?.id}?for=attendance`); }; const { projectNames, loading: projectLoading, fetchData } = useProjectName(); const selectedProject = useSelector( (store) => store.localVariables.projectId ); // Determine the display text for the project dropdown let displayText = "All Projects"; if (selectedProject === null) { displayText = "All Projects"; } else if (selectedProject) { const selectedProjectObj = projectNames?.find( (p) => p?.id === selectedProject ); // Fallback to selectedProject ID if name not found during loading or mismatch displayText = selectedProjectObj ? selectedProjectObj.name : selectedProject; } else if (projectLoading) { displayText = "Loading..."; } const { openChangePassword } = useChangePassword(); useEffect(() => { if ( projectNames && projectNames.length > 0 && selectedProject === undefined && !getCachedData("hasReceived") ) { if(isDashboard){ dispatch(setProjectId(null)); }else{ dispatch(setProjectId(projectNames[0]?.id)); } } }, [projectNames, selectedProject, dispatch]); /** Check if current page is project details page or directory page */ // const isProjectPath = /^\/projects\/[a-f0-9-]{36}$/.test(location.pathname); const handler = useCallback( async (data) => { if (!HasManageProjectPermission) { await fetchData(); const projectExist = data.projectIds.some( (item) => item === selectedProject ); if (projectExist) { cacheData("hasReceived", false); } } }, [fetchData, selectedProject, HasManageProjectPermission] ); const newProjectHandler = useCallback( async (msg) => { if (HasManageProjectPermission && msg.keyword === "Create_Project") { await fetchData(); } else if (projectNames?.some((item) => item.id === msg.response.id)) { await fetchData(); } cacheData("hasReceived", false); }, [HasManageProjectPermission, projectNames, fetchData] ); useEffect(() => { dispatch(changeMaster("Job Role")); }, [dispatch]); useEffect(() => { eventBus.on("assign_project_one", handler); eventBus.on("project", newProjectHandler); return () => { eventBus.off("assign_project_one", handler); eventBus.off("project", newProjectHandler); }; }, [handler, newProjectHandler]); const handleProjectChange =(project)=>{ if(isProjectPath){ dispatch(setProjectId(project)) navigate("/projects/details") } else{ dispatch(setProjectId(project)) } } return ( ); }; export default Header;