Skip to content

Commit cc28ff6

Browse files
committed
fix an accidentally quadratic filter lookup
replacing it with a hashmap replaces the N*M checks with N checks
1 parent 1190d55 commit cc28ff6

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

source/views/sis/course-search/search.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {RecentItemsList} from '../components/recents-list'
2323
import {Separator} from '../../components/separator'
2424
import {buildFilters} from './lib/build-filters'
2525
import type {FilterComboType} from './lib/format-filter-combo'
26+
import fromPairs from 'lodash/fromPairs'
2627

2728
const PROMPT_TEXT =
2829
'We need to download the courses from the server. This will take a few seconds.'
@@ -133,16 +134,17 @@ class CourseSearchView extends React.Component<Props, State> {
133134
onRecentFilterPress = async (text: string) => {
134135
this.setState(() => ({mode: 'browsing'}))
135136

136-
const selectedFilterCombo = this.props.recentFilters.find(
137-
f => f.description === text,
138-
)
139-
const resetFilters = await buildFilters()
140-
const selectedFilters = selectedFilterCombo
141-
? resetFilters.map(
142-
f => selectedFilterCombo.filters.find(f2 => f2.key === f.key) || f,
143-
)
144-
: resetFilters
137+
let {recentFilters} = this.props
138+
let selectedFilterCombo = recentFilters.find(f => f.description === text)
145139

140+
let freshFilters = await buildFilters()
141+
let selectedFilters = freshFilters
142+
if (selectedFilterCombo) {
143+
let filterLookup = fromPairs(
144+
selectedFilterCombo.filters.map(f => [f.key, f]),
145+
)
146+
selectedFilters = freshFilters.map(f => filterLookup[f.key] || f)
147+
}
146148

147149
this.setState(() => ({filters: selectedFilters}))
148150
}

0 commit comments

Comments
 (0)