@zat-design/sisyphus-react 3.9.5-beta.1 → 3.9.5-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/ProConfigProvider/FormsContext.d.ts +15 -0
- package/es/ProConfigProvider/FormsContext.js +32 -0
- package/es/ProConfigProvider/index.d.ts +0 -1
- package/es/ProConfigProvider/index.js +5 -7
- package/es/ProForm/index.js +26 -36
- package/es/ProForm/utils/useForm.d.ts +4 -3
- package/es/ProForm/utils/useForm.js +11 -2
- package/lib/ProConfigProvider/FormsContext.d.ts +15 -0
- package/lib/ProConfigProvider/FormsContext.js +39 -0
- package/lib/ProConfigProvider/index.d.ts +0 -1
- package/lib/ProConfigProvider/index.js +5 -8
- package/lib/ProForm/index.js +26 -36
- package/lib/ProForm/utils/useForm.d.ts +4 -3
- package/lib/ProForm/utils/useForm.js +11 -2
- package/package.json +1 -1
- package/.vscode/extensions.json +0 -5
@@ -0,0 +1,15 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { ModifiedFormInstance } from '../ProForm/utils/useForm';
|
3
|
+
type Forms = Record<string, ModifiedFormInstance<any>>;
|
4
|
+
export declare const FormsContext: React.Context<Forms>;
|
5
|
+
/**
|
6
|
+
* @param formKey 表单实例key
|
7
|
+
* @param formIst form实例, 如果传了会把传入的实例存入全局
|
8
|
+
* @returns 没有入参: 返回表单实例但是不存入全局
|
9
|
+
* 有formKey: 取全局中的表单实例返回, 如果不存在则创建后返回
|
10
|
+
*/
|
11
|
+
export declare const useForms: () => Forms;
|
12
|
+
/** 获取所有表单实例 */
|
13
|
+
export declare const useContextForms: () => Forms;
|
14
|
+
declare const FormsProvider: React.FC;
|
15
|
+
export default FormsProvider;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import React, { useContext, useEffect, useRef } from 'react';
|
3
|
+
export var FormsContext = /*#__PURE__*/React.createContext({});
|
4
|
+
/**
|
5
|
+
* @param formKey 表单实例key
|
6
|
+
* @param formIst form实例, 如果传了会把传入的实例存入全局
|
7
|
+
* @returns 没有入参: 返回表单实例但是不存入全局
|
8
|
+
* 有formKey: 取全局中的表单实例返回, 如果不存在则创建后返回
|
9
|
+
*/
|
10
|
+
export var useForms = function useForms() {
|
11
|
+
var forms = useContext(FormsContext);
|
12
|
+
return forms;
|
13
|
+
};
|
14
|
+
/** 获取所有表单实例 */
|
15
|
+
export var useContextForms = function useContextForms() {
|
16
|
+
var forms = useContext(FormsContext);
|
17
|
+
return forms;
|
18
|
+
};
|
19
|
+
var FormsProvider = function FormsProvider(props) {
|
20
|
+
var formsRef = useRef({});
|
21
|
+
useEffect(function () {
|
22
|
+
// 销毁
|
23
|
+
return function () {
|
24
|
+
formsRef.current = {};
|
25
|
+
};
|
26
|
+
}, []);
|
27
|
+
return _jsx(FormsContext.Provider, {
|
28
|
+
value: formsRef.current,
|
29
|
+
children: props.children
|
30
|
+
});
|
31
|
+
};
|
32
|
+
export default FormsProvider;
|
@@ -20,7 +20,6 @@ interface ConfigContext {
|
|
20
20
|
export declare const ProConfigContext: React.Context<ConfigContext>;
|
21
21
|
export declare function useProConfig(): ConfigContext;
|
22
22
|
export declare function useProConfig(name: keyof ConfigContext['state']): ConfigContext['state'][keyof ConfigContext['state']];
|
23
|
-
export declare function useContextForms(): Record<string, FormInstance<any>>;
|
24
23
|
type ActionsType = 'set' | 'setProEnum' | 'setProEnumDic' | 'setWithLocal';
|
25
24
|
interface Actions {
|
26
25
|
type: ActionsType;
|
@@ -9,6 +9,7 @@ import enUS from 'antd/es/locale/en_US';
|
|
9
9
|
import merge from 'lodash/merge';
|
10
10
|
import useEnumRequest from '../ProEnum/hooks/useEnumRequest';
|
11
11
|
import { setLanguage } from '../locale';
|
12
|
+
import FormsProvider from './FormsContext';
|
12
13
|
var initialState = {
|
13
14
|
ProEnum: {
|
14
15
|
dics: {}
|
@@ -35,11 +36,6 @@ export function useProConfig(name) {
|
|
35
36
|
var config = useContext(ProConfigContext);
|
36
37
|
return name ? config.state[name] : config;
|
37
38
|
}
|
38
|
-
export function useContextForms() {
|
39
|
-
var _config$state;
|
40
|
-
var config = useContext(ProConfigContext);
|
41
|
-
return (_config$state = config.state) === null || _config$state === void 0 ? void 0 : _config$state.forms;
|
42
|
-
}
|
43
39
|
var antdLangMap = {
|
44
40
|
'zh-CN': zhCN,
|
45
41
|
'en-US': enUS // en-US
|
@@ -105,8 +101,10 @@ export var ProConfigProvider = function ProConfigProvider(props) {
|
|
105
101
|
},
|
106
102
|
children: _jsx(_ConfigProvider, {
|
107
103
|
locale: antdLangMap[lang],
|
108
|
-
children: _jsx(
|
109
|
-
children:
|
104
|
+
children: _jsx(FormsProvider, {
|
105
|
+
children: _jsx("div", {
|
106
|
+
children: props.children
|
107
|
+
})
|
110
108
|
})
|
111
109
|
})
|
112
110
|
});
|
package/es/ProForm/index.js
CHANGED
@@ -2,13 +2,13 @@ import "antd/es/row/style";
|
|
2
2
|
import _Row from "antd/es/row";
|
3
3
|
import "antd/es/form/style";
|
4
4
|
import _Form from "antd/es/form";
|
5
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
5
6
|
import "antd/es/col/style";
|
6
7
|
import _Col from "antd/es/col";
|
7
8
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
8
9
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
9
10
|
import "antd/es/space/style";
|
10
11
|
import _Space from "antd/es/space";
|
11
|
-
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
12
12
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
13
13
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
14
14
|
var _excluded = ["mode", "span", "disabled", "isView", "columns", "footer", "onOk", "okText", "onCancel", "confirmLoading", "cancelText", "form", "children", "rowProps", "className", "expand", "expandOpen", "expandOpenChange", "viewEmpty", "labelAlign", "labelWidth", "onValuesChange", "onFinish", "diffConfig", "submitOnEnter", "clearNotShow", "initialValues", "requiredOnView", "formId", "required", "formKey", "globalControl", "scrollToError", "optimize"];
|
@@ -19,14 +19,15 @@ import React, { forwardRef, useImperativeHandle, useMemo } from 'react';
|
|
19
19
|
import { isObject, merge, omit } from 'lodash';
|
20
20
|
import { FormFooter, InputRange, ProAddress, ProCascader, ProCertNo, ProCertValidity, ProCombination, ProModalSelect, ProNumberRange, ProRangeBox, ProTimeLimit, transferAddressInfoToRegion, ProUpload, ProTreeModal, ProTree, EnumSelect } from './components';
|
21
21
|
import RenderFields from './components/render/RenderFields';
|
22
|
-
import { useProConfig
|
22
|
+
import { useProConfig } from '../ProConfigProvider';
|
23
23
|
import { getLayout, splitNameStr, useControlled, initialValuesToNames, filterInternalFields } from './utils/index';
|
24
24
|
import { useForm } from './utils/useForm';
|
25
25
|
import { useFieldProps } from './utils/useFieldProps';
|
26
26
|
import locale from '../locale';
|
27
27
|
import useWatch from './utils/useWatch';
|
28
|
+
import { useContextForms, useForms } from '../ProConfigProvider/FormsContext';
|
28
29
|
var ProForm = function ProForm(props, ref) {
|
29
|
-
var
|
30
|
+
var _localStorage, _ref;
|
30
31
|
var _props$mode = props.mode,
|
31
32
|
mode = _props$mode === void 0 ? 'search' : _props$mode,
|
32
33
|
span = props.span,
|
@@ -69,17 +70,15 @@ var ProForm = function ProForm(props, ref) {
|
|
69
70
|
_props$optimize = props.optimize,
|
70
71
|
optimize = _props$optimize === void 0 ? false : _props$optimize,
|
71
72
|
otherProps = _objectWithoutProperties(props, _excluded);
|
72
|
-
var
|
73
|
-
|
74
|
-
dispatch = _useProConfig.dispatch;
|
75
|
-
var config = state.ProForm,
|
76
|
-
forms = state.forms;
|
77
|
-
var _useForm = useForm((_forms$formKey = forms[formKey]) !== null && _forms$formKey !== void 0 ? _forms$formKey : originForm, {
|
73
|
+
var config = useProConfig('ProForm');
|
74
|
+
var _useForm = useForm(originForm, {
|
78
75
|
scrollToError: scrollToError,
|
79
|
-
optimize: optimize
|
76
|
+
optimize: optimize,
|
77
|
+
formKey: formKey
|
80
78
|
}),
|
81
79
|
_useForm2 = _slicedToArray(_useForm, 1),
|
82
80
|
form = _useForm2[0];
|
81
|
+
// const form = useForms(formKey, originForm, { scrollToError, optimize, formKey });
|
83
82
|
var _useControlled = useControlled({
|
84
83
|
value: expandOpen,
|
85
84
|
onChange: expandOpenChange
|
@@ -88,32 +87,22 @@ var ProForm = function ProForm(props, ref) {
|
|
88
87
|
openState = _useControlled2[0],
|
89
88
|
setOpenState = _useControlled2[1];
|
90
89
|
// 把表单实例存入表单组
|
91
|
-
useMemo(
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
delete forms[formKey];
|
108
|
-
dispatch({
|
109
|
-
type: 'set',
|
110
|
-
payload: {
|
111
|
-
forms: _objectSpread({}, forms)
|
112
|
-
}
|
113
|
-
});
|
114
|
-
}
|
115
|
-
};
|
116
|
-
}, [formKey, form]);
|
90
|
+
// useMemo(() => {
|
91
|
+
// if (formKey && forms[formKey] !== form) {
|
92
|
+
// forms[formKey] = form;
|
93
|
+
// // fix: Cannot update a component (`ProConfigProvider`) while rendering a different component (`ForwardRef(ProForm)`).
|
94
|
+
// setTimeout(() => {
|
95
|
+
// dispatch({ type: 'set', payload: { forms: { ...forms } } });
|
96
|
+
// }, 300);
|
97
|
+
// }
|
98
|
+
// // 销毁
|
99
|
+
// return () => {
|
100
|
+
// if (formKey && forms[formKey]) {
|
101
|
+
// delete forms[formKey];
|
102
|
+
// dispatch({ type: 'set', payload: { forms: { ...forms } } });
|
103
|
+
// }
|
104
|
+
// };
|
105
|
+
// }, [formKey, form]);
|
117
106
|
var _getLayout = getLayout({
|
118
107
|
span: span,
|
119
108
|
form: form
|
@@ -310,6 +299,7 @@ export var ProFormProvider = function ProFormProvider(props) {
|
|
310
299
|
};
|
311
300
|
ProFormForward.Provider = ProFormProvider; // 包装Provider
|
312
301
|
ProFormForward.useFieldProps = useFieldProps; // 获取每个字段的其他参数 -otherProps
|
302
|
+
ProFormForward.useForms = useForms; // 获取上下文中的指定表单实例 如果不存在则会创建
|
313
303
|
ProFormForward.useContextForms = useContextForms; // 获取 ProConfigProvider中的表单实例map
|
314
304
|
// 内置组合
|
315
305
|
ProFormForward.ProCascader = ProCascader;
|
@@ -1,15 +1,16 @@
|
|
1
1
|
import { FormInstance } from 'antd';
|
2
2
|
import { NamePath } from 'antd/es/form/interface';
|
3
3
|
import { ValuedNotifyInfo } from 'rc-field-form/es/interface';
|
4
|
-
type ModifiedFormInstance<T> = FormInstance<T> & {
|
4
|
+
export type ModifiedFormInstance<T> = FormInstance<T> & {
|
5
5
|
isModified?: boolean;
|
6
6
|
/** 默认清空设置值的报错状态 */
|
7
7
|
setFieldValue: (name: NamePath, value: any, info?: ValuedNotifyInfo) => void;
|
8
|
+
formKey?: string;
|
8
9
|
_init?: boolean;
|
9
10
|
};
|
10
|
-
interface FormInstanceOption {
|
11
|
+
export interface FormInstanceOption {
|
11
12
|
scrollToError?: boolean;
|
12
13
|
optimize?: boolean;
|
14
|
+
formKey?: string;
|
13
15
|
}
|
14
16
|
export declare const useForm: <T>(originForm?: FormInstanceOption | ModifiedFormInstance<T>, options?: FormInstanceOption) => [ModifiedFormInstance<T>];
|
15
|
-
export {};
|
@@ -5,8 +5,10 @@ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
5
5
|
import "antd/es/form/style";
|
6
6
|
import _Form from "antd/es/form";
|
7
7
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
8
|
+
import { useContext } from 'react';
|
8
9
|
import { filterInternalFields } from './index';
|
9
10
|
import { handleScrollToError } from '../../ProEditTable/utils/tools';
|
11
|
+
import { FormsContext } from '../../ProConfigProvider/FormsContext';
|
10
12
|
export var useForm = function useForm(originForm, options) {
|
11
13
|
// 如果没有form实例可以直接把options放在第一个参数位置
|
12
14
|
// @ts-ignore
|
@@ -17,10 +19,17 @@ export var useForm = function useForm(originForm, options) {
|
|
17
19
|
var _ref = _options || {},
|
18
20
|
_ref$scrollToError = _ref.scrollToError,
|
19
21
|
scrollToError = _ref$scrollToError === void 0 ? true : _ref$scrollToError,
|
20
|
-
optimize = _ref.optimize
|
21
|
-
|
22
|
+
optimize = _ref.optimize,
|
23
|
+
formKey = _ref.formKey;
|
24
|
+
// formKey全局共享逻辑
|
25
|
+
var forms = useContext(FormsContext);
|
26
|
+
var _Form$useForm = _Form.useForm(forms[formKey] || _originForm),
|
22
27
|
_Form$useForm2 = _slicedToArray(_Form$useForm, 1),
|
23
28
|
form = _Form$useForm2[0];
|
29
|
+
if (formKey && forms[formKey] !== form) {
|
30
|
+
forms[formKey] = form;
|
31
|
+
form.formKey = formKey;
|
32
|
+
}
|
24
33
|
var getFieldsValue = form.getFieldsValue,
|
25
34
|
validateFields = form.validateFields,
|
26
35
|
isModified = form.isModified,
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { ModifiedFormInstance } from '../ProForm/utils/useForm';
|
3
|
+
type Forms = Record<string, ModifiedFormInstance<any>>;
|
4
|
+
export declare const FormsContext: React.Context<Forms>;
|
5
|
+
/**
|
6
|
+
* @param formKey 表单实例key
|
7
|
+
* @param formIst form实例, 如果传了会把传入的实例存入全局
|
8
|
+
* @returns 没有入参: 返回表单实例但是不存入全局
|
9
|
+
* 有formKey: 取全局中的表单实例返回, 如果不存在则创建后返回
|
10
|
+
*/
|
11
|
+
export declare const useForms: () => Forms;
|
12
|
+
/** 获取所有表单实例 */
|
13
|
+
export declare const useContextForms: () => Forms;
|
14
|
+
declare const FormsProvider: React.FC;
|
15
|
+
export default FormsProvider;
|
@@ -0,0 +1,39 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports.useForms = exports.useContextForms = exports.default = exports.FormsContext = void 0;
|
8
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
10
|
+
var FormsContext = exports.FormsContext = /*#__PURE__*/_react.default.createContext({});
|
11
|
+
/**
|
12
|
+
* @param formKey 表单实例key
|
13
|
+
* @param formIst form实例, 如果传了会把传入的实例存入全局
|
14
|
+
* @returns 没有入参: 返回表单实例但是不存入全局
|
15
|
+
* 有formKey: 取全局中的表单实例返回, 如果不存在则创建后返回
|
16
|
+
*/
|
17
|
+
var useForms = exports.useForms = function useForms() {
|
18
|
+
var forms = (0, _react.useContext)(FormsContext);
|
19
|
+
return forms;
|
20
|
+
};
|
21
|
+
/** 获取所有表单实例 */
|
22
|
+
var useContextForms = exports.useContextForms = function useContextForms() {
|
23
|
+
var forms = (0, _react.useContext)(FormsContext);
|
24
|
+
return forms;
|
25
|
+
};
|
26
|
+
var FormsProvider = function FormsProvider(props) {
|
27
|
+
var formsRef = (0, _react.useRef)({});
|
28
|
+
(0, _react.useEffect)(function () {
|
29
|
+
// 销毁
|
30
|
+
return function () {
|
31
|
+
formsRef.current = {};
|
32
|
+
};
|
33
|
+
}, []);
|
34
|
+
return (0, _jsxRuntime.jsx)(FormsContext.Provider, {
|
35
|
+
value: formsRef.current,
|
36
|
+
children: props.children
|
37
|
+
});
|
38
|
+
};
|
39
|
+
var _default = exports.default = FormsProvider;
|
@@ -20,7 +20,6 @@ interface ConfigContext {
|
|
20
20
|
export declare const ProConfigContext: React.Context<ConfigContext>;
|
21
21
|
export declare function useProConfig(): ConfigContext;
|
22
22
|
export declare function useProConfig(name: keyof ConfigContext['state']): ConfigContext['state'][keyof ConfigContext['state']];
|
23
|
-
export declare function useContextForms(): Record<string, FormInstance<any>>;
|
24
23
|
type ActionsType = 'set' | 'setProEnum' | 'setProEnumDic' | 'setWithLocal';
|
25
24
|
interface Actions {
|
26
25
|
type: ActionsType;
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
7
7
|
});
|
8
8
|
exports.default = exports.ProConfigProvider = exports.ProConfigContext = void 0;
|
9
|
-
exports.useContextForms = useContextForms;
|
10
9
|
exports.useProConfig = useProConfig;
|
11
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
12
11
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
@@ -18,6 +17,7 @@ var _en_US = _interopRequireDefault(require("antd/es/locale/en_US"));
|
|
18
17
|
var _merge = _interopRequireDefault(require("lodash/merge"));
|
19
18
|
var _useEnumRequest = _interopRequireDefault(require("../ProEnum/hooks/useEnumRequest"));
|
20
19
|
var _locale = require("../locale");
|
20
|
+
var _FormsContext = _interopRequireDefault(require("./FormsContext"));
|
21
21
|
var initialState = {
|
22
22
|
ProEnum: {
|
23
23
|
dics: {}
|
@@ -44,11 +44,6 @@ function useProConfig(name) {
|
|
44
44
|
var config = (0, _react.useContext)(ProConfigContext);
|
45
45
|
return name ? config.state[name] : config;
|
46
46
|
}
|
47
|
-
function useContextForms() {
|
48
|
-
var _config$state;
|
49
|
-
var config = (0, _react.useContext)(ProConfigContext);
|
50
|
-
return (_config$state = config.state) === null || _config$state === void 0 ? void 0 : _config$state.forms;
|
51
|
-
}
|
52
47
|
var antdLangMap = {
|
53
48
|
'zh-CN': _zh_CN.default,
|
54
49
|
'en-US': _en_US.default // en-US
|
@@ -114,8 +109,10 @@ var ProConfigProvider = exports.ProConfigProvider = function ProConfigProvider(p
|
|
114
109
|
},
|
115
110
|
children: (0, _jsxRuntime.jsx)(_antd.ConfigProvider, {
|
116
111
|
locale: antdLangMap[lang],
|
117
|
-
children: (0, _jsxRuntime.jsx)(
|
118
|
-
children:
|
112
|
+
children: (0, _jsxRuntime.jsx)(_FormsContext.default, {
|
113
|
+
children: (0, _jsxRuntime.jsx)("div", {
|
114
|
+
children: props.children
|
115
|
+
})
|
119
116
|
})
|
120
117
|
})
|
121
118
|
});
|
package/lib/ProForm/index.js
CHANGED
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
7
7
|
});
|
8
8
|
exports.default = exports.ProFormProvider = void 0;
|
9
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
9
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
10
11
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
11
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
12
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
13
13
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
14
14
|
var _jsxRuntime = require("react/jsx-runtime");
|
@@ -25,9 +25,10 @@ var _useForm3 = require("./utils/useForm");
|
|
25
25
|
var _useFieldProps = require("./utils/useFieldProps");
|
26
26
|
var _locale = _interopRequireDefault(require("../locale"));
|
27
27
|
var _useWatch = _interopRequireDefault(require("./utils/useWatch"));
|
28
|
+
var _FormsContext = require("../ProConfigProvider/FormsContext");
|
28
29
|
var _excluded = ["mode", "span", "disabled", "isView", "columns", "footer", "onOk", "okText", "onCancel", "confirmLoading", "cancelText", "form", "children", "rowProps", "className", "expand", "expandOpen", "expandOpenChange", "viewEmpty", "labelAlign", "labelWidth", "onValuesChange", "onFinish", "diffConfig", "submitOnEnter", "clearNotShow", "initialValues", "requiredOnView", "formId", "required", "formKey", "globalControl", "scrollToError", "optimize"];
|
29
30
|
var ProForm = function ProForm(props, ref) {
|
30
|
-
var
|
31
|
+
var _localStorage, _ref;
|
31
32
|
var _props$mode = props.mode,
|
32
33
|
mode = _props$mode === void 0 ? 'search' : _props$mode,
|
33
34
|
span = props.span,
|
@@ -70,17 +71,15 @@ var ProForm = function ProForm(props, ref) {
|
|
70
71
|
_props$optimize = props.optimize,
|
71
72
|
optimize = _props$optimize === void 0 ? false : _props$optimize,
|
72
73
|
otherProps = (0, _objectWithoutProperties2.default)(props, _excluded);
|
73
|
-
var
|
74
|
-
|
75
|
-
dispatch = _useProConfig.dispatch;
|
76
|
-
var config = state.ProForm,
|
77
|
-
forms = state.forms;
|
78
|
-
var _useForm = (0, _useForm3.useForm)((_forms$formKey = forms[formKey]) !== null && _forms$formKey !== void 0 ? _forms$formKey : originForm, {
|
74
|
+
var config = (0, _ProConfigProvider.useProConfig)('ProForm');
|
75
|
+
var _useForm = (0, _useForm3.useForm)(originForm, {
|
79
76
|
scrollToError: scrollToError,
|
80
|
-
optimize: optimize
|
77
|
+
optimize: optimize,
|
78
|
+
formKey: formKey
|
81
79
|
}),
|
82
80
|
_useForm2 = (0, _slicedToArray2.default)(_useForm, 1),
|
83
81
|
form = _useForm2[0];
|
82
|
+
// const form = useForms(formKey, originForm, { scrollToError, optimize, formKey });
|
84
83
|
var _useControlled = (0, _index.useControlled)({
|
85
84
|
value: expandOpen,
|
86
85
|
onChange: expandOpenChange
|
@@ -89,32 +88,22 @@ var ProForm = function ProForm(props, ref) {
|
|
89
88
|
openState = _useControlled2[0],
|
90
89
|
setOpenState = _useControlled2[1];
|
91
90
|
// 把表单实例存入表单组
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
delete forms[formKey];
|
109
|
-
dispatch({
|
110
|
-
type: 'set',
|
111
|
-
payload: {
|
112
|
-
forms: (0, _objectSpread2.default)({}, forms)
|
113
|
-
}
|
114
|
-
});
|
115
|
-
}
|
116
|
-
};
|
117
|
-
}, [formKey, form]);
|
91
|
+
// useMemo(() => {
|
92
|
+
// if (formKey && forms[formKey] !== form) {
|
93
|
+
// forms[formKey] = form;
|
94
|
+
// // fix: Cannot update a component (`ProConfigProvider`) while rendering a different component (`ForwardRef(ProForm)`).
|
95
|
+
// setTimeout(() => {
|
96
|
+
// dispatch({ type: 'set', payload: { forms: { ...forms } } });
|
97
|
+
// }, 300);
|
98
|
+
// }
|
99
|
+
// // 销毁
|
100
|
+
// return () => {
|
101
|
+
// if (formKey && forms[formKey]) {
|
102
|
+
// delete forms[formKey];
|
103
|
+
// dispatch({ type: 'set', payload: { forms: { ...forms } } });
|
104
|
+
// }
|
105
|
+
// };
|
106
|
+
// }, [formKey, form]);
|
118
107
|
var _getLayout = (0, _index.getLayout)({
|
119
108
|
span: span,
|
120
109
|
form: form
|
@@ -311,7 +300,8 @@ var ProFormProvider = exports.ProFormProvider = function ProFormProvider(props)
|
|
311
300
|
};
|
312
301
|
ProFormForward.Provider = ProFormProvider; // 包装Provider
|
313
302
|
ProFormForward.useFieldProps = _useFieldProps.useFieldProps; // 获取每个字段的其他参数 -otherProps
|
314
|
-
ProFormForward.
|
303
|
+
ProFormForward.useForms = _FormsContext.useForms; // 获取上下文中的指定表单实例 如果不存在则会创建
|
304
|
+
ProFormForward.useContextForms = _FormsContext.useContextForms; // 获取 ProConfigProvider中的表单实例map
|
315
305
|
// 内置组合
|
316
306
|
ProFormForward.ProCascader = _components.ProCascader;
|
317
307
|
ProFormForward.ProCombination = _components.ProCombination;
|
@@ -1,15 +1,16 @@
|
|
1
1
|
import { FormInstance } from 'antd';
|
2
2
|
import { NamePath } from 'antd/es/form/interface';
|
3
3
|
import { ValuedNotifyInfo } from 'rc-field-form/es/interface';
|
4
|
-
type ModifiedFormInstance<T> = FormInstance<T> & {
|
4
|
+
export type ModifiedFormInstance<T> = FormInstance<T> & {
|
5
5
|
isModified?: boolean;
|
6
6
|
/** 默认清空设置值的报错状态 */
|
7
7
|
setFieldValue: (name: NamePath, value: any, info?: ValuedNotifyInfo) => void;
|
8
|
+
formKey?: string;
|
8
9
|
_init?: boolean;
|
9
10
|
};
|
10
|
-
interface FormInstanceOption {
|
11
|
+
export interface FormInstanceOption {
|
11
12
|
scrollToError?: boolean;
|
12
13
|
optimize?: boolean;
|
14
|
+
formKey?: string;
|
13
15
|
}
|
14
16
|
export declare const useForm: <T>(originForm?: FormInstanceOption | ModifiedFormInstance<T>, options?: FormInstanceOption) => [ModifiedFormInstance<T>];
|
15
|
-
export {};
|
@@ -11,8 +11,10 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
|
|
11
11
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
12
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
13
13
|
var _antd = require("antd");
|
14
|
+
var _react = require("react");
|
14
15
|
var _index = require("./index");
|
15
16
|
var _tools = require("../../ProEditTable/utils/tools");
|
17
|
+
var _FormsContext = require("../../ProConfigProvider/FormsContext");
|
16
18
|
var useForm = exports.useForm = function useForm(originForm, options) {
|
17
19
|
// 如果没有form实例可以直接把options放在第一个参数位置
|
18
20
|
// @ts-ignore
|
@@ -23,10 +25,17 @@ var useForm = exports.useForm = function useForm(originForm, options) {
|
|
23
25
|
var _ref = _options || {},
|
24
26
|
_ref$scrollToError = _ref.scrollToError,
|
25
27
|
scrollToError = _ref$scrollToError === void 0 ? true : _ref$scrollToError,
|
26
|
-
optimize = _ref.optimize
|
27
|
-
|
28
|
+
optimize = _ref.optimize,
|
29
|
+
formKey = _ref.formKey;
|
30
|
+
// formKey全局共享逻辑
|
31
|
+
var forms = (0, _react.useContext)(_FormsContext.FormsContext);
|
32
|
+
var _Form$useForm = _antd.Form.useForm(forms[formKey] || _originForm),
|
28
33
|
_Form$useForm2 = (0, _slicedToArray2.default)(_Form$useForm, 1),
|
29
34
|
form = _Form$useForm2[0];
|
35
|
+
if (formKey && forms[formKey] !== form) {
|
36
|
+
forms[formKey] = form;
|
37
|
+
form.formKey = formKey;
|
38
|
+
}
|
30
39
|
var getFieldsValue = form.getFieldsValue,
|
31
40
|
validateFields = form.validateFields,
|
32
41
|
isModified = form.isModified,
|
package/package.json
CHANGED