/* eslint-disable @typescript-eslint/camelcase */ // Copyright 2017-2019 @polkadot/react-components authors & contributors // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. import { DerivedBalances, DerivedStaking } from '@polkadot/api-derive/types'; import { ValidatorPrefs0to145 } from '@polkadot/types/interfaces'; import { BareProps, I18nProps } from './types'; import BN from 'bn.js'; import React from 'react'; import styled from 'styled-components'; import { formatBalance, formatNumber } from '@polkadot/util'; import { Icon, Tooltip, TxButton } from '@polkadot/react-components'; import { withCalls, withMulti } from '@polkadot/react-api'; import CryptoType from './CryptoType'; import Label from './Label'; import translate from './translate'; // true to display, or (for bonded) provided values [own, ...all extras] export interface BalanceActiveType { available?: boolean; bonded?: boolean | BN[]; free?: boolean; redeemable?: boolean; unlocking?: boolean; } export interface CryptoActiveType { crypto?: boolean; nonce?: boolean; } export interface ValidatorPrefsType { unstakeThreshold?: boolean; validatorPayment?: boolean; } interface Props extends BareProps, I18nProps { address: string; balances_all?: DerivedBalances; children?: React.ReactNode; staking_info?: DerivedStaking; withBalance?: boolean | BalanceActiveType; withExtended?: boolean | CryptoActiveType; withHexSessionId: string | null; withRewardDestination?: boolean; withValidatorPrefs?: boolean | ValidatorPrefsType; } // either true (filtered above already) or [own, ...all extras bonded funds from nominators] function renderBonded ({ staking_info, t }: Props, bonded: true | BN[]): React.ReactNode { let value; if (Array.isArray(bonded)) { // Get the sum of funds bonded by any nominator (if available) const extras = bonded.filter((_, index): boolean => index !== 0); const extra = extras.reduce((total, value): BN => total.add(value), new BN(0)).gtn(0) ? `(+${extras.map((bonded): string => formatBalance(bonded)).join(', ')})` : ''; value = `${formatBalance(bonded[0])} ${extra}`; } else if (staking_info && staking_info.stakingLedger && staking_info.accountId.eq(staking_info.stashId)) { value = formatBalance(staking_info.stakingLedger.active); } return value ? ( <>