11package com.cornellappdev.score.viewmodel
22
3+ import com.cornellappdev.score.components.DateFilter
34import com.cornellappdev.score.model.ApiResponse
45import com.cornellappdev.score.model.GameCardData
56import 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