@@ -48,46 +48,43 @@ class SearchViewModel @Inject constructor(
4848 private val analyticsHelper : AnalyticsHelper ,
4949) : ViewModel() {
5050
51- val searchQuery = savedStateHandle.getStateFlow(SEARCH_QUERY , " " )
51+ val searchQuery = savedStateHandle.getStateFlow(key = SEARCH_QUERY , initialValue = " " )
5252
5353 val searchResultUiState: StateFlow <SearchResultUiState > =
54- getSearchContentsCountUseCase().flatMapLatest { totalCount ->
55- if (totalCount < SEARCH_MIN_FTS_ENTITY_COUNT ) {
56- flowOf(SearchResultUiState .SearchNotReady )
57- } else {
58- searchQuery.flatMapLatest { query ->
59- if (query.length < SEARCH_QUERY_MIN_LENGTH ) {
60- flowOf(SearchResultUiState .EmptyQuery )
61- } else {
62- getSearchContentsUseCase(query).asResult().map {
63- when (it) {
64- is Result .Success -> {
65- SearchResultUiState .Success (
66- topics = it.data.topics,
67- newsResources = it.data.newsResources,
68- )
69- }
70-
71- is Result .Loading -> {
72- SearchResultUiState .Loading
73- }
54+ getSearchContentsCountUseCase()
55+ .flatMapLatest { totalCount ->
56+ if (totalCount < SEARCH_MIN_FTS_ENTITY_COUNT ) {
57+ flowOf(SearchResultUiState .SearchNotReady )
58+ } else {
59+ searchQuery.flatMapLatest { query ->
60+ if (query.length < SEARCH_QUERY_MIN_LENGTH ) {
61+ flowOf(SearchResultUiState .EmptyQuery )
62+ } else {
63+ 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+ )
7471
75- is Result .Error -> {
76- SearchResultUiState .LoadFailed
72+ is Result .Loading -> SearchResultUiState .Loading
73+ is Result .Error -> SearchResultUiState .LoadFailed
74+ }
7775 }
78- }
7976 }
8077 }
8178 }
82- }
83- }.stateIn(
84- scope = viewModelScope,
85- started = SharingStarted .WhileSubscribed (5_000 ),
86- initialValue = SearchResultUiState .Loading ,
87- )
79+ }.stateIn(
80+ scope = viewModelScope,
81+ started = SharingStarted .WhileSubscribed (5_000 ),
82+ initialValue = SearchResultUiState .Loading ,
83+ )
8884
8985 val recentSearchQueriesUiState: StateFlow <RecentSearchQueriesUiState > =
90- recentSearchQueriesUseCase().map(RecentSearchQueriesUiState ::Success )
86+ recentSearchQueriesUseCase()
87+ .map(RecentSearchQueriesUiState ::Success )
9188 .stateIn(
9289 scope = viewModelScope,
9390 started = SharingStarted .WhileSubscribed (5_000 ),
@@ -107,16 +104,9 @@ class SearchViewModel @Inject constructor(
107104 */
108105 fun onSearchTriggered (query : String ) {
109106 viewModelScope.launch {
110- recentSearchRepository.insertOrReplaceRecentSearch(query)
107+ recentSearchRepository.insertOrReplaceRecentSearch(searchQuery = query)
111108 }
112- analyticsHelper.logEvent(
113- AnalyticsEvent (
114- type = SEARCH_QUERY ,
115- extras = listOf (
116- Param (SEARCH_QUERY , query),
117- ),
118- ),
119- )
109+ analyticsHelper.logEventSearchTriggered(query = query)
120110 }
121111
122112 fun clearRecentSearches () {
@@ -126,6 +116,14 @@ class SearchViewModel @Inject constructor(
126116 }
127117}
128118
119+ private fun AnalyticsHelper.logEventSearchTriggered (query : String ) =
120+ logEvent(
121+ event = AnalyticsEvent (
122+ type = SEARCH_QUERY ,
123+ extras = listOf (element = Param (key = SEARCH_QUERY , value = query)),
124+ ),
125+ )
126+
129127/* * Minimum length where search query is considered as [SearchResultUiState.EmptyQuery] */
130128private const val SEARCH_QUERY_MIN_LENGTH = 2
131129
0 commit comments