From 971d20be77cd3e6338737551d74bab6bcc94bb02 Mon Sep 17 00:00:00 2001 From: nrobi144 Date: Thu, 28 May 2026 13:03:51 +0300 Subject: [PATCH] fix(desktop): revert relay debounce to 300ms, separate 1s history save - Relay query debounce stays at 300ms (AdvancedSearchBarState default) - Separate 1s debounce on searchText: when user stops typing for 1s, save the query to SearchHistoryStore (assumes intent confirmed) - LaunchedEffect(searchText.text) auto-cancels on each keystroke, so only fires after 1s of inactivity - No duplicates: addToHistory() deduplicates by serialized query Co-Authored-By: Claude Opus 4.6 (1M context) --- .../amethyst/desktop/ui/FeedScreen.kt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) 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 b730b2a08b..be97360a68 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 @@ -828,7 +828,7 @@ private fun FeedTabsHeader( val pinnedFeeds by feedRepo.pinnedFeeds.collectAsState() val sidePadding = LocalReadingSidePadding.current val scope = rememberCoroutineScope() - val searchState = remember { AdvancedSearchBarState(scope, debounceMs = 1000L) } + val searchState = remember { AdvancedSearchBarState(scope) } var searchText by remember { mutableStateOf(TextFieldValue("")) } val focusRequester = remember { FocusRequester() } val focusManager = LocalFocusManager.current @@ -841,13 +841,20 @@ private fun FeedTabsHeader( searchState.updateFromText(searchText.text) } - // Save to history + clear on collapse - LaunchedEffect(searchExpanded) { - if (!searchExpanded) { + // Auto-save to history after 1s of no typing (separate from relay debounce) + LaunchedEffect(searchText.text) { + if (searchText.text.isNotBlank()) { + kotlinx.coroutines.delay(1000L) val query = searchState.query.value if (!query.isEmpty) { SearchHistoryStore.addToHistory(query) } + } + } + + // Clear on collapse + LaunchedEffect(searchExpanded) { + if (!searchExpanded) { searchText = TextFieldValue("") searchState.clearSearch() }