import { useMemo, useState, VFC } from 'react'; import { Box, styled, Typography, useMediaQuery, useTheme, } from '@mui/material'; import { PageHeader } from 'component/common/PageHeader/PageHeader'; import { UsersChart } from './UsersChart/UsersChart'; import { FlagsChart } from './FlagsChart/FlagsChart'; import { useExecutiveDashboard } from 'hooks/api/getters/useExecutiveSummary/useExecutiveSummary'; import { UserStats } from './UserStats/UserStats'; import { FlagStats } from './FlagStats/FlagStats'; import { Widget } from './Widget/Widget'; import { FlagsProjectChart } from './FlagsProjectChart/FlagsProjectChart'; import { ProjectHealthChart } from './ProjectHealthChart/ProjectHealthChart'; import { TimeToProductionChart } from './TimeToProductionChart/TimeToProductionChart'; import { TimeToProduction } from './TimeToProduction/TimeToProduction'; import { ProjectSelect, allOption } from './ProjectSelect/ProjectSelect'; const StyledGrid = styled(Box)(({ theme }) => ({ display: 'grid', gridTemplateColumns: `300px 1fr`, gridAutoRows: 'auto', gap: theme.spacing(2), })); const useDashboardGrid = () => { const theme = useTheme(); const isMediumScreen = useMediaQuery(theme.breakpoints.down('lg')); const isSmallScreen = useMediaQuery(theme.breakpoints.down('sm')); if (isSmallScreen) { return { gridTemplateColumns: `1fr`, chartSpan: 1, userTrendsOrder: 3, flagStatsOrder: 2, largeChartSpan: 1, }; } if (isMediumScreen) { return { gridTemplateColumns: `1fr 1fr`, chartSpan: 2, userTrendsOrder: 3, flagStatsOrder: 2, largeChartSpan: 2, }; } return { gridTemplateColumns: `300px auto`, chartSpan: 1, userTrendsOrder: 2, flagStatsOrder: 3, largeChartSpan: 2, }; }; export const ExecutiveDashboard: VFC = () => { const { executiveDashboardData, loading, error } = useExecutiveDashboard(); const [projects, setProjects] = useState([allOption.id]); const flagPerUsers = useMemo(() => { if ( executiveDashboardData.users.total === 0 || executiveDashboardData.flags.total === 0 ) return '0'; return ( executiveDashboardData.flags.total / executiveDashboardData.users.total ).toFixed(1); }, [executiveDashboardData]); const filteredProjectFlagTrends = useMemo(() => { if (projects[0] === allOption.id) { return executiveDashboardData.projectFlagTrends; } return executiveDashboardData.projectFlagTrends.filter((trend) => projects.includes(trend.project), ); }, [executiveDashboardData, projects]); const { gridTemplateColumns, chartSpan, userTrendsOrder, flagStatsOrder, largeChartSpan, } = useDashboardGrid(); return ( <> ({ paddingBottom: theme.spacing(4) })}> Dashboard } /> {/* FIXME: data from API */} ); };