From 58e517082fa56bc91f4c6b6815698ba654949abc Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 23 Aug 2024 16:19:26 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../tangem/feature/swap/ui/StateBuilder.kt | 26 ++----------------- .../feature/swap/viewmodels/SwapViewModel.kt | 18 +++---------- 2 files changed, 6 insertions(+), 38 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 c88a51d613..5f05279157 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 @@ -1261,7 +1261,6 @@ internal class StateBuilder( selectedProviderId: String, pricesLowerBest: Map, providersStates: Map, - unavailableProviders: List, onDismiss: () -> Unit, ): SwapStateHolder { val availableProvidersStates = providersStates.entries @@ -1269,15 +1268,10 @@ internal class StateBuilder( it.convertToProviderBottomSheetState(pricesLowerBest, actions.onProviderSelect) } .sortedWith(ProviderPercentDiffComparator) - val unavailableProviderStates = unavailableProviders.map { - it.convertToUnavailableProviderState( - alertText = resourceReference(R.string.express_provider_not_available), - selectionType = ProviderState.SelectionType.NONE, - ) - } + .toImmutableList() val config = ChooseProviderBottomSheetConfig( selectedProviderId = selectedProviderId, - providers = (availableProvidersStates + unavailableProviderStates).toImmutableList(), + providers = availableProvidersStates, ) return uiState.copy( bottomSheetConfig = TangemBottomSheetConfig( @@ -1631,22 +1625,6 @@ internal class StateBuilder( ) } - private fun SwapProvider.convertToUnavailableProviderState( - alertText: TextReference, - selectionType: ProviderState.SelectionType, - onProviderClick: ((String) -> Unit)? = null, - ): ProviderState { - return ProviderState.Unavailable( - id = this.providerId, - name = this.name, - iconUrl = this.imageLarge, - type = this.type.providerName, - selectionType = selectionType, - alertText = alertText, - onProviderClick = onProviderClick, - ) - } - private fun SwapProvider.convertToAvailableFromProviderState( swapProvider: SwapProvider, alertText: TextReference, 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 e0061c0c1b..8361ef85c9 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 @@ -439,13 +439,14 @@ internal class SwapViewModel @Inject constructor( val consideredProviders = state.consideredProvidersStates() return if (consideredProviders.isNotEmpty()) { + val successLoadedData = consideredProviders.getLastLoadedSuccessStates() + val bestQuotesProvider = findBestQuoteProvider(successLoadedData) val currentSelected = dataState.selectedProvider if (currentSelected != null && consideredProviders.keys.contains(currentSelected)) { - currentSelected + // logic for always choose best if already selected provider + bestQuotesProvider ?: currentSelected } else { - val successLoadedData = consideredProviders.getLastLoadedSuccessStates() val recommendedProvider = successLoadedData.keys.firstOrNull { it.isRecommended } - val bestQuotesProvider = findBestQuoteProvider(successLoadedData) triggerPromoProviderEvent(recommendedProvider, bestQuotesProvider) recommendedProvider ?: bestQuotesProvider ?: consideredProviders.keys.first() } @@ -962,12 +963,10 @@ internal class SwapViewModel @Inject constructor( analyticsEventHandler.send(SwapEvents.ProviderClicked) val states = dataState.lastLoadedSwapStates.getLastLoadedSuccessStates() val pricesLowerBest = getPricesLowerBest(providerId, states) - val unavailableProviders = getUnavailableProvidersFor(dataState.lastLoadedSwapStates) uiState = stateBuilder.showSelectProviderBottomSheet( uiState = uiState, selectedProviderId = providerId, pricesLowerBest = pricesLowerBest, - unavailableProviders = unavailableProviders, providersStates = dataState.lastLoadedSwapStates, ) { uiState = stateBuilder.dismissBottomSheet(uiState) } }, @@ -1119,15 +1118,6 @@ internal class SwapViewModel @Inject constructor( return groupToFind.available.find { idToFind == it.currencyStatus.currency.id.value }?.providers ?: emptyList() } - private fun getAllProviders(): List { - return dataState.tokensDataState?.allProviders ?: emptyList() - } - - private fun getUnavailableProvidersFor(state: Map): List { - val availableProviders = state.keys.map { it.providerId } - return getAllProviders().filterNot { availableProviders.contains(it.providerId) } - } - private fun Map.getLastLoadedSuccessStates(): SuccessLoadedSwapData { return this.filter { it.value is SwapState.QuotesLoadedState } .mapValues { it.value as SwapState.QuotesLoadedState }