Files
Dashboard/features/dashboard/components/layout/navigation.ts
T
dejanandClaude Opus 5 7183fad27a feat(dashboard): Platzhalterseite statt Hinweis-Toast
Der Menüpunkt 'Dashboard' löste bisher nur einen Toast aus. Ein
Navigationseintrag, der nirgendwohin führt, lässt den Leser im Unklaren, ob
etwas fehlt oder etwas kaputt ist.

Jetzt führt er auf /dashboard: ein Leerzustand nach dem Hausmuster
(ui/components/EmptyState), der benennt, warum hier nichts steht, was später
hinkommt (drei Rollen-Layouts, Widgets teils aus Analytics, teils nicht — offene
HR-Anträge, Aufgaben, Termine) und wo der Zuschnitt dokumentiert ist. Mit einem
Weg zurück nach Analytics.

Dabei:
- EmptyState aus der Cloud-Fassung nachgezogen; unsere Kopie hatte den
  action-Slot noch nicht.
- PageHeader bekommt 'standardAktionen': Auf einer leeren Seite gibt es nichts
  zu aktualisieren oder zu exportieren, also stehen dort auch keine
  Schaltflächen dafür.
- Die Variante 'software' in NavZiel entfällt — jeder Eintrag führt jetzt auf
  eine echte Seite, der Toast-Zweig in der AppShell war damit toter Code.
- verify-layout deckt /dashboard mit ab (jetzt 7 Seiten x 7 Breiten).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QPeZNwSeU7qG3RRCwaxEZX
2026-08-29 20:56:35 +02:00

132 lines
4.1 KiB
TypeScript

import type { SeitenId } from "../../data/filtering";
/**
* Navigationsstruktur des Prototyps.
*
* Hier stehen **nur unsere beiden Features**: Dashboard und Analytics. Alles
* andere — Kontakte, Leads, Pipelines, Postfach, Termine, Einstellungen — ist
* in der Seitenleiste der Software bereits vorhanden und wird hier nicht
* verdoppelt. Der Prototyp zeigt, was dazukommt, nicht was schon da ist.
*
* Gerendert wird mit derselben Komponente wie in der Software
* (`ui/components/SidebarWithSections`, aus der Cloud-Fassung portiert), damit
* Aussehen und Verhalten übereinstimmen.
*
* „Dashboard" führt auf eine Platzhalterseite: Es ist ein eigenes Feature und
* in diesem Prototyp nicht gestaltet (siehe
* `docs/SCOPE-ANALYTICS-DASHBOARD.md`).
*/
export type NavZiel = { art: "route"; href: string };
export interface NavEintrag {
id: string;
label: string;
/** Icon-Name aus @subframe/core (ohne das Präfix "Feather"). */
icon: string;
ziel: NavZiel;
}
export interface NavGruppe {
id: string;
/** Leerer Titel = Startgruppe ohne Überschrift, wie in der Software. */
titel: string;
eintraege: NavEintrag[];
}
/** Einstieg des Analytics-Bereichs — auch das Ziel der Weiterleitung von „/". */
export const ANALYTICS_START = "/analytics";
export const NAV_GRUPPEN: NavGruppe[] = [
{
id: "start",
titel: "",
eintraege: [
{
// Eigenes Feature, in diesem Prototyp nicht gestaltet. Der Punkt führt
// trotzdem auf eine Seite: Ein Menüeintrag, der nur einen Hinweis
// auslöst, lässt offen, ob etwas fehlt oder etwas kaputt ist.
id: "dashboard",
label: "Dashboard",
icon: "LayoutDashboard",
ziel: { art: "route", href: "/dashboard" },
},
{
// Der neue Menüpunkt. Die fünf Analyse-Seiten sind ausschließlich hier
// drin über Reiter navigierbar, nicht als Unterpunkte in der Leiste.
id: "analytics",
label: "Analytics",
icon: "BarChart",
ziel: { art: "route", href: ANALYTICS_START },
},
],
},
];
/**
* Unterer Bereich, durch einen Trenner abgesetzt — wie in der Software.
* Hier steht nur, was zum Prototyp gehört: die Bausteingalerie für die
* Entwicklung. Sie ist kein Produktfeature und wandert beim Einbau nicht mit.
*/
export const NAV_SEKUNDAER: NavEintrag[] = [
{
id: "komponenten",
label: "Komponenten",
icon: "Component",
ziel: { art: "route", href: "/komponenten" },
},
];
/**
* Die fünf Analyse-Seiten. Sie erscheinen **nicht** in der Seitenleiste,
* sondern als Reiter innerhalb des Menüpunkts „Analytics" — dem Hausmuster
* für Unter-Navigation in HiveGrid (`SettingsHubShell.tsx`: ein `Link` um ein
* `Tabs.Item`, damit jeder Reiter eine echte Navigation ist).
*/
export interface AnalyseSeite {
id: SeitenId;
label: string;
href: string;
beschreibung: string;
/** Icon-Name aus @subframe/core (ohne das Präfix "Feather"). */
icon: string;
}
export const ANALYSE_SEITEN: AnalyseSeite[] = [
{
id: "uebersicht",
icon: "LayoutDashboard",
label: "Übersicht",
href: "/analytics",
beschreibung: "Die Kennzahlen, nach denen der Betrieb gesteuert wird — Umsatz, Auslastung, offene Posten und Handlungsbedarf.",
},
{
id: "finanzen",
icon: "Euro",
label: "Finanzen",
href: "/analytics/finanzen",
beschreibung: "Umsatz, Zahlungseingang und offene Forderungen — die Sicht der Buchhaltung auf den Betrieb.",
},
{
id: "auftraege",
icon: "ClipboardList",
label: "Aufträge",
href: "/analytics/auftraege",
beschreibung: "Von der Anfrage bis zur Abnahme — wo die Vorgänge stehen, was gebunden ist und was über Termin läuft.",
},
{
id: "kunden",
icon: "Users",
label: "Kunden",
href: "/analytics/kunden",
beschreibung: "Woher Kunden kommen, wie viel sie bringen und wo Nachfassen lohnt.",
},
{
id: "team",
icon: "HardHat",
label: "Team",
href: "/analytics/team",
beschreibung: "Auslastung, produktive Stunden und Abschlüsse der Monteure — die Kennzahl hinter der Terminplanung.",
},
];