From 540f27d1c4f3d03c645b0be8bd7bcbfca8b490db Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 3 Jul 2024 21:03:27 +0800 Subject: [PATCH] Updated on 2026-08-14 --- .../SetTokenListErrorTransformer.kt | 35 ++++++++++++++++--- .../subscribers/BasicTokenListSubscriber.kt | 16 +++++---- .../viewmodels/intents/WalletClickIntents.kt | 11 +++++- 3 files changed, 51 insertions(+), 11 deletions(-) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/SetTokenListErrorTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/SetTokenListErrorTransformer.kt index 046b5fd498..fd70fb3cfa 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/SetTokenListErrorTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/SetTokenListErrorTransformer.kt @@ -1,22 +1,32 @@ package com.tangem.feature.wallet.presentation.wallet.state.transformers +import com.tangem.core.ui.utils.BigDecimalFormatter +import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.tokens.error.TokenListError -import com.tangem.domain.wallets.models.UserWalletId +import com.tangem.domain.wallets.models.UserWallet +import com.tangem.feature.wallet.presentation.wallet.domain.WalletAdditionalInfoFactory +import com.tangem.feature.wallet.presentation.wallet.domain.getCardsCount +import com.tangem.feature.wallet.presentation.wallet.state.model.WalletCardState import com.tangem.feature.wallet.presentation.wallet.state.model.WalletState import com.tangem.feature.wallet.presentation.wallet.state.model.WalletTokensListState import timber.log.Timber +import java.math.BigDecimal internal class SetTokenListErrorTransformer( - userWalletId: UserWalletId, + private val selectedWallet: UserWallet, private val error: TokenListError, -) : WalletStateTransformer(userWalletId) { + private val appCurrency: AppCurrency, +) : WalletStateTransformer(selectedWallet.walletId) { override fun transform(prevState: WalletState): WalletState { return when (error) { is TokenListError.EmptyTokens -> { when (prevState) { is WalletState.MultiCurrency.Content -> { - prevState.copy(tokensListState = WalletTokensListState.Empty) + prevState.copy( + walletCardState = prevState.walletCardState.toLoadedState(), + tokensListState = WalletTokensListState.Empty, + ) } is WalletState.MultiCurrency.Locked -> { Timber.w("Impossible to load tokens list for locked wallet") @@ -37,4 +47,21 @@ internal class SetTokenListErrorTransformer( -> prevState } } + + private fun WalletCardState.toLoadedState(): WalletCardState { + return WalletCardState.Content( + id = id, + title = title, + additionalInfo = WalletAdditionalInfoFactory.resolve(wallet = selectedWallet), + imageResId = imageResId, + onRenameClick = onRenameClick, + onDeleteClick = onDeleteClick, + balance = BigDecimalFormatter.formatFiatAmount( + fiatAmount = BigDecimal.ZERO, + fiatCurrencyCode = appCurrency.code, + fiatCurrencySymbol = appCurrency.symbol, + ), + cardCount = selectedWallet.getCardsCount(), + ) + } } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/BasicTokenListSubscriber.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/BasicTokenListSubscriber.kt index 61d278b4d0..f074661604 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/BasicTokenListSubscriber.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/BasicTokenListSubscriber.kt @@ -61,6 +61,11 @@ internal abstract class BasicTokenListSubscriber( }, flow2 = getSelectedAppCurrencyUseCase().distinctUntilChanged(), transform = { maybeTokenList, maybeAppCurrency -> + val appCurrency = maybeAppCurrency.getOrElse { e -> + Timber.e("Failed to load app currency: $e") + AppCurrency.Default + } + val tokenList = maybeTokenList.getOrElse( ifLoading = { maybeContent -> val isRefreshing = stateHolder.getWalletState(userWallet.walletId) @@ -75,17 +80,16 @@ internal abstract class BasicTokenListSubscriber( ifError = { e -> Timber.e("Failed to load token list: $e") stateHolder.update( - SetTokenListErrorTransformer(userWalletId = userWallet.walletId, error = e), + SetTokenListErrorTransformer( + selectedWallet = userWallet, + error = e, + appCurrency = appCurrency, + ), ) return@combine }, ) - val appCurrency = maybeAppCurrency.getOrElse { e -> - Timber.e("Failed to load app currency: $e") - AppCurrency.Default - } - updateContent(tokenList, appCurrency) walletWithFundsChecker.check(tokenList) }, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletClickIntents.kt index 3266406422..eba25e8d34 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletClickIntents.kt @@ -1,6 +1,8 @@ package com.tangem.feature.wallet.presentation.wallet.viewmodels.intents import com.tangem.core.analytics.api.AnalyticsEventHandler +import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase +import com.tangem.domain.appcurrency.extenstions.unwrap import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.settings.NeverToShowWalletsScrollPreview import com.tangem.domain.tokens.FetchCardTokenListUseCase @@ -37,6 +39,7 @@ internal class WalletClickIntents @Inject constructor( private val fetchTokenListUseCase: FetchTokenListUseCase, private val fetchCardTokenListUseCase: FetchCardTokenListUseCase, private val fetchCurrencyStatusUseCase: FetchCurrencyStatusUseCase, + private val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase, private val neverToShowWalletsScrollPreview: NeverToShowWalletsScrollPreview, private val analyticsEventHandler: AnalyticsEventHandler, private val dispatchers: CoroutineDispatcherProvider, @@ -115,7 +118,13 @@ internal class WalletClickIntents @Inject constructor( } maybeFetchResult.onLeft { - stateHolder.update(SetTokenListErrorTransformer(userWalletId = userWallet.walletId, error = it)) + stateHolder.update( + SetTokenListErrorTransformer( + selectedWallet = userWallet, + error = it, + appCurrency = getSelectedAppCurrencyUseCase.unwrap(), + ), + ) } stateHolder.update(