From f6a5a37676456af174e8867b64f431e0eab6f6bf Mon Sep 17 00:00:00 2001 From: MOH Date: Sat, 7 Mar 2026 18:44:48 +0100 Subject: [PATCH] Move maintenance status into root sidebar --- app/root/page.tsx | 36 +++++++++++++++++++----- components/root/root-dashboard-shell.tsx | 17 +++++++---- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/app/root/page.tsx b/app/root/page.tsx index 8302452..0e28d1b 100644 --- a/app/root/page.tsx +++ b/app/root/page.tsx @@ -1,6 +1,7 @@ import { ExternalLink, FolderKanban, + Globe2, ImageIcon, LockKeyhole, ShieldAlert, @@ -59,6 +60,7 @@ const copy = { maintenance: "Wartungsmodus", maintenanceTitle: "Wartungsmodus", maintenanceVisitorsClosed: "Website fuer Besucher geschlossen", + maintenanceVisitorsShort: "Besucher gesperrt", maintenanceDescription: "Wenn aktiv, werden alle Seiten auf die Coming Soon Seite weitergeleitet.", maintenanceOpen: "Website fuer Besucher offen", @@ -67,6 +69,7 @@ const copy = { uiKitDescription: "Globale Referenz fuer Cards, Buttons, Inputs und Surface Levels.", uiKitAction: "Zur UI Kit", media: "Media", + siteSettings: "SEO", portfolio: "Portfolio", portfolioTitle: "Portfolio", portfolioDescription: "Kategorien, Projekte, Abschnitte und Dateien verwalten.", @@ -74,6 +77,9 @@ const copy = { mediaTitle: "Media Library", mediaDescription: "Uploads, externe URLs und Verwendungsorte zentral verwalten.", mediaAction: "Zur Media Library", + siteSettingsTitle: "SEO", + siteSettingsDescription: "Favicon, Site Name, Description, Subhead und globale SEO Defaults verwalten.", + siteSettingsAction: "Zu SEO", loginTitle: "Root Login", loginText: "Nur autorisierte Nutzer duerfen diesen Bereich verwenden.", passwordLabel: "Passwort", @@ -238,6 +244,14 @@ export default async function RootPage({ searchParams }: RootPageProps) { badgeVariant: "outline" as const, action: copy.mediaAction, }, + { + label: copy.siteSettingsTitle, + summary: copy.siteSettingsDescription, + status: copy.authStatusOk, + href: "/root/site-settings", + badgeVariant: "outline" as const, + action: copy.siteSettingsAction, + }, { label: copy.portfolioTitle, summary: `${projects.length} ${copy.totalProjects} / ${categories.length} ${copy.totalCategories}`, @@ -263,11 +277,11 @@ export default async function RootPage({ searchParams }: RootPageProps) { logoutAction={logoutAction} headerTitle={copy.title} headerDescription={copy.subtitle} - headerActions={ + sidebarTopContent={ maintenanceEnabled ? ( - +

+ {copy.maintenanceVisitorsShort} +

) : null } > @@ -294,7 +308,7 @@ export default async function RootPage({ searchParams }: RootPageProps) { title={copy.totalProjects} value={String(projects.length)} description={copy.projectCountDescription} - icon={FolderKanban} + icon={Globe2} /> @@ -302,13 +316,21 @@ export default async function RootPage({ searchParams }: RootPageProps) { title={copy.totalCategories} value={String(categories.length)} description={copy.categoryCountDescription} + icon={FolderKanban} + /> + + +
- + {copy.tableTitle} @@ -349,7 +371,7 @@ export default async function RootPage({ searchParams }: RootPageProps) {
- + {copy.systemStatusTitle} diff --git a/components/root/root-dashboard-shell.tsx b/components/root/root-dashboard-shell.tsx index 40c9d67..bffcf31 100644 --- a/components/root/root-dashboard-shell.tsx +++ b/components/root/root-dashboard-shell.tsx @@ -42,6 +42,7 @@ type RootDashboardShellProps = { headerTitle: string; headerDescription: string; headerActions?: ReactNode; + sidebarTopContent?: ReactNode; toolbar?: ReactNode; children: ReactNode; }; @@ -54,6 +55,7 @@ export async function RootDashboardShell({ headerTitle, headerDescription, headerActions, + sidebarTopContent, toolbar, children, }: RootDashboardShellProps) { @@ -91,12 +93,15 @@ export async function RootDashboardShell({ items={sidebarItems} sidebarIconSrc={mediaBindings.favicon?.url} sidebarTop={ - +
+ + {sidebarTopContent} +
} sidebarFooter={ <>