1 | "use client";
|
2 |
|
3 | import React, { useContext } from 'react';
|
4 | import classNames from 'classnames';
|
5 | import { devUseWarning } from '../_util/warning';
|
6 | import { ConfigContext } from '../config-provider';
|
7 | import useMessage from '../message/useMessage';
|
8 | import useModal from '../modal/useModal';
|
9 | import useNotification from '../notification/useNotification';
|
10 | import AppContext, { AppConfigContext } from './context';
|
11 | import useStyle from './style';
|
12 | const useApp = () => React.useContext(AppContext);
|
13 | const App = props => {
|
14 | const {
|
15 | prefixCls: customizePrefixCls,
|
16 | children,
|
17 | className,
|
18 | rootClassName,
|
19 | message,
|
20 | notification,
|
21 | style,
|
22 | component = 'div'
|
23 | } = props;
|
24 | const {
|
25 | getPrefixCls
|
26 | } = useContext(ConfigContext);
|
27 | const prefixCls = getPrefixCls('app', customizePrefixCls);
|
28 | const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls);
|
29 | const customClassName = classNames(hashId, prefixCls, className, rootClassName, cssVarCls);
|
30 | const appConfig = useContext(AppConfigContext);
|
31 | const mergedAppConfig = React.useMemo(() => ({
|
32 | message: Object.assign(Object.assign({}, appConfig.message), message),
|
33 | notification: Object.assign(Object.assign({}, appConfig.notification), notification)
|
34 | }), [message, notification, appConfig.message, appConfig.notification]);
|
35 | const [messageApi, messageContextHolder] = useMessage(mergedAppConfig.message);
|
36 | const [notificationApi, notificationContextHolder] = useNotification(mergedAppConfig.notification);
|
37 | const [ModalApi, ModalContextHolder] = useModal();
|
38 | const memoizedContextValue = React.useMemo(() => ({
|
39 | message: messageApi,
|
40 | notification: notificationApi,
|
41 | modal: ModalApi
|
42 | }), [messageApi, notificationApi, ModalApi]);
|
43 |
|
44 | devUseWarning('App')(!(cssVarCls && component === false), 'usage', 'When using cssVar, ensure `component` is assigned a valid React component string.');
|
45 |
|
46 | const Component = component === false ? React.Fragment : component;
|
47 | const rootProps = {
|
48 | className: customClassName,
|
49 | style
|
50 | };
|
51 | return wrapCSSVar(React.createElement(AppContext.Provider, {
|
52 | value: memoizedContextValue
|
53 | }, React.createElement(AppConfigContext.Provider, {
|
54 | value: mergedAppConfig
|
55 | }, React.createElement(Component, Object.assign({}, component === false ? undefined : rootProps), ModalContextHolder, messageContextHolder, notificationContextHolder, children))));
|
56 | };
|
57 | if (process.env.NODE_ENV !== 'production') {
|
58 | App.displayName = 'App';
|
59 | }
|
60 | App.useApp = useApp;
|
61 | export default App; |
\ | No newline at end of file |