@@ -26,11 +26,11 @@ import com.google.samples.apps.nowinandroid.core.data.repository.RecentSearchRep
2626import com.google.samples.apps.nowinandroid.core.domain.GetRecentSearchQueriesUseCase
2727import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsCountUseCase
2828import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsUseCase
29- import com.google.samples.apps.nowinandroid.core.result.Result
30- import com.google.samples.apps.nowinandroid.core.result.asResult
29+ import com.google.samples.apps.nowinandroid.core.model.data.UserSearchResult
3130import dagger.hilt.android.lifecycle.HiltViewModel
3231import kotlinx.coroutines.flow.SharingStarted
3332import kotlinx.coroutines.flow.StateFlow
33+ import kotlinx.coroutines.flow.catch
3434import kotlinx.coroutines.flow.flatMapLatest
3535import kotlinx.coroutines.flow.flowOf
3636import kotlinx.coroutines.flow.map
@@ -61,18 +61,15 @@ class SearchViewModel @Inject constructor(
6161 flowOf(SearchResultUiState .EmptyQuery )
6262 } else {
6363 getSearchContentsUseCase(query)
64- .asResult()
65- .map { result ->
66- when (result) {
67- is Result .Success -> SearchResultUiState .Success (
68- topics = result.data.topics,
69- newsResources = result.data.newsResources,
70- )
71-
72- is Result .Loading -> SearchResultUiState .Loading
73- is Result .Error -> SearchResultUiState .LoadFailed
74- }
64+ // Not using .asResult() here, because it emits Loading state every
65+ // time the user types a letter in the search box, which flickers the screen.
66+ .map<UserSearchResult , SearchResultUiState > { data ->
67+ SearchResultUiState .Success (
68+ topics = data.topics,
69+ newsResources = data.newsResources,
70+ )
7571 }
72+ .catch { emit(SearchResultUiState .LoadFailed ) }
7673 }
7774 }
7875 }
0 commit comments