### feat: verbessere PDF-Handling und füge neuen Versionsmarker hinzu
- **WebMainScreen:** Implementiere Öffnen von Ausschreibungen (PDFs) in neuem Tab. - **UI:** Ergänze dezentralen Versions-Marker in der Web-Oberfläche. - **Docker-Publish:** Kopiere Turnier-Ausschreibungen (PDFs) in den Zielordner. - **Assets:** Füge neue PDF-Dateien für Neumarkt2026 hinzu.
This commit is contained in:
+27
-7
@@ -35,6 +35,9 @@ private fun setWindowHash(hash: String): Unit = js("window.location.hash = hash"
|
||||
@OptIn(ExperimentalWasmJsInterop::class)
|
||||
private fun onHashChange(onChanged: () -> Unit): Unit = js("window.addEventListener('hashchange', onChanged)")
|
||||
|
||||
@OptIn(ExperimentalWasmJsInterop::class)
|
||||
private fun openInNewTab(url: String): Unit = js("window.open(url, '_blank')")
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun MainAppContent() {
|
||||
@@ -88,6 +91,9 @@ fun MainAppContent() {
|
||||
},
|
||||
onNennenClick = { vId, tId ->
|
||||
currentScreen = WebScreen.Nennung(vId, tId)
|
||||
},
|
||||
onAusschreibungClick = { pdfUrl ->
|
||||
openInNewTab(pdfUrl)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -112,6 +118,15 @@ fun MainAppContent() {
|
||||
onBack = { currentScreen = WebScreen.Landing }
|
||||
)
|
||||
}
|
||||
|
||||
// Dezentraler Versions-Marker in der unteren rechten Ecke
|
||||
Box(modifier = Modifier.fillMaxSize().padding(8.dp), contentAlignment = Alignment.BottomEnd) {
|
||||
Text(
|
||||
text = "v2026-04-23.9",
|
||||
style = MaterialTheme.typography.labelSmall,
|
||||
color = Color.LightGray.copy(alpha = 0.5f)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -149,7 +164,8 @@ fun Erfolgsscreen(email: String, onBack: () -> Unit) {
|
||||
@Composable
|
||||
fun LandingPage(
|
||||
onVeranstaltungClick: (Long) -> Unit,
|
||||
onNennenClick: (Long, Long) -> Unit
|
||||
onNennenClick: (Long, Long) -> Unit,
|
||||
onAusschreibungClick: (String) -> Unit
|
||||
) {
|
||||
val veranstaltungen = remember {
|
||||
listOf(
|
||||
@@ -195,7 +211,8 @@ fun LandingPage(
|
||||
items(veranstaltungen) { veranstaltung ->
|
||||
VeranstaltungsCardWeb(
|
||||
veranstaltung = veranstaltung,
|
||||
onNennenClick = { tId -> onNennenClick(veranstaltung.id, tId) }
|
||||
onNennenClick = { tId -> onNennenClick(veranstaltung.id, tId) },
|
||||
onAusschreibungClick = onAusschreibungClick
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -204,7 +221,8 @@ fun LandingPage(
|
||||
@Composable
|
||||
fun VeranstaltungsCardWeb(
|
||||
veranstaltung: VeranstaltungWebModel,
|
||||
onNennenClick: (Long) -> Unit
|
||||
onNennenClick: (Long) -> Unit,
|
||||
onAusschreibungClick: (String) -> Unit
|
||||
) {
|
||||
Card(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
@@ -230,7 +248,8 @@ fun VeranstaltungsCardWeb(
|
||||
veranstaltung.turniere.forEach { turnier ->
|
||||
TurnierCardWeb(
|
||||
turnier = turnier,
|
||||
onNennenClick = { onNennenClick(turnier.id) }
|
||||
onNennenClick = { onNennenClick(turnier.id) },
|
||||
onAusschreibungClick = { onAusschreibungClick(turnier.pdfUrl) }
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -240,7 +259,8 @@ fun VeranstaltungsCardWeb(
|
||||
@Composable
|
||||
fun TurnierCardWeb(
|
||||
turnier: TurnierWebModel,
|
||||
onNennenClick: () -> Unit
|
||||
onNennenClick: () -> Unit,
|
||||
onAusschreibungClick: () -> Unit
|
||||
) {
|
||||
BoxWithConstraints {
|
||||
val isMobile = maxWidth < 500.dp
|
||||
@@ -258,7 +278,7 @@ fun TurnierCardWeb(
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp)
|
||||
) {
|
||||
TextButton(
|
||||
onClick = { /* PDF öffnen Logik */ },
|
||||
onClick = onAusschreibungClick,
|
||||
modifier = Modifier.weight(1f)
|
||||
) {
|
||||
Icon(Icons.Default.Description, contentDescription = null)
|
||||
@@ -287,7 +307,7 @@ fun TurnierCardWeb(
|
||||
}
|
||||
|
||||
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
TextButton(onClick = { /* PDF öffnen Logik */ }) {
|
||||
TextButton(onClick = onAusschreibungClick) {
|
||||
Icon(Icons.Default.Description, contentDescription = null)
|
||||
Spacer(Modifier.width(4.dp))
|
||||
Text("Ausschreibung")
|
||||
|
||||
Reference in New Issue
Block a user