Updated on 2026-08-14
This commit is contained in:
parent
2a1369fce6
commit
5a99de87fb
29 changed files with 194 additions and 47 deletions
|
|
@ -3,6 +3,8 @@ package com.tangem.features.send.v2.networkselection.model
|
|||
import androidx.compose.runtime.Stable
|
||||
import com.tangem.common.getTotalCryptoAmount
|
||||
import com.tangem.common.getTotalFiatAmount
|
||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||
import com.tangem.features.send.v2.send.analytics.SendAnalyticEvents
|
||||
import com.tangem.core.decompose.di.ModelScoped
|
||||
import com.tangem.core.decompose.model.Model
|
||||
import com.tangem.core.decompose.model.ParamsContainer
|
||||
|
|
@ -44,6 +46,7 @@ import javax.inject.Inject
|
|||
internal class NetworkSelectionModel @Inject constructor(
|
||||
paramsContainer: ParamsContainer,
|
||||
override val dispatchers: CoroutineDispatcherProvider,
|
||||
private val analyticsEventHandler: AnalyticsEventHandler,
|
||||
private val multiAccountStatusListSupplier: MultiAccountStatusListSupplier,
|
||||
private val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase,
|
||||
private val getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase,
|
||||
|
|
@ -51,6 +54,10 @@ internal class NetworkSelectionModel @Inject constructor(
|
|||
|
||||
private val params: NetworkSelectionComponent.Params = paramsContainer.require()
|
||||
|
||||
init {
|
||||
analyticsEventHandler.send(SendAnalyticEvents.ChooseTokenScreenOpened())
|
||||
}
|
||||
|
||||
private val searchQuery = MutableStateFlow("")
|
||||
private val expandedWallets = MutableStateFlow(
|
||||
params.walletGroups.firstOrNull()
|
||||
|
|
@ -227,7 +234,15 @@ internal class NetworkSelectionModel @Inject constructor(
|
|||
text = cryptoAmount.format { crypto(currency) },
|
||||
isFlickering = isFlickering,
|
||||
),
|
||||
onItemClick = { params.onTokenSelected(context.userWalletId, currency) },
|
||||
onItemClick = {
|
||||
analyticsEventHandler.send(
|
||||
SendAnalyticEvents.TokenSelected(
|
||||
token = currency.symbol,
|
||||
blockchain = currency.network.name,
|
||||
),
|
||||
)
|
||||
params.onTokenSelected(context.userWalletId, currency)
|
||||
},
|
||||
onItemLongClick = null,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -105,6 +105,7 @@ internal class DefaultSendComponent @AssistedInject constructor(
|
|||
sendToken = fromCurrency.symbol,
|
||||
fromDerivationIndex = fromDerivationIndex,
|
||||
toDerivationIndex = null,
|
||||
type = model.consumeEntryType(),
|
||||
),
|
||||
)
|
||||
if (model.currentRoute.value.isEditMode) {
|
||||
|
|
@ -116,6 +117,7 @@ internal class DefaultSendComponent @AssistedInject constructor(
|
|||
CommonSendAnalyticEvents.AmountScreenOpened(
|
||||
categoryName = model.analyticCategoryName,
|
||||
source = model.analyticsSendSource,
|
||||
type = model.consumeEntryType(),
|
||||
),
|
||||
)
|
||||
activeComponent.updateState(model.uiState.value.amountUM)
|
||||
|
|
|
|||
|
|
@ -50,6 +50,21 @@ internal sealed class SendAnalyticEvents(
|
|||
},
|
||||
), AppsFlyerIncludedEvent
|
||||
|
||||
class ChooseTokenScreenOpened : SendAnalyticEvents(
|
||||
event = "Choose Token Screen Opened",
|
||||
)
|
||||
|
||||
class TokenSelected(
|
||||
val token: String,
|
||||
val blockchain: String,
|
||||
) : SendAnalyticEvents(
|
||||
event = "Token Selected",
|
||||
params = mapOf(
|
||||
TOKEN_PARAM to token,
|
||||
BLOCKCHAIN to blockchain,
|
||||
),
|
||||
)
|
||||
|
||||
data class ConvertTokenButtonClicked(
|
||||
val token: String,
|
||||
val blockchain: String,
|
||||
|
|
|
|||
|
|
@ -105,6 +105,8 @@ internal class SendModel @Inject constructor(
|
|||
private val params: SendComponent.Params = paramsContainer.require()
|
||||
private val cryptoCurrency = params.currency
|
||||
|
||||
private var isEntryTypeConsumed = false
|
||||
|
||||
val analyticCategoryName = CommonSendAnalyticEvents.SEND_CATEGORY
|
||||
val analyticsSendSource = CommonSendAnalyticEvents.CommonSendSource.Send
|
||||
|
||||
|
|
@ -264,6 +266,15 @@ internal class SendModel @Inject constructor(
|
|||
showAlertError()
|
||||
}
|
||||
|
||||
fun consumeEntryType(): CommonSendAnalyticEvents.SendEntryType {
|
||||
if (isEntryTypeConsumed) return CommonSendAnalyticEvents.SendEntryType.Manual
|
||||
isEntryTypeConsumed = true
|
||||
return when (params.entryType) {
|
||||
SendComponent.EntryType.QR -> CommonSendAnalyticEvents.SendEntryType.QR
|
||||
SendComponent.EntryType.Manual -> CommonSendAnalyticEvents.SendEntryType.Manual
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun prepareTransferTransaction(): Either<Throwable, TransactionData> {
|
||||
val predefinedValues = predefinedValues
|
||||
val cryptoCurrencyStatus = cryptoCurrencyStatusFlow.value
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue