refactor(android): make search page manage localized state

This commit is contained in:
Harsh Shandilya 2023-07-19 22:24:43 +05:30
parent 29c0369d43
commit f94741144c
2 changed files with 11 additions and 10 deletions

View file

@ -101,7 +101,6 @@ fun LobstersApp(
val hottestPosts = viewModel.hottestPosts.collectAsLazyPagingItems() val hottestPosts = viewModel.hottestPosts.collectAsLazyPagingItems()
val newestPosts = viewModel.newestPosts.collectAsLazyPagingItems() val newestPosts = viewModel.newestPosts.collectAsLazyPagingItems()
val savedPosts by viewModel.savedPosts.collectAsState(persistentMapOf()) val savedPosts by viewModel.savedPosts.collectAsState(persistentMapOf())
val searchResults = viewModel.searchResults.collectAsLazyPagingItems()
val navigationType = ClawNavigationType.fromSize(windowSizeClass.widthSizeClass) val navigationType = ClawNavigationType.fromSize(windowSizeClass.widthSizeClass)
@ -242,16 +241,12 @@ fun LobstersApp(
composable(Destinations.Search.route) { composable(Destinations.Search.route) {
setWebUri("https://lobste.rs/search") setWebUri("https://lobste.rs/search")
SearchList( SearchList(
items = searchResults, items = viewModel.searchResults,
listState = searchListState, listState = searchListState,
isPostSaved = viewModel::isPostSaved, isPostSaved = viewModel::isPostSaved,
postActions = postActions, postActions = postActions,
searchQuery = viewModel.searchQuery, searchQuery = viewModel.searchQuery,
setSearchQuery = { query -> viewModel.searchQuery = query }, setSearchQuery = { query -> viewModel.searchQuery = query },
triggerSearch = { query ->
viewModel.searchQuery = query
searchResults.refresh()
}
) )
} }
composable( composable(

View file

@ -30,23 +30,29 @@ import androidx.compose.ui.semantics.isTraversalGroup
import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex import androidx.compose.ui.zIndex
import androidx.paging.compose.LazyPagingItems import androidx.paging.PagingData
import androidx.paging.compose.collectAsLazyPagingItems
import dev.msfjarvis.claw.common.posts.PostActions import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.common.ui.SearchBar import dev.msfjarvis.claw.common.ui.SearchBar
import dev.msfjarvis.claw.database.local.SavedPost import dev.msfjarvis.claw.database.local.SavedPost
import dev.msfjarvis.claw.model.LobstersPost import dev.msfjarvis.claw.model.LobstersPost
import kotlinx.coroutines.flow.Flow
@Composable @Composable
fun SearchList( fun SearchList(
items: LazyPagingItems<LobstersPost>, items: Flow<PagingData<LobstersPost>>,
listState: LazyListState, listState: LazyListState,
isPostSaved: suspend (SavedPost) -> Boolean, isPostSaved: suspend (SavedPost) -> Boolean,
postActions: PostActions, postActions: PostActions,
searchQuery: String, searchQuery: String,
setSearchQuery: (String) -> Unit, setSearchQuery: (String) -> Unit,
triggerSearch: (String) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
val lazyPagingItems = items.collectAsLazyPagingItems()
val triggerSearch = { query: String ->
setSearchQuery(query)
lazyPagingItems.refresh()
}
DisposableEffect(true) { DisposableEffect(true) {
// Clear search field when navigating away // Clear search field when navigating away
onDispose { triggerSearch("") } onDispose { triggerSearch("") }
@ -65,7 +71,7 @@ fun SearchList(
) )
if (searchActive) { if (searchActive) {
NetworkPosts( NetworkPosts(
lazyPagingItems = items, lazyPagingItems = lazyPagingItems,
listState = listState, listState = listState,
isPostSaved = isPostSaved, isPostSaved = isPostSaved,
postActions = postActions, postActions = postActions,