diff --git a/app/src/main/java/org/tasks/ui/TaskListViewModel.kt b/app/src/main/java/org/tasks/ui/TaskListViewModel.kt index 765489be4..2a736bace 100644 --- a/app/src/main/java/org/tasks/ui/TaskListViewModel.kt +++ b/app/src/main/java/org/tasks/ui/TaskListViewModel.kt @@ -15,10 +15,11 @@ import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapNotNull import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch @@ -109,15 +110,20 @@ class TaskListViewModel @Inject constructor( localBroadcastManager.registerRefreshReceiver(refreshReceiver) _state - .filter { it.filter != null } + .mapNotNull { state -> state.filter?.let { it to state.searchQuery } } + .distinctUntilChanged() .throttleLatest(333) - .map { - val filter = when { - it.searchQuery == null -> it.filter!! - it.searchQuery.isBlank() -> BuiltInFilterExposer.getMyTasksFilter(context.resources) - else -> context.createSearchQuery(it.searchQuery) + .map { (filter, searchQuery) -> + taskDao.fetchTasks { + getQuery( + preferences = preferences, + filter = when { + searchQuery == null -> filter + searchQuery.isBlank() -> BuiltInFilterExposer.getMyTasksFilter(context.resources) + else -> context.createSearchQuery(searchQuery) + } + ) } - taskDao.fetchTasks { getQuery(preferences, filter) } } .onEach { tasks -> _state.update {