2025-11-23 10:55:04 +08:00
|
|
|
import type { Metadata } from "next";
|
|
|
|
|
import { Inter } from "next/font/google";
|
|
|
|
|
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-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",
|
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-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-18 19:01:31 +08:00
|
|
|
<ConvexAuthNextjsServerProvider>
|
|
|
|
|
<ConvexClientProvider>
|
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>
|
|
|
|
|
);
|
|
|
|
|
}
|