File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11import Fuse from "fuse.js" ;
22import type { Episode } from "src/types/Episode" ;
33
4+ const fuseOptions = {
5+ shouldSort : true ,
6+ findAllMatches : true ,
7+ threshold : 0.4 ,
8+ isCaseSensitive : false ,
9+ keys : [ "title" ] ,
10+ } ;
11+
12+ const fuseCache = new WeakMap < Episode [ ] , { fuse : Fuse < Episode > ; size : number } > ( ) ;
13+
14+ function getFuse ( episodes : Episode [ ] ) : Fuse < Episode > {
15+ const cached = fuseCache . get ( episodes ) ;
16+
17+ if ( cached && cached . size === episodes . length ) {
18+ return cached . fuse ;
19+ }
20+
21+ const newFuse = new Fuse ( episodes , fuseOptions ) ;
22+ fuseCache . set ( episodes , { fuse : newFuse , size : episodes . length } ) ;
23+
24+ return newFuse ;
25+ }
26+
427export default function searchEpisodes ( query : string , episodes : Episode [ ] ) : Episode [ ] {
5- if ( episodes . length === 0 ) return [ ] ;
28+ if ( episodes . length === 0 ) return [ ] ;
629
730 if ( query . length === 0 ) {
831 return episodes ;
9- }
10-
11- const fuse = new Fuse ( episodes , {
12- shouldSort : true ,
13- findAllMatches : true ,
14- threshold : 0.4 ,
15- isCaseSensitive : false ,
16- keys : [ 'title' ] ,
17- } ) ;
18-
32+ }
33+
34+ const fuse = getFuse ( episodes ) ;
1935 const searchResults = fuse . search ( query ) ;
2036 return searchResults . map ( resItem => resItem . item ) ;
2137}
You can’t perform that action at this time.
0 commit comments