From e9756d41aab696a7d3f79d016cba2def345a0bf3 Mon Sep 17 00:00:00 2001 From: nrobi144 Date: Thu, 28 May 2026 11:55:40 +0300 Subject: [PATCH] fix(desktop): add loading indicator + relay diagnostics for inline search - Show "Searching N relays..." with spinner while waiting for results - Show "No search relays configured" if searchRelays is empty - Observe isSearching, peopleResults, noteResults directly for state Co-Authored-By: Claude Opus 4.6 (1M context) --- .../amethyst/desktop/ui/FeedScreen.kt | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/FeedScreen.kt b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/FeedScreen.kt index e93c93dac6..2063e9594e 100644 --- a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/FeedScreen.kt +++ b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/FeedScreen.kt @@ -1061,7 +1061,32 @@ private fun FeedTabsHeader( HorizontalDivider(color = MaterialTheme.colorScheme.outlineVariant) val hasQuery = searchText.text.isNotBlank() + val isSearching by searchState.isSearching.collectAsState() + val people by searchState.peopleResults.collectAsState() + val notes by searchState.noteResults.collectAsState() + val hasResults = people.isNotEmpty() || notes.isNotEmpty() + if (hasQuery) { + if (isSearching && !hasResults) { + // Loading state while waiting for relay results + Row( + modifier = Modifier.fillMaxWidth().padding(16.dp), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically, + ) { + androidx.compose.material3.CircularProgressIndicator( + modifier = Modifier.size(16.dp), + strokeWidth = 2.dp, + ) + Spacer(Modifier.width(8.dp)) + Text( + "Searching ${searchRelays.size} relays...", + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) + } + } + // Show search results (reuses SearchResultsList) SearchResultsList( state = searchState, @@ -1077,6 +1102,15 @@ private fun FeedTabsHeader( modifier = Modifier.heightIn(max = 400.dp).fillMaxWidth(), ) + if (!isSearching && !hasResults && searchRelays.isEmpty()) { + Text( + "No search relays configured", + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(16.dp), + ) + } + // "Open full search" link HorizontalDivider( color = MaterialTheme.colorScheme.outlineVariant,