Updated on 2026-08-14
This commit is contained in:
parent
ae42c238d3
commit
58e517082f
2 changed files with 6 additions and 38 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue