### feat: optimiere Online-Nennformular und Turnier-Integration
Build and Publish Docker Images / build-and-push (., backend/services/mail/Dockerfile, mail-service, mail-service) (push) Successful in 6m27s
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Successful in 4m18s

- **`OnlineNennungFormular.kt`:**
  - Erweiterung um Felder für Telefon und Pferdename.
  - Dynamische Validierung und UI-Anpassungen für mobile Geräte.
  - Zusätzliche Bewerbslisten und Auswahlbeschränkungen hinzugefügt.
- **`WebMainScreen.kt`:**
  - Aktualisierte Turniermetadata und verbesserte Responsivität.
This commit is contained in:
2026-04-23 04:48:46 +02:00
parent f620f46d15
commit 568d9dbb32
3 changed files with 494 additions and 130 deletions
@@ -120,12 +120,12 @@ fun LandingPage(
listOf(
VeranstaltungWebModel(
id = 1,
name = "CSN-B* Neumarkt",
ort = "Neumarkt am Wallersee",
datum = "24. - 26. April 2026",
name = "Turniere in Neumarkt",
ort = "Reitanlage Stroblmair",
datum = "25. - 26. April 2026",
turniere = listOf(
TurnierWebModel(101, "Springturnier Neumarkt", "Ausschreibung_Neumarkt.pdf"),
TurnierWebModel(102, "Dressurturnier Neumarkt", "Ausschreibung_Dressur.pdf")
TurnierWebModel(26128, "Springturnier (CSN-C NEU)", "26128.pdf"),
TurnierWebModel(26129, "Dressurturnier (CDN-C NEU)", "26129.pdf")
)
)
)
@@ -207,33 +207,66 @@ fun TurnierCardWeb(
turnier: TurnierWebModel,
onNennenClick: () -> Unit
) {
OutlinedCard(
modifier = Modifier.fillMaxWidth().padding(top = 8.dp),
colors = CardDefaults.outlinedCardColors(containerColor = AppColors.BackgroundLight)
) {
Row(
modifier = Modifier.padding(12.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
BoxWithConstraints {
val isMobile = maxWidth < 500.dp
OutlinedCard(
modifier = Modifier.fillMaxWidth().padding(top = 8.dp),
colors = CardDefaults.outlinedCardColors(containerColor = AppColors.BackgroundLight)
) {
Column(modifier = Modifier.weight(1f)) {
Text(turnier.name, fontWeight = FontWeight.Bold)
}
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
TextButton(onClick = { /* PDF öffnen Logik */ }) {
Icon(Icons.Default.Description, contentDescription = null)
Spacer(Modifier.width(4.dp))
Text("Ausschreibung")
if (isMobile) {
Column(modifier = Modifier.padding(12.dp)) {
Text(turnier.name, fontWeight = FontWeight.Bold)
Spacer(Modifier.height(8.dp))
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(8.dp)
) {
TextButton(
onClick = { /* PDF öffnen Logik */ },
modifier = Modifier.weight(1f)
) {
Icon(Icons.Default.Description, contentDescription = null)
Spacer(Modifier.width(4.dp))
Text("Ausschreibung")
}
Button(
onClick = onNennenClick,
colors = ButtonDefaults.buttonColors(containerColor = AppColors.Success),
modifier = Modifier.weight(1f)
) {
Icon(Icons.AutoMirrored.Filled.OpenInNew, contentDescription = null)
Spacer(Modifier.width(4.dp))
Text("Nennen")
}
}
}
Button(
onClick = onNennenClick,
colors = ButtonDefaults.buttonColors(containerColor = AppColors.Success)
} else {
Row(
modifier = Modifier.padding(12.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
) {
Icon(Icons.AutoMirrored.Filled.OpenInNew, contentDescription = null)
Spacer(Modifier.width(4.dp))
Text("Online-Nennen")
Column(modifier = Modifier.weight(1f)) {
Text(turnier.name, fontWeight = FontWeight.Bold)
}
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
TextButton(onClick = { /* PDF öffnen Logik */ }) {
Icon(Icons.Default.Description, contentDescription = null)
Spacer(Modifier.width(4.dp))
Text("Ausschreibung")
}
Button(
onClick = onNennenClick,
colors = ButtonDefaults.buttonColors(containerColor = AppColors.Success)
) {
Icon(Icons.AutoMirrored.Filled.OpenInNew, contentDescription = null)
Spacer(Modifier.width(4.dp))
Text("Online-Nennen")
}
}
}
}
}