From 3d7c08c689c2f6697e3dd5dad5fc88c2880a7904 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 24 Jun 2020 22:28:03 +0200 Subject: [PATCH] Loading on payout era toggle (#3045) * Loading on payout era toggle * Some in-place BN adjustments * More in-place additions --- CHANGELOG.md | 1 + packages/page-staking/src/Payouts/index.tsx | 10 +++++----- packages/page-staking/src/Payouts/useEraBlocks.ts | 14 ++++++++------ packages/react-hooks/src/useOwnEraRewards.ts | 8 +++++++- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52d5c33dbe..44153d1d2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## 0.47.0-beta.x +- Default (via toggle) to only last 25% of eras for payouts - Allow retracting of tips by proposer - Enable the full retrieval of all Map/Doublemap entries diff --git a/packages/page-staking/src/Payouts/index.tsx b/packages/page-staking/src/Payouts/index.tsx index 694f33a59b..4e16248419 100644 --- a/packages/page-staking/src/Payouts/index.tsx +++ b/packages/page-staking/src/Payouts/index.tsx @@ -98,7 +98,7 @@ function Payouts ({ className = '', isInElection }: Props): React.ReactElement

(api.query.staking.historyDepth, []); const stakerPayoutsAfter = useStakerPayouts(); - const { allRewards } = useOwnEraRewards(!historyDepth || isPartialEras ? partialEras : historyDepth.toNumber()); + const { allRewards, isLoadingRewards } = useOwnEraRewards(!historyDepth || isPartialEras ? partialEras : historyDepth.toNumber()); const { t } = useTranslation(); const isDisabled = isInElection || !isFunction(api.tx.utility?.batch); @@ -176,13 +176,13 @@ function Payouts ({ className = '', isInElection }: Props): React.ReactElement

('No pending payouts for your stashes')} + empty={!isLoadingRewards && stashes && t('No pending payouts for your stashes')} emptySpinner={t('Retrieving info for all applicable eras, this will take some time')} footer={footer} header={headerStashes} isFixed > - {stashes?.map((payout): React.ReactNode => ( + {!isLoadingRewards && stashes?.map((payout): React.ReactNode => ( ))}
- {api.tx.staking.payoutStakers && validators && (validators.length !== 0) && ( + {api.tx.staking.payoutStakers && !isLoadingRewards && validators && (validators.length !== 0) && ( - {validators.map((payout): React.ReactNode => ( + {!isLoadingRewards && validators.map((payout): React.ReactNode => ( { depth && era && forcing && progress && progress.sessionLength.gt(BN_ONE) && setDuration( - (forcing.isForceAlways - ? progress.sessionLength - : progress.eraLength + ( + forcing.isForceAlways + ? progress.sessionLength + : progress.eraLength ).mul( depth - .sub(progress.activeEra.sub(era)) - .add(BN_ONE) - ).sub( + .sub(progress.activeEra) + .iadd(era) + .iadd(BN_ONE) + ).isub( forcing.isForceAlways ? progress.sessionProgress : progress.eraProgress diff --git a/packages/react-hooks/src/useOwnEraRewards.ts b/packages/react-hooks/src/useOwnEraRewards.ts index aeb13b57db..c008264921 100644 --- a/packages/react-hooks/src/useOwnEraRewards.ts +++ b/packages/react-hooks/src/useOwnEraRewards.ts @@ -14,6 +14,7 @@ import { useOwnStashIds } from './useOwnStashes'; interface OwnRewards { allRewards?: Record; + isLoadingRewards: boolean; rewardCount: number; } @@ -26,6 +27,7 @@ function getRewards ([[stashIds], available]: [[string[]], DeriveStakerReward[][ return { allRewards, + isLoadingRewards: false, rewardCount: Object.values(allRewards).filter((rewards) => rewards.length !== 0).length }; } @@ -37,7 +39,11 @@ export default function useOwnEraRewards (maxEras = 1000): OwnRewards { const allEras = useCall(api.derive.staking?.erasHistoric, []); const [filteredEras, setFilteredEras] = useState([]); const available = useCall<[[string[]], DeriveStakerReward[][]]>((filteredEras?.length > 0) && stashIds && api.derive.staking?.stakerRewardsMultiEras, [stashIds, filteredEras], { withParams: true }); - const [state, setState] = useState({ rewardCount: 0 }); + const [state, setState] = useState({ isLoadingRewards: true, rewardCount: 0 }); + + useEffect((): void => { + setState({ isLoadingRewards: true, rewardCount: 0 }); + }, [maxEras]); useEffect((): void => { mountedRef.current && available && setState(