Updated on 2026-08-14

This commit is contained in:
Tangem 2026-02-02 16:25:50 +07:00
parent e9e6b8bcc6
commit a52c3623bd
6 changed files with 19 additions and 12 deletions

View file

@ -12,8 +12,7 @@ import kotlinx.serialization.Serializable
data class AvailableToAddData( data class AvailableToAddData(
val availableToAddWallets: Map<UserWalletId, AvailableToAddWallet>, val availableToAddWallets: Map<UserWalletId, AvailableToAddWallet>,
) { ) {
val isAvailableToAdd: Boolean val isAvailableToAdd: Boolean = availableToAddWallets.values.any { item -> item.isAvailableToAdd }
get() = availableToAddWallets.isNotEmpty()
val isSinglePortfolio: Boolean val isSinglePortfolio: Boolean
get() = availableToAddWallets.size == 1 && availableToAddWallets.values.first().accounts.size == 1 get() = availableToAddWallets.size == 1 && availableToAddWallets.values.first().accounts.size == 1
} }
@ -23,7 +22,9 @@ data class AvailableToAddWallet(
val accounts: List<AccountStatus>, val accounts: List<AccountStatus>,
val availableNetworks: Set<TokenMarketInfo.Network>, val availableNetworks: Set<TokenMarketInfo.Network>,
val availableToAddAccounts: Map<AccountId, AvailableToAddAccount>, val availableToAddAccounts: Map<AccountId, AvailableToAddAccount>,
) ) {
val isAvailableToAdd: Boolean = availableToAddAccounts.values.any { item -> item.isAvailableToAdd }
}
@Serializable @Serializable
data class AvailableToAddAccount( data class AvailableToAddAccount(
@ -38,6 +39,8 @@ data class AvailableToAddAccount(
.filter { available -> addedNetworks.none { added -> added.backendId == available.networkId } } .filter { available -> addedNetworks.none { added -> added.backendId == available.networkId } }
.toSet() .toSet()
val isAvailableToAdd: Boolean = availableToAddNetworks.isNotEmpty()
val addedMarketNetworks: Set<TokenMarketInfo.Network> = availableNetworks val addedMarketNetworks: Set<TokenMarketInfo.Network> = availableNetworks
.filter { available -> addedNetworks.any { added -> added.backendId == available.networkId } } .filter { available -> addedNetworks.any { added -> added.backendId == available.networkId } }
.toSet() .toSet()

View file

@ -70,7 +70,6 @@ internal class AvailableToAddDataConverter @Inject constructor(
val availableToAddAccount = accountStatus.getAvailableToAddAccount(wallet) ?: return@mapNotNull null val availableToAddAccount = accountStatus.getAvailableToAddAccount(wallet) ?: return@mapNotNull null
accountStatus.account.accountId to availableToAddAccount accountStatus.account.accountId to availableToAddAccount
} }
.filter { (_, account) -> account.availableToAddNetworks.isNotEmpty() }
.toMap() .toMap()
return AvailableToAddWallet( return AvailableToAddWallet(
userWallet = wallet, userWallet = wallet,

View file

@ -344,9 +344,10 @@ internal class AddToPortfolioModel @Inject constructor(
portfolioSelectorController.isEnabled.value = isEnabled@{ userWallet, accountStatus -> portfolioSelectorController.isEnabled.value = isEnabled@{ userWallet, accountStatus ->
val availableWallet = state.availableToAddData.availableToAddWallets[userWallet.walletId] val availableWallet = state.availableToAddData.availableToAddWallets[userWallet.walletId]
?: return@isEnabled false ?: return@isEnabled false
val availableAccount = val isAvailableAccount =
availableWallet.availableToAddAccounts[accountStatus.account.accountId] availableWallet.availableToAddAccounts[accountStatus.account.accountId]
return@isEnabled availableAccount != null ?.isAvailableToAdd == true
return@isEnabled isAvailableAccount
} }
AddToPortfolioManager.State.Init, AddToPortfolioManager.State.Init,
AddToPortfolioManager.State.NothingToAdd, AddToPortfolioManager.State.NothingToAdd,

View file

@ -12,8 +12,7 @@ import kotlinx.serialization.Serializable
internal data class AvailableToAddData( internal data class AvailableToAddData(
val availableToAddWallets: Map<UserWalletId, AvailableToAddWallet>, val availableToAddWallets: Map<UserWalletId, AvailableToAddWallet>,
) { ) {
val isAvailableToAdd: Boolean val isAvailableToAdd: Boolean = availableToAddWallets.values.any { item -> item.isAvailableToAdd }
get() = availableToAddWallets.isNotEmpty()
val isSinglePortfolio: Boolean val isSinglePortfolio: Boolean
get() = availableToAddWallets.size == 1 && availableToAddWallets.values.first().accounts.size == 1 get() = availableToAddWallets.size == 1 && availableToAddWallets.values.first().accounts.size == 1
} }
@ -23,7 +22,9 @@ internal data class AvailableToAddWallet(
val accounts: List<AccountStatus>, val accounts: List<AccountStatus>,
val availableNetworks: Set<TokenMarketInfo.Network>, val availableNetworks: Set<TokenMarketInfo.Network>,
val availableToAddAccounts: Map<AccountId, AvailableToAddAccount>, val availableToAddAccounts: Map<AccountId, AvailableToAddAccount>,
) ) {
val isAvailableToAdd: Boolean = availableToAddAccounts.values.any { item -> item.isAvailableToAdd }
}
@Serializable @Serializable
internal data class AvailableToAddAccount( internal data class AvailableToAddAccount(
@ -31,6 +32,7 @@ internal data class AvailableToAddAccount(
val availableNetworks: Set<TokenMarketInfo.Network>, val availableNetworks: Set<TokenMarketInfo.Network>,
val addedNetworks: Set<Network>, val addedNetworks: Set<Network>,
) { ) {
val isSingleNetwork: Boolean val isSingleNetwork: Boolean
get() = availableNetworks.size == 1 get() = availableNetworks.size == 1
@ -38,6 +40,8 @@ internal data class AvailableToAddAccount(
.filter { available -> addedNetworks.none { added -> added.backendId == available.networkId } } .filter { available -> addedNetworks.none { added -> added.backendId == available.networkId } }
.toSet() .toSet()
val isAvailableToAdd: Boolean = availableToAddNetworks.isNotEmpty()
val addedMarketNetworks: Set<TokenMarketInfo.Network> = availableNetworks val addedMarketNetworks: Set<TokenMarketInfo.Network> = availableNetworks
.filter { available -> addedNetworks.any { added -> added.backendId == available.networkId } } .filter { available -> addedNetworks.any { added -> added.backendId == available.networkId } }
.toSet() .toSet()

View file

@ -70,7 +70,6 @@ internal class AvailableToAddDataConverter @Inject constructor(
val availableToAddAccount = accountStatus.getAvailableToAddAccount(wallet) ?: return@mapNotNull null val availableToAddAccount = accountStatus.getAvailableToAddAccount(wallet) ?: return@mapNotNull null
accountStatus.account.accountId to availableToAddAccount accountStatus.account.accountId to availableToAddAccount
} }
.filter { (_, account) -> account.availableToAddNetworks.isNotEmpty() }
.toMap() .toMap()
return AvailableToAddWallet( return AvailableToAddWallet(
userWallet = wallet, userWallet = wallet,

View file

@ -334,9 +334,10 @@ internal class AddToPortfolioModel @Inject constructor(
portfolioSelectorController.isEnabled.value = isEnabled@{ userWallet, accountStatus -> portfolioSelectorController.isEnabled.value = isEnabled@{ userWallet, accountStatus ->
val availableWallet = state.availableToAddData.availableToAddWallets[userWallet.walletId] val availableWallet = state.availableToAddData.availableToAddWallets[userWallet.walletId]
?: return@isEnabled false ?: return@isEnabled false
val availableAccount = val isAvailableAccount =
availableWallet.availableToAddAccounts[accountStatus.account.accountId] availableWallet.availableToAddAccounts[accountStatus.account.accountId]
return@isEnabled availableAccount != null ?.isAvailableToAdd == true
return@isEnabled isAvailableAccount
} }
AddToPortfolioManager.State.Init, AddToPortfolioManager.State.Init,
AddToPortfolioManager.State.NothingToAdd, AddToPortfolioManager.State.NothingToAdd,