Files
mnote/wolai-frontend/src/app/layout.tsx
T

70 lines
2.3 KiB
TypeScript
Raw Normal View History

2025-11-23 10:55:04 +08:00
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";
import { SupabaseProvider } from "@/components/providers/supabase-provider";
import { QueryProvider } from "@/components/providers/query-provider";
2026-01-18 05:13:53 +08:00
import { ConvexClientProvider } from "@/components/providers/convex-provider";
2025-11-23 10:55:04 +08:00
import { createSupabaseServerClient } from "@/lib/supabase/server";
2026-01-15 20:54:21 +08:00
import { getMnoteRuntimeConfig } from "@/lib/runtime-config";
2026-01-17 10:12:53 +08:00
import { isConvexEnabled } from "@/lib/convex/enabled";
2026-01-18 05:13:53 +08:00
import { ConvexAuthNextjsServerProvider } from "@convex-dev/auth/nextjs/server";
2025-11-23 10:55:04 +08:00
const inter = Inter({
subsets: ["latin"],
variable: "--font-inter",
});
export const metadata: Metadata = {
title: "Wolai Clone",
description: "Stage0 + Stage1 implementation powered by Supabase",
};
export default async function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
2026-01-15 20:54:21 +08:00
const isDesktop = process.env.MNOTE_DESKTOP === "1";
2026-01-17 10:12:53 +08:00
const useConvex = isConvexEnabled();
2026-01-15 20:54:21 +08:00
let session = null;
2026-01-17 10:12:53 +08:00
if (!useConvex) {
try {
session = (await (await createSupabaseServerClient()).auth.getSession()).data.session;
} catch {
// 说明:不阻塞页面渲染,交由客户端登录页处理(例如网络暂不可达)。
session = null;
}
2026-01-15 20:54:21 +08:00
}
2026-01-17 10:12:53 +08:00
const runtimeConfig = { ...getMnoteRuntimeConfig(), isDesktop, useConvex };
2026-01-15 20:54:21 +08:00
const runtimeConfigJson = JSON.stringify(runtimeConfig).replace(/</g, "\\u003cc");
2025-11-23 10:55:04 +08:00
return (
<html lang="zh-CN">
2026-01-15 20:54:21 +08:00
<head>
<script
// 说明:桌面端需要“运行期可覆盖”的配置(避免 build 时把 NEXT_PUBLIC_* 写死)。
// 这里将服务端读取到的配置注入到 window,客户端再优先读取它。
dangerouslySetInnerHTML={{
__html: `window.__MNOTE_RUNTIME_CONFIG__=${runtimeConfigJson};`,
}}
/>
</head>
2025-11-23 10:55:04 +08:00
<body className={`${inter.variable} antialiased`}>
2026-01-17 10:12:53 +08:00
{useConvex ? (
2026-01-18 05:13:53 +08:00
<ConvexAuthNextjsServerProvider>
<ConvexClientProvider>
<QueryProvider>{children}</QueryProvider>
</ConvexClientProvider>
</ConvexAuthNextjsServerProvider>
2026-01-17 10:12:53 +08:00
) : (
<SupabaseProvider session={session}>
<QueryProvider>{children}</QueryProvider>
</SupabaseProvider>
)}
2025-11-23 10:55:04 +08:00
</body>
</html>
);
}