46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
import { getServerSession } from "next-auth";
|
|
import { authOptions } from "@/app/api/auth/[...nextauth]/route";
|
|
import { redirect } from "next/navigation";
|
|
import { SidebarProvider, SidebarTrigger } from "@/components/ui/sidebar";
|
|
import { AdminSidebar } from "./client";
|
|
import { Metadata } from "next";
|
|
|
|
export const metadata: Metadata = {
|
|
title: {
|
|
default: "Admin",
|
|
template: "%s | Erika!",
|
|
},
|
|
}
|
|
|
|
export default async function AdminFormLayout(
|
|
props: {
|
|
children: React.ReactNode;
|
|
params: Promise<{ id: string }>;
|
|
}
|
|
) {
|
|
const params = await props.params;
|
|
const session = await getServerSession(authOptions);
|
|
const adminIds = (process.env.ADMIN_DISCORD_IDS ?? "")
|
|
.split(",")
|
|
.map((s) => s.trim())
|
|
.filter(Boolean);
|
|
const discordId = (session?.user as any)?.discordId;
|
|
|
|
if (!discordId || !adminIds.includes(discordId)) {
|
|
redirect("/form");
|
|
}
|
|
|
|
return (
|
|
<SidebarProvider>
|
|
<div className="flex w-full bg-background text-foreground dark">
|
|
<AdminSidebar formId={params.id} />
|
|
<div className="flex-1 overflow-hidden">
|
|
<div className="md:hidden p-2">
|
|
<SidebarTrigger />
|
|
</div>
|
|
{props.children}
|
|
</div>
|
|
</div>
|
|
</SidebarProvider>
|
|
);
|
|
} |