From 40ab999383ad9f088675c19a6a73945f0c33fbd5 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 20 May 2026 00:35:49 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../feature/swap/domain/SwapInteractorImpl.kt | 2 +- .../tangem/feature/swap/model/SwapModel.kt | 11 ++++- .../swap/model/SwapNotificationsFactory.kt | 40 +++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt index 909abd9b3b..613f391bf4 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt @@ -1557,7 +1557,7 @@ internal class SwapInteractorImpl @Inject constructor( transaction = transaction, selectedToken = selectedFeeToken, ).fold( - ifLeft = { GetFeeError.UnknownError.left() }, + ifLeft = { error -> GetFeeError.DataError(error).left() }, ifRight = { dexFeeResult -> val feeToken = selectedFeeToken ?: resolveNativeFeeTokenStatus(fromStatus) diff --git a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt index 4d176bfa79..c3aa7806d3 100644 --- a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt +++ b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt @@ -1685,7 +1685,7 @@ internal class SwapModel @Inject constructor( val isNotNullCurrency = fromSwapCurrencyStatus != null && toSwapCurrencyStatus != null if (provider != null && swapState != null && isNotNullCurrency) { modelScope.launch { - feeSelectorRepository.state.value = FeeSelectorUM.Loading + feeSelectorReloadTrigger.triggerLoadingState() feeSelectorReloadTrigger.triggerUpdate() } analyticsEventHandler.send(SwapEvents.ProviderChosen(provider)) @@ -1710,6 +1710,15 @@ internal class SwapModel @Inject constructor( appRouter.push(route) }, + openTokenDetailsScreen = { cryptoCurrency -> + val fromSwapCurrencyStatus = dataState.fromSwapCurrencyStatus ?: return@UiActions + val route = AppRoute.CurrencyDetails( + userWalletId = fromSwapCurrencyStatus.userWalletId, + currency = cryptoCurrency, + ) + + appRouter.push(route) + }, onRetryClick = { startLoadingQuotesFromLastState() }, diff --git a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapNotificationsFactory.kt b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapNotificationsFactory.kt index 91e28c1b4e..92e79b91b0 100644 --- a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapNotificationsFactory.kt +++ b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapNotificationsFactory.kt @@ -379,6 +379,46 @@ internal class SwapNotificationsFactory( } } + private fun MutableList.maybeAddFeeErrorNotification( + feeCryptoCurrencyStatus: CryptoCurrencyStatus?, + quoteModel: SwapState.QuotesLoadedState, + feeError: GetFeeError?, + ) { + if (feeError == null || feeCryptoCurrencyStatus == null) return + when (feeError) { + is GetFeeError.DataError -> { + val error = feeError.cause + if (error is ExpressDataError) { + addAll( + getQuotesErrorStateNotifications( + expressDataError = error, + fromToken = quoteModel.fromTokenInfo.swapCurrencyStatus.currency, + balanceStatus = quoteModel.preparedSwapConfigState.balanceStatus, + swapFee = null, + ), + ) + } else { + addFeeUnreachableNotification( + tokenStatus = quoteModel.fromTokenInfo.swapCurrencyStatus.status, + coinStatus = feeCryptoCurrencyStatus, + feeError = feeError, + dustValue = quoteModel.currencyCheck?.dustValue, + onReload = actions.onRetryClick, + onClick = actions.openTokenDetailsScreen, + ) + } + } + else -> addFeeUnreachableNotification( + tokenStatus = quoteModel.fromTokenInfo.swapCurrencyStatus.status, + coinStatus = feeCryptoCurrencyStatus, + feeError = feeError, + dustValue = quoteModel.currencyCheck?.dustValue, + onReload = actions.onRetryClick, + onClick = actions.openTokenDetailsScreen, + ) + } + } + private fun MutableList.addReduceAmountNotification( cryptoCurrencyStatus: CryptoCurrencyStatus, fromAmount: SwapAmount,