Files
erika/app/admin/form/[id]/layout.tsx
T

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>
);
}