Skip to content

Commit 69c24e2

Browse files
committed
Add links to EventTeamMatchesView from EventTeamsView and EventDivisionRankingsView
1 parent b31fbe4 commit 69c24e2

File tree

5 files changed

+135
-43
lines changed

5 files changed

+135
-43
lines changed

app/src/main/java/com/sunkensplashstudios/VRCRoboScout/EventDivisionRankingsView.kt

Lines changed: 65 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@ import androidx.compose.foundation.clickable
44
import androidx.compose.foundation.layout.Arrangement
55
import androidx.compose.foundation.layout.Column
66
import androidx.compose.foundation.layout.Row
7+
import androidx.compose.foundation.layout.Spacer
78
import androidx.compose.foundation.layout.fillMaxSize
89
import androidx.compose.foundation.layout.fillMaxWidth
910
import androidx.compose.foundation.layout.padding
11+
import androidx.compose.foundation.layout.size
1012
import androidx.compose.foundation.layout.width
1113
import androidx.compose.foundation.rememberScrollState
1214
import androidx.compose.foundation.verticalScroll
1315
import androidx.compose.material.icons.Icons
1416
import androidx.compose.material.icons.automirrored.filled.ArrowBackIos
17+
import androidx.compose.material.icons.automirrored.filled.ArrowForwardIos
1518
import androidx.compose.material3.Card
1619
import androidx.compose.material3.CardColors
1720
import androidx.compose.material3.CenterAlignedTopAppBar
@@ -35,43 +38,68 @@ import androidx.compose.ui.text.font.FontWeight
3538
import androidx.compose.ui.text.style.TextOverflow
3639
import androidx.compose.ui.unit.dp
3740
import androidx.compose.ui.unit.sp
41+
import androidx.lifecycle.SavedStateHandle
3842
import androidx.lifecycle.ViewModel
3943
import androidx.lifecycle.viewmodel.compose.viewModel
4044
import androidx.navigation.NavController
4145
import com.ramcosta.composedestinations.annotation.Destination
46+
import com.ramcosta.composedestinations.navigation.navigate
47+
import com.sunkensplashstudios.VRCRoboScout.destinations.EventTeamMatchesViewDestination
4248
import com.sunkensplashstudios.VRCRoboScout.ui.theme.*
4349

4450
import kotlinx.coroutines.CoroutineScope
4551
import kotlinx.coroutines.Dispatchers
4652
import kotlinx.coroutines.launch
4753
import kotlinx.coroutines.withContext
4854

55+
//class EventDivisionRankingsViewModel(private val state: SavedStateHandle): ViewModel() {
4956
class EventDivisionRankingsViewModel: ViewModel() {
5057
var event by mutableStateOf(Event())
5158
var division by mutableStateOf(Division())
59+
var rankings by mutableStateOf(listOf<TeamRanking>())
5260
var teamPerformanceRatings by mutableStateOf(mapOf<Int, TeamPerformanceRatings>())
61+
/*var event: Event
62+
get() = state.get<Event>("event") ?: Event()
63+
set(value) = state.set("event", value)
64+
65+
var division: Division
66+
get() = state.get<Division>("division") ?: Division()
67+
set(value) = state.set("division", value)
68+
69+
var rankings: List<TeamRanking>
70+
get() = state.get<List<TeamRanking>>("rankings") ?: listOf()
71+
set(value) = state.set("rankings", value)
72+
73+
var teamPerformanceRatings: Map<Int, TeamPerformanceRatings>
74+
get() = state.get<Map<Int, TeamPerformanceRatings>>("teamPerformanceRatings") ?: mapOf()
75+
set(value) = state.set("teamPerformanceRatings", value)*/
5376
}
5477

5578
@OptIn(ExperimentalMaterial3Api::class)
5679
@Destination
5780
@Composable
5881
fun EventDivisionRankingsView(event: Event, division: Division, eventDivisionRankingsViewModel: EventDivisionRankingsViewModel = viewModel(), navController: NavController) {
5982

60-
var loading by remember { mutableStateOf(event.rankings[division] == null || event.teamPerformanceRatings[division] == null) }
83+
var loading by remember { mutableStateOf(eventDivisionRankingsViewModel.rankings.isEmpty() || eventDivisionRankingsViewModel.teamPerformanceRatings.isEmpty()) }
6184

6285
fun updateRankings() {
63-
if (eventDivisionRankingsViewModel.event.rankings[division] == null || eventDivisionRankingsViewModel.event.teamPerformanceRatings[division] == null) {
64-
loading = true
65-
}
6686
CoroutineScope(Dispatchers.Default).launch {
6787
try {
88+
println("updating rankings: $event, $division")
89+
/*println("old rankings: ${event.rankings[division]}")
90+
println("old rankings event model: ${eventDivisionRankingsViewModel.event.rankings}")
91+
println("old rankings model: ${eventDivisionRankingsViewModel.rankings}")
92+
println("old ratings: ${event.teamPerformanceRatings[division]}")
93+
println("old ratings model: ${eventDivisionRankingsViewModel.teamPerformanceRatings}")*/
94+
event.fetchRankings(division)
95+
eventDivisionRankingsViewModel.rankings = (event.rankings[division] ?: emptyList()).toMutableList()
6896
event.calculateTeamPerformanceRatings(division)
69-
eventDivisionRankingsViewModel.teamPerformanceRatings = eventDivisionRankingsViewModel.event.teamPerformanceRatings[division] ?: emptyMap()
70-
eventDivisionRankingsViewModel.event.rankings[division] = (eventDivisionRankingsViewModel.event.rankings[division] ?: emptyList()).toMutableList()
97+
eventDivisionRankingsViewModel.teamPerformanceRatings = event.teamPerformanceRatings[division] ?: emptyMap()
98+
/*println("new rankings: ${eventDivisionRankingsViewModel.rankings}")
99+
println("new ratings: ${eventDivisionRankingsViewModel.teamPerformanceRatings}")*/
71100
} catch (e: Exception) {
72101
e.printStackTrace()
73102
}
74-
// event.fetchRankings(division)
75103
withContext(Dispatchers.Main) {
76104
loading = false
77105
}
@@ -112,7 +140,7 @@ fun EventDivisionRankingsView(event: Event, division: Division, eventDivisionRan
112140
.fillMaxSize()
113141
) {
114142
var update by remember { mutableStateOf(true) }
115-
println("div: ${eventDivisionRankingsViewModel.event.rankings[division]}")
143+
println("div: ${eventDivisionRankingsViewModel.rankings}")
116144
println("loading: $loading")
117145
println("update: $update")
118146

@@ -123,11 +151,14 @@ fun EventDivisionRankingsView(event: Event, division: Division, eventDivisionRan
123151

124152
if (loading) {
125153
LoadingView()
154+
println("loading")
126155
}
127-
else if ((eventDivisionRankingsViewModel.event.rankings[division] ?: emptyList()).isEmpty()) {
156+
else if (eventDivisionRankingsViewModel.rankings.isEmpty()) {
128157
NoDataView()
158+
println("no data")
129159
}
130160
else {
161+
println("data")
131162
Column(
132163
modifier = Modifier.verticalScroll(rememberScrollState())
133164
) {
@@ -144,12 +175,17 @@ fun EventDivisionRankingsView(event: Event, division: Division, eventDivisionRan
144175
verticalArrangement = Arrangement.spacedBy(0.dp),
145176
modifier = Modifier.padding(horizontal = 10.dp)
146177
) {
147-
eventDivisionRankingsViewModel.event.rankings[division]?.reversed()?.forEach { ranking ->
148-
val performanceRatings = eventDivisionRankingsViewModel.teamPerformanceRatings.get(ranking.team.id)
178+
eventDivisionRankingsViewModel.rankings.reversed().forEach { ranking ->
179+
val performanceRatings = eventDivisionRankingsViewModel.teamPerformanceRatings[ranking.team.id]
149180
Row(
150181
modifier = Modifier
151182
.padding(vertical = 10.dp)
152-
.fillMaxWidth(),
183+
.fillMaxWidth()
184+
.clickable {
185+
navController.navigate(
186+
EventTeamMatchesViewDestination(event, eventDivisionRankingsViewModel.event.getTeam(ranking.team.id) ?: Team())
187+
)
188+
},
153189
verticalAlignment = Alignment.CenterVertically
154190
) {
155191
Column {
@@ -184,6 +220,7 @@ fun EventDivisionRankingsView(event: Event, division: Division, eventDivisionRan
184220
modifier = Modifier.fillMaxWidth(),
185221
horizontalArrangement = Arrangement.SpaceEvenly
186222
) {
223+
Spacer(modifier = Modifier.weight(1.0f))
187224
Column(
188225
verticalArrangement = Arrangement.spacedBy((-10).dp)
189226
) {
@@ -203,6 +240,7 @@ fun EventDivisionRankingsView(event: Event, division: Division, eventDivisionRan
203240
color = Color.Gray
204241
)
205242
}
243+
Spacer(modifier = Modifier.weight(1.0f))
206244
Column(
207245
verticalArrangement = Arrangement.spacedBy((-10).dp)
208246
) {
@@ -222,6 +260,7 @@ fun EventDivisionRankingsView(event: Event, division: Division, eventDivisionRan
222260
color = Color.Gray
223261
)
224262
}
263+
Spacer(modifier = Modifier.weight(1.0f))
225264
Column(
226265
verticalArrangement = Arrangement.spacedBy((-10).dp)
227266
) {
@@ -241,8 +280,22 @@ fun EventDivisionRankingsView(event: Event, division: Division, eventDivisionRan
241280
color = Color.Gray
242281
)
243282
}
283+
Spacer(modifier = Modifier.weight(1.0f))
284+
Icon(
285+
Icons.AutoMirrored.Filled.ArrowForwardIos,
286+
modifier = Modifier.size(15.dp),
287+
tint = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.3f),
288+
contentDescription = "Show Match List"
289+
)
244290
}
245291
}
292+
Spacer(modifier = Modifier.weight(1.0f))
293+
Icon(
294+
Icons.AutoMirrored.Filled.ArrowForwardIos,
295+
modifier = Modifier.size(15.dp),
296+
tint = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.3f),
297+
contentDescription = "Show ${eventDivisionRankingsViewModel.event.getTeam(ranking.team.id)?.number} Match List"
298+
)
246299
}
247300
}
248301
}

app/src/main/java/com/sunkensplashstudios/VRCRoboScout/EventDivisionView.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,11 @@ fun DivisionTabView(tabBarItems: List<TabBarItem>, navController: NavController,
9898
@Composable
9999
fun EventDivisionView(eventDivisionViewModel: EventDivisionViewModel = viewModel(), navController: NavController, event: Event, division: Division) {
100100

101-
val divisionViewModels = mapOf(
102-
"event_division_matches_view" to EventDivisionMatchesViewModel(),
103-
"event_division_rankings_view" to EventDivisionRankingsViewModel(),
104-
"event_division_awards_view" to EventDivisionAwardsViewModel()
105-
)
101+
/*val divisionViewModels = mapOf(
102+
"event_division_matches_view" to viewModel<EventDivisionMatchesViewModel>(),
103+
"event_division_rankings_view" to viewModel<EventDivisionRankingsViewModel>(),
104+
"event_division_awards_view" to viewModel<EventDivisionAwardsViewModel>()
105+
)*/
106106

107107
// setting up the individual tabs
108108
val teamsTab = TabBarItem(title = "Teams", direction = EventTeamsViewDestination(eventDivisionViewModel.event, eventDivisionViewModel.division), selectedIcon = Icons.Filled.People, unselectedIcon = Icons.Outlined.PeopleOutline)
@@ -167,23 +167,23 @@ fun EventDivisionView(eventDivisionViewModel: EventDivisionViewModel = viewModel
167167
navController = navController,
168168
event = event,
169169
division = division,
170-
eventDivisionMatchesViewModel = divisionViewModels["event_division_matches_view"] as EventDivisionMatchesViewModel
170+
//eventDivisionMatchesViewModel = divisionViewModels["event_division_matches_view"] as EventDivisionMatchesViewModel
171171
)
172172
}
173173
2 -> {
174174
EventDivisionRankingsView(
175175
event = event,
176176
division = division,
177177
navController = navController,
178-
eventDivisionRankingsViewModel = divisionViewModels["event_division_rankings_view"] as EventDivisionRankingsViewModel
178+
//eventDivisionRankingsViewModel = divisionViewModels["event_division_rankings_view"] as EventDivisionRankingsViewModel
179179
)
180180
}
181181
3 -> {
182182
EventDivisionAwardsView(
183183
event = event,
184184
division = division,
185185
navController = navController,
186-
eventDivisionAwardsViewModel = divisionViewModels["event_division_awards_view"] as EventDivisionAwardsViewModel
186+
//eventDivisionAwardsViewModel = divisionViewModels["event_division_awards_view"] as EventDivisionAwardsViewModel
187187
)
188188
}
189189
}

0 commit comments

Comments
 (0)