From 16e32259c64e7fe7b5076fdb4ef5f608ffcf9d06 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 11 Sep 2024 18:53:55 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../impl/model/AddToPortfolioManager.kt | 2 -- .../impl/model/MyPortfolioUMFactory.kt | 26 ++++++++++++------- .../impl/model/TokensPortfolioUMConverter.kt | 4 +-- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/AddToPortfolioManager.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/AddToPortfolioManager.kt index bf366c445c..be5ee4d9ed 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/AddToPortfolioManager.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/AddToPortfolioManager.kt @@ -8,7 +8,6 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.update import timber.log.Timber import javax.inject.Inject -import javax.inject.Singleton internal typealias WalletsWithNetworks = Map> @@ -17,7 +16,6 @@ internal typealias WalletsWithNetworks = Map?>(value = null) diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/MyPortfolioUMFactory.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/MyPortfolioUMFactory.kt index 041c92c05f..c52637100f 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/MyPortfolioUMFactory.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/MyPortfolioUMFactory.kt @@ -6,6 +6,7 @@ import com.tangem.domain.tokens.model.CryptoCurrencyStatus import com.tangem.domain.wallets.models.UserWallet import com.tangem.features.markets.portfolio.impl.loader.PortfolioData import com.tangem.features.markets.portfolio.impl.ui.state.MyPortfolioUM +import com.tangem.features.markets.portfolio.impl.ui.state.MyPortfolioUM.Tokens.AddButtonState import com.tangem.features.markets.portfolio.impl.ui.state.PortfolioTokenUM import com.tangem.utils.Provider import kotlinx.collections.immutable.ImmutableList @@ -29,12 +30,13 @@ internal class MyPortfolioUMFactory( fun create(portfolioData: PortfolioData, portfolioUIData: PortfolioUIData): MyPortfolioUM { val addToPortfolioData = portfolioUIData.addToPortfolioData - if (addToPortfolioData.availableNetworks == null) return MyPortfolioUM.Loading + if (addToPortfolioData.availableNetworks?.isEmpty() == true) return MyPortfolioUM.Unavailable - if (addToPortfolioData.availableNetworks.isEmpty()) return MyPortfolioUM.Unavailable - - val walletsWithCurrencies = portfolioData.walletsWithCurrencies - .filterAvailableNetworks(networks = addToPortfolioData.availableNetworks) + val walletsWithCurrencies = if (addToPortfolioData.availableNetworks == null) { + portfolioData.walletsWithCurrencies + } else { + portfolioData.walletsWithCurrencies.filterAvailableNetworks(networks = addToPortfolioData.availableNetworks) + } val isPortfolioEmpty = walletsWithCurrencies.flatMap { it.value }.isEmpty() if (isPortfolioEmpty) { @@ -56,7 +58,7 @@ internal class MyPortfolioUMFactory( return TokensPortfolioUMConverter( appCurrency = portfolioData.appCurrency, isBalanceHidden = portfolioData.isBalanceHidden, - isAllAvailableNetworksAdded = walletsWithCurrencies.isAllAvailableNetworksAdded( + addButtonState = walletsWithCurrencies.getAddButtonState( availableNetworks = addToPortfolioData.availableNetworks, ), bsConfig = createAddToPortfolioBSConfig(portfolioData = portfolioData, portfolioUIData = portfolioUIData), @@ -94,17 +96,21 @@ internal class MyPortfolioUMFactory( ) } - private fun Map>.isAllAvailableNetworksAdded( - availableNetworks: Set, - ): Boolean { + private fun Map>.getAddButtonState( + availableNetworks: Set?, + ): AddButtonState { + if (availableNetworks == null) return AddButtonState.Loading + val networkIds = availableNetworks.map { it.networkId } - return this + val isAllAvailableNetworksAdded = this // User can add currencies only in multi-currency wallets .filterKeys(UserWallet::isMultiCurrency) .mapValues { entry -> entry.value.map { it.status.currency.network.backendId } } // Each wallets contains all available networks? .all { it.value.containsAll(networkIds) } + + return if (isAllAvailableNetworksAdded) AddButtonState.Unavailable else AddButtonState.Available } /** Filter map values by available networks [networks] */ diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/TokensPortfolioUMConverter.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/TokensPortfolioUMConverter.kt index 4dc478786c..7e847834d2 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/TokensPortfolioUMConverter.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/TokensPortfolioUMConverter.kt @@ -23,7 +23,7 @@ import kotlinx.collections.immutable.toImmutableList internal class TokensPortfolioUMConverter( private val appCurrency: AppCurrency, private val isBalanceHidden: Boolean, - private val isAllAvailableNetworksAdded: Boolean, + private val addButtonState: AddButtonState, private val bsConfig: TangemBottomSheetConfig, private val onAddClick: () -> Unit, private val quickActionsIntents: TokenActionsHandler, @@ -47,7 +47,7 @@ internal class TokensPortfolioUMConverter( } .setQuickActionsVisibility(currentState = currentTokensState) .toImmutableList(), - buttonState = if (isAllAvailableNetworksAdded) AddButtonState.Unavailable else AddButtonState.Available, + buttonState = addButtonState, addToPortfolioBSConfig = bsConfig, onAddClick = onAddClick, tokenReceiveBSConfig = (currentState() as? MyPortfolioUM.Tokens)