Updated on 2026-08-14
This commit is contained in:
parent
f6151916ad
commit
fb5c125110
9 changed files with 49 additions and 10 deletions
|
|
@ -468,6 +468,7 @@ internal class DefaultOnrampRepository(
|
|||
OnrampQuote.Error(
|
||||
paymentMethod = paymentMethod,
|
||||
provider = provider,
|
||||
error = onrampError,
|
||||
)
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -26,5 +26,6 @@ sealed class OnrampQuote {
|
|||
data class Error(
|
||||
override val paymentMethod: OnrampPaymentMethod,
|
||||
override val provider: OnrampProvider,
|
||||
val error: OnrampError,
|
||||
) : OnrampQuote()
|
||||
}
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
package com.tangem.domain.onramp.analytics
|
||||
|
||||
import com.tangem.core.analytics.models.AnalyticsEvent
|
||||
import com.tangem.core.analytics.models.AnalyticsParam.Key.CURRENCY
|
||||
import com.tangem.core.analytics.models.AnalyticsParam.Key.ERROR_CODE
|
||||
import com.tangem.core.analytics.models.AnalyticsParam.Key.ERROR_DESCRIPTION
|
||||
import com.tangem.core.analytics.models.AnalyticsParam.Key.PAYMENT_METHOD
|
||||
|
|
@ -37,7 +36,7 @@ sealed class OnrampAnalyticsEvent(
|
|||
private val currency: String,
|
||||
) : OnrampAnalyticsEvent(
|
||||
event = "Currency Chosen",
|
||||
params = mapOf(CURRENCY to currency),
|
||||
params = mapOf("Currency Type" to currency),
|
||||
)
|
||||
|
||||
data object CloseOnramp : OnrampAnalyticsEvent(event = "Button - Close")
|
||||
|
|
@ -114,7 +113,7 @@ sealed class OnrampAnalyticsEvent(
|
|||
event = "Button - Buy",
|
||||
params = mapOf(
|
||||
PROVIDER to providerName,
|
||||
CURRENCY to currency,
|
||||
"Currency Type" to currency,
|
||||
TOKEN_PARAM to tokenSymbol,
|
||||
),
|
||||
)
|
||||
|
|
@ -131,7 +130,7 @@ sealed class OnrampAnalyticsEvent(
|
|||
TOKEN_PARAM to tokenSymbol,
|
||||
PROVIDER to providerName,
|
||||
RESIDENCE to residence,
|
||||
CURRENCY to currency,
|
||||
"Currency Type" to currency,
|
||||
PAYMENT_METHOD to paymentMethod,
|
||||
),
|
||||
)
|
||||
|
|
@ -143,11 +142,13 @@ sealed class OnrampAnalyticsEvent(
|
|||
private val tokenSymbol: String,
|
||||
private val errorCode: String,
|
||||
private val providerName: String?,
|
||||
private val paymentMethod: String?,
|
||||
) : OnrampAnalyticsEvent(
|
||||
event = "Errors",
|
||||
params = buildMap {
|
||||
put(TOKEN_PARAM, tokenSymbol)
|
||||
providerName?.let { put(PROVIDER, providerName) }
|
||||
paymentMethod?.let { put(PAYMENT_METHOD, paymentMethod) }
|
||||
put(ERROR_CODE, errorCode)
|
||||
},
|
||||
)
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ internal class OnrampAmountStateFactory(
|
|||
R.string.onramp_max_amount_restriction
|
||||
}
|
||||
is OnrampError.AmountError.TooSmallError -> {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.MaxAmountError)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.MinAmountError)
|
||||
R.string.onramp_min_amount_restriction
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ internal class OnrampMainComponentModel @Inject constructor(
|
|||
private val _state: MutableStateFlow<OnrampMainComponentUM> = MutableStateFlow(
|
||||
value = stateFactory.getInitialState(
|
||||
currency = params.cryptoCurrency.name,
|
||||
onClose = router::pop,
|
||||
onClose = ::onCloseClick,
|
||||
),
|
||||
)
|
||||
private val quotesTaskScheduler = SingleTaskScheduler<Unit>()
|
||||
|
|
@ -270,10 +270,13 @@ internal class OnrampMainComponentModel @Inject constructor(
|
|||
super.onDestroy()
|
||||
}
|
||||
|
||||
private fun onCloseClick() {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.CloseOnramp)
|
||||
router.pop()
|
||||
}
|
||||
|
||||
private fun handleQuoteResult(quotes: List<OnrampQuote>) {
|
||||
quotes.filterIsInstance<OnrampQuote.AmountError>().forEach { errorState ->
|
||||
sendOnrampErrorAnalytic(errorState.error)
|
||||
}
|
||||
sendOnrampQuotesErrorAnalytic(quotes)
|
||||
|
||||
val quote = quotes.firstOrNull()
|
||||
|
||||
|
|
@ -346,9 +349,30 @@ internal class OnrampMainComponentModel @Inject constructor(
|
|||
error = error,
|
||||
tokenSymbol = params.cryptoCurrency.symbol,
|
||||
providerName = providerContent?.providerName,
|
||||
paymentMethod = providerContent?.paymentMethod?.name,
|
||||
)
|
||||
}
|
||||
|
||||
private fun sendOnrampQuotesErrorAnalytic(quotes: List<OnrampQuote>) {
|
||||
quotes.forEach { errorState ->
|
||||
when (errorState) {
|
||||
is OnrampQuote.Error -> analyticsEventHandler.sendOnrampErrorEvent(
|
||||
error = errorState.error,
|
||||
tokenSymbol = params.cryptoCurrency.symbol,
|
||||
providerName = errorState.provider.info.name,
|
||||
paymentMethod = errorState.paymentMethod.name,
|
||||
)
|
||||
is OnrampQuote.AmountError -> analyticsEventHandler.sendOnrampErrorEvent(
|
||||
error = errorState.error,
|
||||
tokenSymbol = params.cryptoCurrency.symbol,
|
||||
providerName = errorState.provider.info.name,
|
||||
paymentMethod = errorState.paymentMethod.name,
|
||||
)
|
||||
else -> { /* no-op */ }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val UPDATE_DELAY = 10_000L
|
||||
}
|
||||
|
|
|
|||
|
|
@ -259,6 +259,7 @@ internal class SelectProviderModel @Inject constructor(
|
|||
error = error,
|
||||
tokenSymbol = params.cryptoCurrency.symbol,
|
||||
providerName = selectedProvider?.name,
|
||||
paymentMethod = state.value.selectedPaymentMethod.paymentMethod.name,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ internal class OnrampRedirectModel @Inject constructor(
|
|||
error = error,
|
||||
tokenSymbol = params.cryptoCurrency.symbol,
|
||||
providerName = params.onrampProviderWithQuote.provider.info.name,
|
||||
paymentMethod = params.onrampProviderWithQuote.paymentMethod.name,
|
||||
)
|
||||
val contentMessage = ContentMessage { onDismiss ->
|
||||
BasicDialog(
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ internal class OnrampSuccessComponentModel @Inject constructor(
|
|||
error = error,
|
||||
tokenSymbol = cryptoCurrency.symbol,
|
||||
providerName = transaction.providerName,
|
||||
paymentMethod = transaction.paymentMethod,
|
||||
)
|
||||
Timber.e(error.toString())
|
||||
},
|
||||
|
|
@ -101,7 +102,12 @@ internal class OnrampSuccessComponentModel @Inject constructor(
|
|||
goToProviderClick = ::goToProviderClick,
|
||||
).convert(status)
|
||||
}
|
||||
removeTransactionIfTerminalStatus(cryptoCurrency, transaction.providerName, status)
|
||||
removeTransactionIfTerminalStatus(
|
||||
cryptoCurrency = cryptoCurrency,
|
||||
providerName = transaction.providerName,
|
||||
paymentMethod = transaction.paymentMethod,
|
||||
status = status,
|
||||
)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
|
@ -109,6 +115,7 @@ internal class OnrampSuccessComponentModel @Inject constructor(
|
|||
private fun removeTransactionIfTerminalStatus(
|
||||
cryptoCurrency: CryptoCurrency,
|
||||
providerName: String,
|
||||
paymentMethod: String,
|
||||
status: OnrampStatus,
|
||||
) {
|
||||
modelScope.launch {
|
||||
|
|
@ -118,6 +125,7 @@ internal class OnrampSuccessComponentModel @Inject constructor(
|
|||
error = error,
|
||||
tokenSymbol = cryptoCurrency.symbol,
|
||||
providerName = providerName,
|
||||
paymentMethod = paymentMethod,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,11 +8,13 @@ internal fun AnalyticsEventHandler.sendOnrampErrorEvent(
|
|||
error: OnrampError,
|
||||
tokenSymbol: String,
|
||||
providerName: String? = null,
|
||||
paymentMethod: String? = null,
|
||||
) = when (error) {
|
||||
is OnrampError.DataError -> send(
|
||||
OnrampAnalyticsEvent.Errors(
|
||||
tokenSymbol = tokenSymbol,
|
||||
providerName = providerName,
|
||||
paymentMethod = paymentMethod,
|
||||
errorCode = error.code,
|
||||
),
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue