Skip to content

Commit f342092

Browse files
committed
advanced filtering done and tested
1 parent 254d1c7 commit f342092

3 files changed

Lines changed: 34 additions & 15 deletions

File tree

app/src/main/java/com/cornellappdev/score/components/AdvancedFiltersBottomSheet.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,12 @@ fun AdvancedFilterBottomSheet(
3030
location: LocationFilter?,
3131
date: DateFilter?
3232
) -> Unit,
33-
onReset: () -> Unit
33+
onReset: () -> Unit,
34+
initialDate: DateFilter? = null
3435
) {
3536
var selectedPrice by remember { mutableStateOf<PriceFilter?>(null) }
3637
var selectedLocation by remember { mutableStateOf<LocationFilter?>(null) }
37-
var selectedDate by remember { mutableStateOf<DateFilter?>(null) }
38+
var selectedDate by remember { mutableStateOf(initialDate) }
3839

3940
ModalBottomSheet(
4041
onDismissRequest = onDismiss,

app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,12 @@ fun HomeScreen(
9393
sheetState = sheetState,
9494
onDismiss = { showBottomSheet = false },
9595
onApply = { price, location, date ->
96-
// TODO: forward to ViewModel
96+
homeViewModel.onDateFilterApplied(date)
9797
},
9898
onReset = {
99-
// TODO: reset filters in ViewModel
100-
}
99+
homeViewModel.onFiltersReset()
100+
},
101+
initialDate = uiState.selectedDateFilter
101102
)
102103
}
103104
}
@@ -171,12 +172,11 @@ private fun HomeLazyColumn(
171172
text = "Game Schedule",
172173
style = title,
173174
)
174-
//removed for 2/2026 release
175-
// IconButton(
176-
// icon = painterResource(id = R.drawable.advanced_filter),
177-
// contentDescription = "Advanced filter",
178-
// onClick = onAdvancedFilterClick
179-
// )
175+
IconButton(
176+
icon = painterResource(id = R.drawable.advanced_filter),
177+
contentDescription = "Advanced filter",
178+
onClick = onAdvancedFilterClick
179+
)
180180
}
181181
Spacer(modifier = Modifier.height(16.dp))
182182
SportSelectorHeader(

app/src/main/java/com/cornellappdev/score/viewmodel/HomeViewModel.kt

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.cornellappdev.score.viewmodel
22

3+
import com.cornellappdev.score.components.DateFilter
34
import com.cornellappdev.score.model.ApiResponse
45
import com.cornellappdev.score.model.GameCardData
56
import com.cornellappdev.score.model.GenderDivision
@@ -16,15 +17,24 @@ data class HomeUiState(
1617
val selectedGender: GenderDivision,
1718
val sportSelect: SportSelection,
1819
val selectionList: List<SportSelection>,
19-
val loadedState: ApiResponse<List<GameCardData>>
20+
val loadedState: ApiResponse<List<GameCardData>>,
21+
val selectedDateFilter: DateFilter? = null
2022
) {
2123
//TODO: refactor filters to use flows - not best practice to expose original games list to the view
2224
val filteredGames: List<GameCardData>
2325
get() = when (loadedState) {
2426
is ApiResponse.Success -> loadedState.data.filter { game ->
25-
(selectedGender == GenderDivision.ALL || game.gender == selectedGender.displayName) &&
26-
(sportSelect is SportSelection.All ||
27-
(sportSelect is SportSelection.SportSelect && game.sport == sportSelect.sport.displayName))
27+
val genderMatch = selectedGender == GenderDivision.ALL || game.gender == selectedGender.displayName
28+
val sportMatch = sportSelect is SportSelection.All ||
29+
(sportSelect is SportSelection.SportSelect && game.sport == sportSelect.sport.displayName)
30+
val dateMatch = when (selectedDateFilter) {
31+
DateFilter.TODAY -> game.date == LocalDate.now()
32+
DateFilter.WITHIN_7_DAYS -> game.date != null && !game.date.isAfter(LocalDate.now().plusDays(7))
33+
DateFilter.WITHIN_A_MONTH -> game.date != null && !game.date.isAfter(LocalDate.now().plusDays(30))
34+
DateFilter.OVER_A_MONTH -> game.date != null && game.date.isAfter(LocalDate.now().plusDays(30))
35+
null -> true
36+
}
37+
genderMatch && sportMatch && dateMatch
2838
}
2939

3040
ApiResponse.Loading -> emptyList()
@@ -91,4 +101,12 @@ class HomeViewModel @Inject constructor(
91101
)
92102
}
93103
}
104+
105+
fun onDateFilterApplied(date: DateFilter?) {
106+
applyMutation { copy(selectedDateFilter = date) }
107+
}
108+
109+
fun onFiltersReset() {
110+
applyMutation { copy(selectedDateFilter = null) }
111+
}
94112
}

0 commit comments

Comments
 (0)