|
import i18n from '@/locales/config'; |
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; |
|
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; |
|
import { App, ConfigProvider, ConfigProviderProps, theme } from 'antd'; |
|
import enUS from 'antd/locale/en_US'; |
|
import vi_VN from 'antd/locale/vi_VN'; |
|
import zhCN from 'antd/locale/zh_CN'; |
|
import zh_HK from 'antd/locale/zh_HK'; |
|
import dayjs from 'dayjs'; |
|
import advancedFormat from 'dayjs/plugin/advancedFormat'; |
|
import customParseFormat from 'dayjs/plugin/customParseFormat'; |
|
import localeData from 'dayjs/plugin/localeData'; |
|
import weekOfYear from 'dayjs/plugin/weekOfYear'; |
|
import weekYear from 'dayjs/plugin/weekYear'; |
|
import weekday from 'dayjs/plugin/weekday'; |
|
import React, { ReactNode, useEffect, useState } from 'react'; |
|
import { ThemeProvider, useTheme } from './components/theme-provider'; |
|
import { TooltipProvider } from './components/ui/tooltip'; |
|
import storage from './utils/authorization-util'; |
|
|
|
dayjs.extend(customParseFormat); |
|
dayjs.extend(advancedFormat); |
|
dayjs.extend(weekday); |
|
dayjs.extend(localeData); |
|
dayjs.extend(weekOfYear); |
|
dayjs.extend(weekYear); |
|
|
|
const AntLanguageMap = { |
|
en: enUS, |
|
zh: zhCN, |
|
'zh-TRADITIONAL': zh_HK, |
|
vi: vi_VN, |
|
}; |
|
|
|
const queryClient = new QueryClient(); |
|
|
|
type Locale = ConfigProviderProps['locale']; |
|
|
|
function Root({ children }: React.PropsWithChildren) { |
|
const { theme: themeragflow } = useTheme(); |
|
const getLocale = (lng: string) => |
|
AntLanguageMap[lng as keyof typeof AntLanguageMap] ?? enUS; |
|
|
|
const [locale, setLocal] = useState<Locale>(getLocale(storage.getLanguage())); |
|
|
|
i18n.on('languageChanged', function (lng: string) { |
|
storage.setLanguage(lng); |
|
setLocal(getLocale(lng)); |
|
}); |
|
|
|
return ( |
|
<> |
|
<ConfigProvider |
|
theme={{ |
|
token: { |
|
fontFamily: 'Inter', |
|
}, |
|
algorithm: |
|
themeragflow === 'dark' |
|
? theme.darkAlgorithm |
|
: theme.defaultAlgorithm, |
|
}} |
|
locale={locale} |
|
> |
|
<App> {children}</App> |
|
</ConfigProvider> |
|
<ReactQueryDevtools buttonPosition={'top-left'} /> |
|
</> |
|
); |
|
} |
|
|
|
const RootProvider = ({ children }: React.PropsWithChildren) => { |
|
useEffect(() => { |
|
|
|
const lng = storage.getLanguage(); |
|
if (lng) { |
|
i18n.changeLanguage(lng); |
|
} |
|
}, []); |
|
|
|
return ( |
|
<TooltipProvider> |
|
<QueryClientProvider client={queryClient}> |
|
<ThemeProvider defaultTheme="light" storageKey="ragflow-ui-theme"> |
|
<Root>{children}</Root> |
|
</ThemeProvider> |
|
</QueryClientProvider> |
|
</TooltipProvider> |
|
); |
|
}; |
|
export function rootContainer(container: ReactNode) { |
|
return <RootProvider>{container}</RootProvider>; |
|
} |
|
|