From 41b598d673c40aae4c945e562d3f8d22e3163b81 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 17 Mar 2026 15:46:15 +0100 Subject: [PATCH] feat: reduce note list flickering --- src/hooks/useNoteList.ts | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/hooks/useNoteList.ts b/src/hooks/useNoteList.ts index 8483f56d..06bcf6ff 100644 --- a/src/hooks/useNoteList.ts +++ b/src/hooks/useNoteList.ts @@ -29,10 +29,18 @@ export default ( const [numberOfResults, setNumberOfResults] = useState(NaN); const [isBusy, setIsBusy] = useState(true); + const busyTimerRef = useRef | null>(null); + const refreshNoteList = useCallback( async () => { - setNoteListItems([]); - setIsBusy(true); + if (busyTimerRef.current !== null) { + clearTimeout(busyTimerRef.current); + } + + busyTimerRef.current = setTimeout(() => { + setNoteListItems([]); + setIsBusy(true); + }, 300); const options: DatabaseQuery = { page, @@ -52,6 +60,10 @@ export default ( // ... some time later - check if this is the current request if (currentRequestId.current === requestId) { + if (busyTimerRef.current !== null) { + clearTimeout(busyTimerRef.current); + busyTimerRef.current = null; + } setNoteListItems(results); setNumberOfResults(numberOfResults); setIsBusy(false); @@ -64,5 +76,13 @@ export default ( refreshNoteList(); }, [page, sortMode, searchQuery]); + useEffect(() => { + return () => { + if (busyTimerRef.current !== null) { + clearTimeout(busyTimerRef.current); + } + }; + }, []); + return [noteListItems, numberOfResults, isBusy, refreshNoteList]; };