Skip to content

Commit 89b4206

Browse files
committed
refactor: wrap app with antd App context for static methods
- Import and use new EscapeAntd component in main app layout - Add ConfigProvider wrapper around app content - Create EscapeAntd component to handle antd static functions using App context - Export EscapeAntd component from components index - Replace direct antd message and notification imports with EscapeAntd versions in request module Signed-off-by: wecoding <wecoding@yeah.net>
1 parent 137c893 commit 89b4206

File tree

4 files changed

+59
-20
lines changed

4 files changed

+59
-20
lines changed

src/app.tsx

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { AvatarDropdown, AvatarName, Footer, Question, SelectLang } from '@/components';
1+
import { AvatarDropdown, AvatarName, Footer, Question, SelectLang, EscapeAntd } from '@/components';
22
import { currentUser as queryCurrentUser } from '@/services/system/login';
33
import { LinkOutlined } from '@ant-design/icons';
44
import queryString from 'query-string';
@@ -8,7 +8,7 @@ import type { RunTimeLayoutConfig } from '@umijs/max';
88
import { history, Link } from '@umijs/max';
99
import defaultSettings from '../config/defaultSettings';
1010
import { errorConfig } from './request';
11-
import { App } from 'antd';
11+
import { App, ConfigProvider } from 'antd';
1212
import { isLoginPath, isSessionExpiredPath } from '@/utils/is';
1313
import { PageEnum, TOKEN_KEY } from '@/enums';
1414
import { Session } from '@/utils/storage';
@@ -132,22 +132,25 @@ export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) =
132132
childrenRender: (children) => {
133133
if (initialState?.loading) return <PageLoading />;
134134
return (
135-
<App>
136-
{children}
137-
{isDev && (
138-
<SettingDrawer
139-
disableUrlParams
140-
enableDarkTheme
141-
settings={initialState?.settings}
142-
onSettingChange={(settings) => {
143-
setInitialState((preInitialState) => ({
144-
...preInitialState,
145-
settings,
146-
}));
147-
}}
148-
/>
149-
)}
150-
</App>
135+
<ConfigProvider theme={{}}>
136+
<App>
137+
<EscapeAntd />
138+
{children}
139+
{isDev && (
140+
<SettingDrawer
141+
disableUrlParams
142+
enableDarkTheme
143+
settings={initialState?.settings}
144+
onSettingChange={(settings) => {
145+
setInitialState((preInitialState) => ({
146+
...preInitialState,
147+
settings,
148+
}));
149+
}}
150+
/>
151+
)}
152+
</App>
153+
</ConfigProvider>
151154
);
152155
},
153156
...initialState?.settings,
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import {
2+
message as antdMessage,
3+
notification as antdNotification,
4+
Modal as antdModal,
5+
App,
6+
} from 'antd';
7+
8+
import type { MessageInstance } from 'antd/es/message/interface';
9+
import type { NotificationInstance } from 'antd/es/notification/interface';
10+
import type { ModalStaticFunctions } from 'antd/es/modal/confirm';
11+
12+
let message: MessageInstance = antdMessage;
13+
let notification: NotificationInstance = antdNotification;
14+
15+
// because warn is deprecated, so we need to remove it.
16+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
17+
const { warn, ...resetFns } = antdModal;
18+
let modal: Omit<ModalStaticFunctions, 'warn'> = resetFns;
19+
20+
/**
21+
* This component is used to escape the antd's static functions.
22+
*/
23+
function EscapeAntd() {
24+
const staticFunctions = App.useApp();
25+
26+
message = staticFunctions.message;
27+
notification = staticFunctions.notification;
28+
modal = staticFunctions.modal;
29+
30+
return null;
31+
}
32+
33+
export { message, notification, modal };
34+
35+
export default EscapeAntd;

src/components/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
* 布局组件
77
*/
88
import Footer from './Footer';
9+
import EscapeAntd from './EscapeAntd';
910
import { Question, SelectLang } from './RightContent';
1011
import { AvatarDropdown, AvatarName } from './RightContent/AvatarDropdown';
1112
import { SubjectTransfer } from './Transfer';
1213

13-
export { Footer, Question, SelectLang, AvatarDropdown, AvatarName, SubjectTransfer };
14+
export { Footer, Question, SelectLang, AvatarDropdown, AvatarName, SubjectTransfer, EscapeAntd };

src/request.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { RequestOptions } from '@@/plugin-request/request';
22
import type { RequestConfig } from '@umijs/max';
3-
import { message, notification } from 'antd';
3+
import { message, notification } from '@/components/EscapeAntd';
44
import { Session } from '@/utils/storage';
55

66
// 错误处理方案: 错误类型

0 commit comments

Comments
 (0)