Updated on 2026-08-14

This commit is contained in:
Tangem 2026-02-20 16:49:10 +04:00
parent 1ed2999163
commit 6e267fc067
12 changed files with 182 additions and 122 deletions

View file

@ -46,31 +46,12 @@ sealed class SwapEvents(
class ChooseTokenScreenResult(
val isTokenChosen: Boolean,
val token: String? = null,
val source: String? = null,
val isSearched: Boolean? = null,
) : SwapEvents(
event = "Choose Token Screen Result",
params = buildMap {
put("Token Chosen", if (isTokenChosen) "Yes" else "No")
token?.let { put("Token", it) }
source?.let { put(TOKEN_SELECTED_SOURCE, it) }
isSearched?.let { put(SEARCHED, if (it) "True" else "False") }
},
) {
companion object {
const val TOKEN_SELECTED_SOURCE = "Token Selected Source"
const val SEARCHED = "Searched"
const val SOURCE_PORTFOLIO = "Portfolio"
const val SOURCE_MARKETS = "Markets"
}
}
class TokenAdded(val token: String, val blockchain: String) : SwapEvents(
event = "Token Added",
params = mapOf(
TOKEN_PARAM to token,
BLOCKCHAIN to blockchain,
),
)
class ButtonSwapClicked(val sendToken: String, val receiveToken: String) : SwapEvents(

View file

@ -4,7 +4,6 @@ import androidx.compose.runtime.Stable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import arrow.core.Either
import arrow.core.getOrElse
import com.arkivanov.decompose.router.slot.SlotNavigation
@ -19,12 +18,15 @@ import com.tangem.common.ui.markets.models.MarketsListItemUM
import com.tangem.core.analytics.api.AnalyticsErrorHandler
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.core.analytics.models.AnalyticsParam.ScreensSources
import com.tangem.core.analytics.models.Basic
import com.tangem.core.analytics.models.event.SwapAnalyticsEvent
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.navigation.url.UrlOpener
import com.tangem.core.ui.HoldToConfirmButtonFeatureToggles
import com.tangem.core.ui.R
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.utils.InputNumberFormatter
@ -90,7 +92,6 @@ import com.tangem.feature.swap.models.UiActions
import com.tangem.feature.swap.models.market.SwapMarketsListBatchFlowManager
import com.tangem.feature.swap.models.market.state.SwapMarketState
import com.tangem.feature.swap.models.states.SwapNotificationUM
import com.tangem.core.ui.R
import com.tangem.feature.swap.router.SwapNavScreen
import com.tangem.feature.swap.router.SwapRouter
import com.tangem.feature.swap.ui.StateBuilder
@ -107,12 +108,8 @@ import com.tangem.utils.Provider
import com.tangem.utils.TangemBlogUrlBuilder.RESOURCE_TO_LEARN_ABOUT_APPROVING_IN_SWAP
import com.tangem.utils.coroutines.*
import com.tangem.utils.isNullOrZero
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.delay
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import timber.log.Timber
import java.math.BigDecimal
import java.math.RoundingMode
@ -300,17 +297,13 @@ internal class SwapModel @Inject constructor(
modelScope.launch {
bottomSheetNavigation.dismiss()
analyticsEventHandler.send(
SwapEvents.ChooseTokenScreenResult(
isTokenChosen = true,
token = addedToken.symbol,
source = SwapEvents.ChooseTokenScreenResult.SOURCE_MARKETS,
isSearched = searchQueryState.value.isNotEmpty(),
),
SwapEvents.ChooseTokenScreenResult(isTokenChosen = true, token = addedToken.symbol),
)
analyticsEventHandler.send(
SwapEvents.TokenAdded(
SwapAnalyticsEvent.TokenSelected(
token = addedToken.symbol,
blockchain = addedToken.network.name,
source = ScreensSources.Markets,
isSearched = searchQueryState.value.isNotEmpty(),
),
)
searchQueryState.value = ""
@ -1339,10 +1332,13 @@ internal class SwapModel @Inject constructor(
foundToken?.currency?.symbol?.let { symbol ->
analyticsEventHandler.send(
SwapEvents.ChooseTokenScreenResult(
isTokenChosen = true,
SwapEvents.ChooseTokenScreenResult(isTokenChosen = true, token = symbol),
)
analyticsEventHandler.send(
SwapAnalyticsEvent.TokenSelected(
token = symbol,
source = SwapEvents.ChooseTokenScreenResult.SOURCE_PORTFOLIO,
source = ScreensSources.Portfolio,
isSearched = searchQueryState.value.isNotEmpty(),
),
)
@ -2241,7 +2237,7 @@ internal class SwapModel @Inject constructor(
.create(
scope = modelScope,
token = param,
analyticsParams = null,
analyticsParams = AddToPortfolioManager.AnalyticsParams(source = ScreensSources.Swap.value),
).apply {
setTokenNetworks(networks)
}