import React, { useState, useEffect, useCallback } from "react"; import { useDispatch } from "react-redux"; import { useNavigate } from "react-router-dom"; import ProjectOverview from "../../components/Project/ProjectStatistics"; import AboutProject from "../../components/Project/AboutProject"; import ProjectNav from "../../components/Project/ProjectNav"; import Teams from "../../components/Project/Team/Teams"; import ProjectInfra from "../../components/Project/ProjectInfra"; import { SpinnerLoader } from "../../components/common/Loader"; import WorkPlan from "../../components/Project/WorkPlan"; import Breadcrumb from "../../components/common/Breadcrumb"; 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 AttendanceOverview from "../../components/Dashboard/AttendanceOverview"; import { setProjectId } from "../../slices/localVariablesSlice"; import ProjectDocuments from "../../components/Project/ProjectDocuments"; import ProjectSetting from "../../components/Project/ProjectSetting"; import DirectoryPage from "../Directory/DirectoryPage"; import { useProjectAccess } from "../../hooks/useProjectAccess"; import "./ProjectDetails.css"; import ProjectOrganizations from "../../components/Project/ProjectOrganizations"; import ProjectStatistics from "../../components/Project/ProjectStatistics"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { REGULARIZE_ATTENDANCE, SELF_ATTENDANCE, TEAM_ATTENDANCE } from "../../utils/constants"; const ProjectDetails = () => { const projectId = useSelectedProject(); const dispatch = useDispatch(); const { projectNames } = useProjectName(); const { projects_Details, loading: projectLoading, refetch } = useProjectDetails(projectId); const { canView, loading: permsLoading } = useProjectAccess(projectId); const canRegularize = useHasUserPermission(REGULARIZE_ATTENDANCE); const canTeamAttendance = useHasUserPermission(TEAM_ATTENDANCE); const canSelfAttendance = useHasUserPermission(SELF_ATTENDANCE); useEffect(() => { if (!projectId && projectNames.length > 0) { dispatch(setProjectId(projectNames[0].id)); } }, [projectId, projectNames, dispatch]); const [activePill, setActivePill] = useState( localStorage.getItem("lastActiveProjectTab") || "profile" ); const handler = useCallback( (msg) => { if (msg.keyword === "Update_Project" && projects_Details?.id === msg.response.id) { refetch(); } }, [projects_Details, refetch] ); useEffect(() => { eventBus.on("project", handler); return () => eventBus.off("project", handler); }, [handler]); const handlePillClick = (pillKey) => { setActivePill(pillKey); localStorage.setItem("lastActiveProjectTab", pillKey); }; if (projectLoading || permsLoading || !projects_Details) { return (
); } const renderContent = () => { switch (activePill) { case "profile": return (
{(canRegularize || canTeamAttendance || canSelfAttendance) && (
)}
); case "teams": return ; case "infra": return ; case "workplan": return ; case "directory": return ; case "documents": return ; case "setting": return ; case "organization": return ; default: return ; } }; return (
{renderContent()}
); }; export default ProjectDetails;