Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1-3059: add initial visuals for lifecycle summary #8679

Merged
merged 10 commits into from
Nov 7, 2024
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
import { styled } from '@mui/material';
import { FeatureLifecycleStageIcon } from 'component/feature/FeatureView/FeatureOverview/FeatureLifecycle/FeatureLifecycleStageIcon';
import { useRequiredPathParam } from 'hooks/useRequiredPathParam';
import { Link } from 'react-router-dom';

const LifecycleBox = styled('li')(({ theme }) => ({
padding: theme.spacing(2),
borderRadius: theme.shape.borderRadiusExtraLarge,
border: `2px solid ${theme.palette.divider}`,
width: '180px',
height: '175px',
display: 'flex',
flexFlow: 'column',
justifyContent: 'space-between',
}));

const Wrapper = styled('ul')(({ theme }) => ({
display: 'grid',
listStyle: 'none',
gridTemplateColumns: 'repeat(auto-fit, 180px)',
gap: theme.spacing(1),
justifyContent: 'center',
}));

const Counter = styled('span')({
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
});

const BigNumber = styled('span')(({ theme }) => ({
fontSize: `calc(2 * ${theme.typography.body1.fontSize})`,
}));

const Stats = styled('dl')(({ theme }) => ({
margin: 0,
fontSize: theme.typography.body2.fontSize,
'& dd': {
margin: 0,
fontWeight: 'bold',
},
}));

const NegativeStat = styled('span')(({ theme }) => ({
color: theme.palette.warning.contrastText,
}));

const NoData = styled('span')({
fontWeight: 'normal',
});

const LinkNoUnderline = styled(Link)({
textDecoration: 'none',
});

export const ProjectLifecycleSummary = () => {
const projectId = useRequiredPathParam('projectId');
return (
<Wrapper>
<LifecycleBox>
<p>
<Counter>
<BigNumber>15</BigNumber>

<FeatureLifecycleStageIcon
aria-hidden='true'
stage={{
name: 'initial',
enteredStageAt: '',
}}
/>
</Counter>
<span>flags in initial</span>
</p>
<Stats>
<dt>Avg. time in stage</dt>
<dd>
<NegativeStat>21 days</NegativeStat>
</dd>
</Stats>
</LifecycleBox>
<LifecycleBox>
<p>
<Counter>
<BigNumber>3</BigNumber>

<FeatureLifecycleStageIcon
aria-hidden='true'
stage={{
name: 'pre-live',
enteredStageAt: '',
environments: [],
}}
/>
</Counter>
<span>flags in pre-live</span>
</p>
<Stats>
<dt>Avg. time in stage</dt>
<dd>18 days</dd>
</Stats>
</LifecycleBox>
<LifecycleBox>
<p>
<Counter>
<BigNumber>2</BigNumber>

<FeatureLifecycleStageIcon
aria-hidden='true'
stage={{
name: 'live',
enteredStageAt: '',
environments: [],
}}
/>
</Counter>
<span>flags in live</span>
</p>
<Stats>
<dt>Avg. time in stage</dt>
<dd>10 days</dd>
</Stats>
</LifecycleBox>
<LifecycleBox>
<p>
<Counter>
<BigNumber>6</BigNumber>

<FeatureLifecycleStageIcon
aria-hidden='true'
stage={{
name: 'completed',
enteredStageAt: '',
environments: [],
status: 'kept',
}}
/>
</Counter>
<span>
<LinkNoUnderline
to={`/projects/${projectId}/placeholder`}
>
flags
</LinkNoUnderline>{' '}
in cleanup
</span>
</p>
<Stats>
<dt>Avg. time in stage</dt>
<dd>
<NoData>No data</NoData>
</dd>
</Stats>
</LifecycleBox>
<LifecycleBox>
<p>
<Counter>
<BigNumber>15</BigNumber>

<FeatureLifecycleStageIcon
aria-hidden='true'
stage={{
name: 'archived',
enteredStageAt: '',
}}
/>
</Counter>
<span>flags in archived</span>
</p>
<Stats>
<dt>This month</dt>
<dd>3 flags archived</dd>
</Stats>
</LifecycleBox>
</Wrapper>
);
Comment on lines +58 to +176
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the complete, rolled-out version of what it'll look like. We'll very likely refactor this in a future iteration..

};
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { styled } from '@mui/material';
import { SidebarModal } from 'component/common/SidebarModal/SidebarModal';
import { ProjectResources } from './ProjectResources';
import { ProjectActivity } from './ProjectActivity';
import { ProjectLifecycleSummary } from './ProjectLifecycleSummary';

const ModalContentContainer = styled('div')(({ theme }) => ({
minHeight: '100vh',
Expand Down Expand Up @@ -40,6 +41,8 @@ export const ProjectStatusModal = ({ open, close }: Props) => {
</HealthRow>

<ProjectActivity />

<ProjectLifecycleSummary />
</ModalContentContainer>
</SidebarModal>
);
Expand Down
Loading