import { useNavigate } from 'react-router'; import useProject from 'hooks/api/getters/useProject/useProject'; import useLoading from 'hooks/useLoading'; import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender'; import { StyledColumn, StyledDiv, StyledFavoriteIconButton, StyledHeader, StyledInnerContainer, StyledName, StyledProjectTitle, StyledSeparator, StyledTab, StyledTabContainer, StyledText, StyledTitle, StyledTopRow, } from './Project.styles'; import { Tabs } from '@mui/material'; import { Delete, Edit, FileUpload } from '@mui/icons-material'; import useToast from 'hooks/useToast'; import useQueryParams from 'hooks/useQueryParams'; import { useEffect, useState } from 'react'; import ProjectEnvironment from '../ProjectEnvironment/ProjectEnvironment'; import { ProjectFeaturesArchive } from './ProjectFeaturesArchive/ProjectFeaturesArchive'; import ProjectOverview from './ProjectOverview'; import ProjectHealth from './ProjectHealth/ProjectHealth'; import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton'; import { CREATE_FEATURE, DELETE_PROJECT, UPDATE_PROJECT, } from 'component/providers/AccessProvider/permissions'; import { useRequiredPathParam } from 'hooks/useRequiredPathParam'; import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig'; import { Navigate, Route, Routes, useLocation } from 'react-router-dom'; import { DeleteProjectDialogue } from './DeleteProject/DeleteProjectDialogue'; import { ProjectLog } from './ProjectLog/ProjectLog'; import { ChangeRequestOverview } from 'component/changeRequest/ChangeRequestOverview/ChangeRequestOverview'; import { ProjectChangeRequests } from '../../changeRequest/ProjectChangeRequests/ProjectChangeRequests'; import { ProjectSettings } from './ProjectSettings/ProjectSettings'; import { useFavoriteProjectsApi } from 'hooks/api/actions/useFavoriteProjectsApi/useFavoriteProjectsApi'; import { ImportModal } from './Import/ImportModal'; import { IMPORT_BUTTON } from 'utils/testIds'; export const Project = () => { const projectId = useRequiredPathParam('projectId'); const params = useQueryParams(); const { project, loading, refetch } = useProject(projectId); const ref = useLoading(loading); const { setToastData } = useToast(); const [modalOpen, setModalOpen] = useState(false); const navigate = useNavigate(); const { pathname } = useLocation(); const { isOss, uiConfig } = useUiConfig(); const basePath = `/projects/${projectId}`; const projectName = project?.name || projectId; const { favorite, unfavorite } = useFavoriteProjectsApi(); const [showDelDialog, setShowDelDialog] = useState(false); const tabs = [ { title: 'Overview', path: basePath, name: 'overview', }, { title: 'Health', path: `${basePath}/health`, name: 'health', }, { title: 'Archive', path: `${basePath}/archive`, name: 'archive', }, { title: 'Change requests', path: `${basePath}/change-requests`, name: 'change-request', }, { title: 'Project settings', path: `${basePath}/settings`, name: 'settings', }, { title: 'Event log', path: `${basePath}/logs`, name: 'logs', }, ]; const activeTab = [...tabs] .reverse() .find(tab => pathname.startsWith(tab.path)); useEffect(() => { const created = params.get('created'); const edited = params.get('edited'); if (created || edited) { const text = created ? 'Project created' : 'Project updated'; setToastData({ type: 'success', title: text, }); } /* eslint-disable-next-line */ }, []); const onFavorite = async () => { if (project?.favorite) { await unfavorite(projectId); } else { await favorite(projectId); } refetch(); }; return (
{projectName} setModalOpen(true)} tooltipProps={{ title: 'Import' }} data-testid={IMPORT_BUTTON} data-loading > } /> navigate( `/projects/${projectId}/edit` ) } tooltipProps={{ title: 'Edit project' }} data-loading > } /> { setShowDelDialog(true); }} tooltipProps={{ title: 'Delete project', }} data-loading > } /> (
Description:  {project.description} } /> projectId:  {projectId}
)} />
{tabs.map(tab => ( navigate(tab.path)} /> ))}
{ setShowDelDialog(false); }} onSuccess={() => { navigate('/projects'); }} /> } /> } /> } /> } /> } /> } /> } /> } /> } />
); };