From 050823f7a180d94ca96f2b8757fc4492a5c53f92 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 2 Sep 2024 12:02:40 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../managetokens/model/ManageTokensModel.kt | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/ManageTokensModel.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/ManageTokensModel.kt index 581f40fc1b..030e583e14 100644 --- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/ManageTokensModel.kt +++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/ManageTokensModel.kt @@ -29,6 +29,7 @@ import com.tangem.pagination.PaginationStatus import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf +import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import timber.log.Timber @@ -64,6 +65,8 @@ internal class ManageTokensModel @Inject constructor( ::updateChangedItems, ).launchIn(modelScope) + observeSearchQueryChanges() + modelScope.launch { manageTokensListManager.launchPagination(params.userWalletId) } @@ -132,6 +135,31 @@ internal class ManageTokensModel @Inject constructor( ) } + @OptIn(FlowPreview::class) + private fun observeSearchQueryChanges() { + state + .distinctUntilChanged { old, new -> + // It's also used to skip search activation to avoid searching an empty query + old.search.query == new.search.query && + (old.search.isActive == new.search.isActive || new.search.isActive) + } + .transform { state -> + val query = state.search.query + + if (state.search.isActive) { + emit(query) + } + } + .sample(periodMillis = 1_000) + .onEach { query -> + manageTokensListManager.search( + userWalletId = params.userWalletId, + query = query, + ) + } + .launchIn(modelScope) + } + private fun updateItems(items: ImmutableList) { state.update { state -> state.copySealed( @@ -256,26 +284,15 @@ internal class ManageTokensModel @Inject constructor( ), ) } - - modelScope.launch { - manageTokensListManager.search(params.userWalletId, query) - } } private fun toggleSearchBar(isActive: Boolean) { state.update { state -> state.copySealed( search = state.search.copy( - query = if (isActive) state.search.query else "", isActive = isActive, ), ) } - - modelScope.launch { - if (!isActive) { - manageTokensListManager.reload(params.userWalletId) - } - } } } \ No newline at end of file