Updated on 2026-08-14
This commit is contained in:
commit
810a267dc6
4 changed files with 66 additions and 45 deletions
|
|
@ -19,25 +19,23 @@ enum class StakingActionType {
|
|||
UNKNOWN,
|
||||
;
|
||||
|
||||
companion object {
|
||||
val StakingActionType.asAnalyticName
|
||||
get() = when (this) {
|
||||
STAKE -> "Stake"
|
||||
UNSTAKE -> "Unstake"
|
||||
CLAIM_REWARDS -> "Claim Rewards"
|
||||
RESTAKE_REWARDS -> "Restake Rewards"
|
||||
WITHDRAW -> "Withdraw"
|
||||
RESTAKE -> "Restake"
|
||||
CLAIM_UNSTAKED -> "Claim Unstaked"
|
||||
UNLOCK_LOCKED -> "Unlock Locked"
|
||||
STAKE_LOCKED -> "Stake Locked"
|
||||
VOTE -> "Vote"
|
||||
REVOKE -> "Revoke"
|
||||
VOTE_LOCKED -> "Vote Locked"
|
||||
REVOTE -> "Revote"
|
||||
REBOND -> "Rebond"
|
||||
MIGRATE -> "Migrate"
|
||||
UNKNOWN -> "Unknown"
|
||||
}
|
||||
}
|
||||
val asAnalyticName
|
||||
get() = when (this) {
|
||||
STAKE -> "Stake"
|
||||
UNSTAKE -> "Unstake"
|
||||
CLAIM_REWARDS -> "Claim Rewards"
|
||||
RESTAKE_REWARDS -> "Restake Rewards"
|
||||
WITHDRAW -> "Withdraw"
|
||||
RESTAKE -> "Restake"
|
||||
CLAIM_UNSTAKED -> "Claim Unstaked"
|
||||
UNLOCK_LOCKED -> "Unlock Locked"
|
||||
STAKE_LOCKED -> "Stake Locked"
|
||||
VOTE -> "Vote"
|
||||
REVOKE -> "Revoke"
|
||||
VOTE_LOCKED -> "Vote Locked"
|
||||
REVOTE -> "Revote"
|
||||
REBOND -> "Rebond"
|
||||
MIGRATE -> "Migrate"
|
||||
UNKNOWN -> "Unknown"
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,6 @@ package com.tangem.features.staking.impl.analytics
|
|||
import com.tangem.core.analytics.models.AnalyticsEvent
|
||||
import com.tangem.core.analytics.models.AnalyticsParam
|
||||
import com.tangem.domain.staking.model.stakekit.action.StakingActionType
|
||||
import com.tangem.domain.staking.model.stakekit.action.StakingActionType.Companion.asAnalyticName
|
||||
|
||||
internal sealed class StakingAnalyticsEvents(
|
||||
event: String,
|
||||
|
|
@ -101,6 +100,17 @@ internal sealed class StakingAnalyticsEvents(
|
|||
),
|
||||
)
|
||||
|
||||
data class ValidatorChosen(
|
||||
val token: String,
|
||||
val validator: String,
|
||||
) : StakingAnalyticsEvents(
|
||||
event = "Validator Chosen",
|
||||
params = mapOf(
|
||||
AnalyticsParam.TOKEN_PARAM to token,
|
||||
"Validator" to validator,
|
||||
),
|
||||
)
|
||||
|
||||
data class ButtonValidator(
|
||||
val source: StakeScreenSource,
|
||||
val token: String,
|
||||
|
|
@ -122,11 +132,11 @@ internal sealed class StakingAnalyticsEvents(
|
|||
)
|
||||
|
||||
data class ButtonAction(
|
||||
val action: String,
|
||||
val action: StakingActionType,
|
||||
val token: String,
|
||||
val validator: String,
|
||||
) : StakingAnalyticsEvents(
|
||||
event = "Button - $action",
|
||||
event = "Button - ${action.asAnalyticName}",
|
||||
params = mapOf(
|
||||
AnalyticsParam.TOKEN_PARAM to token,
|
||||
"Validator" to validator,
|
||||
|
|
|
|||
|
|
@ -82,14 +82,6 @@ internal class StakingAnalyticSender(
|
|||
val validatorState = confirmationState?.validatorState as? ValidatorState.Content
|
||||
val validatorName = validatorState?.chosenValidator?.name ?: return
|
||||
|
||||
analyticsEventHandler.send(
|
||||
StakingAnalyticsEvents.ButtonAction(
|
||||
action = getStakingActionType(value).name,
|
||||
token = value.cryptoCurrencyName,
|
||||
validator = validatorName,
|
||||
),
|
||||
)
|
||||
|
||||
analyticsEventHandler.send(
|
||||
Basic.TransactionSent(
|
||||
sentFrom = AnalyticsParam.TxSentFrom.Staking(
|
||||
|
|
@ -109,6 +101,20 @@ internal class StakingAnalyticSender(
|
|||
)
|
||||
}
|
||||
|
||||
fun sendTransactionStakingClickedAnalytics(value: StakingUiState) {
|
||||
val confirmationState = value.confirmationState as? StakingStates.ConfirmationState.Data
|
||||
val validatorState = confirmationState?.validatorState as? ValidatorState.Content
|
||||
val validatorName = validatorState?.chosenValidator?.name ?: return
|
||||
|
||||
analyticsEventHandler.send(
|
||||
StakingAnalyticsEvents.ButtonAction(
|
||||
action = getStakingActionType(value),
|
||||
token = value.cryptoCurrencySymbol,
|
||||
validator = validatorName,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun getStakingActionType(value: StakingUiState): StakingActionType {
|
||||
val confirmationState = value.confirmationState as? StakingStates.ConfirmationState.Data
|
||||
|
||||
|
|
|
|||
|
|
@ -262,7 +262,7 @@ internal class StakingViewModel @Inject constructor(
|
|||
onStakingFeeError = { error ->
|
||||
analyticsEventHandler.send(
|
||||
StakingAnalyticsEvents.StakingError(
|
||||
value.cryptoCurrencyName,
|
||||
value.cryptoCurrencySymbol,
|
||||
error.javaClass.simpleName,
|
||||
),
|
||||
)
|
||||
|
|
@ -270,7 +270,7 @@ internal class StakingViewModel @Inject constructor(
|
|||
updateNotifications(GetFeeError.UnknownError)
|
||||
},
|
||||
onFeeError = { error ->
|
||||
analyticsEventHandler.send(StakingAnalyticsEvents.TransactionError(value.cryptoCurrencyName))
|
||||
analyticsEventHandler.send(StakingAnalyticsEvents.TransactionError(value.cryptoCurrencySymbol))
|
||||
stateController.update(AddStakingErrorTransformer())
|
||||
updateNotifications(error)
|
||||
},
|
||||
|
|
@ -291,6 +291,7 @@ internal class StakingViewModel @Inject constructor(
|
|||
private fun handleOnNextConfirmationClick() {
|
||||
if (isAssentState()) {
|
||||
viewModelScope.launch {
|
||||
stakingAnalyticSender.sendTransactionStakingClickedAnalytics(value)
|
||||
stateController.update(SetConfirmationStateInProgressTransformer())
|
||||
transactionSender.constructAndSendTransactions(
|
||||
onConstructSuccess = { constructedTransactions ->
|
||||
|
|
@ -300,7 +301,7 @@ internal class StakingViewModel @Inject constructor(
|
|||
Timber.e(error.toString())
|
||||
analyticsEventHandler.send(
|
||||
StakingAnalyticsEvents.StakingError(
|
||||
token = value.cryptoCurrencyName,
|
||||
token = value.cryptoCurrencySymbol,
|
||||
errorType = error.javaClass.simpleName,
|
||||
),
|
||||
)
|
||||
|
|
@ -314,7 +315,7 @@ internal class StakingViewModel @Inject constructor(
|
|||
},
|
||||
onSendError = { error ->
|
||||
Timber.e(error.toString())
|
||||
analyticsEventHandler.send(StakingAnalyticsEvents.TransactionError(value.cryptoCurrencyName))
|
||||
analyticsEventHandler.send(StakingAnalyticsEvents.TransactionError(value.cryptoCurrencySymbol))
|
||||
stakingEventFactory.createSendTransactionErrorAlert(error)
|
||||
stateController.update(SetConfirmationStateResetAssentTransformer)
|
||||
},
|
||||
|
|
@ -353,7 +354,7 @@ internal class StakingViewModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onInitialInfoBannerClick() {
|
||||
analyticsEventHandler.send(StakingAnalyticsEvents.WhatIsStaking(cryptoCurrencyStatus.currency.symbol))
|
||||
analyticsEventHandler.send(StakingAnalyticsEvents.WhatIsStaking(value.cryptoCurrencySymbol))
|
||||
innerRouter.openUrl(WHAT_IS_STAKING_ARTICLE_URL)
|
||||
}
|
||||
|
||||
|
|
@ -374,13 +375,13 @@ internal class StakingViewModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onMaxValueClick() {
|
||||
analyticsEventHandler.send(StakingAnalyticsEvents.ButtonMax(cryptoCurrencyStatus.currency.symbol))
|
||||
analyticsEventHandler.send(StakingAnalyticsEvents.ButtonMax(value.cryptoCurrencySymbol))
|
||||
stateController.update(AmountMaxValueStateTransformer(cryptoCurrencyStatus, yield))
|
||||
}
|
||||
|
||||
override fun onCurrencyChangeClick(isFiat: Boolean) {
|
||||
analyticsEventHandler.send(
|
||||
StakingAnalyticsEvents.AmountSelectCurrency(cryptoCurrencyStatus.currency.symbol, isFiat),
|
||||
StakingAnalyticsEvents.AmountSelectCurrency(value.cryptoCurrencySymbol, isFiat),
|
||||
)
|
||||
stateController.update(AmountCurrencyChangeStateTransformer(cryptoCurrencyStatus, isFiat))
|
||||
}
|
||||
|
|
@ -389,19 +390,25 @@ internal class StakingViewModel @Inject constructor(
|
|||
analyticsEventHandler.send(
|
||||
StakingAnalyticsEvents.ButtonValidator(
|
||||
source = StakeScreenSource.Confirmation,
|
||||
token = cryptoCurrencyStatus.currency.symbol,
|
||||
token = value.cryptoCurrencySymbol,
|
||||
),
|
||||
)
|
||||
stakingStateRouter.showValidators()
|
||||
}
|
||||
|
||||
override fun onValidatorSelect(validator: Yield.Validator) {
|
||||
analyticsEventHandler.send(
|
||||
StakingAnalyticsEvents.ValidatorChosen(
|
||||
value.cryptoCurrencySymbol,
|
||||
validator.name,
|
||||
),
|
||||
)
|
||||
stateController.update(ValidatorSelectChangeTransformer(validator))
|
||||
}
|
||||
|
||||
override fun openRewardsValidators() {
|
||||
analyticsEventHandler.send(
|
||||
StakingAnalyticsEvents.ButtonRewards(value.cryptoCurrencyName),
|
||||
StakingAnalyticsEvents.ButtonRewards(value.cryptoCurrencySymbol),
|
||||
)
|
||||
val rewardsValidators =
|
||||
stateController.value.rewardsValidatorsState as? StakingStates.RewardsValidatorsState.Data
|
||||
|
|
@ -412,7 +419,7 @@ internal class StakingViewModel @Inject constructor(
|
|||
analyticsEventHandler.send(
|
||||
StakingAnalyticsEvents.ButtonValidator(
|
||||
source = StakeScreenSource.Info,
|
||||
token = cryptoCurrencyStatus.currency.symbol,
|
||||
token = value.cryptoCurrencySymbol,
|
||||
),
|
||||
)
|
||||
onNextClick(actionTypeToOverwrite = StakingActionCommonType.PENDING_REWARDS)
|
||||
|
|
@ -466,7 +473,7 @@ internal class StakingViewModel @Inject constructor(
|
|||
analyticsEventHandler.send(
|
||||
StakingAnalyticsEvents.ButtonValidator(
|
||||
source = StakeScreenSource.Info,
|
||||
token = cryptoCurrencyStatus.currency.symbol,
|
||||
token = value.cryptoCurrencySymbol,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
@ -511,7 +518,7 @@ internal class StakingViewModel @Inject constructor(
|
|||
).fold(
|
||||
ifLeft = { error ->
|
||||
Timber.e(error.toString())
|
||||
analyticsEventHandler.send(StakingAnalyticsEvents.TransactionError(value.cryptoCurrencyName))
|
||||
analyticsEventHandler.send(StakingAnalyticsEvents.TransactionError(value.cryptoCurrencySymbol))
|
||||
stateController.update(
|
||||
SetConfirmationStateAssentApprovalTransformer(
|
||||
appCurrencyProvider = Provider { appCurrency },
|
||||
|
|
@ -533,7 +540,7 @@ internal class StakingViewModel @Inject constructor(
|
|||
).fold(
|
||||
ifLeft = { error ->
|
||||
Timber.e(error.toString())
|
||||
analyticsEventHandler.send(StakingAnalyticsEvents.TransactionError(value.cryptoCurrencyName))
|
||||
analyticsEventHandler.send(StakingAnalyticsEvents.TransactionError(value.cryptoCurrencySymbol))
|
||||
stateController.update(
|
||||
SetConfirmationStateAssentApprovalTransformer(
|
||||
appCurrencyProvider = Provider { appCurrency },
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue