layout.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import type { Metadata } from "next";
  2. import { Geist, Geist_Mono } from "next/font/google";
  3. import React from "react";
  4. import "./globals.scss";
  5. import { SignalRProvider } from '@/contexts/signalrProvider';
  6. import { AuthProvider } from "@/contexts/authProvider";
  7. import { MemberProvider } from "@/contexts/memberProvider";
  8. import { ConfigProvider } from "@/contexts/configProvider";
  9. import { getAccessToken, getSignalRCryptoUrl, getSignalRChatUrl } from "@/lib/utils/server";
  10. const geistSans = Geist({
  11. variable: "--font-geist-sans",
  12. subsets: ["latin"],
  13. });
  14. const geistMono = Geist_Mono({
  15. variable: "--font-geist-mono",
  16. subsets: ["latin"],
  17. });
  18. export const metadata: Metadata = {
  19. title: "bitforum",
  20. description: "Generated by create next app",
  21. keywords: "nextjs, typescript, tailwindcss",
  22. robots: {
  23. index: true,
  24. follow: true,
  25. nocache: true
  26. }
  27. };
  28. export default async function RootLayout({
  29. children,
  30. }: Readonly<{
  31. children: React.ReactNode;
  32. }>) {
  33. const accessToken = await getAccessToken();
  34. const signalRCryptoUrl = await getSignalRCryptoUrl();
  35. const signalRChatUrl = await getSignalRChatUrl();
  36. return (
  37. <html lang="ko">
  38. <body className={`${geistSans.variable} ${geistMono.variable} antialiased`}>
  39. <SignalRProvider accessToken={accessToken} signalRCryptoUrl={signalRCryptoUrl} signalRChatUrl={signalRChatUrl}>
  40. <AuthProvider>
  41. <MemberProvider>
  42. <ConfigProvider>
  43. {children}
  44. </ConfigProvider>
  45. </MemberProvider>
  46. </AuthProvider>
  47. </SignalRProvider>
  48. </body>
  49. </html>
  50. );
  51. }