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";
|
2026-04-23 07:38:34 +08:00
|
|
|
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
|
|
|
|
2026-04-23 07:38:34 +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>
|
2026-04-22 05:57:06 +08:00
|
|
|
<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>
|
|
|
|
|
);
|
|
|
|
|
}
|