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(changeMaster("Job Role")); const { data, loading } = useMaster(); const navigate = useNavigate(); const HasManageProjectPermission = useHasUserPermission(MANAGE_PROJECT); 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(); // Prevent default anchor behavior (e.g., page reload) logout(); }; const logout = async () => { try { // Notify server about the logout (optional) 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) => { 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 { projects, loading: projectLoading } = useProjects(); const { projectNames, loading: projectLoading, fetchData } = useProjectName(); const selectedProject = useSelector( (store) => store.localVariables.projectId ); const selectedProjectName = projectNames?.find( (p) => p?.id === selectedProject )?.name; let displayText = ""; if (selectedProjectName) { displayText = selectedProjectName; } else if (projectLoading && selectedProject) { displayText = selectedProject; } else if (projectLoading) { displayText = "Loading..."; } const { openChangePassword } = useChangePassword(); useEffect(() => { if ( projectNames && selectedProject !== " " && !getCachedData("hasReceived") ) { dispatch(setProjectId(projectNames[0]?.id)); } }, [projectNames]); /** Check if current page id project details 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,projectNames,selectedProject] ); useEffect(() => { eventBus.on("assign_project_one", handler); return () => eventBus.off("assign_project_one", handler); }, [handler]); const newProjectHandler = useCallback( async (msg) => { if (HasManageProjectPermission && msg.keyword === "Create_Project") { await fetchData(); } else if (projectNames.some((item) => item.id == msg.response.id)) { console.log((projectNames.some((item) => item.id == msg.response.id))) await fetchData(); } cacheData("hasReceived", false); }, [HasManageProjectPermission,projectNames] ); useEffect(() => { eventBus.on("project", newProjectHandler); return () => eventBus.off("project", newProjectHandler); }, [handler]); return ( ); }; export default Header;