From 3520a4588234951c1ac22dc4b0cdca2f31d69279 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 17 Nov 2025 19:37:46 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../fetcher/DefaultWalletAccountsFetcher.kt | 16 ++++++++---- .../CryptoCurrencyStatusesFlowFactory.kt | 26 ++++++++++++------- .../model/OnboardingManageTokensModel.kt | 9 ++++++- 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/data/account/src/main/kotlin/com/tangem/data/account/fetcher/DefaultWalletAccountsFetcher.kt b/data/account/src/main/kotlin/com/tangem/data/account/fetcher/DefaultWalletAccountsFetcher.kt index a57f70b03e..208bdb7817 100644 --- a/data/account/src/main/kotlin/com/tangem/data/account/fetcher/DefaultWalletAccountsFetcher.kt +++ b/data/account/src/main/kotlin/com/tangem/data/account/fetcher/DefaultWalletAccountsFetcher.kt @@ -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) diff --git a/domain/account/status/src/main/java/com/tangem/domain/account/status/utils/CryptoCurrencyStatusesFlowFactory.kt b/domain/account/status/src/main/java/com/tangem/domain/account/status/utils/CryptoCurrencyStatusesFlowFactory.kt index b4597e4746..cd8bb66bb6 100644 --- a/domain/account/status/src/main/java/com/tangem/domain/account/status/utils/CryptoCurrencyStatusesFlowFactory.kt +++ b/domain/account/status/src/main/java/com/tangem/domain/account/status/utils/CryptoCurrencyStatusesFlowFactory.kt @@ -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, + networkStatusFlow: Flow, yieldBalanceFlow: Flow?, quoteStatusFlow: Flow?, ): Flow { @@ -116,11 +119,14 @@ internal class CryptoCurrencyStatusesFlowFactory @Inject constructor( } } - private fun getNetworkStatusFlow(userWalletId: UserWalletId, network: Network): Flow { + private fun getNetworkStatusFlow(userWalletId: UserWalletId, network: Network): Flow { return singleNetworkStatusSupplier( params = SingleNetworkStatusProducer.Params(userWalletId = userWalletId, network = network), ) .distinctUntilChanged() + .onEmpty { + emit(value = null) + } } private fun getQuoteStatusFlow(rawCurrencyId: CryptoCurrency.RawID): Flow { @@ -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, ) diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/OnboardingManageTokensModel.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/OnboardingManageTokensModel.kt index 7d7026d93c..ae218b4341 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/OnboardingManageTokensModel.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/OnboardingManageTokensModel.kt @@ -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(