import { ComponentOperation, RuleAction } from '@aws-c2a/models'; import { IconButton, makeStyles, Tooltip } from '@material-ui/core'; import { Done as DoneIcon, DoneAll as DoneAllIcon, Clear as ClearIcon } from '@material-ui/icons'; import React, { ReactEventHandler, useContext } from 'react'; import { AppContext } from '../App'; const useStyles = makeStyles({ rejected: { color: '#F00', }, approved: { color: '#0B0', }, }); type Props = { changes: ComponentOperation | ComponentOperation[], } 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 e.stopPropagation()}>{ } ; } const approveTooltipTitle = `Approve ${hasMultiple ? 'these changes' : 'this change'}`; const unApproveTooltipTitle = `${hasMultiple ? 'These changes have' : 'This change has'} been approved`; return { hasMultiple ? : } ; }