Updated on 2026-08-14

This commit is contained in:
Tangem 2025-05-15 14:29:29 +03:00
parent 96b4a46462
commit 56c4545d83
4 changed files with 41 additions and 0 deletions

View file

@ -38,4 +38,13 @@ internal sealed class MarketsListAnalyticsEvent(
data object StakingPromoClosed : MarketsListAnalyticsEvent(event = "Staking Promo Closed")
data object StakingMoreInfoClicked : MarketsListAnalyticsEvent(event = "Staking More Info")
data class TokenSearched(val tokenFound: Boolean) : MarketsListAnalyticsEvent(
event = "Token Searched",
params = mapOf(
"Result" to if (tokenFound) "Yes" else "No",
),
)
data object ShowTokens : MarketsListAnalyticsEvent(event = "Button - Show Tokens")
}

View file

@ -71,6 +71,7 @@ internal class MarketsListModel @Inject constructor(
onTokenClick = { onTokenUIClicked(it) },
onStakingNotificationClick = { analyticsEventHandler.send(MarketsListAnalyticsEvent.StakingMoreInfoClicked) },
onStakingNotificationCloseClick = { onStakingNotificationCloseClick() },
onShowTokensUnder100kClicked = { analyticsEventHandler.send(MarketsListAnalyticsEvent.ShowTokens) },
)
private val mainMarketsListManager = MarketsListBatchFlowManager(
@ -248,6 +249,16 @@ internal class MarketsListModel @Inject constructor(
}
}
searchMarketsListManager.isSearchNotFoundState.onEach {
if (it) {
analyticsEventHandler.send(MarketsListAnalyticsEvent.TokenSearched(tokenFound = false))
}
}.launchIn(modelScope)
searchMarketsListManager.onFirstBatchLoadedSuccess.onEach {
analyticsEventHandler.send(MarketsListAnalyticsEvent.TokenSearched(tokenFound = true))
}.launchIn(modelScope)
// analytics
initAnalytics()

View file

@ -84,6 +84,25 @@ internal class MarketsListBatchFlowManager(
}
}
val onFirstBatchLoadedSuccess = batchFlow.state
.distinctUntilChanged { old, new -> old.status == new.status && old.data.size == new.data.size }
.mapNotNull {
when (val status = it.status) {
is PaginationStatus.Paginating -> {
if (status.lastResult is BatchFetchResult.Success) {
it.data.size == 1
} else {
null
}
}
is PaginationStatus.EndOfPagination -> {
it.data.size == 1
}
else -> null
}
}
.filter { it }
val isInInitialLoadingErrorState = batchFlow.state
.map { it.status is PaginationStatus.InitialLoadingError }
.distinctUntilChanged()

View file

@ -28,6 +28,7 @@ internal class MarketsListUMStateManager(
private val onTokenClick: (MarketsListItemUM) -> Unit,
private val onStakingNotificationClick: () -> Unit,
private val onStakingNotificationCloseClick: () -> Unit,
private val onShowTokensUnder100kClicked: () -> Unit,
) {
private var sortByBottomSheetIsShown
@ -148,6 +149,7 @@ internal class MarketsListUMStateManager(
showUnder100kTokensNotificationWasHidden = false,
showUnder100kTokensNotification = true,
onShowTokensUnder100kClicked = {
onShowTokensUnder100kClicked()
state.update { s ->
(s.list as? ListUM.Content)?.let {
s.copy(