feat(veranstaltung): UI-Refactoring und Validierung für Veranstaltungsverwaltung hinzugefügt

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
2026-04-16 12:37:44 +02:00
parent 82a4a13505
commit eb0fac5989
5 changed files with 322 additions and 82 deletions
@@ -3,7 +3,7 @@ package at.mocode.desktop.screens.onboarding
/**
* Validierungslogik für den Onboarding-Wizard.
*
* Extrahiert aus [OnboardingScreen] für isolierte Unit-Tests (B-2).
* Extrahiert aus `OnboardingScreen` für isolierte Unit-Tests (B-2).
* Regeln gemäß Onboarding-Spezifikation:
* - Gerätename: mindestens 3 Zeichen (nach trim)
* - Sicherheitsschlüssel: mindestens 8 Zeichen (nach trim)
@@ -57,51 +57,13 @@ fun VeranstaltungVerwaltungV2(
}
Column(Modifier.fillMaxSize().padding(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp)) {
// Navigation Toolbar (Top)
Row(
Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(8.dp),
verticalAlignment = Alignment.CenterVertically
) {
AssistChip(
onClick = onNavigateToPferde,
label = { Text("Pferde") },
leadingIcon = { Icon(Icons.Default.Pets, null) })
AssistChip(
onClick = onNavigateToReiter,
label = { Text("Reiter") },
leadingIcon = { Icon(Icons.Default.Person, null) })
AssistChip(
onClick = onNavigateToVereine,
label = { Text("Vereine") },
leadingIcon = { Icon(Icons.Default.Home, null) })
AssistChip(
onClick = onNavigateToFunktionaere,
label = { Text("Funktionäre") },
leadingIcon = { Icon(Icons.Default.Badge, null) })
AssistChip(
onClick = onNavigateToVeranstalter,
label = { Text("Veranstalter") },
leadingIcon = { Icon(Icons.Default.Business, null) })
VerticalDivider(Modifier.height(32.dp).padding(horizontal = 4.dp))
AssistChip(
onClick = onNavigateToZnsImport,
label = { Text("ZNS Importer") },
leadingIcon = { Icon(Icons.Default.CloudDownload, null) },
colors = AssistChipDefaults.assistChipColors(
labelColor = MaterialTheme.colorScheme.primary,
leadingIconContentColor = MaterialTheme.colorScheme.primary
)
)
}
// Header
Row(
Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text("Veranstaltung-Verwaltung", style = MaterialTheme.typography.headlineMedium)
Text("Veranstaltungen - verwalten", style = MaterialTheme.typography.headlineMedium)
Button(onClick = onNewVeranstaltung) {
Icon(Icons.Default.Add, contentDescription = null)
Spacer(Modifier.width(8.dp))