From 6ec846d25e6c4b671ae3ebe50b8e6ca022c2b71d Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Sun, 14 Jun 2020 11:23:22 +0200 Subject: [PATCH] Sort payouts from oldest to newest (#2952) --- .../page-staking/src/Payouts/PayButton.tsx | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/packages/page-staking/src/Payouts/PayButton.tsx b/packages/page-staking/src/Payouts/PayButton.tsx index 14b3fc901a..738da1dfc5 100644 --- a/packages/page-staking/src/Payouts/PayButton.tsx +++ b/packages/page-staking/src/Payouts/PayButton.tsx @@ -3,6 +3,7 @@ // of the Apache-2.0 license. See the LICENSE file for details. import { SubmittableExtrinsic } from '@polkadot/api/types'; +import { EraIndex } from '@polkadot/types/interfaces'; import { PayoutValidator } from './types'; import React, { useState, useEffect } from 'react'; @@ -20,6 +21,11 @@ interface Props { payout?: PayoutValidator | PayoutValidator[]; } +interface SinglePayout { + era: EraIndex; + validatorId: string; +} + function createExtrinsic (api: ApiPromise, payout: PayoutValidator | PayoutValidator[]): SubmittableExtrinsic<'promise'> | null { if (Array.isArray(payout)) { if (payout.length === 1) { @@ -27,11 +33,17 @@ function createExtrinsic (api: ApiPromise, payout: PayoutValidator | PayoutValid } return api.tx.utility.batch( - payout.reduce((calls: SubmittableExtrinsic<'promise'>[], { eras, validatorId }): SubmittableExtrinsic<'promise'>[] => - calls.concat( - ...eras.map(({ era }) => api.tx.staking.payoutStakers(validatorId, era)) - ), [] - ).filter((_, index) => index < MAX_BATCH_SIZE) + payout + .reduce((payouts: SinglePayout[], { eras, validatorId }): SinglePayout[] => { + eras.forEach(({ era }): void => { + payouts.push({ era, validatorId }); + }); + + return payouts; + }, []) + .sort((a, b) => a.era.cmp(b.era)) + .filter((_, index) => index < MAX_BATCH_SIZE) + .map(({ era, validatorId }) => api.tx.staking.payoutStakers(validatorId, era)) ); } @@ -41,8 +53,9 @@ function createExtrinsic (api: ApiPromise, payout: PayoutValidator | PayoutValid ? api.tx.staking.payoutStakers(validatorId, eras[0].era) : api.tx.utility.batch( eras - .map(({ era }) => api.tx.staking.payoutStakers(validatorId, era)) + .sort((a, b) => a.era.cmp(b.era)) .filter((_, index) => index < MAX_BATCH_SIZE) + .map(({ era }) => api.tx.staking.payoutStakers(validatorId, era)) ); }