From 9146ecb82d1d9d78c5a5e7a63aa3982bf98a354a Mon Sep 17 00:00:00 2001 From: MerlinScheurer Date: Thu, 30 Jan 2025 18:12:57 +0100 Subject: [PATCH] Refac search reduce debounce time to 300ms and add enter key bypass --- frontend/src/pages/Search.tsx | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/frontend/src/pages/Search.tsx b/frontend/src/pages/Search.tsx index 49866396..e853dd20 100644 --- a/frontend/src/pages/Search.tsx +++ b/frontend/src/pages/Search.tsx @@ -46,7 +46,7 @@ const Search = () => { const viewPlaylists = userMeConfig.view_style_playlist; const gridItems = userMeConfig.grid_items || 3; - const [searchQuery, setSearchQuery] = useState(''); + const [searchTerm, setSearchTerm] = useState(''); const [debouncedSearchTerm, setDebouncedSearchTerm] = useState(''); const [searchResults, setSearchResults] = useState(); @@ -59,7 +59,7 @@ const Search = () => { const queryType = searchResults?.queryType; const showEmbeddedVideo = videoId !== null; - const hasSearchQuery = searchQuery.length > 0; + const hasSearchQuery = searchTerm.length > 0; const hasVideos = Number(videoList?.length) > 0; const hasChannels = Number(channelList?.length) > 0; const hasPlaylist = Number(playlistList?.length) > 0; @@ -77,24 +77,25 @@ const Search = () => { useEffect(() => { const handler = setTimeout(() => { - setDebouncedSearchTerm(searchQuery); - }, 500); + setDebouncedSearchTerm(searchTerm); + }, 300); return () => { clearTimeout(handler); }; - }, [searchQuery]); + }, [searchTerm]); useEffect(() => { if (debouncedSearchTerm.trim() !== '') { - fetchResults(); + fetchResults(debouncedSearchTerm); } else { setSearchResults(EmptySearchResponse); } }, [debouncedSearchTerm, refresh]); - const fetchResults = async () => { - const searchResults = await loadSearch(debouncedSearchTerm); + const fetchResults = async (searchQuery: string) => { + const searchResults = await loadSearch(searchQuery); + setSearchResults(searchResults); setRefresh(false); }; @@ -113,9 +114,14 @@ const Search = () => { type="text" autoFocus autoComplete="off" - value={searchQuery} + value={searchTerm} onChange={event => { - setSearchQuery(event.target.value); + setSearchTerm(event.currentTarget.value); + }} + onKeyDown={event => { + if (event.key === 'Enter') { + fetchResults(searchTerm); + } }} />