From 876e3fa71b9c359cd2880454f0c966d33be4de31 Mon Sep 17 00:00:00 2001 From: tapframe Date: Wed, 18 Jun 2025 18:42:38 +0530 Subject: [PATCH] Enhance SearchScreen functionality with improved search handling and user feedback This update introduces several enhancements to the SearchScreen component, including logging for search actions, debouncing adjustments, and improved user feedback for search input. The search now requires at least 2 characters to initiate, with visual prompts for insufficient input. Additionally, a cleanup function has been added to cancel pending searches, ensuring a smoother user experience. --- src/screens/SearchScreen.tsx | 39 +++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/src/screens/SearchScreen.tsx b/src/screens/SearchScreen.tsx index c36d8949..ff8ca017 100644 --- a/src/screens/SearchScreen.tsx +++ b/src/screens/SearchScreen.tsx @@ -320,34 +320,50 @@ const SearchScreen = () => { } try { + logger.info('Performing search for:', searchQuery); const searchResults = await catalogService.searchContentCinemeta(searchQuery); setResults(searchResults); if (searchResults.length > 0) { await saveRecentSearch(searchQuery); } + logger.info('Search completed, found', searchResults.length, 'results'); } catch (error) { logger.error('Search failed:', error); setResults([]); } finally { setSearching(false); } - }, 200), + }, 800), [recentSearches] ); useEffect(() => { - if (query.trim()) { + if (query.trim() && query.trim().length >= 2) { setSearching(true); setSearched(true); setShowRecent(false); debouncedSearch(query); + } else if (query.trim().length < 2 && query.trim().length > 0) { + // Show that we're waiting for more characters + setSearching(false); + setSearched(false); + setShowRecent(false); + setResults([]); } else { + // Cancel any pending search when query is cleared + debouncedSearch.cancel(); setResults([]); setSearched(false); + setSearching(false); setShowRecent(true); loadRecentSearches(); } - }, [query]); + + // Cleanup function to cancel pending searches + return () => { + debouncedSearch.cancel(); + }; + }, [query, debouncedSearch]); const handleClearSearch = () => { setQuery(''); @@ -544,6 +560,23 @@ const SearchScreen = () => { {searching ? ( + ) : query.trim().length === 1 ? ( + + + + Keep typing... + + + Type at least 2 characters to search + + ) : searched && !hasResultsToShow ? (