From b1b7b1bc15e20d36e6264e476aba36a2c1c02878 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 22 Nov 2023 01:48:04 +0200 Subject: [PATCH] Updated on 2026-08-14 --- .../feature/swap/viewmodels/SwapViewModel.kt | 47 +++++++++++++++++-- 1 file changed, 42 insertions(+), 5 deletions(-) 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 9c047326e0..987762b439 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 @@ -177,6 +177,7 @@ internal class SwapViewModel @Inject constructor( fromToken = fromCurrencyStatus.currency, toToken = selectedCurrency.currency, amount = lastAmount.value, + toProvidersList = findSwapProviders(fromCurrencyStatus, selectedCurrency) ) } } @@ -198,7 +199,7 @@ internal class SwapViewModel @Inject constructor( fromToken: CryptoCurrency, toToken: CryptoCurrency, amount: String, - toProvidersList: List = listOf(SwapProvider(1, listOf(RateType.FLOAT))), + toProvidersList: List, ) { singleTaskScheduler.cancelTask() uiState = stateBuilder.createQuotesLoadingState(uiState, fromToken, toToken, initialCryptoCurrency.id.value) @@ -218,7 +219,12 @@ internal class SwapViewModel @Inject constructor( val toCurrency = dataState.toCryptoCurrency val amount = dataState.amount if (fromCurrency != null && toCurrency != null && amount != null) { - startLoadingQuotes(fromCurrency.currency, toCurrency.currency, amount) + startLoadingQuotes( + fromToken = fromCurrency.currency, + toToken = toCurrency.currency, + amount = amount, + toProvidersList = findSwapProviders(fromCurrency, toCurrency) + ) } } @@ -428,7 +434,12 @@ internal class SwapViewModel @Inject constructor( fromCryptoCurrency = fromToken, toCryptoCurrency = toToken, ) - startLoadingQuotes(fromToken.currency, toToken.currency, lastAmount.value) + startLoadingQuotes( + fromToken = fromToken.currency, + toToken = toToken.currency, + amount = lastAmount.value, + toProvidersList = findSwapProviders(fromToken, toToken) + ) swapRouter.openScreen(SwapNavScreen.Main) } } @@ -448,7 +459,12 @@ internal class SwapViewModel @Inject constructor( uiState, inputNumberFormatter.formatWithThousands(lastAmount.value, decimals), ) - startLoadingQuotes(newFromToken.currency, newToToken.currency, lastAmount.value) + startLoadingQuotes( + fromToken = newFromToken.currency, + toToken = newToToken.currency, + amount = lastAmount.value, + toProvidersList = findSwapProviders(newFromToken, newToToken) + ) } } @@ -462,7 +478,12 @@ internal class SwapViewModel @Inject constructor( uiState = stateBuilder.updateSwapAmount(uiState, inputNumberFormatter.formatWithThousands(cutValue, decimals)) amountDebouncer.debounce(viewModelScope, DEBOUNCE_AMOUNT_DELAY) { - startLoadingQuotes(fromToken.currency, toToken.currency, lastAmount.value) + startLoadingQuotes( + fromToken = fromToken.currency, + toToken = toToken.currency, + amount = lastAmount.value, + toProvidersList = findSwapProviders(fromToken, toToken) + ) } } } @@ -576,6 +597,22 @@ internal class SwapViewModel @Inject constructor( ) } + private fun findSwapProviders(fromToken: CryptoCurrencyStatus, toToken: CryptoCurrencyStatus): List { + val groupToFind = if (isOrderReversed) { + dataState.tokensDataState?.fromGroup + } else { + dataState.tokensDataState?.toGroup + } ?: return emptyList() + + val idToFind = if (isOrderReversed) { + fromToken.currency.id.value + } else { + toToken.currency.id.value + } + + return groupToFind.available.find { idToFind == it.currencyStatus.currency.id.value }?.providers ?: emptyList() + } + companion object { private const val loggingTag = "SwapViewModel" private const val INITIAL_AMOUNT = ""