Updated on 2026-08-14

This commit is contained in:
Tangem 2025-11-17 19:37:46 +04:00
parent 283e760a4b
commit 3520a45882
3 changed files with 35 additions and 16 deletions

View file

@ -157,13 +157,19 @@ internal class DefaultWalletAccountsFetcher @Inject constructor(
userWalletId: UserWalletId,
accountsResponse: GetWalletAccountsResponse,
): GetWalletAccountsResponse {
val hasSavedTokens = accountsResponse.unassignedTokens.isNotEmpty()
val response = defaultWalletAccountsResponseFactory.create(
userWalletId = userWalletId,
userTokensResponse = UserTokensResponse(
group = accountsResponse.wallet.group.orDefault(),
sort = accountsResponse.wallet.sort.orDefault(),
tokens = accountsResponse.unassignedTokens,
),
userTokensResponse = if (hasSavedTokens) {
UserTokensResponse(
group = accountsResponse.wallet.group.orDefault(),
sort = accountsResponse.wallet.sort.orDefault(),
tokens = accountsResponse.unassignedTokens,
)
} else {
null
},
)
store(userWalletId = userWalletId, response = response)

View file

@ -1,6 +1,5 @@
package com.tangem.domain.account.status.utils
import arrow.core.some
import arrow.core.toOption
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
@ -52,7 +51,7 @@ internal class CryptoCurrencyStatusesFlowFactory @Inject constructor(
.map { statusSources ->
CryptoCurrencyStatusFactory.create(
currency = currency,
maybeNetworkStatus = statusSources.networkStatus.some(),
maybeNetworkStatus = statusSources.networkStatus.toOption(),
maybeQuoteStatus = statusSources.quoteStatus.toOption(),
maybeYieldBalance = statusSources.yieldBalance.toOption(),
)
@ -74,11 +73,15 @@ internal class CryptoCurrencyStatusesFlowFactory @Inject constructor(
val yieldBalanceFlow = if (userWallet.isMultiCurrency) {
networkStatusFlow.flatMapLatest { networkStatus ->
getYieldBalanceFlow(
userWalletId = userWallet.walletId,
currencyId = currency.id,
networkStatus = networkStatus,
)
if (networkStatus != null) {
getYieldBalanceFlow(
userWalletId = userWallet.walletId,
currencyId = currency.id,
networkStatus = networkStatus,
)
} else {
flowOf(null)
}
}
} else {
null
@ -91,7 +94,7 @@ internal class CryptoCurrencyStatusesFlowFactory @Inject constructor(
}
private fun combine(
networkStatusFlow: Flow<NetworkStatus>,
networkStatusFlow: Flow<NetworkStatus?>,
yieldBalanceFlow: Flow<YieldBalance?>?,
quoteStatusFlow: Flow<QuoteStatus>?,
): Flow<CryptoCurrencyStatusSources> {
@ -116,11 +119,14 @@ internal class CryptoCurrencyStatusesFlowFactory @Inject constructor(
}
}
private fun getNetworkStatusFlow(userWalletId: UserWalletId, network: Network): Flow<NetworkStatus> {
private fun getNetworkStatusFlow(userWalletId: UserWalletId, network: Network): Flow<NetworkStatus?> {
return singleNetworkStatusSupplier(
params = SingleNetworkStatusProducer.Params(userWalletId = userWalletId, network = network),
)
.distinctUntilChanged()
.onEmpty<NetworkStatus?> {
emit(value = null)
}
}
private fun getQuoteStatusFlow(rawCurrencyId: CryptoCurrency.RawID): Flow<QuoteStatus> {
@ -152,7 +158,7 @@ internal class CryptoCurrencyStatusesFlowFactory @Inject constructor(
}
private data class CryptoCurrencyStatusSources(
val networkStatus: NetworkStatus,
val networkStatus: NetworkStatus? = null,
val yieldBalance: YieldBalance? = null,
val quoteStatus: QuoteStatus? = null,
)

View file

@ -13,6 +13,8 @@ import com.tangem.core.ui.event.triggeredEvent
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.message.SnackbarMessage
import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles
import com.tangem.domain.models.account.AccountId
import com.tangem.domain.redux.OnboardingManageTokensAction
import com.tangem.domain.redux.ReduxStateHolder
import com.tangem.features.managetokens.analytics.ManageTokensAnalyticEvent
@ -43,13 +45,18 @@ internal class OnboardingManageTokensModel @Inject constructor(
private val messageSender: UiMessageSender,
private val reduxStateHolder: ReduxStateHolder,
private val analyticsEventHandler: AnalyticsEventHandler,
accountsFeatureToggles: AccountsFeatureToggles,
manageTokensListManagerFactory: ManageTokensListManager.Factory,
manageTokensUseCasesFacadeFactory: ManageTokensUseCasesFacade.Factory,
paramsContainer: ParamsContainer,
) : Model() {
private val params: OnboardingManageTokensComponent.Params = paramsContainer.require()
private val portfolio = ManageTokensMode.Wallet(params.userWalletId)
private val portfolio = if (accountsFeatureToggles.isFeatureEnabled) {
ManageTokensMode.Account(accountId = AccountId.forMainCryptoPortfolio(params.userWalletId))
} else {
ManageTokensMode.Wallet(params.userWalletId)
}
private val useCasesFacade: ManageTokensUseCasesFacade = manageTokensUseCasesFacadeFactory
.create(mode = portfolio)
private val manageTokensListManager = manageTokensListManagerFactory.create(