From 506cec434be8a7f2120dcd07813b98c0aff1c14e Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Fri, 4 Sep 2020 11:15:25 +0200 Subject: [PATCH] Add cancel all to slashes page (#3607) --- packages/page-staking/src/Slashes/Era.tsx | 25 ++++++++++++++----- .../react-components/src/Button/Button.tsx | 4 +-- packages/react-components/src/Button/types.ts | 1 + packages/react-components/src/Table/Body.tsx | 4 +-- packages/react-components/src/TxButton.tsx | 3 ++- packages/react-components/src/styles/index.ts | 2 +- packages/react-components/src/types.ts | 1 + 7 files changed, 28 insertions(+), 12 deletions(-) diff --git a/packages/page-staking/src/Slashes/Era.tsx b/packages/page-staking/src/Slashes/Era.tsx index 3d1552340e..afb09d799c 100644 --- a/packages/page-staking/src/Slashes/Era.tsx +++ b/packages/page-staking/src/Slashes/Era.tsx @@ -21,13 +21,18 @@ interface Props { interface Selected { selected: number[]; - tx: SubmittableExtrinsic<'promise'> | null; + txAll: SubmittableExtrinsic<'promise'>; + txSome: SubmittableExtrinsic<'promise'> | null; } function Slashes ({ councilId, councilThreshold, slash }: Props): React.ReactElement | null { const { t } = useTranslation(); const { api } = useApi(); - const [{ selected, tx }, setSelected] = useState({ selected: [], tx: null }); + const [{ selected, txAll, txSome }, setSelected] = useState((): Selected => { + const proposal = api.tx.staking.cancelDeferredSlash(slash.era, slash.slashes.map((_, index) => index)); + + return { selected: [], txAll: api.tx.council.propose(councilThreshold, proposal, proposal.encodedLength), txSome: null }; + }); const headerRef = useRef<[string?, string?, number?][]>([ [undefined, 'start', 3], @@ -47,11 +52,11 @@ function Slashes ({ councilId, councilThreshold, slash }: Props): React.ReactEle const proposal = selected.length ? api.tx.staking.cancelDeferredSlash(slash.era, selected) : null; - const tx = proposal + const txSome = proposal ? api.tx.council.propose(councilThreshold, proposal, proposal.encodedLength) : null; - return { selected, tx }; + return { selected, txAll: state.txAll, txSome }; }), [api, councilThreshold, slash] ); @@ -63,10 +68,18 @@ function Slashes ({ councilId, councilThreshold, slash }: Props): React.ReactEle + )} diff --git a/packages/react-components/src/Button/Button.tsx b/packages/react-components/src/Button/Button.tsx index 3a41a3518f..dee4c77c24 100644 --- a/packages/react-components/src/Button/Button.tsx +++ b/packages/react-components/src/Button/Button.tsx @@ -10,7 +10,7 @@ import styled from 'styled-components'; import Icon from '../Icon'; import Spinner from '../Spinner'; -function Button ({ children, className = '', icon, isBasic, isBusy, isCircular, isDisabled, isFull, isIcon, isSelected, label, onClick, onMouseEnter, onMouseLeave, tabIndex, withoutLink }: ButtonProps): React.ReactElement { +function Button ({ children, className = '', icon, isBasic, isBusy, isCircular, isDisabled, isFull, isIcon, isSelected, isToplevel, label, onClick, onMouseEnter, onMouseLeave, tabIndex, withoutLink }: ButtonProps): React.ReactElement { const _onClick = useCallback( () => !(isBusy || isDisabled) && onClick && onClick(), [isBusy, isDisabled, onClick] @@ -18,7 +18,7 @@ function Button ({ children, className = '', icon, isBasic, isBusy, isCircular, return (