@@ -121,37 +121,39 @@ class GlobalSearch extends Component<Props, State> {
121
121
< div className = { styles . container } >
122
122
{ searchForm }
123
123
124
- < div className = { styles . selectList } >
125
- < div className = { styles . noResults } >
126
- < Help />
127
- < p >
128
- No results found for{ ' ' }
129
- < strong className = { styles . searchTerm } > "{ inputValue } "</ strong >
130
- </ p >
131
- < p >
132
- Try searching all{ ' ' }
133
- < button
134
- { ...getItemProps ( {
135
- item : [ SEARCH_RESULT , [ MODULE_RESULT , inputValue ] ] ,
136
- } ) }
137
- className = { classnames ( 'btn btn-inline' , {
138
- [ styles . selected ] : highlightedIndex === 0 ,
139
- } ) }
140
- >
141
- modules
142
- </ button > { ' ' }
143
- or{ ' ' }
144
- < button
145
- { ...getItemProps ( {
146
- item : [ SEARCH_RESULT , [ VENUE_RESULT , inputValue ] ] ,
147
- } ) }
148
- className = { classnames ( 'btn btn-inline' , {
149
- [ styles . selected ] : highlightedIndex === 1 ,
150
- } ) }
151
- >
152
- venues
153
- </ button >
154
- </ p >
124
+ < div className = { styles . selectListContainer } >
125
+ < div className = { styles . selectList } >
126
+ < div className = { styles . noResults } >
127
+ < Help />
128
+ < p >
129
+ No results found for{ ' ' }
130
+ < strong className = { styles . searchTerm } > "{ inputValue } "</ strong >
131
+ </ p >
132
+ < p >
133
+ Try searching all{ ' ' }
134
+ < button
135
+ { ...getItemProps ( {
136
+ item : [ SEARCH_RESULT , [ MODULE_RESULT , inputValue ] ] ,
137
+ } ) }
138
+ className = { classnames ( 'btn btn-inline' , {
139
+ [ styles . selected ] : highlightedIndex === 0 ,
140
+ } ) }
141
+ >
142
+ modules
143
+ </ button > { ' ' }
144
+ or{ ' ' }
145
+ < button
146
+ { ...getItemProps ( {
147
+ item : [ SEARCH_RESULT , [ VENUE_RESULT , inputValue ] ] ,
148
+ } ) }
149
+ className = { classnames ( 'btn btn-inline' , {
150
+ [ styles . selected ] : highlightedIndex === 1 ,
151
+ } ) }
152
+ >
153
+ venues
154
+ </ button >
155
+ </ p >
156
+ </ div >
155
157
</ div >
156
158
</ div >
157
159
</ div >
@@ -166,80 +168,84 @@ class GlobalSearch extends Component<Props, State> {
166
168
< div className = { styles . container } >
167
169
{ searchForm }
168
170
169
- < div className = { styles . selectList } >
170
- { hasModules && (
171
- < Fragment >
172
- < div
173
- { ...getItemProps ( {
174
- item : [ SEARCH_RESULT , [ MODULE_RESULT , inputValue ] ] ,
175
- } ) }
176
- className = { classnames ( styles . selectHeader , {
177
- [ styles . selected ] : highlightedIndex === 0 ,
178
- } ) }
179
- >
180
- < span className = { styles . headerName } > Modules</ span >
181
- < span className = "btn-svg" >
182
- View All < ChevronRight className = { styles . svg } />
183
- </ span >
184
- </ div >
185
-
186
- { modules . map ( ( module , index ) => (
171
+ { /* Wrap select list in absolute-positioned container to fix macOS Safari scrolling perf */ }
172
+ < div className = { styles . selectListContainer } >
173
+ < div className = { styles . selectList } >
174
+ { hasModules && (
175
+ < Fragment >
187
176
< div
188
177
{ ...getItemProps ( {
189
- key : module . ModuleCode ,
190
- item : [ MODULE_RESULT , module ] ,
178
+ item : [ SEARCH_RESULT , [ MODULE_RESULT , inputValue ] ] ,
191
179
} ) }
192
- className = { classnames ( styles . option , {
193
- [ styles . selected ] : highlightedIndex === index + 1 ,
180
+ className = { classnames ( styles . selectHeader , {
181
+ [ styles . selected ] : highlightedIndex === 0 ,
194
182
} ) }
195
183
>
196
- < span > { highlight ( `${ module . ModuleCode } ${ module . ModuleTitle } ` , tokens ) } </ span >
197
-
198
- < span className = { styles . semesters } >
199
- { module . Semesters . sort ( ) . map ( ( semester ) => (
200
- < span
201
- className = { classnames ( 'badge' , BADGE_COLOR [ semester ] ) }
202
- title = { config . semesterNames [ semester ] }
203
- >
204
- { config . shortSemesterNames [ semester ] }
205
- </ span >
206
- ) ) }
184
+ < span className = { styles . headerName } > Modules</ span >
185
+ < span className = "btn-svg" >
186
+ View All < ChevronRight className = { styles . svg } />
207
187
</ span >
208
188
</ div >
209
- ) ) }
210
- </ Fragment >
211
- ) }
212
- { hasVenues && (
213
- < Fragment >
214
- < div
215
- { ...getItemProps ( {
216
- item : [ SEARCH_RESULT , [ VENUE_RESULT , inputValue ] ] ,
217
- } ) }
218
- className = { classnames ( styles . selectHeader , {
219
- [ styles . selected ] : highlightedIndex === venueHeaderIndex ,
220
- } ) }
221
- >
222
- < span className = { styles . headerName } > Venues</ span >
223
- < span className = "btn-svg" >
224
- View All < ChevronRight className = { styles . svg } />
225
- </ span >
226
- </ div >
227
189
228
- { venues . map ( ( venue , index ) => (
190
+ { modules . map ( ( module , index ) => (
191
+ < div
192
+ { ...getItemProps ( {
193
+ key : module . ModuleCode ,
194
+ item : [ MODULE_RESULT , module ] ,
195
+ } ) }
196
+ className = { classnames ( styles . option , {
197
+ [ styles . selected ] : highlightedIndex === index + 1 ,
198
+ } ) }
199
+ >
200
+ < span > { highlight ( `${ module . ModuleCode } ${ module . ModuleTitle } ` , tokens ) } </ span >
201
+
202
+ < span className = { styles . semesters } >
203
+ { module . Semesters . sort ( ) . map ( ( semester ) => (
204
+ < span
205
+ key = { semester }
206
+ className = { classnames ( 'badge' , BADGE_COLOR [ semester ] ) }
207
+ title = { config . semesterNames [ semester ] }
208
+ >
209
+ { config . shortSemesterNames [ semester ] }
210
+ </ span >
211
+ ) ) }
212
+ </ span >
213
+ </ div >
214
+ ) ) }
215
+ </ Fragment >
216
+ ) }
217
+ { hasVenues && (
218
+ < Fragment >
229
219
< div
230
220
{ ...getItemProps ( {
231
- key : venue ,
232
- item : [ VENUE_RESULT , venue ] ,
221
+ item : [ SEARCH_RESULT , [ VENUE_RESULT , inputValue ] ] ,
233
222
} ) }
234
- className = { classnames ( styles . option , {
235
- [ styles . selected ] : highlightedIndex === venueItemOffset + index ,
223
+ className = { classnames ( styles . selectHeader , {
224
+ [ styles . selected ] : highlightedIndex === venueHeaderIndex ,
236
225
} ) }
237
226
>
238
- < span > { highlight ( venue , tokens ) } </ span >
227
+ < span className = { styles . headerName } > Venues</ span >
228
+ < span className = "btn-svg" >
229
+ View All < ChevronRight className = { styles . svg } />
230
+ </ span >
239
231
</ div >
240
- ) ) }
241
- </ Fragment >
242
- ) }
232
+
233
+ { venues . map ( ( venue , index ) => (
234
+ < div
235
+ { ...getItemProps ( {
236
+ key : venue ,
237
+ item : [ VENUE_RESULT , venue ] ,
238
+ } ) }
239
+ className = { classnames ( styles . option , {
240
+ [ styles . selected ] : highlightedIndex === venueItemOffset + index ,
241
+ } ) }
242
+ >
243
+ < span > { highlight ( venue , tokens ) } </ span >
244
+ </ div >
245
+ ) ) }
246
+ </ Fragment >
247
+ ) }
248
+ </ div >
243
249
</ div >
244
250
</ div >
245
251
) ;
0 commit comments