You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

layout.tsx 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. import { Instrument_Serif } from 'next/font/google'
  14. import cn from '@/utils/classnames'
  15. export const viewport: Viewport = {
  16. width: 'device-width',
  17. initialScale: 1,
  18. maximumScale: 1,
  19. viewportFit: 'cover',
  20. userScalable: false,
  21. }
  22. const instrumentSerif = Instrument_Serif({
  23. weight: ['400'],
  24. style: ['normal', 'italic'],
  25. subsets: ['latin'],
  26. variable: '--font-instrument-serif',
  27. })
  28. const LocaleLayout = async ({
  29. children,
  30. }: {
  31. children: React.ReactNode
  32. }) => {
  33. const locale = await getLocaleOnServer()
  34. const datasetMap: Record<DatasetAttr, string | undefined> = {
  35. [DatasetAttr.DATA_API_PREFIX]: process.env.NEXT_PUBLIC_API_PREFIX,
  36. [DatasetAttr.DATA_PUBLIC_API_PREFIX]: process.env.NEXT_PUBLIC_PUBLIC_API_PREFIX,
  37. [DatasetAttr.DATA_MARKETPLACE_API_PREFIX]: process.env.NEXT_PUBLIC_MARKETPLACE_API_PREFIX,
  38. [DatasetAttr.DATA_MARKETPLACE_URL_PREFIX]: process.env.NEXT_PUBLIC_MARKETPLACE_URL_PREFIX,
  39. [DatasetAttr.DATA_PUBLIC_EDITION]: process.env.NEXT_PUBLIC_EDITION,
  40. [DatasetAttr.DATA_PUBLIC_SUPPORT_MAIL_LOGIN]: process.env.NEXT_PUBLIC_SUPPORT_MAIL_LOGIN,
  41. [DatasetAttr.DATA_PUBLIC_SENTRY_DSN]: process.env.NEXT_PUBLIC_SENTRY_DSN,
  42. [DatasetAttr.DATA_PUBLIC_MAINTENANCE_NOTICE]: process.env.NEXT_PUBLIC_MAINTENANCE_NOTICE,
  43. [DatasetAttr.DATA_PUBLIC_SITE_ABOUT]: process.env.NEXT_PUBLIC_SITE_ABOUT,
  44. [DatasetAttr.DATA_PUBLIC_TEXT_GENERATION_TIMEOUT_MS]: process.env.NEXT_PUBLIC_TEXT_GENERATION_TIMEOUT_MS,
  45. [DatasetAttr.DATA_PUBLIC_MAX_TOOLS_NUM]: process.env.NEXT_PUBLIC_MAX_TOOLS_NUM,
  46. [DatasetAttr.DATA_PUBLIC_MAX_PARALLEL_LIMIT]: process.env.NEXT_PUBLIC_MAX_PARALLEL_LIMIT,
  47. [DatasetAttr.DATA_PUBLIC_TOP_K_MAX_VALUE]: process.env.NEXT_PUBLIC_TOP_K_MAX_VALUE,
  48. [DatasetAttr.DATA_PUBLIC_INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH]: process.env.NEXT_PUBLIC_INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH,
  49. [DatasetAttr.DATA_PUBLIC_LOOP_NODE_MAX_COUNT]: process.env.NEXT_PUBLIC_LOOP_NODE_MAX_COUNT,
  50. [DatasetAttr.DATA_PUBLIC_MAX_ITERATIONS_NUM]: process.env.NEXT_PUBLIC_MAX_ITERATIONS_NUM,
  51. [DatasetAttr.DATA_PUBLIC_MAX_TREE_DEPTH]: process.env.NEXT_PUBLIC_MAX_TREE_DEPTH,
  52. [DatasetAttr.DATA_PUBLIC_ALLOW_UNSAFE_DATA_SCHEME]: process.env.NEXT_PUBLIC_ALLOW_UNSAFE_DATA_SCHEME,
  53. [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_JINAREADER]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_JINAREADER,
  54. [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_FIRECRAWL]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_FIRECRAWL,
  55. [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_WATERCRAWL]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_WATERCRAWL,
  56. }
  57. return (
  58. <html lang={locale ?? 'en'} className={cn('h-full', instrumentSerif.variable)} suppressHydrationWarning>
  59. <head>
  60. <meta name='theme-color' content='#FFFFFF' />
  61. <meta name='mobile-web-app-capable' content='yes' />
  62. <meta name='apple-mobile-web-app-capable' content='yes' />
  63. <meta name='apple-mobile-web-app-status-bar-style' content='default' />
  64. </head>
  65. <body
  66. className='color-scheme h-full select-auto'
  67. {...datasetMap}
  68. >
  69. <ThemeProvider
  70. attribute='data-theme'
  71. defaultTheme='system'
  72. enableSystem
  73. disableTransitionOnChange
  74. enableColorScheme={false}
  75. >
  76. <BrowserInitializer>
  77. <SentryInitializer>
  78. <TanstackQueryInitializer>
  79. <I18nServer>
  80. <GlobalPublicStoreProvider>
  81. {children}
  82. </GlobalPublicStoreProvider>
  83. </I18nServer>
  84. </TanstackQueryInitializer>
  85. </SentryInitializer>
  86. </BrowserInitializer>
  87. </ThemeProvider>
  88. <RoutePrefixHandle />
  89. </body>
  90. </html>
  91. )
  92. }
  93. export default LocaleLayout