chore: implementiere Logo-Upload-Zone mit Base64-Unterstützung, verbessere Vereinsverwaltung mit kompakten Feldern und nutzerspezifischen Uploadoptionen, optimiere Desktop-UX und Navigation

This commit is contained in:
2026-04-20 01:20:16 +02:00
parent dfaa2e8545
commit 85ac1cae9c
12 changed files with 485 additions and 70 deletions
@@ -0,0 +1,25 @@
# Journal: 20. April 2026 - Desktop UX & Navigation Refinement
## 🏗️ Desktop-App: UX & Eingabe-Optimierung
* **Tastatur-Navigation (Fokus-Flow):**
* **Device-Setup:** In `DeviceInitializationConfig.jvm.kt` wurde das Verhalten der **Enter-Taste** korrigiert. Sie führt nun konsistent zum nächsten Eingabefeld (Gerätename -> Schlüssel -> Pfad) oder schließt den Prozess ab, anstatt Zeilenumbrüche in einzeiligen Feldern zu erzeugen.
* **Veranstaltungs-Konfig:** Das Formular nutzt nun `MsTextField` mit dedizierten `KeyboardActions`. Der Fokus springt beim Drücken von **Enter** oder **Tab** logisch zum nächsten Feld.
* **Neuer Date-Picker:**
* Implementierung einer kompakten, Desktop-optimierten Komponente `MsDatePickerField`.
* Ersetzt die manuellen Text-Eingabefelder für den Veranstaltungs-Zeitraum ("von" / "bis") durch einen visuellen Kalender-Dialog.
* Erhöht die Datenqualität durch standardisiertes Datumsformat (ISO 8601).
## 🧭 Navigation & Stabilität
* **Robuste Neuanlage:**
* Der direkte Aufruf von `VeranstaltungKonfig(veranstalterId=0)` aus der Gesamtübersicht wurde unterbunden.
* User werden nun zuerst zur **Veranstalter-Auswahl** geleitet, um eine valide Kontext-ID sicherzustellen.
* **Fehler-Handling:**
* Die `InvalidContextNotice` (Fehlermeldung bei ungültigen IDs) wurde verbessert. Der Button "Zur Auswahl" führt nun kontextsensitiv entweder zurück zur Veranstalter-Auswahl oder zum Veranstalter-Profil, anstatt den User im "Nichts" stehen zu lassen.
* **UI-Kompaktheit:**
* Alle Formularfelder in der Veranstaltungs-Konfiguration wurden auf den `compact`-Modus (44dp Höhe) umgestellt, um dem High-Density Standard des Projekts zu entsprechen.
## 🧹 Curator Hinweis
Die gemeldeten UX-Blocker in der Geräte-Konfiguration und bei der Veranstaltungs-Neuanlage sind behoben. Der neue Date-Picker erfüllt den Wunsch nach einer komfortableren Datumsauswahl und verhindert Tippfehler im Zeitraum-Format.
@@ -1,15 +1,25 @@
# Journal-Eintrag: Vereins-Verwaltung Erweiterung (Logo & Adresse)
**Datum:** 20. April 2026
**Status:** In Umsetzung / Teilweise abgeschlossen
**Beteiligte Agenten:** 🏗️ [Lead Architect], 🎨 [Frontend Expert], 🧹 [Curator]
**Status:** Abgeschlossen (Bugfix & Feature-Integration)
**Beteiligte Agenten:** 🏗️ [Lead Architect], 🎨 [Frontend Expert], 🧹 [Curator], 🧐 [QA Specialist]
## 📝 Zusammenfassung
Die Vereins-Verwaltung wurde um detaillierte Adressdaten und ein verbessertes Logo-Management erweitert. Dies unterstützt die Professionalisierung der Stammdaten und verbessert die UX durch direkte Integration von Google Maps.
Die Vereins-Verwaltung wurde um detaillierte Adressdaten und ein funktionales Logo-Management erweitert. Ein kritischer Bug, der zum Einfrieren der App beim Datei-Import führte, wurde behoben. Logos werden nun in der Vorschau korrekt gerendert.
## 🛠️ Technische Änderungen
### 1. Domain-Modell (`Verein.kt`)
### 0. Bugfix: Logo-Picker UI-Freeze
* **Problem:** Der `FileDialog` (AWT) blockierte den Main-Thread, was zum Einfrieren der App führte.
* **Lösung:** Auslagerung des Dialog-Aufrufs in einen asynchronen `Dispatchers.IO` Kontext in `LogoUploadZone.jvm.kt`.
* **Stabilität:** Integration von Try-Catch Blöcken und detailliertem Logging für den Datei-Import-Prozess.
### 1. Feature: Logo-Rendering (Base64)
* **Implementation:** Einführung einer `expect/actual` Funktion `decodeBase64ToImage`.
* **JVM-Logic:** Nutzung von `org.jetbrains.skia.Image` zur Dekodierung der Base64-Bytes in eine `ImageBitmap`.
* **UI-Integration:** Die `VereinCardPreview` rendert nun das Vereinslogo direkt aus dem gespeicherten Base64-String mittels `androidx.compose.foundation.Image`.
### 2. Domain-Modell (`Verein.kt`)
* Erweiterung um Felder: `strasse`, `hausnummer`, `bundesland` (Enum).
* Neues Feld `logoBase64` für die Offline-Speicherung von optimierten Vereinslogos.
* Einführung des Enums `Bundesland` mit den 9 österreichischen Bundesländern zur Sicherstellung der Datenqualität (ÖTO-konform).
@@ -29,15 +39,15 @@ Die Vereins-Verwaltung wurde um detaillierte Adressdaten und ein verbessertes Lo
* Einsatz des `MsEnumDropdown` für die Bundesland-Auswahl.
* Vorbereitung einer "Logo-Upload-Zone" mit visuellem Feedback für Drag-and-Drop / FilePicker.
## 🔍 Verifikation (Vorschau)
* [x] Domain-Modell kompiliert.
* [x] ViewModel-Logik deckt alle neuen Felder ab.
* [x] UI-Layout ist für High-Density Enterprise-UIs optimiert (44dp Standard).
## 🔍 Verifikation
* [x] Bugfix: Datei-Dialog friert die UI nicht mehr ein (IO-Dispatcher).
* [x] Feature: Base64-Logo wird in der Card-Vorschau gerendert.
* [x] Feature: Logging im ViewModel und Logo-Service implementiert.
* [x] UI: Kompakte Adressfelder und Google-Maps-Link funktionieren.
## 📌 Nächste Schritte
* Implementierung der tatsächlichen Bild-Skalierung und Konvertierung (JVM-spezifisch) im `VereinViewModel`.
* Anbindung des nativen `JFileChooser` für den Logo-Import.
* Finalisierung der Drag-and-Drop Logik (`onExternalDrag`).
* Implementierung einer tatsächlichen Bild-Skalierung vor dem Base64-Encoding, um Datenbank-Größe zu optimieren.
* Finalisierung der Drag-and-Drop Logik (`onExternalDrag`), sobald Bibliotheks-Support stabil ist.
---
*Dokumentiert durch den Curator.*