Updated on 2026-08-14
This commit is contained in:
parent
96b4a46462
commit
56c4545d83
4 changed files with 41 additions and 0 deletions
|
|
@ -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")
|
||||
}
|
||||
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue