lovart3/app/canvas/[id]/layout.tsx
2026-01-24 20:30:36 +08:00

52 lines
1.4 KiB
TypeScript

import { Metadata } from "next";
import { Suspense } from "react";
import { cookies } from "next/headers";
import { auth } from "@/app/(auth)/auth";
import { TopNavbar } from "@/components/top-navbar";
import { getSiteSettings, getNavLinks } from "@/lib/db/queries";
export const metadata: Metadata = {
title: "无限画布",
description: "AI 驱动的无限画布创作工具",
};
export default function CanvasEditorLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<Suspense fallback={<div className="h-screen w-screen bg-background" />}>
<CanvasLayoutWrapper>{children}</CanvasLayoutWrapper>
</Suspense>
);
}
async function CanvasLayoutWrapper({ children }: { children: React.ReactNode }) {
const [session, siteSettings, navLinks] = await Promise.all([
auth(),
getSiteSettings(),
getNavLinks(),
]);
return (
<div className="h-screen w-screen overflow-hidden bg-background">
<TopNavbar
siteName={siteSettings.siteName}
siteLogo={siteSettings.siteLogo || undefined}
siteLogoDark={siteSettings.siteLogoDark || undefined}
isAdmin={session?.user?.type === "admin"}
customLinks={navLinks.map(link => ({
id: link.id,
name: link.name,
url: link.url,
order: link.order
}))}
/>
<div className="pt-12 h-full">
{children}
</div>
</div>
);
}