Updated on 2026-08-14

This commit is contained in:
Tangem 2024-09-05 16:28:36 +03:00
parent 1e85dbe6f7
commit 1006477fd7
5 changed files with 46 additions and 22 deletions

View file

@ -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,
)
}
}

View file

@ -481,6 +481,8 @@ internal class DefaultCurrenciesRepository(
@OptIn(ExperimentalCoroutinesApi::class)
override fun getAllWalletsCryptoCurrencies(currencyRawId: String): Flow<Map<UserWallet, List<CryptoCurrency>>> {
return userWalletsStore.userWallets.flatMapLatest { userWallets ->
userWallets.forEach { fetchTokensIfCacheExpired(userWallet = it, refresh = false) }
val userWalletsWithCurrencies = userWallets
.filterNot(UserWallet::isLocked)
.map { userWallet ->

View file

@ -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,
)
}
}

View file

@ -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()
}

View file

@ -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()