diff --git a/packages/app-society/src/Overview/Summary.tsx b/packages/app-society/src/Overview/Summary.tsx index 719279143ec0..d574804d4911 100644 --- a/packages/app-society/src/Overview/Summary.tsx +++ b/packages/app-society/src/Overview/Summary.tsx @@ -9,7 +9,7 @@ import React from 'react'; import styled from 'styled-components'; import { AccountIndex, IdentityIcon, SummaryBox, CardSummary } from '@polkadot/react-components'; import { useApi, useCall } from '@polkadot/react-hooks'; -import { formatBalance } from '@polkadot/util'; +import { FormatBalance } from '@polkadot/react-query'; import { useTranslation } from '../translate'; @@ -90,10 +90,10 @@ function Summary ({ className }: Props): React.ReactElement { )}
- {pot - ? <>{formatBalance(pot, { withSi: false })}{formatBalance.calcSi(pot).value} - : '-' - } +
diff --git a/packages/app-staking/src/Targets/Summary.tsx b/packages/app-staking/src/Targets/Summary.tsx index 40f216c16a85..6ee1b61d8a07 100644 --- a/packages/app-staking/src/Targets/Summary.tsx +++ b/packages/app-staking/src/Targets/Summary.tsx @@ -8,7 +8,7 @@ import BN from 'bn.js'; import React, { useEffect, useState } from 'react'; import { SummaryBox, CardSummary } from '@polkadot/react-components'; import { useApi, useCall } from '@polkadot/react-hooks'; -import { formatBalance } from '@polkadot/util'; +import { FormatBalance } from '@polkadot/react-query'; import { useTranslation } from '../translate'; @@ -19,29 +19,18 @@ interface Props { interface StakeInfo { percentage: string; - staked: string | null; } export default function Summary ({ lastReward, totalStaked }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); const totalInsurance = useCall(api.query.balances.totalIssuance, []); - const [{ percentage, staked }, setStakeInfo] = useState({ percentage: '-', staked: null }); - const [total, setTotal] = useState(null); - - useEffect((): void => { - if (totalInsurance) { - setTotal( - `${formatBalance(totalInsurance, { withSi: false })}${formatBalance.calcSi(totalInsurance.toString()).value}` - ); - } - }, [totalInsurance]); + const [{ percentage }, setStakeInfo] = useState({ percentage: '-' }); useEffect((): void => { if (totalInsurance && totalStaked?.gtn(0)) { setStakeInfo({ - percentage: `${(totalStaked.muln(10000).div(totalInsurance).toNumber() / 100).toFixed(2)}%`, - staked: `${formatBalance(totalStaked, { withSi: false })}${formatBalance.calcSi(totalStaked.toString()).value}` + percentage: `${(totalStaked.muln(10000).div(totalInsurance).toNumber() / 100).toFixed(2)}%` }); } }, [totalInsurance, totalStaked]); @@ -50,22 +39,27 @@ export default function Summary ({ lastReward, totalStaked }: Props): React.Reac
- {staked || '-'} + / - {total || '-'} +
{percentage} - { - lastReward.gtn(0) - ? `${formatBalance(lastReward, { withSi: false })}` - : '-' - } +
); diff --git a/packages/app-treasury/src/Overview/Summary.tsx b/packages/app-treasury/src/Overview/Summary.tsx index 717a7d4eae87..8ce724bd2a88 100644 --- a/packages/app-treasury/src/Overview/Summary.tsx +++ b/packages/app-treasury/src/Overview/Summary.tsx @@ -6,7 +6,8 @@ import BN from 'bn.js'; import React from 'react'; import { SummaryBox, CardSummary } from '@polkadot/react-components'; import { useApi, useCall } from '@polkadot/react-hooks'; -import { formatBalance, formatNumber, stringToU8a } from '@polkadot/util'; +import { FormatBalance } from '@polkadot/react-query'; +import { formatNumber, stringToU8a } from '@polkadot/util'; import { useTranslation } from '../translate'; @@ -41,7 +42,10 @@ export default function Summary ({ approvalCount, proposalCount }: Props): React
{value && ( - {formatBalance(value, { withSi: false })}{formatBalance.calcSi(value).value} + )}
diff --git a/packages/react-components/src/CardSummary.tsx b/packages/react-components/src/CardSummary.tsx index 63ef0732b1f9..bcb39162c8c4 100644 --- a/packages/react-components/src/CardSummary.tsx +++ b/packages/react-components/src/CardSummary.tsx @@ -87,6 +87,10 @@ export default styled(CardSummary)` justify-content: flex-end; padding: 0rem 1.5rem 0.5rem 1.5rem; + .ui--FormatBalance .balance-postfix { + opacity: 1; + } + > div { font-size: 2.1rem; font-weight: 100; diff --git a/packages/react-query/src/FormatBalance.tsx b/packages/react-query/src/FormatBalance.tsx index c32f6aab970a..500f6b3b6ddb 100644 --- a/packages/react-query/src/FormatBalance.tsx +++ b/packages/react-query/src/FormatBalance.tsx @@ -14,6 +14,7 @@ interface Props extends BareProps { children?: React.ReactNode; label?: React.ReactNode; value?: Compact | BN | string | null; + withSi?: boolean; } // for million, 2 * 3-grouping + comma @@ -30,14 +31,28 @@ function format (value: Compact | BN | string, currency: string): React.Rea return <>{prefix}.{`000${postfix || ''}`.slice(-3)} {currency}; } -function FormatBalance ({ children, className, label, value }: Props): React.ReactElement { +function formatSi (value: Compact | BN | string): React.ReactNode { + const strValue = ((value as Compact).toBn ? (value as Compact).toBn() : value).toString(); + const [prefix, postfix] = strValue === '0' + ? ['0', '0'] + : formatBalance(value, { withSi: false }).split('.'); + const unit = strValue === '0' + ? '' + : formatBalance.calcSi(strValue).value; + + return <>{prefix}.{`000${postfix || ''}`.slice(-3)}{unit === '-' ? '' : unit}; +} + +function FormatBalance ({ children, className, label, value, withSi }: Props): React.ReactElement { const [currency] = useState(formatBalance.getDefaults().unit); return (
{label || ''}{ value - ? format(value, currency) + ? withSi + ? formatSi(value) + : format(value, currency) : '-' }{children}
diff --git a/packages/react-query/src/TotalIssuance.tsx b/packages/react-query/src/TotalIssuance.tsx index 4465b16c350b..66013d4a88fd 100644 --- a/packages/react-query/src/TotalIssuance.tsx +++ b/packages/react-query/src/TotalIssuance.tsx @@ -3,11 +3,10 @@ // of the Apache-2.0 license. See the LICENSE file for details. import { BareProps } from '@polkadot/react-api/types'; -import { Balance } from '@polkadot/types/interfaces'; import React from 'react'; import { useApi, useCall } from '@polkadot/react-hooks'; -import { formatBalance } from '@polkadot/util'; +import FormatBalance from './FormatBalance'; interface Props extends BareProps { children?: React.ReactNode; @@ -16,21 +15,19 @@ interface Props extends BareProps { export default function TotalIssuance ({ children, className, label, style }: Props): React.ReactElement { const { api } = useApi(); - const totalIssuance = useCall(api.query.balances.totalIssuance, [], { - transform: (totalIssuance: Balance): string => - totalIssuance?.toString() - }); + const totalIssuance = useCall(api.query.balances.totalIssuance, []); return (
- {label || ''}{ - totalIssuance - ? `${formatBalance(totalIssuance, { withSi: false })}${formatBalance.calcSi(totalIssuance).value}` - : '-' - }{children} + {label || ''} + + {children}
); }