diff --git a/app/src/main/java/com/cornellappdev/score/components/AdvancedFiltersBottomSheet.kt b/app/src/main/java/com/cornellappdev/score/components/AdvancedFiltersBottomSheet.kt index 0f7e1e8..a621238 100644 --- a/app/src/main/java/com/cornellappdev/score/components/AdvancedFiltersBottomSheet.kt +++ b/app/src/main/java/com/cornellappdev/score/components/AdvancedFiltersBottomSheet.kt @@ -30,11 +30,12 @@ fun AdvancedFilterBottomSheet( location: LocationFilter?, date: DateFilter? ) -> Unit, - onReset: () -> Unit + onReset: () -> Unit, + initialDate: DateFilter? = null ) { var selectedPrice by remember { mutableStateOf(null) } var selectedLocation by remember { mutableStateOf(null) } - var selectedDate by remember { mutableStateOf(null) } + var selectedDate by remember { mutableStateOf(initialDate) } ModalBottomSheet( onDismissRequest = onDismiss, diff --git a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt index 1536efa..8de7372 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt @@ -93,11 +93,12 @@ fun HomeScreen( sheetState = sheetState, onDismiss = { showBottomSheet = false }, onApply = { price, location, date -> - // TODO: forward to ViewModel + homeViewModel.onDateFilterApplied(date) }, onReset = { - // TODO: reset filters in ViewModel - } + homeViewModel.onFiltersReset() + }, + initialDate = uiState.selectedDateFilter ) } } @@ -171,12 +172,11 @@ private fun HomeLazyColumn( text = "Game Schedule", style = title, ) - //removed for 2/2026 release -// IconButton( -// icon = painterResource(id = R.drawable.advanced_filter), -// contentDescription = "Advanced filter", -// onClick = onAdvancedFilterClick -// ) + IconButton( + icon = painterResource(id = R.drawable.advanced_filter), + contentDescription = "Advanced filter", + onClick = onAdvancedFilterClick + ) } Spacer(modifier = Modifier.height(16.dp)) SportSelectorHeader( diff --git a/app/src/main/java/com/cornellappdev/score/viewmodel/HomeViewModel.kt b/app/src/main/java/com/cornellappdev/score/viewmodel/HomeViewModel.kt index ee6159b..23efb94 100644 --- a/app/src/main/java/com/cornellappdev/score/viewmodel/HomeViewModel.kt +++ b/app/src/main/java/com/cornellappdev/score/viewmodel/HomeViewModel.kt @@ -1,5 +1,6 @@ package com.cornellappdev.score.viewmodel +import com.cornellappdev.score.components.DateFilter import com.cornellappdev.score.model.ApiResponse import com.cornellappdev.score.model.GameCardData import com.cornellappdev.score.model.GenderDivision @@ -16,15 +17,24 @@ data class HomeUiState( val selectedGender: GenderDivision, val sportSelect: SportSelection, val selectionList: List, - val loadedState: ApiResponse> + val loadedState: ApiResponse>, + val selectedDateFilter: DateFilter? = null ) { //TODO: refactor filters to use flows - not best practice to expose original games list to the view val filteredGames: List get() = when (loadedState) { is ApiResponse.Success -> loadedState.data.filter { game -> - (selectedGender == GenderDivision.ALL || game.gender == selectedGender.displayName) && - (sportSelect is SportSelection.All || - (sportSelect is SportSelection.SportSelect && game.sport == sportSelect.sport.displayName)) + val genderMatch = selectedGender == GenderDivision.ALL || game.gender == selectedGender.displayName + val sportMatch = sportSelect is SportSelection.All || + (sportSelect is SportSelection.SportSelect && game.sport == sportSelect.sport.displayName) + val dateMatch = when (selectedDateFilter) { + DateFilter.TODAY -> game.date == LocalDate.now() + DateFilter.WITHIN_7_DAYS -> game.date != null && !game.date.isAfter(LocalDate.now().plusDays(7)) + DateFilter.WITHIN_A_MONTH -> game.date != null && !game.date.isAfter(LocalDate.now().plusDays(30)) + DateFilter.OVER_A_MONTH -> game.date != null && game.date.isAfter(LocalDate.now().plusDays(30)) + null -> true + } + genderMatch && sportMatch && dateMatch } ApiResponse.Loading -> emptyList() @@ -91,4 +101,12 @@ class HomeViewModel @Inject constructor( ) } } + + fun onDateFilterApplied(date: DateFilter?) { + applyMutation { copy(selectedDateFilter = date) } + } + + fun onFiltersReset() { + applyMutation { copy(selectedDateFilter = null) } + } }