| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import i18n from '@/locales/config';
- import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
- import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
- import { App, ConfigProvider, ConfigProviderProps } from 'antd';
- import enUS from 'antd/locale/en_US';
- 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 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,
- };
-
- const queryClient = new QueryClient();
-
- type Locale = ConfigProviderProps['locale'];
-
- const RootProvider = ({ children }: React.PropsWithChildren) => {
- 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));
- });
-
- useEffect(() => {
- // Because the language is saved in the backend, a token is required to obtain the api. However, the login page cannot obtain the language through the getUserInfo api, so the language needs to be saved in localstorage.
- const lng = storage.getLanguage();
- if (lng) {
- i18n.changeLanguage(lng);
- }
- }, []);
-
- return (
- <QueryClientProvider client={queryClient}>
- <ConfigProvider
- theme={{
- token: {
- fontFamily: 'Inter',
- },
- }}
- locale={locale}
- >
- <App> {children}</App>
- </ConfigProvider>
- <ReactQueryDevtools buttonPosition={'top-left'} />
- </QueryClientProvider>
- );
- };
-
- export function rootContainer(container: ReactNode) {
- return <RootProvider>{container}</RootProvider>;
- }
|