@@ -7,7 +7,7 @@ import type {CourseType} from '../../../lib/course-search/types'
77import { ListSeparator , ListSectionHeader } from '../../components/list'
88import * as c from '../../components/colors'
99import { CourseRow } from './row'
10- import memoize from 'mem '
10+ import memoize from 'lodash/memoize '
1111import { parseTerm } from '../../../lib/course-search'
1212import { NoticeView } from '../../components/notice'
1313import { FilterToolbar } from '../components/filter-toolbar'
@@ -33,6 +33,25 @@ type Props = TopLevelViewPropsType & {
3333 updateRecentFilters : ( filters : FilterType [ ] ) => any ,
3434}
3535
36+ function doSearch ( args : {
37+ query : string ,
38+ filters : Array < FilterType > ,
39+ courses : Array < CourseType > ,
40+ applyFilters : ( filters : FilterType [ ] , item : CourseType ) = > boolean ,
41+ } ) {
42+ let { query, filters, courses, applyFilters} = args
43+
44+ let results = courses . filter ( course => applyFilters ( filters , course ) )
45+ if ( query ) {
46+ results = results . filter ( course => applySearch ( query , course ) )
47+ }
48+
49+ return sortAndGroupResults ( results )
50+ }
51+
52+ let memoizedDoSearch = memoize ( doSearch )
53+ memoizedDoSearch . cache = new WeakMap ( )
54+
3655export class CourseResultsList extends React . Component < Props > {
3756 keyExtractor = ( item : CourseType ) => item . clbid . toString ( )
3857
@@ -48,37 +67,10 @@ export class CourseResultsList extends React.Component<Props> {
4867 this . props . navigation . navigate ( 'CourseDetailView' , { course : data } )
4968 }
5069
51- doSearch = ( args : {
52- query : string ,
53- filters : Array < FilterType > ,
54- courses : Array < CourseType > ,
55- applyFilters : ( filters : FilterType [ ] , item : CourseType ) => boolean ,
56- } ) => {
57- let { query, filters, courses, applyFilters} = args
58- query = query . toLowerCase ( )
59-
60- let results = courses . filter ( course => applyFilters ( filters , course ) )
61- if ( query ) {
62- results = results . filter ( course => applySearch ( query , course ) )
63- }
64-
65- return sortAndGroupResults ( results )
66- }
67-
68- memoizedDoSearch = memoize ( this . doSearch , {
69- maxAge : 1000 ,
70- cacheKey : ( ...args ) => args ,
71- } )
72-
7370 render ( ) {
7471 let { filters, browsing, query, courses, applyFilters} = this . props
7572
76- let results = this . memoizedDoSearch ( {
77- query : query . toLowerCase ( ) ,
78- filters,
79- courses,
80- applyFilters,
81- } )
73+ let results = memoizedDoSearch ( { query, filters, courses, applyFilters} )
8274
8375 const header = (
8476 < FilterToolbar filters = { filters } onPress = { this . props . openFilterView } />
0 commit comments