From 8899cfc84e3f385c64226169e2438fd1b065f2f3 Mon Sep 17 00:00:00 2001 From: Kgothatso Ngako Date: Wed, 1 Apr 2026 23:10:19 +0200 Subject: [PATCH] Show fake search results --- .../ui/composable/SearchResultScreen.kt | 98 +++++++++++-------- .../ui/composable/navigation/AuxNavHost.kt | 6 +- .../ui/view/model/SearchResultViewModel.kt | 14 ++- 3 files changed, 76 insertions(+), 42 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/ac/aux/compose/ui/composable/SearchResultScreen.kt b/composeApp/src/commonMain/kotlin/ac/aux/compose/ui/composable/SearchResultScreen.kt index 7881fbba..e246cb69 100644 --- a/composeApp/src/commonMain/kotlin/ac/aux/compose/ui/composable/SearchResultScreen.kt +++ b/composeApp/src/commonMain/kotlin/ac/aux/compose/ui/composable/SearchResultScreen.kt @@ -3,6 +3,7 @@ package ac.aux.compose.ui.composable import ac.aux.compose.repository.NostrRepository import ac.aux.compose.repository.SearchRepository import ac.aux.compose.ui.composable.navigation.routes.ImplementationPendingRoute +import ac.aux.compose.ui.composable.navigation.routes.NostrEventDetailRoute import ac.aux.compose.ui.composable.navigation.routes.Route import ac.aux.compose.ui.composable.widgets.feed.ListView import ac.aux.compose.ui.theme.AuxTheme @@ -40,6 +41,7 @@ import androidx.compose.material3.Tab import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf @@ -205,67 +207,83 @@ fun SearchResultScreen( } } - LazyColumn( - modifier = Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(10.dp) - ) { - - when (val searchResultListUIState = searchViewModel.searchResultListUIState) { - SearchResultListUIState.Error -> { - item { + when (val searchResultListUIState = searchViewModel.searchResultListUIState) { + SearchResultListUIState.Error -> { + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer( + modifier = Modifier.height(50.dp) + ) + Text( + text = "Something went wrong", + ) + } + } + is SearchResultListUIState.Loaded -> { + if (searchResultListUIState.localNostrEvents.isEmpty()) { + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { Spacer( modifier = Modifier.height(50.dp) ) Text( - text = "Something went wrong", + text = "No events were found", ) } - } - is SearchResultListUIState.Loaded -> { - if (searchResultListUIState.localNostrEvents.isEmpty()) { - item { - Spacer( - modifier = Modifier.height(50.dp) - ) - Text( - text = "No events were found", - ) - } - } else { + } else { + LazyColumn( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(10.dp) + ) { items( items = searchResultListUIState.localNostrEvents, - key = {localNostrEvent -> localNostrEvent.nostrEvent.id} + key = { localNostrEvent -> localNostrEvent.nostrEvent.id} ) { localNostrEvent -> localNostrEvent.ListView( - onNavigateToEvent = { + onNavigateToEvent = { nostrEventId -> onNavigateToEvent.invoke( - ImplementationPendingRoute("Navigating to detail") + NostrEventDetailRoute( + nostrEventId = nostrEventId + ) ) } ) } } - } - SearchResultListUIState.Loading -> { - item { - Spacer( - modifier = Modifier.height(50.dp) - ) - Text( - text = "Searching for ${searchViewModel.searchResultType.name.lowercase()} on \"${searchQuery.lowercase()}\"", - textAlign = TextAlign.Center - ) - Spacer( - modifier = Modifier.height(50.dp) - ) - LoadingIndicator() - } + } + SearchResultListUIState.Loading -> { + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer( + modifier = Modifier.height(50.dp) + ) + Text( + text = "Searching for ${searchViewModel.searchResultType.name.lowercase()} on \"${searchQuery.lowercase()}\"", + textAlign = TextAlign.Center + ) + Spacer( + modifier = Modifier.height(50.dp) + ) + + LoadingIndicator() + } + + LaunchedEffect(true) { + searchViewModel.loadSearchResult() } } } + + } } } diff --git a/composeApp/src/commonMain/kotlin/ac/aux/compose/ui/composable/navigation/AuxNavHost.kt b/composeApp/src/commonMain/kotlin/ac/aux/compose/ui/composable/navigation/AuxNavHost.kt index d6b646d8..c6041b88 100644 --- a/composeApp/src/commonMain/kotlin/ac/aux/compose/ui/composable/navigation/AuxNavHost.kt +++ b/composeApp/src/commonMain/kotlin/ac/aux/compose/ui/composable/navigation/AuxNavHost.kt @@ -358,7 +358,11 @@ fun AuxNavHost( onNavigateBack = { navController.popBackStack() }, - onNavigateToEvent = {} + onNavigateToEvent = { route -> + navController.navigate( + route = route + ) + } ) } composable { backStackEntry -> diff --git a/composeApp/src/commonMain/kotlin/ac/aux/compose/ui/view/model/SearchResultViewModel.kt b/composeApp/src/commonMain/kotlin/ac/aux/compose/ui/view/model/SearchResultViewModel.kt index e230ed1c..3ae1a0aa 100755 --- a/composeApp/src/commonMain/kotlin/ac/aux/compose/ui/view/model/SearchResultViewModel.kt +++ b/composeApp/src/commonMain/kotlin/ac/aux/compose/ui/view/model/SearchResultViewModel.kt @@ -5,6 +5,7 @@ import ac.aux.compose.database.model.types.SynchronizationFilter import ac.aux.compose.nostr.Relays import ac.aux.compose.repository.NostrRepository import ac.aux.compose.repository.SearchRepository +import ac.aux.compose.ui.view.state.FeedListUIState import ac.aux.compose.ui.view.state.SearchResultListUIState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -43,13 +44,24 @@ class SearchResultViewModel( fun updateSearchResultType (searchResultType: SearchResultType) { this.searchResultType = searchResultType - // TODO: Reload search results... + reloadSearchResult() } fun reloadSearchResult() { searchResultListUIState = SearchResultListUIState.Loading } + fun loadSearchResult() { + viewModelScope.launch(Dispatchers.IO) { + // This is something not taking into consideration the results we are actually looking for... + nostrRepository.observeNostrFeed().collect { localNostrEvents -> + searchResultListUIState = SearchResultListUIState.Loaded( + localNostrEvents = localNostrEvents + ) + } + } + } + fun performSearch(searchQuery: String) { viewModelScope.launch(Dispatchers.IO) { // Sync Notifications... might want to also run this in the background