From 56c4545d8376520691e32a0608553e779dc0ab04 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 15 May 2025 14:29:29 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../analytics/MarketsListAnalyticsEvent.kt | 9 +++++++++ .../tokenlist/impl/model/MarketsListModel.kt | 11 +++++++++++ .../MarketsListBatchFlowManager.kt | 19 +++++++++++++++++++ .../statemanager/MarketsListUMStateManager.kt | 2 ++ 4 files changed, 41 insertions(+) diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/analytics/MarketsListAnalyticsEvent.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/analytics/MarketsListAnalyticsEvent.kt index 3395db941b..f1916f48bb 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/analytics/MarketsListAnalyticsEvent.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/analytics/MarketsListAnalyticsEvent.kt @@ -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") } \ No newline at end of file diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/MarketsListModel.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/MarketsListModel.kt index c3c73fed42..ed6bdd1c10 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/MarketsListModel.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/MarketsListModel.kt @@ -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() diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListBatchFlowManager.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListBatchFlowManager.kt index 3cae93db38..e0c50a234d 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListBatchFlowManager.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListBatchFlowManager.kt @@ -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() diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListUMStateManager.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListUMStateManager.kt index ac022dcd2a..3137470f46 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListUMStateManager.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/tokenlist/impl/model/statemanager/MarketsListUMStateManager.kt @@ -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(