diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/OnrampStateFactory.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/OnrampStateFactory.kt index 8cd1890fbb..136405af33 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/OnrampStateFactory.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/OnrampStateFactory.kt @@ -74,7 +74,7 @@ internal class OnrampStateFactory( ) } - private fun getErrorState(errorCode: String? = null): OnrampMainComponentUM { + fun getErrorState(errorCode: String? = null): OnrampMainComponentUM { val state = currentStateProvider() val endButton = state.topBarConfig.endButtonUM.copy(enabled = true) @@ -84,6 +84,7 @@ internal class OnrampStateFactory( buyButtonConfig = state.buyButtonConfig.copy(enabled = false), amountBlockState = state.amountBlockState.copy( amountFieldModel = state.amountBlockState.amountFieldModel.copy(isError = true), + secondaryFieldModel = OnrampAmountSecondaryFieldUM.Content(TextReference.EMPTY), ), providerBlockState = OnrampProviderBlockUM.Empty, errorNotification = NotificationUM.Warning.OnrampErrorNotification( diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt index 5b769528eb..366e4ba313 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt @@ -199,39 +199,7 @@ internal class OnrampMainComponentModel @Inject constructor( .onEach { maybeQuotes -> maybeQuotes.fold( ifLeft = ::handleOnrampError, - ifRight = { quotes -> - quotes.filterIsInstance().forEach { errorState -> - sendOnrampErrorAnalytic(errorState.error) - } - val quote = quotes.firstOrNull() ?: return@onEach - - val bestProvider = quote as? OnrampQuote.Data - val isMultipleQuotes = !quotes.isSingleItem() - val isOtherQuotesHasData = quotes - .filter { it.paymentMethod == quote.paymentMethod } - .filterNot { it == bestProvider } - .any { it is OnrampQuote.Data } - val hasBestProvider = isMultipleQuotes && isOtherQuotesHasData - - val isBestProvider = quote == bestProvider && hasBestProvider - - if (quote is OnrampQuote.Data && lastAmount.value != quote.fromAmount.value) { - lastAmount.value = quote.fromAmount.value - analyticsEventHandler.send( - OnrampAnalyticsEvent.ProviderCalculated( - providerName = quote.provider.info.name, - tokenSymbol = params.cryptoCurrency.symbol, - paymentMethod = quote.paymentMethod.name, - ), - ) - } - _state.update { - amountStateFactory.getAmountSecondaryUpdatedState( - quote = quote, - isBestRate = isBestProvider, - ) - } - }, + ifRight = ::handleQuoteResult, ) } .launchIn(modelScope) @@ -300,6 +268,46 @@ internal class OnrampMainComponentModel @Inject constructor( super.onDestroy() } + private fun handleQuoteResult(quotes: List) { + quotes.filterIsInstance().forEach { errorState -> + sendOnrampErrorAnalytic(errorState.error) + } + + val quote = quotes.firstOrNull() + + if (quote == null) { + _state.update { stateFactory.getErrorState() } + return + } + + val bestProvider = quote as? OnrampQuote.Data + val isMultipleQuotes = !quotes.isSingleItem() + val isOtherQuotesHasData = quotes + .filter { it.paymentMethod == quote.paymentMethod } + .filterNot { it == bestProvider } + .any { it is OnrampQuote.Data } + val hasBestProvider = isMultipleQuotes && isOtherQuotesHasData + + val isBestProvider = quote == bestProvider && hasBestProvider + + if (quote is OnrampQuote.Data && lastAmount.value != quote.fromAmount.value) { + lastAmount.value = quote.fromAmount.value + analyticsEventHandler.send( + OnrampAnalyticsEvent.ProviderCalculated( + providerName = quote.provider.info.name, + tokenSymbol = params.cryptoCurrency.symbol, + paymentMethod = quote.paymentMethod.name, + ), + ) + } + _state.update { + amountStateFactory.getAmountSecondaryUpdatedState( + quote = quote, + isBestRate = isBestProvider, + ) + } + } + private fun showDemoWarning() { val alertUM = AlertDemoModeUM(onConfirmClick = {})