refactor(desktop, core): Onboarding zu DeviceInitialization umbenannt, Navigation und Screens angepasst

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
2026-04-18 11:10:01 +02:00
parent 315517f03f
commit 7bbb991e69
24 changed files with 742 additions and 222 deletions
@@ -1,9 +1,9 @@
package at.mocode.frontend.core.navigation
sealed class AppScreen(val route: String) {
// Onboarding (Desktop: Gerätename/Schlüssel/ZNS)
data object Onboarding : AppScreen("/onboarding")
data object Landing : AppScreen(Routes.HOME)
// DeviceInitialization (Desktop: Gerätename/Schlüssel/ZNS)
data object DeviceInitialization : AppScreen("/onboarding")
data object PortalDashboard : AppScreen(Routes.HOME)
data object Home : AppScreen("/home")
data object Dashboard : AppScreen("/dashboard")
data object CreateTournament : AppScreen("/tournament/create") // Neuer Screen
@@ -11,11 +11,11 @@ sealed class AppScreen(val route: String) {
// Login now accepts an optional returnTo screen to determine where to go after success
data class Login(val returnTo: AppScreen? = null) : AppScreen(Routes.LOGIN)
data object Ping : AppScreen("/ping")
data object ConnectivityCheck : AppScreen("/ping")
data object Profile : AppScreen("/profile")
data object OrganizerProfile : AppScreen("/organizer/profile")
data object AuthCallback : AppScreen("/auth/callback")
data object Nennung : AppScreen("/nennung")
data object EntryManagement : AppScreen("/nennung")
// --- Desktop-Navigation (Vision_03) ---
data object VeranstaltungVerwaltung : AppScreen("/verwaltung") // Gesamtübersicht
@@ -38,7 +38,7 @@ sealed class AppScreen(val route: String) {
// data class VeranstaltungProfil(val id: Long) : AppScreen("/veranstaltung/profil/$id")
// Neuer Flow: + Neue Veranstaltung → Veranstalter auswählen → Veranstalter-Detail → Veranstaltung-Übersicht
// Neuer Flow: + neue Veranstaltung → Veranstalter auswählen → Veranstalter-Detail → Veranstaltung-Übersicht
data object VeranstalterAuswahl : AppScreen("/veranstalter/auswahl")
data object VeranstalterNeu : AppScreen("/veranstalter/neu")
data class VeranstalterDetail(val veranstalterId: Long) : AppScreen("/veranstalter/$veranstalterId")
@@ -46,6 +46,7 @@ sealed class AppScreen(val route: String) {
// Neue Veranstaltungs-Konfig-Seite (aus Veranstalter-Detail oder direkt aus Cockpit)
data class VeranstaltungKonfig(val veranstalterId: Long = 0) :
AppScreen("/veranstalter/$veranstalterId/veranstaltung/neu")
data class VeranstaltungProfil(val veranstalterId: Long, val veranstaltungId: Long) :
AppScreen("/veranstalter/$veranstalterId/veranstaltung/$veranstaltungId")
@@ -61,7 +62,6 @@ sealed class AppScreen(val route: String) {
data object Reiter : AppScreen("/reiter")
data object Pferde : AppScreen("/pferde")
data object Vereine : AppScreen("/vereine")
data object Funktionaere : AppScreen("/funktionaere")
data object Meisterschaften : AppScreen("/meisterschaften")
data object Cups : AppScreen("/cups")
data object StammdatenImport : AppScreen("/stammdaten/import")
@@ -85,17 +85,17 @@ sealed class AppScreen(val route: String) {
fun fromRoute(route: String): AppScreen {
return when (route) {
"/onboarding" -> Onboarding
Routes.HOME -> Landing
"/onboarding" -> DeviceInitialization
Routes.HOME -> PortalDashboard
"/home" -> Home
"/dashboard" -> Dashboard
"/tournament/create" -> CreateTournament
Routes.LOGIN, Routes.Auth.LOGIN -> Login()
"/ping" -> Ping
"/ping" -> ConnectivityCheck
"/profile" -> Profile
"/organizer/profile" -> OrganizerProfile
"/auth/callback" -> AuthCallback
"/nennung" -> Nennung
"/nennung" -> EntryManagement
"/verwaltung" -> VeranstaltungVerwaltung
"/pferde/verwaltung" -> PferdVerwaltung
"/reiter/verwaltung" -> ReiterVerwaltung
@@ -139,7 +139,7 @@ sealed class AppScreen(val route: String) {
VERANSTALTUNG_PROFIL.matchEntire(route)?.destructured?.let { (verId, vId) ->
return VeranstaltungProfil(verId.toLong(), vId.toLong())
}
Landing // Default fallback
PortalDashboard // Default fallback
}
}
}
@@ -10,13 +10,15 @@ import kotlin.test.assertTrue
private class FakeNav : NavigationPort {
var last: String? = null
override val currentScreen: StateFlow<AppScreen> = MutableStateFlow(AppScreen.Landing)
override val currentScreen: StateFlow<AppScreen> = MutableStateFlow(AppScreen.PortalDashboard)
override fun navigateTo(route: String) {
last = route
}
override fun navigateToScreen(screen: AppScreen) {
last = screen.route
}
override fun navigateBack() {
// no-op for tests
}