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

48 lines
1.7 KiB
TypeScript
Raw Normal View History

2025-11-23 10:55:04 +08:00
import type { Metadata } from "next";
import "./globals.css";
import { QueryProvider } from "@/components/providers/query-provider";
2026-01-18 05:13:53 +08:00
import { ConvexClientProvider } from "@/components/providers/convex-provider";
2026-02-01 08:47:40 +08:00
import { AppPreferencesHydrator } from "@/components/providers/app-preferences-hydrator";
import { getMnotePublicRuntimeConfig } 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
export const metadata: Metadata = {
title: "Wolai Clone",
2026-01-18 19:01:31 +08:00
description: "Convex 自部署模式",
2025-11-23 10:55:04 +08:00
};
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
const runtimeConfig = { ...getMnotePublicRuntimeConfig(), 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>
<body className="antialiased">
2026-01-18 19:01:31 +08:00
<ConvexAuthNextjsServerProvider>
<ConvexClientProvider>
2026-02-01 08:47:40 +08:00
<AppPreferencesHydrator />
2026-01-17 10:12:53 +08:00
<QueryProvider>{children}</QueryProvider>
2026-01-18 19:01:31 +08:00
</ConvexClientProvider>
</ConvexAuthNextjsServerProvider>
2025-11-23 10:55:04 +08:00
</body>
</html>
);
}