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]; };