Neue Filter und verbesserte Entwicklererfahrung
Dieses Release bringt neue Filter-Funktionen für die Kartenansicht, ein wiederverwendbares UI-Paket mit Storybook, sowie Verbesserungen bei der Authentifizierung und Konfiguration.
Cedrik Hoffmann
Lead Developer & Projektleitung
In diesem Release haben wir den Fokus auf die Verbesserung der Entwicklererfahrung und neue Filter-Funktionen gelegt. Das Frontend wurde durch ein neues Shared UI-Paket modernisiert, die Authentifizierung flexibler gestaltet und die Konfiguration vereinfacht.
Neue Filter-Funktionen
Die Kartenansicht wurde um leistungsfähige Filter-Funktionen erweitert:
- Pflanzjahr-Filter: Ein neuer Slider ermöglicht die Filterung von Bäumen nach Pflanzjahr. Die verfügbaren Jahre werden dynamisch aus den vorhandenen Daten ermittelt, sodass nur relevante Zeiträume angezeigt werden.
- CRUD Selection Filter: Bei der Auswahl von Objekten auf der Karte (z.B. beim Zuweisen von Bäumen zu Clustern) können die Ergebnisse jetzt gefiltert werden. Das erleichtert die Arbeit mit großen Datenbeständen erheblich.
- Cluster-Membership Filter: Der Filter für die Cluster-Zugehörigkeit wurde repariert und funktioniert nun zuverlässig.
Ein bedeutender Schritt in Richtung besserer Code-Organisation und Wiederverwendbarkeit:
- @green-ecolution/ui: Ein neues eigenständiges Paket enthält jetzt alle grundlegenden UI-Komponenten. Diese können projektübergreifend verwendet werden.
- Storybook: Alle Komponenten sind in Storybook dokumentiert und können isoliert betrachtet und getestet werden.
- Tailwind v4: Die Migration auf Tailwind CSS v4 bringt verbesserte Performance und neue Styling-Möglichkeiten.
Authentifizierung & Security
Die Authentifizierung wurde flexibler und robuster gestaltet:
- Dynamisches JWKS: Die öffentlichen Schlüssel für die Token-Validierung werden nun dynamisch vom JWKS-Endpoint des OIDC-Providers abgerufen. Bei Schlüsselrotation ist kein Neustart mehr erforderlich.
- Optionale Authentifizierung: Bestimmte Endpoints können nun so konfiguriert werden, dass sie auch ohne gültiges Token erreichbar sind. Das ermöglicht öffentliche Lesezugriffe bei gleichzeitigem Schutz von Schreiboperationen.
- Verbessertes Token-Handling: Das Frontend erneuert Tokens jetzt proaktiv, bevor sie ablaufen. Das verhindert unterbrochene Sitzungen bei längerer Nutzung.
Konfiguration
Die Konfiguration wurde vereinfacht und flexibler gestaltet:
- Env-Variablen als primäre Quelle: Die Anwendung kann nun vollständig über Umgebungsvariablen konfiguriert werden. Die YAML-Konfigurationsdatei ist optional.
- Container-freundlich: Diese Änderung erleichtert das Deployment in Container-Umgebungen wie Docker und Kubernetes, wo Konfiguration typischerweise über Umgebungsvariablen erfolgt.
Bug Fixes
- Vehicle Seed Data: Die Testdaten für Fahrzeuge wurden mit realistischen Werten überarbeitet.
- NaN Entity ID: Ein Fehler wurde behoben, bei dem nach einem Page Refresh ungültige Entity-IDs (NaN) auftraten.
- Auth Token Refresh: Das Token-Handling wurde verbessert, um Authentifizierungsprobleme bei längeren Sitzungen zu vermeiden.
Refactoring
- Zustand Store Pattern: Die State-Management-Stores wurden auf das moderne StateCreator-Pattern umgestellt, was die Testbarkeit und Wartbarkeit verbessert.
- Form Draft Storage: Formular-Entwürfe werden jetzt im Zustand-Store statt im SessionStorage gespeichert, was ein konsistenteres Verhalten ermöglicht.
- API-Dokumentation: Die Swagger-Dokumentation wurde aufgeräumt und verbessert.
Dokumentation
- CONTRIBUTING.md: Eine neue Datei dokumentiert den Beitragsprozess für neue Entwickler. Sie enthält Informationen zu Coding-Standards, dem Branching-Modell und dem Review-Prozess.
Ausblick
Mit diesem Release haben wir die Grundlage für schnellere Feature-Entwicklung gelegt. Das Shared UI-Paket und die verbesserte Konfiguration machen das Projekt zugänglicher für neue Beiträge.
Feedback und Bug-Reports sind jederzeit willkommen auf GitHub.
Sensoren per QR-Code aktivieren und Bäumen zuordnen
Aufräumen und Stabilisierung
Fehler gefunden oder Feedback zu diesem Release? Issue erstellen →