+
+ className="mb-0 stretched-link text-heading text-start"
+ onClick={handleViewProject}
+ >
{projectInfo.shortName
? projectInfo.shortName
: projectInfo.name}
@@ -228,7 +227,12 @@ const ProjectCard = ({ projectData, recall }) => {
Task: {formatNumber(projectInfo.completedWork)} / {formatNumber(projectInfo.plannedWork)}
- {getCompletionPercentage(projectInfo.completedWork, projectInfo.plannedWork)}
+ {Math.floor(
+ getProgressInNumber(
+ projectInfo.plannedWork,
+ projectInfo.completedWork
+ )
+ ) || 0}{" "}
% Completed
@@ -270,4 +274,4 @@ const ProjectCard = ({ projectData, recall }) => {
);
};
-export default ProjectCard;
+export default ProjectCard;
\ No newline at end of file
diff --git a/src/pages/project/ProjectDetails.jsx b/src/pages/project/ProjectDetails.jsx
index f34586aa..ec94d8ae 100644
--- a/src/pages/project/ProjectDetails.jsx
+++ b/src/pages/project/ProjectDetails.jsx
@@ -1,4 +1,4 @@
-import { useParams } from "react-router-dom";
+import { useSelector } from "react-redux"; // Import useSelector
import React, { useState, useEffect, useCallback } from "react";
import ActivityTimeline from "../../components/Project/ActivityTimeline";
@@ -31,157 +31,111 @@ import eventBus from "../../services/eventBus";
import ProjectProgressChart from "../../components/Dashboard/ProjectProgressChart";
const ProjectDetails = () => {
- let { projectId } = useParams();
- const {
- projects_Details,
- loading: projectLoading,
- error: ProjectError,
- refetch
- } = useProjectDetails(projectId);
+ // const { projectId } = useParams(); // REMOVE THIS LINE
const dispatch = useDispatch();
- const [project, setProject] = useState(null);
- // const [projectDetails, setProjectDetails] = useState(null);
- const [loading, setLoading] = useState(true);
- const [error, setError] = useState("");
- // const fetchData = async () => {
- // const project_cache = getCachedData("projectInfo");
- // if (!project_cache || project_cache?.projectId !== projectId) {
- // ProjectRepository.getProjectByprojectId(projectId)
- // .then((response) => {
- // setProjectDetails(response.data);
- // setProject(response.data);
- // cacheData("projectInfo", { projectId, data: response.data });
- // setLoading(false);
- // })
- // .catch((error) => {
- // console.error(error);
- // setError("Failed to fetch data.");
- // setLoading(false);
- // });
- // } else {
- // setProjectDetails(project_cache.data);
- // setProject(project_cache.data);
- // setLoading(false);
- // }
- // };
+ // GET projectId FROM REDUX STORE
+ const projectId = useSelector((store) => store.localVariables.projectId);
+
+ const {
+ projects_Details,
+ loading: projectLoading,
+ error: projectError,
+ refetch,
+ } = useProjectDetails(projectId);
const [activePill, setActivePill] = useState("profile");
- const handlePillClick = (pillKey) => {
- setActivePill(pillKey);
- };
-
- const handleDataChange = (data) => {
- fetchData();
- };
-
- const renderContent = () => {
- if (projectLoading) return
;
- switch (activePill) {
- case "profile": {
- return (
-
- );
- }
- case "teams": {
- return (
-
-
- {/* Teams */}
-
- {/* Teams */}
-
-
- );
- break;
- }
- case "infra": {
- return (
-
- );
- break;
- }
- case "workplan": {
- return (
-
- );
- break;
- }
- case "directory": {
- return (
-
-
-
- );
- }
-
- default:
- return
;
- }
- };
-
- useEffect(() => {
- dispatch(setProjectId(projectId));
-
- }, [projects_Details, projectId]);
+ // REMOVE THIS useEffect AS projectId IS NOW FROM REDUX
+ // useEffect(() => {
+ // if (projectId) dispatch(setProjectId(projectId));
+ // }, [projectId, dispatch]);
const handler = useCallback(
(msg) => {
- if (msg.keyword === "Update_Project" && projects_Details.id === msg.response.id) {
- refetch()
+ if (msg.keyword === "Update_Project" && projects_Details?.id === msg.response.id) {
+ refetch();
}
},
- [projects_Details, handleDataChange]
+ [projects_Details, refetch]
);
+
useEffect(() => {
eventBus.on("project", handler);
return () => eventBus.off("project", handler);
}, [handler]);
+ const handlePillClick = (pillKey) => {
+ setActivePill(pillKey);
+ };
+
+ const renderContent = () => {
+ if (projectLoading || !projects_Details) return
;
+
+ switch (activePill) {
+ case "profile":
+ return (
+ <>
+
+ >
+ );
+
+ case "teams":
+ return (
+
+ );
+
+ case "infra":
+ return (
+
+ );
+
+ case "workplan":
+ return (
+
+ );
+
+ case "directory":
+ return (
+
+
+
+ );
+
+ default:
+ return
;
+ }
+ };
+
return (
- <>
- {}
-
-
+
+
-
- {projectLoading &&
Loading....
}
- {/* {!projectLoading && project && (
-
- )} */}
-
-
-
-
-
-
- {renderContent()}
+
- >
+
+ {renderContent()}
+
);
};
-export default ProjectDetails;
+export default ProjectDetails;
\ No newline at end of file
diff --git a/src/pages/project/ProjectListView.jsx b/src/pages/project/ProjectListView.jsx
index 9deead71..a9ffc60d 100644
--- a/src/pages/project/ProjectListView.jsx
+++ b/src/pages/project/ProjectListView.jsx
@@ -62,7 +62,7 @@ const ProjectListView = ({ projectData, recall }) => {
const handleClose = () => setShowModal(false);
const handleViewProject = () => {
- navigate(`/projects/${projectData.id}`);
+ navigate(`/projects/details`);
};
const handleFormSubmit = (updatedProject) => {
@@ -89,7 +89,7 @@ const ProjectListView = ({ projectData, recall }) => {
navigate(`/projects/${projectInfo.id}`)}
+ onClick={() => navigate(`/projects/details`)}
>
{projectInfo.shortName
? `${projectInfo.name} (${projectInfo.shortName})`
@@ -162,7 +162,7 @@ const ProjectListView = ({ projectData, recall }) => {
navigate(`/projects/${projectInfo.id}`)}
+ onClick={() => navigate(`/projects/details`)}
>
View details
@@ -193,4 +193,4 @@ const ProjectListView = ({ projectData, recall }) => {
);
};
-export default ProjectListView;
+export default ProjectListView;
\ No newline at end of file
diff --git a/src/router/AppRoutes.jsx b/src/router/AppRoutes.jsx
index 7c364ca9..5ce5b6d4 100644
--- a/src/router/AppRoutes.jsx
+++ b/src/router/AppRoutes.jsx
@@ -63,7 +63,7 @@ const router = createBrowserRouter(
{ path: "/", element: },
{ path: "/dashboard", element: },
{ path: "/projects", element: },
- { path: "/projects/:projectId", element: },
+ { path: "/projects/details", element: },
{ path: "/project/manage/:projectId", element: },
{ path: "/employees", element: },
{ path: "/employee/:employeeId", element: },
|