diff --git a/packages/page-staking/src/Targets/Validator.tsx b/packages/page-staking/src/Targets/Validator.tsx index 8d15301561..8cdd2d6481 100644 --- a/packages/page-staking/src/Targets/Validator.tsx +++ b/packages/page-staking/src/Targets/Validator.tsx @@ -7,7 +7,7 @@ import { ValidatorInfo } from '../types'; import React, { useCallback, useEffect, useState } from 'react'; import { ApiPromise } from '@polkadot/api'; -import { AddressSmall, Icon, Toggle } from '@polkadot/react-components'; +import { AddressSmall, Badge, Icon, Toggle } from '@polkadot/react-components'; import { FormatBalance } from '@polkadot/react-query'; import { useApi, useCall } from '@polkadot/react-hooks'; import { formatNumber } from '@polkadot/util'; @@ -75,7 +75,7 @@ function Validator ({ canSelect, info, isSelected, toggleFavorite, toggleSelecte return null; } - const { accountId, bondOther, bondOwn, bondTotal, commissionPer, isCommission, isFavorite, isNominating, key, numNominators, rankOverall, rewardPayout, validatorPayment } = info; + const { accountId, bondOther, bondOwn, bondTotal, commissionPer, isCommission, isElected, isFavorite, isNominating, key, numNominators, rankOverall, rewardPayout, validatorPayment } = info; return ( @@ -84,7 +84,14 @@ function Validator ({ canSelect, info, isSelected, toggleFavorite, toggleSelecte isFavorite={isFavorite} toggleFavorite={toggleFavorite} /> - + + {isElected && ( + } + isInline + type='next' + /> + )} {formatNumber(rankOverall)} diff --git a/packages/page-staking/src/types.ts b/packages/page-staking/src/types.ts index c2b9d7e9a8..546ac19651 100644 --- a/packages/page-staking/src/types.ts +++ b/packages/page-staking/src/types.ts @@ -48,6 +48,7 @@ export interface ValidatorInfo extends ValidatorInfoRank { commissionPer: number; hasIdentity: boolean; isCommission: boolean; + isElected: boolean; isFavorite: boolean; isNominating: boolean; key: string; diff --git a/packages/page-staking/src/useSortedTargets.ts b/packages/page-staking/src/useSortedTargets.ts index b1c951479e..f69c52ba6b 100644 --- a/packages/page-staking/src/useSortedTargets.ts +++ b/packages/page-staking/src/useSortedTargets.ts @@ -65,7 +65,7 @@ function sortValidators (list: ValidatorInfo[]): ValidatorInfo[] { ); } -function extractSingle (allAccounts: string[], amount: BN = baseBalance(), { info }: DeriveStakingElected | DeriveStakingWaiting, favorites: string[], perValidatorReward: BN): [ValidatorInfo[], string[], BN] { +function extractSingle (allAccounts: string[], amount: BN = baseBalance(), { info }: DeriveStakingElected | DeriveStakingWaiting, favorites: string[], perValidatorReward: BN, isElected: boolean): [ValidatorInfo[], string[], BN] { const nominators: string[] = []; let totalStaked = BN_ZERO; const list = info.map(({ accountId, exposure: _exposure, stakingLedger, validatorPrefs }): ValidatorInfo => { @@ -114,6 +114,7 @@ function extractSingle (allAccounts: string[], amount: BN = baseBalance(), { inf commissionPer: (((prefs as ValidatorPrefs).commission?.unwrap() || BN_ZERO).toNumber() / 10_000_000), hasIdentity: false, isCommission: !!(prefs as ValidatorPrefs).commission, + isElected, isFavorite: favorites.includes(key), isNominating, key, @@ -137,8 +138,8 @@ function extractSingle (allAccounts: string[], amount: BN = baseBalance(), { inf function extractInfo (allAccounts: string[], amount: BN = baseBalance(), electedDerive: DeriveStakingElected, waitingDerive: DeriveStakingWaiting, favorites: string[], lastReward = BN_ONE): Partial { const perValidatorReward = lastReward.divn(electedDerive.info.length); - const [elected, nominators, totalStaked] = extractSingle(allAccounts, amount, electedDerive, favorites, perValidatorReward); - const [waiting] = extractSingle(allAccounts, amount, waitingDerive, favorites, perValidatorReward); + const [elected, nominators, totalStaked] = extractSingle(allAccounts, amount, electedDerive, favorites, perValidatorReward, true); + const [waiting] = extractSingle(allAccounts, amount, waitingDerive, favorites, perValidatorReward, false); const validators = sortValidators(elected.concat(waiting)); return { nominators, totalStaked, validators };