diff --git a/packages/page-council/src/Motions/Slashing.tsx b/packages/page-council/src/Motions/Slashing.tsx index c8c1f67e1f..1770e4b529 100644 --- a/packages/page-council/src/Motions/Slashing.tsx +++ b/packages/page-council/src/Motions/Slashing.tsx @@ -54,7 +54,7 @@ function Slashing ({ className = '', isMember, members }: Props): React.ReactEle useEffect((): void => { const actioned = selectedEra && slashes && slashes.find(([era]) => era.eqn(selectedEra)); const proposal = actioned - ? api.tx.staking.cancelDeferredSlash(actioned[0], actioned[1].map((_, index): number => index)) + ? api.tx.staking.cancelDeferredSlash(actioned[0], actioned[1].map((_, index) => index)) : null; setProposal({ diff --git a/packages/page-staking/src/Slashes/Era.tsx b/packages/page-staking/src/Slashes/Era.tsx index 37d7a826ba..86e44b0a23 100644 --- a/packages/page-staking/src/Slashes/Era.tsx +++ b/packages/page-staking/src/Slashes/Era.tsx @@ -21,10 +21,15 @@ interface Props { slash: SlashEra; } +interface Proposal { + length: number; + proposal: SubmittableExtrinsic<'promise'> +} + interface Selected { selected: number[]; - txAll: SubmittableExtrinsic<'promise'> | null; - txSome: SubmittableExtrinsic<'promise'> | null; + txAll: Proposal | null; + txSome: Proposal | null; } function Slashes ({ buttons, councilId, councilThreshold, slash }: Props): React.ReactElement | null { @@ -33,7 +38,13 @@ function Slashes ({ buttons, councilId, councilThreshold, slash }: Props): React 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) || null, txSome: null }; + return { + selected: [], + txAll: isFunction(api.tx.council?.propose) + ? { length: proposal.encodedLength, proposal } + : null, + txSome: null + }; }); const headerRef = useRef<[string?, string?, number?][]>([ @@ -54,11 +65,16 @@ function Slashes ({ buttons, councilId, councilThreshold, slash }: Props): React const proposal = selected.length ? api.tx.staking.cancelDeferredSlash(slash.era, selected) : null; - const txSome = proposal && api.tx.council?.propose(councilThreshold, proposal, proposal.encodedLength); - return { selected, txAll: state.txAll, txSome: txSome || null }; + return { + selected, + txAll: state.txAll, + txSome: proposal && isFunction(api.tx.council?.propose) + ? { length: proposal.encodedLength, proposal } + : null + }; }), - [api, councilThreshold, slash] + [api, slash] ); return ( @@ -70,17 +86,27 @@ function Slashes ({ buttons, councilId, councilThreshold, slash }: Props): React <> )} diff --git a/packages/react-components/src/types.ts b/packages/react-components/src/types.ts index e371389506..e239f68311 100644 --- a/packages/react-components/src/types.ts +++ b/packages/react-components/src/types.ts @@ -42,7 +42,7 @@ export interface TxButtonProps { onStart?: () => void; onSuccess?: TxCallback; onUpdate?: TxCallback; - params?: any[] | (() => any[]); + params?: any[] | (() => any[]) | null; tooltip?: string; tx?: ((...args: any[]) => SubmittableExtrinsic<'promise'>) | null; withoutLink?: boolean;