@@ -20,6 +20,7 @@ import { Pagination } from "./pagination";
2020import { useCatalogue } from "@renderer/hooks/use-catalogue" ;
2121import { GameItem } from "./game-item" ;
2222import { FilterItem } from "./filter-item" ;
23+ import { debounce } from "lodash-es" ;
2324
2425const filterCategoryColors = {
2526 genres : "hsl(262deg 50% 47%)" ,
@@ -58,26 +59,36 @@ export default function Catalogue() {
5859
5960 const { getRepacksForObjectId } = useRepacks ( ) ;
6061
62+ const debouncedSearch = useRef (
63+ debounce ( async ( filters , pageSize , offset ) => {
64+ const abortController = new AbortController ( ) ;
65+ abortControllerRef . current = abortController ;
66+
67+ const response = await window . electron . searchGames (
68+ filters ,
69+ pageSize ,
70+ offset
71+ ) ;
72+
73+ if ( abortController . signal . aborted ) return ;
74+
75+ setResults ( response . edges ) ;
76+ setItemsCount ( response . count ) ;
77+ setIsLoading ( false ) ;
78+ } , 500 )
79+ ) . current ;
80+
6181 useEffect ( ( ) => {
6282 setResults ( [ ] ) ;
6383 setIsLoading ( true ) ;
6484 abortControllerRef . current ?. abort ( ) ;
6585
66- const abortController = new AbortController ( ) ;
67- abortControllerRef . current = abortController ;
68-
69- window . electron
70- . searchGames ( filters , PAGE_SIZE , ( page - 1 ) * PAGE_SIZE )
71- . then ( ( response ) => {
72- if ( abortController . signal . aborted ) {
73- return ;
74- }
75-
76- setResults ( response . edges ) ;
77- setItemsCount ( response . count ) ;
78- setIsLoading ( false ) ;
79- } ) ;
80- } , [ filters , page , dispatch ] ) ;
86+ debouncedSearch ( filters , PAGE_SIZE , ( page - 1 ) * PAGE_SIZE ) ;
87+
88+ return ( ) => {
89+ debouncedSearch . cancel ( ) ;
90+ } ;
91+ } , [ filters , page , debouncedSearch ] ) ;
8192
8293 useEffect ( ( ) => {
8394 downloadSourcesTable . toArray ( ) . then ( ( sources ) => {
0 commit comments