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(