feat: Enhance MegaMenu with localization, caching, and new properties

- Added localization support for loading states, empty navigation, and submenu actions in both German and English.
- Introduced new properties in IMenuItem for description, openInNewWindow, and external links.
- Updated SPTermStorePickerService to handle cache versioning and language-specific caching.
- Implemented a new MegaMenuCore service for handling term properties, cache management, and navigation URL resolution.
- Refactored TaxonomyNavigationService to build menu hierarchy and filter hidden terms.
- Added automated tests for MegaMenu core functionalities and static asset validation.
- Removed unused ItemDictionary service.
- Created a comprehensive ToDo document outlining the implementation status and future tasks.
This commit is contained in:
Torsten Brendgen
2026-07-20 21:34:24 +02:00
parent bc61166267
commit 50b85468f1
30 changed files with 1394 additions and 294 deletions

59
ToDo.md Normal file
View File

@@ -0,0 +1,59 @@
# MegaMenu Arbeitsplan Version 2.2
Status: Implementierung abgeschlossen; Ship-Build auf der vorgesehenen Node-8-Buildumgebung ausstehend
## Funktionsumfang
- [x] Mobile Navigation als Hamburger-Menü mit aufklappbaren Unterebenen umsetzen.
- [x] Hover als Komfortfunktion beibehalten; Bedienung per Klick, Touch und Tastatur gleichwertig unterstützen.
- [x] Für Menüpunkte mit Ziel und Unterpunkten eine getrennte Öffnen-Schaltfläche anbieten.
- [x] Navigations-URLs validieren und unsichere Protokolle blockieren.
- [x] Externe Links und `MegaMenu.OpenInNewWindow` sicher unterstützen.
- [x] Lade-, Leer- und Fehlerzustände verständlich und barrierearm darstellen.
## Lokale Term-Eigenschaften
- [x] `MegaMenu.Hidden` zum gezielten Ausblenden eines Terms unterstützen.
- [x] `MegaMenu.OpenInNewWindow` für ein neues Browserfenster unterstützen.
- [x] `MegaMenu.Description` als optionale Linkbeschreibung unterstützen.
- [x] Eigenschaften in Modern und Classic identisch auswerten.
Die Eigenschaften werden im Term Store als lokale benutzerdefinierte Eigenschaften am jeweiligen Term gepflegt. Styling bleibt Aufgabe der Solution Custom Branding.
## Cache
- [x] Cache-Schlüssel um Site Collection, Sprache und Schemaversion erweitern.
- [x] Konfigurierbare `cacheVersion` zur administrativen Invalidierung ergänzen.
- [x] Abgelaufene und ungültige Cache-Einträge sicher entfernen.
- [x] Bei einem temporären Taxonomy-Fehler auf den letzten vorhandenen Cache zurückfallen.
## Mehrsprachigkeit
- [x] Sämtliche sichtbaren Status- und ARIA-Texte lokalisieren.
- [x] Bevorzugtes Term-Label anhand der aktuellen SharePoint-Sprache verwenden.
- [x] Cache nach Sprache trennen.
- [x] Deutsche und englische Ressourcen pflegen.
## Barrierefreiheit
- [x] Semantische Schaltflächen für das Öffnen von Untermenüs verwenden.
- [x] Vollständige Tastaturbedienung inklusive Pfeiltasten und Escape sicherstellen.
- [x] Fokus beim Öffnen und Schließen nachvollziehbar führen.
- [x] Mobile Accordion-Zustände über `aria-expanded` kommunizieren.
- [x] Fokusdarstellung, Hochkontrast und reduzierte Bewegung berücksichtigen.
## Qualitätssicherung
- [x] Automatisierte Tests für URL-Validierung und externe Links ergänzen.
- [x] Automatisierte Tests für lokale Term-Eigenschaften ergänzen.
- [x] Automatisierte Tests für Cache-Schlüssel und Cache-Verhalten ergänzen.
- [x] Automatisierte Tests für Hierarchie, Sortierung und aktive URLs ergänzen.
- [x] TypeScript-, Classic-Syntax-, Classic-Build- und statische Asset-Prüfungen ausführen.
- [ ] `npm run package` mit Node.js 8.17.0 auf der vorgesehenen Buildumgebung ausführen.
Der lokale SPFx-Gulp-Build wurde mit Node.js 24 gestartet und erwartungsgemäß durch die alte Gulp-3-Abhängigkeit mit `primordials is not defined` beendet. Das ist kein TypeScript- oder Projektfehler; SPFx 1.4.1 benötigt für diesen Schritt Node.js 8.17.0.
## Nicht Bestandteil dieses Durchlaufs
- [ ] PortalSettings in Version 3 als SPFx-Webpart neu aufbauen.
- [ ] MegaMenu-Diagnose und Live-Vorschau in PortalSettings integrieren.