import {
groupArrayBy,
isDefined,
CompOpAggCharacteristics,
ComponentOperation,
Aggregation,
RuleRisk,
} from '@aws-c2a/models';
import { List, Paper } from '@material-ui/core';
import { makeStyles } from '@material-ui/core/styles';
import {
Error as ErrorIcon,
Warning as WarningIcon,
Info as InfoIcon,
} from '@material-ui/icons';
import React, { useContext, useState } from 'react';
import { AppContext } from '../../App';
import ChangesGroup from '../../reusable-components/ChangesGroup';
import CollapsableRow from '../../reusable-components/CollapsableRow';
const useStyles = makeStyles({
root: {
height: '100%',
maxHeight: '100%',
display: 'flex',
flexDirection: 'column',
},
});
export default function ChangeTree(): JSX.Element {
const classes = useStyles();
const [expanded, setExpanded] = useState(0);
const { changeReport } = useContext(AppContext);
const aggsPerRisk = groupArrayBy(changeReport.aggregations, (agg) => agg.characteristics.RISK);
return (
}
expanded={expanded === 0}
stretchOnExpand
onChange={(e, expand) => expand ? setExpanded(0) : setExpanded(-1)}
title="High Risk Changes"
content={
{
renderAggs((aggsPerRisk.get(RuleRisk.High) ?? [{}])[0].subAggs ?? [])
}
}
color="#EA9B9A"
/>
}
expanded={expanded === 1}
stretchOnExpand
onChange={(e, expand) => expand ? setExpanded(1) : setExpanded(-1)}
title="Unclassified Risk Changes"
content={
{
renderAggs((aggsPerRisk.get(RuleRisk.Unknown) ?? [{}])[0].subAggs ?? [])
}
}
color="#F5E48E"
/>
}
expanded={expanded === 2}
stretchOnExpand
onChange={(e, expand) => expand ? setExpanded(2) : setExpanded(-1)}
title="Low Risk Changes"
content={
{
renderAggs((aggsPerRisk.get(RuleRisk.Low) ?? [{}])[0].subAggs ?? [])
}
}
color="#C1DEEC"
/>
);
}
function renderAggs(aggs: Aggregation[]): JSX.Element[] {
return aggs.map((agg, i) => sg.characteristics[CompOpAggCharacteristics.OPERATION_TYPE]))]
.filter(isDefined).join(', ')
}
/>);
}