@@ -35,10 +35,12 @@ const Filters = ({
35
35
} : FiltersProps ) => {
36
36
const [ minGPA , setMinGPA ] = useState ( '' ) ;
37
37
const [ minRating , setMinRating ] = useState ( '' ) ;
38
+ const [ semesters , setSemesters ] = useState < string [ ] > ( [ ] ) ;
38
39
const MAX_NUM_RECENT_SEMESTERS = 4 ; // recentSemesters will have up to the last 4 long-semesters
39
40
const recentSemesters = getRecentSemesters ( ) ; // recentSemesters contains semesters offered in the last 2 years; recentSemesters.length = [0, 4] range
40
41
academicSessions . sort ( ( a , b ) => compareSemesters ( b , a ) ) ; // display the semesters in order of recency (most recent first)
41
-
42
+ setSemesters ( chosenSessions ) ;
43
+
42
44
//set value from query
43
45
const router = useRouter ( ) ;
44
46
useEffect ( ( ) => {
@@ -230,28 +232,42 @@ const Filters = ({
230
232
label = "Semesters"
231
233
labelId = "Semesters"
232
234
multiple
233
- value = { chosenSessions }
235
+ value = { semesters }
234
236
onChange = { ( event : SelectChangeEvent < string [ ] > ) => {
235
237
const {
236
238
target : { value } ,
237
239
} = event ;
238
240
if ( value . includes ( 'select-all' ) ) {
239
241
if ( chosenSessions . length === academicSessions . length ) {
240
242
addChosenSessions ( ( ) => [ ] ) ;
243
+ setSemesters ( ( ) => [ ] ) ;
241
244
} else {
242
245
addChosenSessions ( ( ) => academicSessions ) ;
246
+ setSemesters ( ( ) => academicSessions . concat ( [ 'select-all' ] ) ) ;
243
247
}
244
248
} else if ( value . includes ( 'recent' ) ) {
245
249
if (
246
250
chosenSessions . length === recentSemesters . length &&
247
251
chosenSessions . every ( ( el ) => recentSemesters . includes ( el ) )
248
252
) {
249
253
addChosenSessions ( ( ) => academicSessions ) ;
254
+ setSemesters ( ( ) => academicSessions . concat ( [ 'select-all' ] ) ) ;
250
255
} else {
251
256
addChosenSessions ( ( ) => recentSemesters ) ;
257
+ setSemesters ( ( ) => recentSessions . concat ( [ 'recent' ] ) ) ;
252
258
}
253
259
} else {
254
260
addChosenSessions ( ( ) => value as string [ ] ) ;
261
+ if ( chosenSessions . length === academicSessions . length ) {
262
+ setSemesters ( ( ) => academicSessions . concat ( [ 'select-all' ] ) ) ;
263
+ } else if (
264
+ chosenSessions . length === recentSemesters . length &&
265
+ chosenSessions . every ( ( el ) => recentSemesters . includes ( el ) )
266
+ ) {
267
+ setSemesters ( ( ) => recentSessions . concat ( [ 'recent' ] ) ) ;
268
+ } else {
269
+ setSemesters ( ( ) => chosenSessions ) ;
270
+ }
255
271
}
256
272
} }
257
273
renderValue = { ( selected ) => {
0 commit comments