From 91863768854a8ea43f957ce003da12674cb2821a Mon Sep 17 00:00:00 2001 From: Tangem Date: Sat, 2 Mar 2024 13:09:13 +0000 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/feature/swap/ui/StateBuilder.kt | 4 ++-- .../feature/swap/viewmodels/SwapViewModel.kt | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt index 53e3148278..5e8c386764 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt @@ -888,10 +888,10 @@ internal class StateBuilder( ) } - fun addAlert(uiState: SwapStateHolder, onClick: () -> Unit): SwapStateHolder { + fun addAlert(uiState: SwapStateHolder, message: TextReference? = null, onClick: () -> Unit): SwapStateHolder { return uiState.copy( alert = SwapWarning.GenericWarning( - message = null, + message = message, onClick = onClick, ), ) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt index d194494046..39ca0d7991 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt @@ -8,6 +8,7 @@ import arrow.core.getOrElse import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.core.analytics.models.AnalyticsParam import com.tangem.core.analytics.models.Basic +import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.utils.InputNumberFormatter import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase import com.tangem.domain.appcurrency.model.AppCurrency @@ -113,7 +114,7 @@ internal class SwapViewModel @Inject constructor( val cryptoCurrencyStatus = getCryptoCurrencyStatusUseCase(it.walletId, initialCryptoCurrency.id).getOrNull() if (cryptoCurrencyStatus == null) { - uiState = stateBuilder.addAlert(uiState, swapRouter::back) + uiState = stateBuilder.addAlert(uiState = uiState, onClick = swapRouter::back) } else { initialCryptoCurrencyStatus = cryptoCurrencyStatus initTokens() @@ -459,7 +460,12 @@ internal class SwapViewModel @Inject constructor( return } val fromCurrency = requireNotNull(dataState.fromCryptoCurrency) - val fee = requireNotNull(dataState.selectedFee) + val fee = dataState.selectedFee + // TODO: unexpected crash for some users, this workaround to prevent app crash and follow to support + if (fee == null) { + makeDefaultAlert(TextReference.Str("Fee estimation error. Please send feedback to support.")) + return + } viewModelScope.launch(dispatchers.main) { runCatching(dispatchers.io) { swapInteractor.onSwap( @@ -749,6 +755,12 @@ internal class SwapViewModel @Inject constructor( } } + private fun makeDefaultAlert(message: TextReference) { + uiState = stateBuilder.addAlert(uiState, message) { + uiState = stateBuilder.clearAlert(uiState) + } + } + @Suppress("LongMethod", "CyclomaticComplexMethod") private fun createUiActions(): UiActions { return UiActions(