diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataStateExpress.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataStateExpress.kt index d761ad97fb..1aa9ba51d1 100644 --- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataStateExpress.kt +++ b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataStateExpress.kt @@ -12,7 +12,7 @@ data class TokensDataStateExpress( val EMPTY = TokensDataStateExpress( fromGroup = CurrenciesGroup(emptyList(), emptyList(), false), - toGroup = CurrenciesGroup(emptyList(), emptyList(), false), + toGroup = CurrenciesGroup(emptyList(), emptyList(), false), allProviders = emptyList(), ) } 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 d38fc7f54a..55d82743e6 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 @@ -148,7 +148,7 @@ internal class SwapInteractorImpl @Inject constructor( return CurrenciesGroup( available = availableCryptoCurrencies, unavailable = unavailableCryptoCurrencies.map { CryptoCurrencySwapInfo(it, emptyList()) }, - afterSearch = false + afterSearch = false, ) } 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 f021a40ab2..ee03e66695 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 @@ -98,6 +98,11 @@ internal class SwapViewModel @Inject constructor( private var isOrderReversed = false private val lastAmount = mutableStateOf(INITIAL_AMOUNT) private var swapRouter: SwapRouter by Delegates.notNull() + + private val isExchangeTooSmallAmountError: (SwapState) -> Boolean = { + it is SwapState.SwapError && it.error is DataError.ExchangeTooSmallAmountError + } + val currentScreen: SwapNavScreen get() = swapRouter.currentScreen @@ -385,13 +390,17 @@ internal class SwapViewModel @Inject constructor( } private fun selectProvider(state: Map): SwapProvider { - val stateSuccess = state.getLastLoadedSuccessStates() - return if (stateSuccess.isNotEmpty()) { + val consideredProviders = state.filter { + it.value is SwapState.QuotesLoadedState || isExchangeTooSmallAmountError(it.value) + } + + return if (consideredProviders.isNotEmpty()) { val currentSelected = dataState.selectedProvider - if (currentSelected != null && stateSuccess.keys.contains(currentSelected)) { + if (currentSelected != null && consideredProviders.keys.contains(currentSelected)) { currentSelected } else { - findBestQuoteProvider(stateSuccess) ?: stateSuccess.keys.first() + findBestQuoteProvider(consideredProviders.getLastLoadedSuccessStates()) + ?: consideredProviders.keys.first() } } else { state.keys.first()