diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Balances/total/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/components/Balances/total/selectors.ts index cae28069021..c83d071b332 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Balances/total/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/components/Balances/total/selectors.ts @@ -8,6 +8,7 @@ import { getBtcBalance as getBtcWalletBalance, getEthBalance as getEthWalletBalance, getFiatBalance, + getFiatBalanceInfo, getPaxBalance as getPaxWalletBalance, getUsdtBalance as getUsdtWalletBalance, getXlmBalance as getXlmWalletBalance @@ -230,6 +231,7 @@ export const getTotalBalance = createDeepEqualSelector( getPaxBalanceInfo, getUsdtBalanceInfo, getXlmBalanceInfo, + getFiatBalanceInfo, selectors.core.settings.getCurrency, selectors.router.getPathname ], @@ -241,6 +243,7 @@ export const getTotalBalance = createDeepEqualSelector( paxBalanceInfoR, usdtBalanceInfoR, xlmBalanceInfoR, + fiatBalanceInfoR, currency, path ) => { @@ -252,6 +255,7 @@ export const getTotalBalance = createDeepEqualSelector( paxBalance, usdtBalance, xlmBalance, + fiatBalance, currency ) => { const total = Currency.formatFiat( @@ -261,7 +265,8 @@ export const getTotalBalance = createDeepEqualSelector( Number(algoBalance) + Number(xlmBalance) + Number(usdtBalance) + - Number(paxBalance) + Number(paxBalance) + + Number(fiatBalance) ) const totalBalance = `${Exchange.getSymbol(currency)}${total}` return { totalBalance, path } @@ -274,6 +279,7 @@ export const getTotalBalance = createDeepEqualSelector( paxBalanceInfoR, usdtBalanceInfoR, xlmBalanceInfoR, + fiatBalanceInfoR, currency ) } diff --git a/packages/blockchain-wallet-v4-frontend/src/components/Balances/wallet/selectors.ts b/packages/blockchain-wallet-v4-frontend/src/components/Balances/wallet/selectors.ts index 5f6665549bc..610b86cfc79 100644 --- a/packages/blockchain-wallet-v4-frontend/src/components/Balances/wallet/selectors.ts +++ b/packages/blockchain-wallet-v4-frontend/src/components/Balances/wallet/selectors.ts @@ -1,10 +1,13 @@ import { add, curry, lift, pathOr, prop, reduce } from 'ramda' import { + ExtractSuccess, InterestAccountBalanceType, InvitationsType, RemoteDataType, SBBalancesType, + SBBalanceType, WalletCurrencyType, + WalletFiatEnum, WalletFiatType } from 'core/types' @@ -213,7 +216,10 @@ export const getAlgoBalance = createDeepEqualSelector( ) export const getFiatBalance = curry( - (currency: WalletFiatType, state: RootState) => { + ( + currency: WalletFiatType, + state: RootState + ): RemoteDataType => { const sbBalancesR = selectors.components.simpleBuy.getSBBalances(state) const fiatBalance = sbBalancesR.getOrElse({ @@ -338,6 +344,46 @@ export const getAlgoBalanceInfo = createDeepEqualSelector( } ) +export const getFiatBalanceInfo = createDeepEqualSelector( + [ + selectors.core.data.btc.getRates, + selectors.core.settings.getCurrency, + selectors.components.simpleBuy.getSBBalances + ], + (btcRatesR, currencyR, sbBalancesR) => { + const transform = ( + rates, + currency, + sbBalances: ExtractSuccess + ) => { + const keys = Object.keys(WalletFiatEnum).filter( + value => typeof WalletFiatEnum[value] === 'number' + ) + + // @ts-ignore + const balances = keys.map((value: WalletFiatType) => { + const standard = convertBaseToStandard( + 'FIAT', + sbBalances[value]?.available || '0' + ) + + if (value === currency) return Number(standard) + + return Exchange.convertFiatToFiat({ + value: standard, + fromCurrency: value, + toCurrency: currency, + rates + }).value + }) + + return balances.reduce(add, 0) + } + + return lift(transform)(btcRatesR, currencyR, sbBalancesR) + } +) + export const getTotalBalance = createDeepEqualSelector( [ getBchBalanceInfo, @@ -345,6 +391,7 @@ export const getTotalBalance = createDeepEqualSelector( getEthBalanceInfo, getPaxBalanceInfo, getXlmBalanceInfo, + getFiatBalanceInfo, selectors.core.settings.getCurrency ], ( @@ -353,6 +400,7 @@ export const getTotalBalance = createDeepEqualSelector( ethBalanceInfoR, paxBalanceInfoR, xlmBalanceInfoR, + fiatBalanceInfoR, currency ) => { const transform = ( @@ -361,6 +409,7 @@ export const getTotalBalance = createDeepEqualSelector( ethBalance, paxBalance, xlmBalance, + fiatBalance, currency ) => { const total = formatFiat( @@ -368,7 +417,8 @@ export const getTotalBalance = createDeepEqualSelector( Number(ethBalance) + Number(bchBalance) + Number(paxBalance) + - Number(xlmBalance) + Number(xlmBalance) + + Number(fiatBalance) ) const totalBalance = `${Exchange.getSymbol(currency)}${total}` return { totalBalance } @@ -379,6 +429,7 @@ export const getTotalBalance = createDeepEqualSelector( ethBalanceInfoR, paxBalanceInfoR, xlmBalanceInfoR, + fiatBalanceInfoR, currency ) } diff --git a/packages/blockchain-wallet-v4-frontend/src/scenes/Home/Balances/Table/template.tsx b/packages/blockchain-wallet-v4-frontend/src/scenes/Home/Balances/Table/template.tsx index 41d92b1c604..94131f06b8a 100644 --- a/packages/blockchain-wallet-v4-frontend/src/scenes/Home/Balances/Table/template.tsx +++ b/packages/blockchain-wallet-v4-frontend/src/scenes/Home/Balances/Table/template.tsx @@ -52,6 +52,7 @@ const Success = (props: Props & SuccessStateType) => { const link = viewType === 'Hardware' ? '/lockbox' : coin.txListAppRoute return ( + coin.method && coin.invited && (