/admin/settings: list all website_settings, inline value edit, add/overwrite, delete; staff-gated server actions that bust the siteSettings cache after each write. Admin nav extended (Settings). Verified: tsc exit 0, vitest 48/48, next build exit 0.
28 lines
966 B
TypeScript
28 lines
966 B
TypeScript
import Link from "next/link";
|
|
import type { ReactNode } from "react";
|
|
import { requireStaff } from "@/lib/admin/guard";
|
|
|
|
export const dynamic = "force-dynamic";
|
|
|
|
export default async function AdminLayout({ children }: { children: ReactNode }) {
|
|
const staff = await requireStaff();
|
|
|
|
return (
|
|
<div style={{ display: "grid", gridTemplateColumns: "190px 1fr", gap: "1.5rem" }}>
|
|
<aside className="card" style={{ height: "fit-content" }}>
|
|
<p className="muted" style={{ marginTop: 0 }}>
|
|
Staff · {staff.username} (rank {staff.rank})
|
|
</p>
|
|
<nav style={{ display: "grid", gap: "0.45rem" }}>
|
|
<Link href="/admin">Dashboard</Link>
|
|
<Link href="/admin/users">Users</Link>
|
|
<Link href="/admin/articles">Articles</Link>
|
|
<Link href="/admin/bans">Bans</Link>
|
|
<Link href="/admin/settings">Settings</Link>
|
|
</nav>
|
|
</aside>
|
|
<section>{children}</section>
|
|
</div>
|
|
);
|
|
}
|