layout.tsx 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import RoutePrefixHandle from './routePrefixHandle'
  2. import type { Viewport } from 'next'
  3. import I18nServer from './components/i18n-server'
  4. import BrowserInitializer from './components/browser-initializer'
  5. import SentryInitializer from './components/sentry-initializer'
  6. import { getLocaleOnServer } from '@/i18n-config/server'
  7. import { TanstackQueryInitializer } from '@/context/query-client'
  8. import { ThemeProvider } from 'next-themes'
  9. import './styles/globals.css'
  10. import './styles/markdown.scss'
  11. import GlobalPublicStoreProvider from '@/context/global-public-context'
  12. import { DatasetAttr } from '@/types/feature'
  13. export const viewport: Viewport = {
  14. width: 'device-width',
  15. initialScale: 1,
  16. maximumScale: 1,
  17. viewportFit: 'cover',
  18. userScalable: false,
  19. }
  20. const LocaleLayout = async ({
  21. children,
  22. }: {
  23. children: React.ReactNode
  24. }) => {
  25. const locale = await getLocaleOnServer()
  26. const datasetMap: Record<DatasetAttr, string | undefined> = {
  27. [DatasetAttr.DATA_API_PREFIX]: process.env.NEXT_PUBLIC_API_PREFIX,
  28. [DatasetAttr.DATA_PUBLIC_API_PREFIX]: process.env.NEXT_PUBLIC_PUBLIC_API_PREFIX,
  29. [DatasetAttr.DATA_MARKETPLACE_API_PREFIX]: process.env.NEXT_PUBLIC_MARKETPLACE_API_PREFIX,
  30. [DatasetAttr.DATA_MARKETPLACE_URL_PREFIX]: process.env.NEXT_PUBLIC_MARKETPLACE_URL_PREFIX,
  31. [DatasetAttr.DATA_PUBLIC_EDITION]: process.env.NEXT_PUBLIC_EDITION,
  32. [DatasetAttr.DATA_PUBLIC_SUPPORT_MAIL_LOGIN]: process.env.NEXT_PUBLIC_SUPPORT_MAIL_LOGIN,
  33. [DatasetAttr.DATA_PUBLIC_SENTRY_DSN]: process.env.NEXT_PUBLIC_SENTRY_DSN,
  34. [DatasetAttr.DATA_PUBLIC_MAINTENANCE_NOTICE]: process.env.NEXT_PUBLIC_MAINTENANCE_NOTICE,
  35. [DatasetAttr.DATA_PUBLIC_SITE_ABOUT]: process.env.NEXT_PUBLIC_SITE_ABOUT,
  36. [DatasetAttr.DATA_PUBLIC_TEXT_GENERATION_TIMEOUT_MS]: process.env.NEXT_PUBLIC_TEXT_GENERATION_TIMEOUT_MS,
  37. [DatasetAttr.DATA_PUBLIC_MAX_TOOLS_NUM]: process.env.NEXT_PUBLIC_MAX_TOOLS_NUM,
  38. [DatasetAttr.DATA_PUBLIC_MAX_PARALLEL_LIMIT]: process.env.NEXT_PUBLIC_MAX_PARALLEL_LIMIT,
  39. [DatasetAttr.DATA_PUBLIC_TOP_K_MAX_VALUE]: process.env.NEXT_PUBLIC_TOP_K_MAX_VALUE,
  40. [DatasetAttr.DATA_PUBLIC_INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH]: process.env.NEXT_PUBLIC_INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH,
  41. [DatasetAttr.DATA_PUBLIC_LOOP_NODE_MAX_COUNT]: process.env.NEXT_PUBLIC_LOOP_NODE_MAX_COUNT,
  42. [DatasetAttr.DATA_PUBLIC_MAX_ITERATIONS_NUM]: process.env.NEXT_PUBLIC_MAX_ITERATIONS_NUM,
  43. [DatasetAttr.DATA_PUBLIC_MAX_TREE_DEPTH]: process.env.NEXT_PUBLIC_MAX_TREE_DEPTH,
  44. [DatasetAttr.DATA_PUBLIC_ALLOW_UNSAFE_DATA_SCHEME]: process.env.NEXT_PUBLIC_ALLOW_UNSAFE_DATA_SCHEME,
  45. [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_JINAREADER]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_JINAREADER,
  46. [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_FIRECRAWL]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_FIRECRAWL,
  47. [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_WATERCRAWL]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_WATERCRAWL,
  48. [DatasetAttr.DATA_PUBLIC_KKFILEVIEW_URL]: process.env.NEXT_PUBLIC_KKFILEVIEW_URL,
  49. [DatasetAttr.DATA_PUBLIC_API_BASE_URL]: process.env.NEXT_PUBLIC_API_BASE_URL,
  50. }
  51. return (
  52. <html lang={locale ?? 'en'} className="h-full" suppressHydrationWarning>
  53. <head>
  54. <meta name="theme-color" content="#FFFFFF" />
  55. <meta name="mobile-web-app-capable" content="yes" />
  56. <meta name="apple-mobile-web-app-capable" content="yes" />
  57. <meta name="apple-mobile-web-app-status-bar-style" content="default" />
  58. </head>
  59. <body
  60. className="color-scheme h-full select-auto"
  61. {...datasetMap}
  62. >
  63. <ThemeProvider
  64. attribute='data-theme'
  65. defaultTheme='system'
  66. enableSystem
  67. disableTransitionOnChange
  68. enableColorScheme={false}
  69. >
  70. <BrowserInitializer>
  71. <SentryInitializer>
  72. <TanstackQueryInitializer>
  73. <I18nServer>
  74. <GlobalPublicStoreProvider>
  75. {children}
  76. </GlobalPublicStoreProvider>
  77. </I18nServer>
  78. </TanstackQueryInitializer>
  79. </SentryInitializer>
  80. </BrowserInitializer>
  81. </ThemeProvider>
  82. <RoutePrefixHandle />
  83. </body>
  84. </html>
  85. )
  86. }
  87. export default LocaleLayout