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
132 lines
4.1 KiB
TypeScript
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.",
|
|
},
|
|
];
|