import React, { FC, useEffect } from 'react'; import useProject, { useProjectNameOrId, } from 'hooks/api/getters/useProject/useProject'; import { Box, styled } from '@mui/material'; import { ProjectFeatureToggles } from './ProjectFeatureToggles/ProjectFeatureToggles'; import ProjectInfo from './ProjectInfo/ProjectInfo'; import { usePageTitle } from 'hooks/usePageTitle'; import { useRequiredPathParam } from 'hooks/useRequiredPathParam'; import { useLastViewedProject } from 'hooks/useLastViewedProject'; import { ProjectStats } from './ProjectStats/ProjectStats'; import { useUiFlag } from 'hooks/useUiFlag'; import { PaginatedProjectFeatureToggles } from './PaginatedProjectFeatureToggles/PaginatedProjectFeatureToggles'; import useProjectOverview from 'hooks/api/getters/useProjectOverview/useProjectOverview'; import { type FeatureTypeCount } from '../../../interfaces/project'; const refreshInterval = 15 * 1000; const StyledContainer = styled('div')(({ theme }) => ({ display: 'flex', gap: theme.spacing(2), [theme.breakpoints.down('md')]: { flexDirection: 'column', }, })); const StyledProjectToggles = styled('div')(() => ({ width: '100%', minWidth: 0, })); const StyledContentContainer = styled(Box)(({ theme }) => ({ display: 'flex', flexDirection: 'column', gap: theme.spacing(2), width: '100%', minWidth: 0, })); const PaginatedProjectOverview: FC<{ storageKey?: string; }> = ({ storageKey = 'project-overview-v2' }) => { const projectId = useRequiredPathParam('projectId'); const { project } = useProjectOverview(projectId, { refreshInterval, }); const { members, featureTypeCounts, health, description, environments, stats, } = project; return ( ); }; /** * @deprecated remove when flag `featureSearchFrontend` is removed */ const ProjectOverview = () => { const projectId = useRequiredPathParam('projectId'); const projectName = useProjectNameOrId(projectId); const { project, loading, refetch } = useProject(projectId, { refreshInterval, }); const { members, features, health, description, environments, stats } = project; usePageTitle(`Project overview – ${projectName}`); const { setLastViewed } = useLastViewedProject(); const featureSearchFrontend = useUiFlag('featureSearchFrontend'); useEffect(() => { setLastViewed(projectId); }, [projectId, setLastViewed]); if (featureSearchFrontend) return ; const featureTypeCounts = features.reduce( (acc: FeatureTypeCount[], feature) => { const existingEntry = acc.find( (entry) => entry.type === feature.type, ); if (existingEntry) { existingEntry.count += 1; } else { acc.push({ type: feature.type, count: 1 }); } return acc; }, [], ); return ( ); }; export default ProjectOverview;