Move maintenance status into root sidebar
This commit is contained in:
+29
-7
@@ -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 ? (
|
||||
<Button asChild variant="destructive" className="hidden sm:inline-flex">
|
||||
<Link href="/root/maintenance">{copy.maintenanceVisitorsClosed}</Link>
|
||||
</Button>
|
||||
<p className="px-1 text-xs font-medium text-destructive">
|
||||
{copy.maintenanceVisitorsShort}
|
||||
</p>
|
||||
) : 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}
|
||||
/>
|
||||
</MotionFade>
|
||||
<MotionFade delay={0.2}>
|
||||
@@ -302,13 +316,21 @@ export default async function RootPage({ searchParams }: RootPageProps) {
|
||||
title={copy.totalCategories}
|
||||
value={String(categories.length)}
|
||||
description={copy.categoryCountDescription}
|
||||
icon={FolderKanban}
|
||||
/>
|
||||
</MotionFade>
|
||||
<MotionFade delay={0.25}>
|
||||
<DashboardCard
|
||||
title={copy.siteSettingsTitle}
|
||||
value={copy.authStatusOk}
|
||||
description={copy.siteSettingsDescription}
|
||||
icon={Shapes}
|
||||
/>
|
||||
</MotionFade>
|
||||
</section>
|
||||
|
||||
<section className="grid gap-6 xl:grid-cols-[minmax(0,1.5fr)_minmax(320px,1fr)]">
|
||||
<MotionFade delay={0.25}>
|
||||
<MotionFade delay={0.3}>
|
||||
<Card className="border-border/70 bg-card/95 shadow-sm">
|
||||
<CardHeader>
|
||||
<CardTitle>{copy.tableTitle}</CardTitle>
|
||||
@@ -349,7 +371,7 @@ export default async function RootPage({ searchParams }: RootPageProps) {
|
||||
</MotionFade>
|
||||
|
||||
<div className="grid gap-6">
|
||||
<MotionFade delay={0.3}>
|
||||
<MotionFade delay={0.35}>
|
||||
<Card className="border-border/70 bg-card/95 shadow-sm">
|
||||
<CardHeader>
|
||||
<CardTitle>{copy.systemStatusTitle}</CardTitle>
|
||||
|
||||
@@ -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={
|
||||
<Button asChild variant="outline" className="w-full justify-between">
|
||||
<Link href={getLocalizedPath("de")} target="_blank" rel="noreferrer">
|
||||
{copy.backToSite}
|
||||
<ArrowLeft className="h-4 w-4" />
|
||||
</Link>
|
||||
</Button>
|
||||
<div className="space-y-2">
|
||||
<Button asChild variant="outline" className="w-full justify-between">
|
||||
<Link href={getLocalizedPath("de")} target="_blank" rel="noreferrer">
|
||||
{copy.backToSite}
|
||||
<ArrowLeft className="h-4 w-4" />
|
||||
</Link>
|
||||
</Button>
|
||||
{sidebarTopContent}
|
||||
</div>
|
||||
}
|
||||
sidebarFooter={
|
||||
<>
|
||||
|
||||
Reference in New Issue
Block a user