Updated on 2026-08-14
This commit is contained in:
parent
d624a7552a
commit
0edc7eb8a8
5 changed files with 21 additions and 12 deletions
|
|
@ -21,12 +21,17 @@ interface PortfolioFetcher {
|
|||
data class Data(
|
||||
val appCurrency: AppCurrency,
|
||||
val isBalanceHidden: Boolean,
|
||||
val balances: Map<UserWallet, PortfolioBalance>,
|
||||
val balances: Map<UserWalletId, PortfolioBalance>,
|
||||
) {
|
||||
|
||||
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(
|
||||
|
|
|
|||
|
|
@ -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<UserWallet>): Flow<Map<UserWallet, PortfolioBalance>> {
|
||||
private fun balancesForWallets(wallets: List<UserWallet>): Flow<Map<UserWalletId, PortfolioBalance>> {
|
||||
val balanceFlows = wallets.map { walletAccountsBalancesFlow(it) }
|
||||
return combine(balanceFlows) { pairs -> pairs.toMap() }
|
||||
}
|
||||
|
||||
private fun walletAccountsBalancesFlow(wallet: UserWallet): Flow<Pair<UserWallet, PortfolioBalance>> =
|
||||
accountStatusListFlow(wallet).map { wallet to PortfolioBalance(wallet, it) }
|
||||
private fun walletAccountsBalancesFlow(wallet: UserWallet): Flow<Pair<UserWalletId, PortfolioBalance>> =
|
||||
accountStatusListFlow(wallet).map { wallet.walletId to PortfolioBalance(wallet, it) }
|
||||
|
||||
private fun accountStatusListFlow(wallet: UserWallet): Flow<AccountStatusList> =
|
||||
singleAccountStatusListSupplier(SingleAccountStatusListProducer.Params(wallet.walletId))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -88,8 +88,9 @@ internal class PortfolioSelectorModel @Inject constructor(
|
|||
val appCurrency = portfolioData.appCurrency
|
||||
val isBalanceHidden = portfolioData.isBalanceHidden
|
||||
val lockedWallets = mutableListOf<PortfolioSelectorItemUM>()
|
||||
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<PortfolioSelectorItemUM>()
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ internal class AvailableToAddDataConverter @Inject constructor(
|
|||
) {
|
||||
|
||||
suspend fun convert(
|
||||
balances: Map<UserWallet, PortfolioFetcher.PortfolioBalance>,
|
||||
balances: Map<UserWalletId, PortfolioFetcher.PortfolioBalance>,
|
||||
availableNetworks: Set<TokenMarketInfo.Network>,
|
||||
marketParams: TokenMarketParams,
|
||||
): AvailableToAddData {
|
||||
|
|
@ -50,9 +50,10 @@ internal class AvailableToAddDataConverter @Inject constructor(
|
|||
}
|
||||
|
||||
suspend fun getAvailableToAddWallet(
|
||||
entry: Map.Entry<UserWallet, PortfolioFetcher.PortfolioBalance>,
|
||||
entry: Map.Entry<UserWalletId, PortfolioFetcher.PortfolioBalance>,
|
||||
): 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<AccountId, AvailableToAddAccount> = accounts
|
||||
|
|
@ -69,9 +70,9 @@ internal class AvailableToAddDataConverter @Inject constructor(
|
|||
|
||||
val availableToAddWallets: Map<UserWalletId, AvailableToAddWallet> = 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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue