diff --git a/src/components/Dashboard/ProjectProgressChart.jsx b/src/components/Dashboard/ProjectProgressChart.jsx
index 20e0191a..f80bb0d5 100644
--- a/src/components/Dashboard/ProjectProgressChart.jsx
+++ b/src/components/Dashboard/ProjectProgressChart.jsx
@@ -93,33 +93,6 @@ const ProjectProgressChart = ({
Project Progress
Progress Overview by Project
-
- {/* Right: Checkbox and Project Name */}
-
- {ShowAllProject == true && (
-
- setShowAllEmployees(e.target.checked)}
- />
-
-
- )}
- {!showAllEmployees && selectedProjectName && (
-
- {selectedProjectName}
-
- )}
-
{/* Row 2: Time Range Buttons */}
diff --git a/src/components/Layout/Header.jsx b/src/components/Layout/Header.jsx
index 9c1b4b17..e4bf4e83 100644
--- a/src/components/Layout/Header.jsx
+++ b/src/components/Layout/Header.jsx
@@ -20,7 +20,7 @@ import { useHasUserPermission } from "../../hooks/useHasUserPermission";
import { MANAGE_PROJECT } from "../../utils/constants";
const Header = () => {
- const {profile} = useProfile();
+ const { profile } = useProfile();
const location = useLocation();
const dispatch = useDispatch();
const { data, loading } = useMaster();
@@ -32,6 +32,7 @@ const Header = () => {
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();
@@ -39,7 +40,6 @@ const Header = () => {
const logout = async () => {
try {
- // Notify server about the logout (optional)
let data = {
refreshToken: localStorage.getItem("refreshToken"),
};
@@ -54,6 +54,7 @@ const Header = () => {
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");
@@ -71,39 +72,43 @@ const Header = () => {
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;
-
+ // Determine the display text for the project dropdown
let displayText = "";
- if (selectedProjectName) {
- displayText = selectedProjectName;
- } else if (projectLoading && selectedProject) {
- displayText = selectedProject;
+ 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 &&
- selectedProject !== " " &&
+ projectNames.length > 0 &&
+ selectedProject === undefined &&
!getCachedData("hasReceived")
) {
- dispatch(setProjectId(projectNames[0]?.id));
+ dispatch(setProjectId(null)); // Set to null for "All Projects"
}
- }, [projectNames]);
+ }, [projectNames, selectedProject, dispatch]);
- /** Check if current page id project details page */
- const isProjectPath = /^\/projects\/[a-f0-9-]{36}$/.test(location.pathname)
+
+ /** Check if current page is project details page or directory page */
+ const isProjectPath = /^\/projects\/[a-f0-9-]{36}$/.test(location.pathname);
const isDirectoryPath = /^\/directory$/.test(location.pathname);
const handler = useCallback(
@@ -111,58 +116,47 @@ const Header = () => {
if (!HasManageProjectPermission) {
await fetchData();
const projectExist = data.projectIds.some(
- (item) => item == selectedProject
+ (item) => item === selectedProject
);
if (projectExist) {
cacheData("hasReceived", false);
}
}
},
- [fetchData,projectNames,selectedProject]
+ [fetchData, selectedProject, HasManageProjectPermission]
);
- // 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)))
+ } else if (projectNames?.some((item) => item.id === msg.response.id)) {
await fetchData();
}
cacheData("hasReceived", false);
},
- [HasManageProjectPermission,projectNames]
+ [HasManageProjectPermission, projectNames, fetchData]
);
- // useEffect(() => {
- // eventBus.on("project", newProjectHandler);
- // return () => eventBus.off("project", newProjectHandler);
- // }, [handler]);
-
- useDispatch( () =>
- {
- dispatch(changeMaster("Job Role"))
-},[])
+ // Correct way to dispatch an action on mount
useEffect(() => {
- eventBus.on("assign_project_one", handler);
- eventBus.on("project", newProjectHandler);
+ dispatch(changeMaster("Job Role"));
+ }, [dispatch]);
- return () => {
- eventBus.off("assign_project_one", handler);
- eventBus.off("project", newProjectHandler);
- };
-}, [handler, newProjectHandler]);
+ // Event bus listeners for project changes
+ useEffect(() => {
+ eventBus.on("assign_project_one", handler);
+ eventBus.on("project", newProjectHandler);
+ return () => {
+ eventBus.off("assign_project_one", handler);
+ eventBus.off("project", newProjectHandler);
+ };
+ }, [handler, newProjectHandler]);
return (
);
};
-export default Header;
+export default Header;
\ No newline at end of file
diff --git a/src/pages/project/ProjectDetails.jsx b/src/pages/project/ProjectDetails.jsx
index 732255b8..3b09f409 100644
--- a/src/pages/project/ProjectDetails.jsx
+++ b/src/pages/project/ProjectDetails.jsx
@@ -101,7 +101,7 @@ const ProjectDetails = () => {
-
+ >
);
}
case "teams": {