Add info message to stalled eras (on unbonding tooltip) (#9401)

This commit is contained in:
Jaco 2023-05-03 09:33:02 +03:00 committed by GitHub
parent 900d086fa1
commit 1879a37f53
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 6 deletions

2
.nvmrc
View File

@ -1 +1 @@
16 18.15

View File

@ -30,11 +30,12 @@ interface Props {
stakingInfo?: DeriveStakingAccountPartial; stakingInfo?: DeriveStakingAccountPartial;
} }
function extractTotals (stakingInfo?: DeriveStakingAccountPartial, progress?: DeriveSessionProgress): [[Unlocking, BN, BN][], BN] { function extractTotals (stakingInfo?: DeriveStakingAccountPartial, progress?: DeriveSessionProgress): [[Unlocking, BN, BN][], BN, boolean] {
if (!stakingInfo?.unlocking || !progress) { if (!stakingInfo?.unlocking || !progress) {
return [[], BN_ZERO]; return [[], BN_ZERO, false];
} }
const isStalled = progress.eraProgress.gt(BN_ZERO) && progress.eraProgress.gt(progress.eraLength);
const mapped = stakingInfo.unlocking const mapped = stakingInfo.unlocking
.filter(({ remainingEras, value }) => value.gt(BN_ZERO) && remainingEras.gt(BN_ZERO)) .filter(({ remainingEras, value }) => value.gt(BN_ZERO) && remainingEras.gt(BN_ZERO))
.map((unlock): [Unlocking, BN, BN] => [ .map((unlock): [Unlocking, BN, BN] => [
@ -44,11 +45,24 @@ function extractTotals (stakingInfo?: DeriveStakingAccountPartial, progress?: De
.sub(BN_ONE) .sub(BN_ONE)
.imul(progress.eraLength) .imul(progress.eraLength)
.iadd(progress.eraLength) .iadd(progress.eraLength)
.isub(progress.eraProgress) .isub(
// in the case of a stalled era, this would not be accurate. We apply the mod here
// otherwise we would enter into negative values (which is "accurate" since we are
// overdue, but confusing since it implied it needed to be done already).
//
// This does mean that in cases of era stalls we would have an jiggling time, i.e.
// would be down and then when a session completes, would be higher again, just to
// repeat the cycle again
//
// See https://github.com/polkadot-js/apps/issues/9397#issuecomment-1532465939
isStalled
? progress.eraProgress.mod(progress.eraLength)
: progress.eraProgress
)
]); ]);
const total = mapped.reduce((total, [{ value }]) => total.iadd(value), new BN(0)); const total = mapped.reduce((total, [{ value }]) => total.iadd(value), new BN(0));
return [mapped, total]; return [mapped, total, isStalled];
} }
function StakingUnbonding ({ className = '', iconPosition = 'left', stakingInfo }: Props): React.ReactElement<Props> | null { function StakingUnbonding ({ className = '', iconPosition = 'left', stakingInfo }: Props): React.ReactElement<Props> | null {
@ -56,7 +70,7 @@ function StakingUnbonding ({ className = '', iconPosition = 'left', stakingInfo
const progress = useCall<DeriveSessionProgress>(api.derive.session.progress); const progress = useCall<DeriveSessionProgress>(api.derive.session.progress);
const { t } = useTranslation(); const { t } = useTranslation();
const [mapped, total] = useMemo( const [mapped, total, isStalled] = useMemo(
() => extractTotals(stakingInfo, progress), () => extractTotals(stakingInfo, progress),
[progress, stakingInfo] [progress, stakingInfo]
); );
@ -95,6 +109,9 @@ function StakingUnbonding ({ className = '', iconPosition = 'left', stakingInfo
: t<string>('{{eras}} eras remaining', { replace: { eras: formatNumber(eras) } }) : t<string>('{{eras}} eras remaining', { replace: { eras: formatNumber(eras) } })
} }
</div> </div>
{isStalled && (
<div className='faded'>{t<string>('Era is overdue for completion due to current network operating conditions')}</div>
)}
</div> </div>
))} ))}
</Tooltip> </Tooltip>