import getGreetingMessage from "../../utils/greetingHandler"; import { cacheData, clearAllCache, getCachedData, useSelectedproject, } 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); // { // console.log(location.pathname); // } const isDashboardPath = /^\/dashboard$/.test(location.pathname) || /^\/$/.test(location.pathname); const isProjectPath = /^\/projects$/.test(location.pathname); const showProjectDropdown = (pathname) => { const isDirectoryPath = /^\/directory$/.test(pathname); // const isProfilePage = /^\/employee$/.test(location.pathname); const isProfilePage = /^\/employee\/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test( pathname ); return !(isDirectoryPath || isProfilePage); }; const allowedProjectStatusIds = [ "603e994b-a27f-4e5d-a251-f3d69b0498ba", "cdad86aa-8a56-4ff4-b633-9c629057dfef", "b74da4c2-d07e-46f2-9919-e75e49b12731", ]; 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(() => { localStorage.removeItem("jwtToken"); localStorage.removeItem("refreshToken"); localStorage.removeItem("user"); localStorage.clear(); clearAllCache(); window.location.href = "/auth/login"; }) .catch(() => { localStorage.removeItem("jwtToken"); localStorage.removeItem("refreshToken"); localStorage.removeItem("user"); localStorage.clear(); 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}`); }; const { projectNames, loading: projectLoading, fetchData } = useProjectName(); const selectedProject = useSelectedproject(); const projectsForDropdown = isDashboardPath ? projectNames : projectNames?.filter((project) => allowedProjectStatusIds.includes(project.projectStatusId) ); let currentProjectDisplayName; if (projectLoading) { currentProjectDisplayName = "Loading..."; } else if (!projectNames || projectNames.length === 0) { currentProjectDisplayName = "No Projects Assigned"; } else if (projectNames.length === 1) { currentProjectDisplayName = projectNames[0].name; } else { if (selectedProject === null) { currentProjectDisplayName = "All Projects"; } else { const selectedProjectObj = projectNames.find( (p) => p?.id === selectedProject ); currentProjectDisplayName = selectedProjectObj ? selectedProjectObj.name : "All Projects"; } } const { openChangePassword } = useChangePassword(); useEffect(() => { if ( projectNames && projectNames.length > 0 && selectedProject === undefined && !getCachedData("hasReceived") ) { if (projectNames.length === 1) { dispatch(setProjectId(projectNames[0]?.id || null)); } else { if (isDashboardPath) { dispatch(setProjectId(null)); } else { const firstAllowedProject = projectNames.find((project) => allowedProjectStatusIds.includes(project.projectStatusId) ); dispatch(setProjectId(firstAllowedProject?.id || null)); } } } }, [projectNames, selectedProject, dispatch, isDashboardPath]); 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) => { dispatch(setProjectId(project)); if (isProjectPath && project !== null) { navigate("/projects/details"); } }; const shouldShowDropdown = projectNames && projectNames.length > 1; return ( ); }; export default Header;