From ac907dd7b150346539cfed90a28929d93f68c1a8 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 30 Jun 2026 12:33:16 +0500 Subject: [PATCH] Updated on 2026-08-14 --- features/nft/impl/build.gradle.kts | 2 ++ .../nft/common/DefaultNFTComponent.kt | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/features/nft/impl/build.gradle.kts b/features/nft/impl/build.gradle.kts index 797564dd0e..7e48b26c5d 100644 --- a/features/nft/impl/build.gradle.kts +++ b/features/nft/impl/build.gradle.kts @@ -30,6 +30,8 @@ dependencies { /** Domain modules */ implementation(projects.domain.account.status) + implementation(projects.domain.card) + implementation(projects.domain.feedback) implementation(projects.domain.wallets) implementation(projects.domain.appCurrency.models) implementation(projects.domain.appCurrency) diff --git a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/common/DefaultNFTComponent.kt b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/common/DefaultNFTComponent.kt index 2d94110b50..24eaf8bed2 100644 --- a/features/nft/impl/src/main/kotlin/com/tangem/features/nft/common/DefaultNFTComponent.kt +++ b/features/nft/impl/src/main/kotlin/com/tangem/features/nft/common/DefaultNFTComponent.kt @@ -20,6 +20,11 @@ import com.tangem.core.decompose.context.childByContext import com.tangem.core.decompose.navigation.inner.InnerRouter import com.tangem.core.ui.decompose.ComposableBottomSheetComponent import com.tangem.core.ui.decompose.ComposableContentComponent +import com.tangem.core.ui.message.dialog.Dialogs +import com.tangem.domain.card.IsWalletBackupProblematicUseCase +import com.tangem.domain.feedback.SendBackupProblemEmailUseCase +import com.tangem.domain.models.wallet.UserWalletId +import com.tangem.domain.wallets.usecase.GetUserWalletUseCase import com.tangem.features.commonfeatures.api.portfolioselector.PortfolioSelectorComponent import com.tangem.features.commonfeatures.api.portfolioselector.PortfolioSelectorController import com.tangem.features.commonfeatures.api.portfolioselector.PortfolioFetcher @@ -51,6 +56,9 @@ internal class DefaultNFTComponent @AssistedInject constructor( private val portfolioSelectorComponentFactory: PortfolioSelectorComponent.Factory, private val portfolioSelectorController: PortfolioSelectorController, portfolioFetcherFactory: PortfolioFetcher.Factory, + private val getUserWalletUseCase: GetUserWalletUseCase, + private val isWalletBackupProblematicUseCase: IsWalletBackupProblematicUseCase, + private val sendBackupProblemEmailUseCase: SendBackupProblemEmailUseCase, ) : NFTComponent, AppComponentContext by appComponentContext { private val stackNavigation = StackNavigation() @@ -153,6 +161,8 @@ internal class DefaultNFTComponent @AssistedInject constructor( ) private fun onReceiveClick(route: NFTRoute.Collections) = componentScope.launch { + if (isTopUpBlockedByBackupError(route.userWalletId)) return@launch + portfolioSelectorController.selectAccount(null) portfolioFetcher.updateMode(mode = PortfolioFetcher.Mode.Wallet(route.userWalletId)) val portfolioData = portfolioFetcher.data.first() @@ -169,6 +179,18 @@ internal class DefaultNFTComponent @AssistedInject constructor( } }.saveIn(onReceiveClickJob) + private fun isTopUpBlockedByBackupError(userWalletId: UserWalletId): Boolean { + val userWallet = getUserWalletUseCase(userWalletId).getOrNull() ?: return false + if (!isWalletBackupProblematicUseCase(userWallet)) return false + + messageSender.send( + Dialogs.backupErrorAddFundsDisabled( + onContactSupport = { componentScope.launch { sendBackupProblemEmailUseCase(userWalletId) } }, + ), + ) + return true + } + private fun getReceiveComponent( factoryContext: AppComponentContext, route: NFTRoute.Receive,