Updated on 2026-08-14

This commit is contained in:
Tangem 2026-07-08 14:20:04 +05:00
parent 03f702640e
commit abf6fc7d69
11 changed files with 129 additions and 11 deletions

View file

@ -20,6 +20,7 @@ import com.tangem.common.ui.userwallet.ext.walletInterationIcon
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.core.analytics.models.event.OfframpAnalyticsEvent
import com.tangem.core.analytics.models.event.TransferAnalyticsEvent
import com.tangem.core.decompose.di.GlobalUiMessageSender
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
@ -368,6 +369,7 @@ internal class TokenDetailsModel @Inject constructor(
actions = state.states,
networkSource = networkSource,
clickIntents = this@TokenDetailsModel,
analyticsEventHandler = analyticsEventsHandler,
onActionDispatched = bottomSheetNavigation::dismiss,
),
)
@ -547,6 +549,13 @@ internal class TokenDetailsModel @Inject constructor(
}
override fun onAddFundsClick() {
analyticsEventsHandler.send(
TokenScreenAnalyticsEvent.ButtonWithParams.ButtonAddFunds(
token = cryptoCurrency.symbol,
blockchain = cryptoCurrency.network.name,
derivationIndex = getAccountIndexOrNull(),
),
)
bottomSheetNavigation.activate(
TokenDetailsBottomSheetConfig.AddFunds(
userWalletId = userWalletId,
@ -556,6 +565,13 @@ internal class TokenDetailsModel @Inject constructor(
}
override fun onTransferClick() {
analyticsEventsHandler.send(
TokenScreenAnalyticsEvent.ButtonWithParams.ButtonTransfer(
token = cryptoCurrency.symbol,
blockchain = cryptoCurrency.network.name,
derivationIndex = getAccountIndexOrNull(),
),
)
val amount = cryptoCurrencyStatus?.value?.amount
if (amount == null || amount.signum() <= 0) {
handleUnavailabilityReason(
@ -565,6 +581,9 @@ internal class TokenDetailsModel @Inject constructor(
)
return
}
analyticsEventsHandler.send(
TransferAnalyticsEvent.MethodScreenOpened(source = AnalyticsParam.ScreensSources.Token),
)
bottomSheetNavigation.activate(TokenDetailsBottomSheetConfig.Transfer)
}

View file

@ -1,5 +1,7 @@
package com.tangem.feature.tokendetails.presentation.tokendetails.state.transformer
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.event.TransferAnalyticsEvent
import com.tangem.domain.models.StatusSource
import com.tangem.domain.tokens.model.ScenarioUnavailabilityReason
import com.tangem.domain.tokens.model.TokenActionsState
@ -13,6 +15,7 @@ internal class UpdateTransferTransformer(
private val actions: List<TokenActionsState.ActionState>,
private val networkSource: StatusSource,
private val clickIntents: TokenDetailsClickIntents,
private val analyticsEventHandler: AnalyticsEventHandler,
private val onActionDispatched: () -> Unit,
) : Transformer<TokenDetailsUM> {
@ -28,6 +31,7 @@ internal class UpdateTransferTransformer(
isLoading = action.unavailabilityReason.isOutdatedLoading(),
isEnabled = action.unavailabilityReason == ScenarioUnavailabilityReason.None,
onClick = {
analyticsEventHandler.send(TransferAnalyticsEvent.ButtonSend())
onActionDispatched()
clickIntents.onSendClick(action.unavailabilityReason)
},
@ -38,6 +42,7 @@ internal class UpdateTransferTransformer(
isLoading = action.unavailabilityReason.isLoading,
isEnabled = action.unavailabilityReason == ScenarioUnavailabilityReason.None,
onClick = {
analyticsEventHandler.send(TransferAnalyticsEvent.ButtonSwap())
onActionDispatched()
clickIntents.onSwapFromClick(action.unavailabilityReason)
},
@ -53,6 +58,7 @@ internal class UpdateTransferTransformer(
isLoading = false,
isEnabled = true,
onClick = {
analyticsEventHandler.send(TransferAnalyticsEvent.ButtonSwapAndSend())
onActionDispatched()
clickIntents.onSwapAndSendClick(it.unavailabilityReason)
},
@ -63,6 +69,7 @@ internal class UpdateTransferTransformer(
isLoading = action.unavailabilityReason.isOutdatedLoading(),
isEnabled = action.unavailabilityReason == ScenarioUnavailabilityReason.None,
onClick = {
analyticsEventHandler.send(TransferAnalyticsEvent.ButtonSell())
onActionDispatched()
clickIntents.onSellClick(action.unavailabilityReason)
},

View file

@ -1,6 +1,8 @@
package com.tangem.feature.tokendetails.presentation.tokendetails.state.transformer
import com.google.common.truth.Truth.assertThat
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.event.TransferAnalyticsEvent
import com.tangem.core.ui.components.containers.pullToRefresh.PullToRefreshConfig
import com.tangem.core.ui.components.marketprice.MarketPriceBlockState
import com.tangem.core.ui.extensions.stringReference
@ -24,6 +26,7 @@ import org.junit.jupiter.api.Test
class UpdateTransferTransformerTest {
private val clickIntents: TokenDetailsClickIntents = mockk(relaxed = true)
private val analyticsEventHandler: AnalyticsEventHandler = mockk(relaxed = true)
private val onActionDispatched: () -> Unit = mockk(relaxed = true)
@Test
@ -112,6 +115,7 @@ class UpdateTransferTransformerTest {
// THEN
verifyOrder {
analyticsEventHandler.send(ofType<TransferAnalyticsEvent.ButtonSend>())
onActionDispatched.invoke()
clickIntents.onSendClick(ScenarioUnavailabilityReason.None)
}
@ -130,6 +134,7 @@ class UpdateTransferTransformerTest {
// THEN
verifyOrder {
analyticsEventHandler.send(ofType<TransferAnalyticsEvent.ButtonSell>())
onActionDispatched.invoke()
clickIntents.onSellClick(ScenarioUnavailabilityReason.None)
}
@ -225,6 +230,7 @@ class UpdateTransferTransformerTest {
// THEN
verifyOrder {
analyticsEventHandler.send(ofType<TransferAnalyticsEvent.ButtonSwap>())
onActionDispatched.invoke()
clickIntents.onSwapFromClick(ScenarioUnavailabilityReason.None)
}
@ -347,6 +353,7 @@ class UpdateTransferTransformerTest {
// Assert
verifyOrder {
analyticsEventHandler.send(ofType<TransferAnalyticsEvent.ButtonSwapAndSend>())
onActionDispatched.invoke()
clickIntents.onSwapAndSendClick(ScenarioUnavailabilityReason.None)
}
@ -405,6 +412,7 @@ class UpdateTransferTransformerTest {
// THEN
verify(exactly = 0) { onActionDispatched.invoke() }
verify(exactly = 0) { clickIntents.onSendClick(any()) }
verify(exactly = 0) { analyticsEventHandler.send(any()) }
}
private fun createTransformer(
@ -414,6 +422,7 @@ class UpdateTransferTransformerTest {
actions = actions,
networkSource = networkSource,
clickIntents = clickIntents,
analyticsEventHandler = analyticsEventHandler,
onActionDispatched = onActionDispatched,
)