63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
import {App, ConfigProvider, type ThemeConfig} from 'antd';
|
|
import {type PropsWithChildren, useMemo} from 'react';
|
|
import algorithm from "@/layout/algorithm.ts";
|
|
import useGlobalStore from "@/stores/global";
|
|
import useLanguage from '@/hooks/useLanguage';
|
|
|
|
function ContextHolder() {
|
|
const { message, modal, notification } = App.useApp();
|
|
window.$message = message;
|
|
window.$modal = modal;
|
|
window.$notification = notification;
|
|
return null;
|
|
}
|
|
|
|
const AppProvider = ({ children }: PropsWithChildren) => {
|
|
const themeConfig = useGlobalStore(state => state.themeConfig);
|
|
const { antdLocale } = useLanguage();
|
|
|
|
const theme: ThemeConfig = useMemo(() => ({
|
|
components: {
|
|
Layout: {
|
|
headerPadding: "0 " + themeConfig.headerPadding + "px",
|
|
headerHeight: themeConfig.headerHeight,
|
|
bodyBg: themeConfig.bodyBg,
|
|
footerBg: themeConfig.footerBg,
|
|
headerBg: themeConfig.headerBg,
|
|
headerColor: themeConfig.headerColor,
|
|
siderBg: themeConfig.siderBg,
|
|
footerPadding: 0
|
|
},
|
|
Menu: {
|
|
activeBarBorderWidth: 0,
|
|
itemBg: 'transparent',
|
|
subMenuItemBg: 'transparent',
|
|
}
|
|
},
|
|
token: {
|
|
colorPrimary: themeConfig.colorPrimary,
|
|
colorBgBase: themeConfig.colorBg,
|
|
colorTextBase: themeConfig.colorText,
|
|
colorError: themeConfig.colorError,
|
|
colorInfo: themeConfig.colorPrimary,
|
|
colorLink: themeConfig.colorPrimary,
|
|
colorSuccess: themeConfig.colorSuccess,
|
|
colorWarning: themeConfig.colorWarning,
|
|
borderRadius: themeConfig.borderRadius,
|
|
controlHeight: themeConfig.controlHeight,
|
|
},
|
|
algorithm: themeConfig.algorithm ? algorithm[themeConfig.algorithm] : undefined
|
|
}), [themeConfig])
|
|
|
|
return (
|
|
<ConfigProvider theme={theme} locale={antdLocale}>
|
|
<App>
|
|
<ContextHolder />
|
|
{children}
|
|
</App>
|
|
</ConfigProvider>
|
|
);
|
|
};
|
|
|
|
export default AppProvider;
|