diff --git a/features/account/api/src/main/java/com/tangem/features/account/PortfolioFetcher.kt b/features/account/api/src/main/java/com/tangem/features/account/PortfolioFetcher.kt index 04f8f337a4..1884981a50 100644 --- a/features/account/api/src/main/java/com/tangem/features/account/PortfolioFetcher.kt +++ b/features/account/api/src/main/java/com/tangem/features/account/PortfolioFetcher.kt @@ -21,12 +21,17 @@ interface PortfolioFetcher { data class Data( val appCurrency: AppCurrency, val isBalanceHidden: Boolean, - val balances: Map, + val balances: Map, ) { val isSingleChoice: Boolean = balances.values .map { it.accountsBalance.accountStatuses } .flatten().size == 1 + + fun isSingleChoice(walletId: UserWalletId): Boolean = balances[walletId] + ?.accountsBalance + ?.accountStatuses + ?.size == 1 } data class PortfolioBalance( diff --git a/features/account/impl/src/main/java/com/tangem/features/account/fetcher/DefaultPortfolioFetcher.kt b/features/account/impl/src/main/java/com/tangem/features/account/fetcher/DefaultPortfolioFetcher.kt index b8d6318fe9..fcdd27ea9d 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/fetcher/DefaultPortfolioFetcher.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/fetcher/DefaultPortfolioFetcher.kt @@ -6,6 +6,7 @@ import com.tangem.domain.account.status.supplier.SingleAccountStatusListSupplier import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase import com.tangem.domain.balancehiding.GetBalanceHidingSettingsUseCase import com.tangem.domain.models.wallet.UserWallet +import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.models.wallet.isMultiCurrency import com.tangem.domain.wallets.usecase.GetWalletsUseCase import com.tangem.features.account.PortfolioFetcher @@ -76,13 +77,13 @@ internal class DefaultPortfolioFetcher @AssistedInject constructor( } } - private fun balancesForWallets(wallets: List): Flow> { + private fun balancesForWallets(wallets: List): Flow> { val balanceFlows = wallets.map { walletAccountsBalancesFlow(it) } return combine(balanceFlows) { pairs -> pairs.toMap() } } - private fun walletAccountsBalancesFlow(wallet: UserWallet): Flow> = - accountStatusListFlow(wallet).map { wallet to PortfolioBalance(wallet, it) } + private fun walletAccountsBalancesFlow(wallet: UserWallet): Flow> = + accountStatusListFlow(wallet).map { wallet.walletId to PortfolioBalance(wallet, it) } private fun accountStatusListFlow(wallet: UserWallet): Flow = singleAccountStatusListSupplier(SingleAccountStatusListProducer.Params(wallet.walletId)) diff --git a/features/account/impl/src/main/java/com/tangem/features/account/selector/DefaultPortfolioSelectorController.kt b/features/account/impl/src/main/java/com/tangem/features/account/selector/DefaultPortfolioSelectorController.kt index 1bd36673a5..00b2a52f71 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/selector/DefaultPortfolioSelectorController.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/selector/DefaultPortfolioSelectorController.kt @@ -44,7 +44,7 @@ internal class DefaultPortfolioSelectorController @Inject constructor( data.balances.forEach { wallet, balance -> val accountStatuses = balance.accountsBalance.accountStatuses .find { accountId == it.account.accountId } - if (accountStatuses != null) result = wallet to accountStatuses + if (accountStatuses != null) result = balance.userWallet to accountStatuses } return@combine result diff --git a/features/account/impl/src/main/java/com/tangem/features/account/selector/PortfolioSelectorModel.kt b/features/account/impl/src/main/java/com/tangem/features/account/selector/PortfolioSelectorModel.kt index fa399e099b..475b7e7db8 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/selector/PortfolioSelectorModel.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/selector/PortfolioSelectorModel.kt @@ -88,8 +88,9 @@ internal class PortfolioSelectorModel @Inject constructor( val appCurrency = portfolioData.appCurrency val isBalanceHidden = portfolioData.isBalanceHidden val lockedWallets = mutableListOf() - portfolioData.balances.forEach { wallet, portfolio -> + portfolioData.balances.forEach { walletId, portfolio -> val balance = portfolio.walletBalance + val wallet = portfolio.userWallet val walletItemUM = UserWalletItemUMConverter( onClick = { selectorController.selectAccount(portfolio.accountsBalance.mainAccount.account.accountId) @@ -130,8 +131,9 @@ internal class PortfolioSelectorModel @Inject constructor( val appCurrency = portfolioData.appCurrency val isBalanceHidden = portfolioData.isBalanceHidden val lockedWallets = mutableListOf() - portfolioData.balances.forEach { wallet, portfolio -> + portfolioData.balances.forEach { walletId, portfolio -> val balance = portfolio.walletBalance + val wallet = portfolio.userWallet val walletItemUM = UserWalletItemUMConverter( onClick = { selectorController.selectAccount(portfolio.accountsBalance.mainAccount.account.accountId) diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/add/impl/converter/AvailableToAddDataConverter.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/add/impl/converter/AvailableToAddDataConverter.kt index 34cf4cd075..5bda3aeb4f 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/add/impl/converter/AvailableToAddDataConverter.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/add/impl/converter/AvailableToAddDataConverter.kt @@ -24,7 +24,7 @@ internal class AvailableToAddDataConverter @Inject constructor( ) { suspend fun convert( - balances: Map, + balances: Map, availableNetworks: Set, marketParams: TokenMarketParams, ): AvailableToAddData { @@ -50,9 +50,10 @@ internal class AvailableToAddDataConverter @Inject constructor( } suspend fun getAvailableToAddWallet( - entry: Map.Entry, + entry: Map.Entry, ): AvailableToAddWallet { - val (wallet, balance) = entry + val (walletId, balance) = entry + val wallet = balance.userWallet val filteredNetworks = wallet.filteredAvailableNetworks(availableNetworks) val accounts = balance.accountsBalance.accountStatuses val availableToAddAccounts: Map = accounts @@ -69,9 +70,9 @@ internal class AvailableToAddDataConverter @Inject constructor( val availableToAddWallets: Map = balances .map { - val (wallet, _) = it + val (walletId, _) = it val availableToAddWallet = getAvailableToAddWallet(it) - wallet.walletId to availableToAddWallet + walletId to availableToAddWallet } .filter { (_, wallet) -> wallet.availableToAddAccounts.isNotEmpty() } .toMap()