chore: refaktoriere Veranstaltungs-UI zu Events, implementiere ZNS-Suche und verbessere Navigationslogik

Signed-off-by: StefanMoCoAt <stefan.mo.co@gmail.com>
This commit is contained in:
2026-04-21 13:41:06 +02:00
parent 9b4af2bb56
commit 574f8c470c
18 changed files with 673 additions and 174 deletions
@@ -19,7 +19,7 @@ sealed class AppScreen(val route: String) {
data object EntryManagement : AppScreen("/nennung")
// --- Desktop-Navigation (Vision_03) ---
data object VeranstaltungVerwaltung : AppScreen("/verwaltung") // Gesamtübersicht
data object EventVerwaltung : AppScreen("/event/verwaltung") // Gesamtübersicht
// Profile
data object PferdVerwaltung : AppScreen("/pferde/verwaltung")
@@ -45,20 +45,20 @@ sealed class AppScreen(val route: String) {
data class VeranstalterDetail(val veranstalterId: Long) : AppScreen("/veranstalter/$veranstalterId")
// 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 EventKonfig(val veranstalterId: Long = 0) :
AppScreen("/veranstalter/$veranstalterId/event/neu")
data class VeranstaltungProfil(val veranstalterId: Long, val veranstaltungId: Long) :
AppScreen("/veranstalter/$veranstalterId/veranstaltung/$veranstaltungId")
data class EventProfil(val veranstalterId: Long, val veranstaltungId: Long) :
AppScreen("/veranstalter/$veranstalterId/event/$veranstaltungId")
data class VeranstaltungDetail(val id: Long) : AppScreen("/veranstaltung/$id")
data object VeranstaltungNeu : AppScreen("/veranstaltung/neu")
data class EventDetail(val id: Long) : AppScreen("/event/$id")
data object EventNeu : AppScreen("/event/neu")
data class TurnierDetail(val veranstaltungId: Long, val turnierId: Long) :
AppScreen("/veranstaltung/$veranstaltungId/turnier/$turnierId")
AppScreen("/event/$veranstaltungId/turnier/$turnierId")
data class TurnierNeu(val veranstaltungId: Long) : AppScreen("/veranstaltung/$veranstaltungId/turnier/neu")
data class TurnierNeu(val veranstaltungId: Long) : AppScreen("/event/$veranstaltungId/turnier/neu")
data class Billing(val veranstaltungId: Long, val turnierId: Long) :
AppScreen("/veranstaltung/$veranstaltungId/turnier/$turnierId/billing")
AppScreen("/event/$veranstaltungId/turnier/$turnierId/billing")
data object Reiter : AppScreen("/reiter")
data object Pferde : AppScreen("/pferde")
@@ -69,13 +69,13 @@ sealed class AppScreen(val route: String) {
data object NennungsEingang : AppScreen("/nennungs-eingang")
companion object {
private val VERANSTALTUNG_DETAIL = Regex("/veranstaltung/(\\d+)$")
private val TURNIER_DETAIL = Regex("/veranstaltung/(\\d+)/turnier/(\\d+)$")
private val TURNIER_NEU = Regex("/veranstaltung/(\\d+)/turnier/neu$")
private val BILLING = Regex("/veranstaltung/(\\d+)/turnier/(\\d+)/billing$")
private val EVENT_DETAIL = Regex("/event/(\\d+)$")
private val TURNIER_DETAIL = Regex("/event/(\\d+)/turnier/(\\d+)$")
private val TURNIER_NEU = Regex("/event/(\\d+)/turnier/neu$")
private val BILLING = Regex("/event/(\\d+)/turnier/(\\d+)/billing$")
private val VERANSTALTER_DETAIL = Regex("/veranstalter/(\\d+)$")
private val VERANSTALTUNG_KONFIG = Regex("/veranstalter/(\\d+)/veranstaltung/neu$")
private val VERANSTALTUNG_PROFIL = Regex("/veranstalter/(\\d+)/veranstaltung/(\\d+)$")
private val EVENT_KONFIG = Regex("/veranstalter/(\\d+)/event/neu$")
private val EVENT_PROFIL = Regex("/veranstalter/(\\d+)/event/(\\d+)$")
private val PFERD_PROFIL = Regex("/pferde/profil/(\\d+)$")
private val REITER_PROFIL = Regex("/reiter/profil/(\\d+)$")
@@ -98,14 +98,14 @@ sealed class AppScreen(val route: String) {
"/organizer/profile" -> OrganizerProfile
"/auth/callback" -> AuthCallback
"/nennung" -> EntryManagement
"/verwaltung" -> VeranstaltungVerwaltung
"/event/verwaltung" -> EventVerwaltung
"/pferde/verwaltung" -> PferdVerwaltung
"/reiter/verwaltung" -> ReiterVerwaltung
"/vereine/verwaltung" -> VereinVerwaltung
"/funktionaere/verwaltung" -> FunktionaerVerwaltung
"/veranstalter/verwaltung" -> VeranstalterVerwaltung
"/veranstalter/auswahl" -> VeranstalterAuswahl
"/veranstaltung/neu" -> VeranstaltungNeu
"/event/neu" -> EventNeu
"/meisterschaften" -> Meisterschaften
"/cups" -> Cups
"/stammdaten/import" -> StammdatenImport
@@ -120,7 +120,7 @@ sealed class AppScreen(val route: String) {
FUNKTIONAER_PROFIL.matchEntire(route)?.destructured?.let { (id) -> return FunktionaerProfil(id.toLong()) }
VERANSTALTER_PROFIL.matchEntire(route)?.destructured?.let { (id) -> return VeranstalterProfil(id.toLong()) }
/*
VERANSTALTUNG_PROFIL.matchEntire(route)?.destructured?.let { (id) -> return VeranstaltungProfil(id.toLong()) }
EVENT_PROFIL.matchEntire(route)?.destructured?.let { (id) -> return EventProfil(id.toLong()) }
*/
TURNIER_DETAIL.matchEntire(route)?.destructured?.let { (vId, tId) ->
@@ -129,17 +129,17 @@ sealed class AppScreen(val route: String) {
TURNIER_NEU.matchEntire(route)?.destructured?.let { (vId) ->
return TurnierNeu(vId.toLong())
}
VERANSTALTUNG_DETAIL.matchEntire(route)?.destructured?.let { (id) ->
return VeranstaltungDetail(id.toLong())
EVENT_DETAIL.matchEntire(route)?.destructured?.let { (id) ->
return EventDetail(id.toLong())
}
VERANSTALTER_DETAIL.matchEntire(route)?.destructured?.let { (vId) ->
return VeranstalterDetail(vId.toLong())
}
VERANSTALTUNG_KONFIG.matchEntire(route)?.destructured?.let { (vId) ->
return VeranstaltungKonfig(vId.toLong())
EVENT_KONFIG.matchEntire(route)?.destructured?.let { (vId) ->
return EventKonfig(vId.toLong())
}
VERANSTALTUNG_PROFIL.matchEntire(route)?.destructured?.let { (verId, vId) ->
return VeranstaltungProfil(verId.toLong(), vId.toLong())
EVENT_PROFIL.matchEntire(route)?.destructured?.let { (verId, vId) ->
return EventProfil(verId.toLong(), vId.toLong())
}
PortalDashboard // Default fallback
}