-
setSearchTerm(e.target.value)}
- />
+
+ setSearchTerm(e.target.value)}
+ />
+
{hasMasterPermission && (
)}
diff --git a/src/pages/master/MasterTable.jsx b/src/pages/master/MasterTable.jsx
index 3f3297b5..b2285842 100644
--- a/src/pages/master/MasterTable.jsx
+++ b/src/pages/master/MasterTable.jsx
@@ -179,8 +179,9 @@ const MasterTable = ({ data, columns, loading, handleModalData }) => {
aria-label="Delete"
type="button"
className="btn p-0 dropdown-toggle hide-arrow"
- onClick={() => handleModalData("delete", item, selectedMaster)}
-
+ onClick={() =>
+ handleModalData("delete", item, selectedMaster)
+ }
>
diff --git a/src/pages/project/ProjectDetails.jsx b/src/pages/project/ProjectDetails.jsx
index e32a185b..b57f9362 100644
--- a/src/pages/project/ProjectDetails.jsx
+++ b/src/pages/project/ProjectDetails.jsx
@@ -1,5 +1,6 @@
-import { useSelector, useDispatch } from "react-redux"; // Import useSelector
import React, { useState, useEffect, useCallback } from "react";
+import { useDispatch } from "react-redux";
+import { useNavigate } from "react-router-dom";
import ProjectOverview from "../../components/Project/ProjectOverview";
import AboutProject from "../../components/Project/AboutProject";
@@ -9,56 +10,43 @@ import ProjectInfra from "../../components/Project/ProjectInfra";
import Loader from "../../components/common/Loader";
import WorkPlan from "../../components/Project/WorkPlan";
import Breadcrumb from "../../components/common/Breadcrumb";
-import {
- cacheData,
- clearCacheKey,
- getCachedData,
- useSelectedProject,
-} from "../../slices/apiDataManager";
-import "./ProjectDetails.css";
-import { useProjectDetails } from "../../hooks/useProjects";
+import { useSelectedProject } from "../../slices/apiDataManager";
+import { useProjectDetails, useProjectName } from "../../hooks/useProjects";
import { ComingSoonPage } from "../Misc/ComingSoonPage";
import eventBus from "../../services/eventBus";
import ProjectProgressChart from "../../components/Dashboard/ProjectProgressChart";
-import { useProjectName } from "../../hooks/useProjects";
import AttendanceOverview from "../../components/Dashboard/AttendanceChart";
import { setProjectId } from "../../slices/localVariablesSlice";
-import ProjectDocument from "../../components/Project/ProjectDocuments";
import ProjectDocuments from "../../components/Project/ProjectDocuments";
import ProjectSetting from "../../components/Project/ProjectSetting";
import DirectoryPage from "../Directory/DirectoryPage";
+import { useProjectAccess } from "../../hooks/useProjectAccess"; // ✅ new
+
+import "./ProjectDetails.css";
const ProjectDetails = () => {
-
- const projectId = useSelectedProject()
-
- const { projectNames, fetchData } = useProjectName();
+ const projectId = useSelectedProject();
const dispatch = useDispatch();
+ const { projectNames } = useProjectName();
+ const { projects_Details, loading: projectLoading, refetch } =
+ useProjectDetails(projectId);
+
+ const { canView, loading: permsLoading } = useProjectAccess(projectId);
+
useEffect(() => {
- if (projectId == null) {
- dispatch(setProjectId(projectNames[0]?.id));
+ if (!projectId && projectNames.length > 0) {
+ dispatch(setProjectId(projectNames[0].id));
}
- }, [projectNames]);
+ }, [projectId, projectNames, dispatch]);
- const {
- projects_Details,
- loading: projectLoading,
- error: projectError,
- refetch,
- } = useProjectDetails(projectId);
-
- // const [activePill, setActivePill] = useState("profile");
- const [activePill, setActivePill] = useState(() => {
- return localStorage.getItem("lastActiveProjectTab") || "profile";
- });
+ const [activePill, setActivePill] = useState(
+ localStorage.getItem("lastActiveProjectTab") || "profile"
+ );
const handler = useCallback(
(msg) => {
- if (
- msg.keyword === "Update_Project" &&
- projects_Details?.id === msg.response.id
- ) {
+ if (msg.keyword === "Update_Project" && projects_Details?.id === msg.response.id) {
refetch();
}
},
@@ -72,69 +60,42 @@ const ProjectDetails = () => {
const handlePillClick = (pillKey) => {
setActivePill(pillKey);
- localStorage.setItem("lastActiveProjectTab", pillKey); // ✅ Save to localStorage
+ localStorage.setItem("lastActiveProjectTab", pillKey);
};
- const renderContent = () => {
- if (projectLoading || !projects_Details) return
;
+ if (projectLoading || permsLoading || !projects_Details) {
+ return
;
+ }
+ const renderContent = () => {
switch (activePill) {
case "profile":
- return (
- <>
-
- >
- );
-
- case "teams":
return (
-
);
-
+ case "teams":
+ return
;
case "infra":
return
;
-
case "workplan":
return
;
-
case "directory":
- return (
-
-
-
- );
+ return
;
case "documents":
- return (
-
- );
- case "setting":
- return (
-
- );
-
+ return
;
+ case "setting":
+ return
;
default:
return
;
}
@@ -149,7 +110,6 @@ const ProjectDetails = () => {
{ label: projects_Details?.name || "Project", link: null },
]}
/>
-
diff --git a/src/repositories/ProjectRepository.jsx b/src/repositories/ProjectRepository.jsx
index 6543301a..fc1c648d 100644
--- a/src/repositories/ProjectRepository.jsx
+++ b/src/repositories/ProjectRepository.jsx
@@ -44,7 +44,8 @@ const ProjectRepository = {
getProjectLevelEmployeeList:(projectId)=>api.get(`/api/Project/get/proejct-level/employees/${projectId}`),
getProjectLevelModules:()=>api.get(`/api/Project/get/proejct-level/modules`),
getProjectLevelEmployeePermissions:(employeeId,projectId)=>api.get(`/api/Project/get/project-level-permission/employee/${employeeId}/project/${projectId}`),
- updateProjectLevelEmployeePermission:(data)=>api.post(`/api/Project/assign/project-level-permission`,data)
+ updateProjectLevelEmployeePermission:(data)=>api.post(`/api/Project/assign/project-level-permission`,data),
+ getAllProjectLevelPermission:(projectId)=>api.get(`/api/Project/get/all/project-level-permission/${projectId}`)
};
export const TasksRepository = {
diff --git a/src/utils/constants.jsx b/src/utils/constants.jsx
index ab66b2c1..1af801ca 100644
--- a/src/utils/constants.jsx
+++ b/src/utils/constants.jsx
@@ -17,6 +17,7 @@ export const VIEW_ALL_EMPLOYEES = "60611762-7f8a-4fb5-b53f-b1139918796b"
export const VIEW_TEAM_MEMBERS = "b82d2b7e-0d52-45f3-997b-c008ea460e7f"
+export const MANAGE_TEAM = "b94802ce-0689-4643-9e1d-11c86950c35b"
export const MANAGE_PROJECT_INFRA = "cf2825ad-453b-46aa-91d9-27c124d63373"