From e7da537448844d6d850e8130bf5f161e9ad70ed2 Mon Sep 17 00:00:00 2001 From: Thoraya Date: Tue, 19 Aug 2025 23:09:20 +0300 Subject: [PATCH 1/2] fix: resolve state while clicking on any recent search to be loading at first instead on no search placeholder. --- .../viewmodel/search/keywordSearch/SearchViewModel.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/viewModel/src/main/java/com/amsterdam/viewmodel/search/keywordSearch/SearchViewModel.kt b/viewModel/src/main/java/com/amsterdam/viewmodel/search/keywordSearch/SearchViewModel.kt index 8cdf50179..0dea6d1a8 100644 --- a/viewModel/src/main/java/com/amsterdam/viewmodel/search/keywordSearch/SearchViewModel.kt +++ b/viewModel/src/main/java/com/amsterdam/viewmodel/search/keywordSearch/SearchViewModel.kt @@ -245,7 +245,10 @@ class SearchViewModel @Inject constructor( onSearchKeywordChanged(_keyword.value) } - override fun onClickRecentSearch(keyword: String) = onChangeSearchKeyword(keyword) + override fun onClickRecentSearch(keyword: String){ + startLoading(true) + onChangeSearchKeyword(keyword) + } override fun onClickClearRecentSearch(keyword: String) { tryToExecute( From 9d1e8dcc5d078575663d9de2845f6ff64ce028c8 Mon Sep 17 00:00:00 2001 From: Thoraya Date: Tue, 19 Aug 2025 23:10:25 +0300 Subject: [PATCH 2/2] fix: resolve the recent searches flashes while typing spaces on the search text field. --- .../search/keywordSearch/SearchScreen.kt | 4 ++- .../sections/RecentSearchesSection.kt | 31 ++++++++++--------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/ui/src/main/java/com/amsterdam/ui/screens/search/keywordSearch/SearchScreen.kt b/ui/src/main/java/com/amsterdam/ui/screens/search/keywordSearch/SearchScreen.kt index e94971587..03da56187 100644 --- a/ui/src/main/java/com/amsterdam/ui/screens/search/keywordSearch/SearchScreen.kt +++ b/ui/src/main/java/com/amsterdam/ui/screens/search/keywordSearch/SearchScreen.kt @@ -155,7 +155,9 @@ private fun SearchContent( ) RecentSearchesSection( - state = state, + recentSearches = state.recentSearches, + isLoading = state.isLoading, + keyword = state.keyword.trim(), onAllRecentSearchesCleared = interactionListener::onClickClearAllRecentSearches, onRecentSearchClicked = interactionListener::onClickRecentSearch, onRecentSearchCleared = interactionListener::onClickClearRecentSearch diff --git a/ui/src/main/java/com/amsterdam/ui/screens/search/keywordSearch/sections/RecentSearchesSection.kt b/ui/src/main/java/com/amsterdam/ui/screens/search/keywordSearch/sections/RecentSearchesSection.kt index 773b68de0..4a7da5285 100644 --- a/ui/src/main/java/com/amsterdam/ui/screens/search/keywordSearch/sections/RecentSearchesSection.kt +++ b/ui/src/main/java/com/amsterdam/ui/screens/search/keywordSearch/sections/RecentSearchesSection.kt @@ -22,29 +22,30 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import com.amsterdam.ui.R import com.amsterdam.designsystem.components.LoadingContainer import com.amsterdam.designsystem.components.Text import com.amsterdam.designsystem.components.divider.HorizontalDivider import com.amsterdam.designsystem.theme.AppTheme -import com.amsterdam.viewmodel.search.keywordSearch.SearchUiState +import com.amsterdam.ui.R @Composable internal fun RecentSearchesSection( - state: SearchUiState, + modifier: Modifier = Modifier, + recentSearches: List = emptyList(), + keyword: String = "", + isLoading: Boolean = false, onAllRecentSearchesCleared: () -> Unit, onRecentSearchClicked: (String) -> Unit, onRecentSearchCleared: (String) -> Unit, - modifier: Modifier = Modifier, ) { AnimatedContent( - targetState = state, + targetState = keyword, transitionSpec = { fadeIn(animationSpec = tween(1700)) togetherWith fadeOut(animationSpec = tween(1700)) }, - ) { + ) { searchKeyword -> when { - it.recentSearches.isNotEmpty() && it.keyword.isBlank() -> { + recentSearches.isNotEmpty() && searchKeyword.isBlank() -> { Column( modifier = modifier .fillMaxWidth() @@ -78,19 +79,19 @@ internal fun RecentSearchesSection( .fillMaxWidth() .padding(top = 12.dp) ) { - it.recentSearches.map { recentSearchItem -> + recentSearches.map { recentSearchItem -> RecentSearchItem( title = recentSearchItem, onItemClick = onRecentSearchClicked, onCancelClick = onRecentSearchCleared, ) - if (recentSearchItem != it.recentSearches.last()) HorizontalDivider() + if (recentSearchItem != recentSearches.last()) HorizontalDivider() } } } } - it.keyword.isBlank() && it.recentSearches.isEmpty() && !it.isLoading -> { + searchKeyword.isBlank() && recentSearches.isEmpty() && !isLoading -> { val topPadding = if (LocalConfiguration.current.orientation == ORIENTATION_LANDSCAPE) { 12.dp @@ -104,10 +105,12 @@ internal fun RecentSearchesSection( ) } - it.isLoading -> { - LoadingContainer(modifier = modifier - .fillMaxSize() - .padding(top = 48.dp)) + isLoading -> { + LoadingContainer( + modifier = modifier + .fillMaxSize() + .padding(top = 48.dp) + ) } } }