export default function ApproveChangeBtn()

in packages/@aws-c2a/web-app/src/reusable-components/ApproveChangeBtn.tsx [21:50]


export default function ApproveChangeBtn({changes}: Props): JSX.Element {

  const changesArr = Array.isArray(changes) ? changes : [changes];

  const hasMultiple = changesArr.length > 1;

  const { approvedChanges, setChangesApproval } = useContext(AppContext);

  const state: RuleAction = changesArr.reduce((acc: RuleAction, c) => {
    const s = approvedChanges.get(c);
    if(acc === RuleAction.Reject || s === RuleAction.Reject) return RuleAction.Reject;
    if(!s || s === RuleAction.None || acc === RuleAction.None) return RuleAction.None;
    return RuleAction.Approve;
  }, RuleAction.Approve);

  const onClick: ReactEventHandler = (e) => {
    e.stopPropagation();
    if(state === RuleAction.Reject) return;
    setChangesApproval(changesArr, state === RuleAction.Approve ? RuleAction.None : RuleAction.Approve);
  };

  const classes = useStyles();

  if(state === RuleAction.Reject) {
    return <Tooltip title={'This change was explicitly rejected by this project\'s rules. It cannot be approved'}>
      <IconButton className={classes.rejected} size="small" onClick={(e) => e.stopPropagation()}>{
        <ClearIcon/>
      }</IconButton>
    </Tooltip>;
  }