From 1006477fd77f16d2add0bdadf12085cc89433f7a Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 5 Sep 2024 16:28:36 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../tap/di/domain/MarketsDomainModule.kt | 9 +++++- .../repository/DefaultCurrenciesRepository.kt | 2 ++ .../domain/markets/SaveMarketTokensUseCase.kt | 28 +++++++++++-------- .../impl/loader/PortfolioDataLoader.kt | 14 ++++++++++ .../impl/model/MyPortfolioUMFactory.kt | 15 ++++------ 5 files changed, 46 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/di/domain/MarketsDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/MarketsDomainModule.kt index 293ec473c3..59b0f45dc5 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/MarketsDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/MarketsDomainModule.kt @@ -4,6 +4,7 @@ import com.tangem.domain.card.repository.DerivationsRepository import com.tangem.domain.markets.* import com.tangem.domain.markets.repositories.MarketsTokenRepository import com.tangem.domain.tokens.repository.CurrenciesRepository +import com.tangem.domain.tokens.repository.NetworksRepository import com.tangem.domain.tokens.repository.QuotesRepository import dagger.Module import dagger.Provides @@ -53,7 +54,13 @@ object MarketsDomainModule { derivationsRepository: DerivationsRepository, marketsTokenRepository: MarketsTokenRepository, currenciesRepository: CurrenciesRepository, + networksRepository: NetworksRepository, ): SaveMarketTokensUseCase { - return SaveMarketTokensUseCase(derivationsRepository, marketsTokenRepository, currenciesRepository) + return SaveMarketTokensUseCase( + derivationsRepository = derivationsRepository, + marketsTokenRepository = marketsTokenRepository, + currenciesRepository = currenciesRepository, + networksRepository = networksRepository, + ) } } \ No newline at end of file diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt index d66f067313..238150055c 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt @@ -481,6 +481,8 @@ internal class DefaultCurrenciesRepository( @OptIn(ExperimentalCoroutinesApi::class) override fun getAllWalletsCryptoCurrencies(currencyRawId: String): Flow>> { return userWalletsStore.userWallets.flatMapLatest { userWallets -> + userWallets.forEach { fetchTokensIfCacheExpired(userWallet = it, refresh = false) } + val userWalletsWithCurrencies = userWallets .filterNot(UserWallet::isLocked) .map { userWallet -> diff --git a/domain/markets/src/main/java/com/tangem/domain/markets/SaveMarketTokensUseCase.kt b/domain/markets/src/main/java/com/tangem/domain/markets/SaveMarketTokensUseCase.kt index bc04fa27ec..d944b5f9de 100644 --- a/domain/markets/src/main/java/com/tangem/domain/markets/SaveMarketTokensUseCase.kt +++ b/domain/markets/src/main/java/com/tangem/domain/markets/SaveMarketTokensUseCase.kt @@ -3,8 +3,10 @@ package com.tangem.domain.markets import arrow.core.Either import com.tangem.domain.card.repository.DerivationsRepository import com.tangem.domain.markets.repositories.MarketsTokenRepository +import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.domain.tokens.model.Network import com.tangem.domain.tokens.repository.CurrenciesRepository +import com.tangem.domain.tokens.repository.NetworksRepository import com.tangem.domain.wallets.models.UserWalletId /** @@ -20,6 +22,7 @@ class SaveMarketTokensUseCase( private val derivationsRepository: DerivationsRepository, private val marketsTokenRepository: MarketsTokenRepository, private val currenciesRepository: CurrenciesRepository, + private val networksRepository: NetworksRepository, ) { suspend operator fun invoke( @@ -44,17 +47,20 @@ class SaveMarketTokensUseCase( networkIds = addedNetworks.map { Network.ID(it.networkId) }, ) - currenciesRepository.addCurrencies( - userWalletId = userWalletId, - currencies = addedNetworks.mapNotNull { - marketsTokenRepository.createCryptoCurrency( - userWalletId = userWalletId, - token = tokenMarketParams, - network = it, - ) - }, - ) + val addedCurrencies = addedNetworks.mapNotNull { + marketsTokenRepository.createCryptoCurrency( + userWalletId = userWalletId, + token = tokenMarketParams, + network = it, + ) + } - // TODO: [REDACTED_JIRA] + currenciesRepository.addCurrencies(userWalletId = userWalletId, currencies = addedCurrencies) + + networksRepository.getNetworkStatusesSync( + userWalletId = userWalletId, + networks = addedCurrencies.map(CryptoCurrency::network).toSet(), + refresh = true, + ) } } \ No newline at end of file diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/loader/PortfolioDataLoader.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/loader/PortfolioDataLoader.kt index db10d655ab..ac016c1bbf 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/loader/PortfolioDataLoader.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/loader/PortfolioDataLoader.kt @@ -56,6 +56,7 @@ internal class PortfolioDataLoader @Inject constructor( ids = portfolioData.walletsWithCurrencies.keys.map(UserWallet::walletId), ) .map { portfolioData.copy(walletsWithBalance = it) } + .onEmpty { emit(portfolioData) } } } @@ -93,6 +94,19 @@ internal class PortfolioDataLoader @Inject constructor( } } } + .onEmpty { + emit( + walletsWithStatuses.mapValues { (wallet, statuses) -> + statuses.map { + PortfolioData.CryptoCurrencyData( + userWallet = wallet, + status = it, + actions = emptyList(), + ) + } + }, + ) + } } .distinctUntilChanged() } 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 7cc596fc95..041c92c05f 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 @@ -72,21 +72,16 @@ internal class MyPortfolioUMFactory( portfolioData: PortfolioData, portfolioUIData: PortfolioUIData, ): TangemBottomSheetConfig { - val walletId = portfolioUIData.selectedWalletId - ?: portfolioData.walletsWithCurrencies.keys.firstOrNull { it.isMultiCurrency }?.walletId - val selectedWallet = portfolioData.walletsWithCurrencies.keys - .firstOrNull { it.walletId == walletId } - ?: error("portfolioModel.walletsWithCurrencyStatuses doesn't contain selected wallet: $walletId") + .firstOrNull { it.walletId == portfolioUIData.selectedWalletId } + ?: portfolioData.walletsWithCurrencies.keys.firstOrNull { it.isMultiCurrency } + ?: error("walletsWithCurrencies don't contain selected wallet or any multi-currency wallet") val availableNetworks = portfolioUIData.addToPortfolioData.availableNetworks.orEmpty() val alreadyAddedNetworks = requireNotNull( - value = portfolioData.walletsWithCurrencies - .filterAvailableNetworks(availableNetworks)[selectedWallet], - lazyMessage = { - "portfolioModel.walletsWithCurrencyStatuses doesn't contain selected wallet: $walletId" - }, + value = portfolioData.walletsWithCurrencies.filterAvailableNetworks(availableNetworks)[selectedWallet], + lazyMessage = { "walletsWithCurrencies don't contain ${selectedWallet.walletId}" }, ) .map { it.status.currency.network.backendId } .toSet()