St. Georg App
Technik

Navigation und Menüs

Wie die Navigationsstruktur der App aus Organisationsmetadaten erzeugt wird.

Navigation und Menüs

Die Navigation der St. Georg App basiert vollständig auf Metadaten der aktiven Organisation.
Damit lassen sich Menüs pro Organisation konfigurieren, ohne dass der Code angepasst werden muss.

Datenstruktur metadata.navigation

In der Datenbank ist für jede Organisation ein Feld metadata hinterlegt.
Dieses Feld enthält ein Objekt navigation mit folgendem Aufbau:

groups als Liste von Navigationsgruppen
Jede Gruppe hat ein label und eine Liste von sections
Jede Sektion hat mindestens title und optional url, icon, logo, external und items

Beispiel für eine Gruppe:

{
  "label": "Herbstfahrt",
  "sections": [
    {
      "title": "Gruppen erstellen",
      "url": "/messdiener/gruppen",
      "icon": "Users"
    },
    {
      "title": "Süßer Shop",
      "url": "/messdiener/shop",
      "icon": "Candy",
      "isActive": true,
      "items": [
        {
          "title": "Teilnehmer",
          "url": "/messdiener/shop/teilnehmer"
        }
      ]
    }
  ]
}

Die Funktion parseNavigationGroups in apps/web/src/lib/navigation.ts wandelt dieses rohen Objekt in eine typsichere Struktur um, die von NavMain einfach verarbeitet werden kann.

Darstellung in NavMain

NavMain unter apps/web/src/components/layout/nav-main.tsx liest die Navigationsgruppen und rendert daraus:

Sidebar-Gruppen mit Label
Sektionen als Hauptpunkte
Unterpunkte (Items) als Submenüeinträge

Für externe Links wird das Feld external angewendet.
Ist es true, so wird der Link als normaler Anchor gerendert, der in einem neuen Tab öffnet, und es erscheint rechts das Icon SquareArrowUpRight.

Interne Links werden als Link aus tanstack Router gerendert und nutzen die bekannten Übergänge und URL Generierung.