mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-08 20:42:30 +08:00
### What problem does this PR solve? Fix: Switch the default theme from light mode to dark mode and improve some styles #9869 -Update UI component styles such as input boxes, tables, and prompt boxes -Optimize login page layout and style details -Revise some of the wording, such as uniformly changing "data flow" to "pipeline" -Adjust the parser to support the markdown type ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue)
119 lines
3.7 KiB
TypeScript
119 lines
3.7 KiB
TypeScript
import { Toaster as Sonner } from '@/components/ui/sonner';
|
|
import { Toaster } from '@/components/ui/toaster';
|
|
import i18n from '@/locales/config';
|
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
import { App, ConfigProvider, ConfigProviderProps, theme } from 'antd';
|
|
import pt_BR from 'antd/lib/locale/pt_BR';
|
|
import deDE from 'antd/locale/de_DE';
|
|
import enUS from 'antd/locale/en_US';
|
|
import ru_RU from 'antd/locale/ru_RU';
|
|
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 { SidebarProvider } from './components/ui/sidebar';
|
|
import { TooltipProvider } from './components/ui/tooltip';
|
|
import { ThemeEnum } from './constants/common';
|
|
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,
|
|
ru: ru_RU,
|
|
vi: vi_VN,
|
|
'pt-BR': pt_BR,
|
|
de: deDE,
|
|
};
|
|
|
|
if (process.env.NODE_ENV === 'development') {
|
|
const whyDidYouRender = require('@welldone-software/why-did-you-render');
|
|
whyDidYouRender(React, {
|
|
trackAllPureComponents: true,
|
|
trackExtraHooks: [],
|
|
logOnDifferentValues: true,
|
|
});
|
|
}
|
|
|
|
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}
|
|
>
|
|
<SidebarProvider className="h-full">
|
|
<App>{children}</App>
|
|
</SidebarProvider>
|
|
<Sonner position={'top-right'} expand richColors closeButton></Sonner>
|
|
<Toaster />
|
|
</ConfigProvider>
|
|
{/* <ReactQueryDevtools buttonPosition={'top-left'} initialIsOpen={false} /> */}
|
|
</>
|
|
);
|
|
}
|
|
|
|
const RootProvider = ({ children }: React.PropsWithChildren) => {
|
|
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 (
|
|
<TooltipProvider>
|
|
<QueryClientProvider client={queryClient}>
|
|
<ThemeProvider
|
|
defaultTheme={ThemeEnum.Dark}
|
|
storageKey="ragflow-ui-theme"
|
|
>
|
|
<Root>{children}</Root>
|
|
</ThemeProvider>
|
|
</QueryClientProvider>
|
|
</TooltipProvider>
|
|
);
|
|
};
|
|
export function rootContainer(container: ReactNode) {
|
|
return <RootProvider>{container}</RootProvider>;
|
|
}
|