From 07e98782d5578c83a24aeba4e4f95972eac7725b Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 25 Aug 2025 16:14:45 +0500 Subject: [PATCH 1/2] Updated on 2026-08-14 --- .../DefaultTransactionRepository.kt | 20 +++++++++++-------- .../usecase/ValidateTransactionUseCase.kt | 18 ++++++++--------- .../v2/send/confirm/model/SendConfirmModel.kt | 12 +++++++++-- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/data/transaction/src/main/java/com/tangem/data/transaction/DefaultTransactionRepository.kt b/data/transaction/src/main/java/com/tangem/data/transaction/DefaultTransactionRepository.kt index 7179221efb..437fbe7c78 100644 --- a/data/transaction/src/main/java/com/tangem/data/transaction/DefaultTransactionRepository.kt +++ b/data/transaction/src/main/java/com/tangem/data/transaction/DefaultTransactionRepository.kt @@ -240,15 +240,19 @@ internal class DefaultTransactionRepository( val validator = walletManager as? TransactionValidator if (validator != null) { - val transactionData = walletManager.createTransaction( - amount = amount, - fee = fee ?: Fee.Common(amount = amount), - destination = destination, - ).copy( - extras = getMemoExtras(networkId = network.rawId, memo = memo), - ) + try { + val transactionData = walletManager.createTransaction( + amount = amount, + fee = fee ?: Fee.Common(amount = amount), + destination = destination, + ).copy( + extras = getMemoExtras(networkId = network.rawId, memo = memo), + ) - validator.validate(transactionData = transactionData) + validator.validate(transactionData = transactionData) + } catch (ex: Exception) { + Result.failure(ex) + } } else { Timber.e("${walletManager?.wallet?.blockchain} does not support transaction validation") Result.success(Unit) diff --git a/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/ValidateTransactionUseCase.kt b/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/ValidateTransactionUseCase.kt index 499e222199..64db5bebf9 100644 --- a/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/ValidateTransactionUseCase.kt +++ b/domain/transaction/src/main/java/com/tangem/domain/transaction/usecase/ValidateTransactionUseCase.kt @@ -21,14 +21,12 @@ class ValidateTransactionUseCase( destination: String, userWalletId: UserWalletId, network: Network, - ): Either = Either.catch { - transactionRepository.validateTransaction( - amount = amount, - fee = fee, - memo = memo, - destination = destination, - userWalletId = userWalletId, - network = network, - ).fold(onSuccess = { Unit.right() }, onFailure = { it.left() }) - } + ): Either = transactionRepository.validateTransaction( + amount = amount, + fee = fee, + memo = memo, + destination = destination, + userWalletId = userWalletId, + network = network, + ).fold(onSuccess = { Unit.right() }, onFailure = { it.left() }) } \ No newline at end of file diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt index 1fb318f5c1..284f09ebbf 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt @@ -139,8 +139,16 @@ internal class SendConfirmModel @Inject constructor( reduceAmountBy = amountState?.reduceAmountBy.orZero(), isIgnoreReduce = amountState?.isIgnoreReduce == true, enteredDestination = destinationUM?.addressTextField?.actualAddress, - fee = feeSelectorUM?.selectedFee, - feeError = (feeUM?.feeSelectorUM as? FeeSelectorUM.Error)?.error, + fee = if (uiState.value.isRedesignEnabled) { + feeUMV2?.selectedFeeItem?.fee + } else { + feeSelectorUM?.selectedFee + }, + feeError = if (uiState.value.isRedesignEnabled) { + (uiState.value.feeSelectorUM as? FeeSelectorUMRedesigned.Error)?.error + } else { + (feeUM?.feeSelectorUM as? FeeSelectorUM.Error)?.error + }, ) private var sendIdleTimer: Long = 0L From 0f9ee58183f1bf1bf7ba293af469cea9a6d846a9 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 25 Aug 2025 16:15:09 +0500 Subject: [PATCH 2/2] Updated on 2026-08-14 --- .../features/send/v2/sendnft/DefaultNFTSendComponent.kt | 2 +- .../tangem/features/send/v2/sendnft/model/NFTSendModel.kt | 7 +++++++ .../send/v2/sendnft/success/NFTSendSuccessComponent.kt | 3 ++- .../send/v2/sendnft/success/model/NFTSendSuccessModel.kt | 8 ++------ 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/DefaultNFTSendComponent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/DefaultNFTSendComponent.kt index b23440cfeb..2a66af2d55 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/DefaultNFTSendComponent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/DefaultNFTSendComponent.kt @@ -111,7 +111,7 @@ internal class DefaultNFTSendComponent @AssistedInject constructor( val stackState by childStack.subscribeAsState() val state by model.uiState.collectAsStateWithLifecycle() - BackHandler(onBack = ::onChildBack) + BackHandler(onBack = model::onBackClick) SendContent( navigationUM = state.navigationUM, stackState = stackState, diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/model/NFTSendModel.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/model/NFTSendModel.kt index 90a8753b4a..11d9d7ba78 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/model/NFTSendModel.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/model/NFTSendModel.kt @@ -28,6 +28,7 @@ import com.tangem.domain.transaction.error.GetFeeError import com.tangem.domain.transaction.usecase.CreateNFTTransferTransactionUseCase import com.tangem.domain.transaction.usecase.GetFeeUseCase import com.tangem.domain.wallets.usecase.GetUserWalletUseCase +import com.tangem.features.nft.entity.NFTSendSuccessTrigger import com.tangem.features.send.v2.api.NFTSendComponent import com.tangem.features.send.v2.api.SendFeatureToggles import com.tangem.features.send.v2.api.entity.FeeSelectorUM @@ -74,6 +75,7 @@ internal class NFTSendModel @Inject constructor( private val sendFeedbackEmailUseCase: SendFeedbackEmailUseCase, private val alertFactory: SendConfirmAlertFactory, private val sendFeatureToggles: SendFeatureToggles, + private val nftSendSuccessTrigger: NFTSendSuccessTrigger, ) : Model(), SendNFTComponentCallback, NFTSendSuccessComponent.ModelCallback { val params: NFTSendComponent.Params = paramsContainer.require() @@ -119,6 +121,11 @@ internal class NFTSendModel @Inject constructor( } override fun onBackClick() { + if (currentRouteFlow.value == ConfirmSuccess) { + modelScope.launch { + nftSendSuccessTrigger.triggerSuccessNFTSend() + } + } router.pop() } diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/NFTSendSuccessComponent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/NFTSendSuccessComponent.kt index 76f7329658..e651f4f298 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/NFTSendSuccessComponent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/NFTSendSuccessComponent.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.tangem.common.ui.navigationButtons.NavigationModelCallback import com.tangem.core.decompose.context.AppComponentContext import com.tangem.core.decompose.context.child import com.tangem.core.decompose.model.getOrCreateModel @@ -85,7 +86,7 @@ internal class NFTSendSuccessComponent @AssistedInject constructor( val callback: ModelCallback, ) - interface ModelCallback { + interface ModelCallback : NavigationModelCallback { fun onResult(nftSendUM: NFTSendUM) } diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/model/NFTSendSuccessModel.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/model/NFTSendSuccessModel.kt index 9352ec6898..7fc3951005 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/model/NFTSendSuccessModel.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/model/NFTSendSuccessModel.kt @@ -1,7 +1,6 @@ package com.tangem.features.send.v2.sendnft.success.model import androidx.compose.runtime.Stable -import com.tangem.common.routing.AppRouter import com.tangem.common.ui.navigationButtons.NavigationButton import com.tangem.common.ui.navigationButtons.NavigationUM import com.tangem.core.analytics.api.AnalyticsEventHandler @@ -31,7 +30,6 @@ internal class NFTSendSuccessModel @Inject constructor( paramsContainer: ParamsContainer, override val dispatchers: CoroutineDispatcherProvider, private val analyticsEventHandler: AnalyticsEventHandler, - private val appRouter: AppRouter, private val urlOpener: UrlOpener, private val shareManager: ShareManager, ) : Model() { @@ -64,16 +62,14 @@ internal class NFTSendSuccessModel @Inject constructor( isValid = true, ), ) - appRouter.pop() + params.callback.onBackClick() }, primaryButton = NavigationButton( textReference = resourceReference(R.string.common_close), iconRes = null, isEnabled = true, isHapticClick = false, - onClick = { - appRouter.pop() - }, + onClick = params.callback::onBackClick, ), prevButton = null, secondaryPairButtonsUM = NavigationButton(