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"; import ProjectNav from "../../components/Project/ProjectNav"; import Teams from "../../components/Project/Teams"; 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 { 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/AttendanceChart"; 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"; 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); 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 (
); 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;