Updated on 2026-08-14

This commit is contained in:
Tangem 2024-08-23 16:19:26 +03:00
parent ae42c238d3
commit 58e517082f
2 changed files with 6 additions and 38 deletions

View file

@ -1261,7 +1261,6 @@ internal class StateBuilder(
selectedProviderId: String,
pricesLowerBest: Map<String, Float>,
providersStates: Map<SwapProvider, SwapState>,
unavailableProviders: List<SwapProvider>,
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,

View file

@ -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<SwapProvider> {
return dataState.tokensDataState?.allProviders ?: emptyList()
}
private fun getUnavailableProvidersFor(state: Map<SwapProvider, SwapState>): List<SwapProvider> {
val availableProviders = state.keys.map { it.providerId }
return getAllProviders().filterNot { availableProviders.contains(it.providerId) }
}
private fun Map<SwapProvider, SwapState>.getLastLoadedSuccessStates(): SuccessLoadedSwapData {
return this.filter { it.value is SwapState.QuotesLoadedState }
.mapValues { it.value as SwapState.QuotesLoadedState }