export default function App()

in packages/@aws-c2a/web-app/src/App.tsx [41:92]


export default function App({changeReport}: AppProps): JSX.Element {
  const classes = useStyles();

  const [selectedTab, setSelectedTab] = useState(0);

  const [selectedCompTransition, setSelectedCompTransition] = useState(undefined as Transition<Component> | undefined);
  const [selectedAgg, setSelectedAgg] = useState(undefined as Aggregation<ComponentOperation> | undefined);

  const [approvedChanges, setApprovedChanges] = useState<Map<ComponentOperation, RuleAction>>(
    new Map([...changeReport.rulesOutput]
      .map(([op, effect]) => [op, effect.action ?? RuleAction.None]),
    ),
  );

  const showComponentInHierarchy = (comp: Transition<Component>) => {
    setSelectedTab(1);
    setSelectedCompTransition(comp);
  };

  const showAggregation = (agg: Aggregation<ComponentOperation>) => {
    setSelectedTab(0);
    setSelectedAgg(agg);
  };

  const setSelectedChange = (op: ComponentOperation) => {
    const agg = findAggregationWithChange(op, changeReport.aggregations);
    if(agg)
      showAggregation(agg);
  };

  const setChangesApproval = (changes: ComponentOperation[], state: RuleAction) => {
    setApprovedChanges(new Map([...approvedChanges, ...changes.map(c => [c, state] as const)]));
  };

  return (
    <AppContext.Provider
      value={{
        changeReport,
        showComponentInHierarchy,
        selectedCompTransition,
        setSelectedCompTransition,
        selectedAgg,
        setSelectedAgg,
        setSelectedChange,
        showAggregation,
        setChangesApproval,
        approvedChanges,
      }}
    >
      <div className={classes.wrapper}>
        <AppBar position="static" color="transparent">
          <Tabs value={selectedTab} onChange={(e, v) => setSelectedTab(v)} aria-label="simple tabs example">