@zat-design/sisyphus-react 3.9.5 → 3.9.6-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.
Files changed (50) hide show
  1. package/.vscode/extensions.json +5 -0
  2. package/dist/index.esm.css +52 -6
  3. package/dist/less.esm.css +52 -6
  4. package/es/FormsProvider/index.d.ts +15 -0
  5. package/es/FormsProvider/index.js +32 -0
  6. package/es/ProConfigProvider/index.d.ts +0 -1
  7. package/es/ProConfigProvider/index.js +0 -5
  8. package/es/ProEditTable/utils/diffOriginal.js +11 -8
  9. package/es/ProForm/components/render/Render.js +4 -4
  10. package/es/ProForm/index.js +12 -38
  11. package/es/ProForm/style/index.less +1 -0
  12. package/es/ProForm/utils/diffOriginal.js +14 -19
  13. package/es/ProForm/utils/useForm.d.ts +4 -3
  14. package/es/ProForm/utils/useForm.js +12 -3
  15. package/es/ProLayout/components/ProHeader/PropTypes.d.ts +8 -0
  16. package/es/ProLayout/components/ProHeader/index.js +94 -28
  17. package/es/ProLayout/components/ProHeader/style/index.less +52 -6
  18. package/es/ProLayout/components/ProHeader/utils/index.d.ts +5 -0
  19. package/es/ProLayout/components/ProHeader/utils/index.js +14 -0
  20. package/es/ProLayout/style/index.less +1 -1
  21. package/es/ProSelect/index.js +1 -1
  22. package/es/ProTreeModal/components/Trigger.js +4 -0
  23. package/es/index.d.ts +1 -0
  24. package/es/index.js +1 -0
  25. package/es/utils/index.d.ts +4 -1
  26. package/es/utils/index.js +4 -1
  27. package/lib/FormsProvider/index.d.ts +15 -0
  28. package/lib/FormsProvider/index.js +39 -0
  29. package/lib/ProConfigProvider/index.d.ts +0 -1
  30. package/lib/ProConfigProvider/index.js +0 -6
  31. package/lib/ProEditTable/utils/diffOriginal.js +11 -8
  32. package/lib/ProForm/components/render/Render.js +4 -4
  33. package/lib/ProForm/index.js +11 -37
  34. package/lib/ProForm/style/index.less +1 -0
  35. package/lib/ProForm/utils/diffOriginal.js +14 -19
  36. package/lib/ProForm/utils/useForm.d.ts +4 -3
  37. package/lib/ProForm/utils/useForm.js +12 -3
  38. package/lib/ProLayout/components/ProHeader/PropTypes.d.ts +8 -0
  39. package/lib/ProLayout/components/ProHeader/index.js +90 -24
  40. package/lib/ProLayout/components/ProHeader/style/index.less +52 -6
  41. package/lib/ProLayout/components/ProHeader/utils/index.d.ts +5 -0
  42. package/lib/ProLayout/components/ProHeader/utils/index.js +20 -0
  43. package/lib/ProLayout/style/index.less +1 -1
  44. package/lib/ProSelect/index.js +1 -1
  45. package/lib/ProTreeModal/components/Trigger.js +4 -0
  46. package/lib/index.d.ts +1 -0
  47. package/lib/index.js +8 -0
  48. package/lib/utils/index.d.ts +4 -1
  49. package/lib/utils/index.js +4 -1
  50. package/package.json +1 -1
@@ -0,0 +1,5 @@
1
+ {
2
+ "recommendations": [
3
+ "kisstkondoros.vscode-codemetrics"
4
+ ]
5
+ }
@@ -854,7 +854,7 @@
854
854
  background: var(--zaui-disabled-bg);
855
855
  }
856
856
  .pro-header {
857
- padding: 16px 0 0 0 !important;
857
+ padding: 10px 0 0 0 !important;
858
858
  background-color: var(--zaui-base-bg, #ffffff);
859
859
  -webkit-box-shadow: 2px 3px 8px 0px rgba(0, 55, 93, 0.1);
860
860
  box-shadow: 2px 3px 8px 0px rgba(0, 55, 93, 0.1);
@@ -881,9 +881,45 @@
881
881
  .pro-header.pro-header-fixed.pro-header-no-describe .pro-header-top {
882
882
  padding-bottom: calc(var(--zaui-space-size-md, 16px) * var(--zaui-size, 1) - var(--zaui-space-size-xs, 4px) * var(--zaui-size, 1));
883
883
  }
884
+ .pro-header .pro-header-describe {
885
+ -webkit-transition: height 0.2s ease-in-out;
886
+ transition: height 0.2s ease-in-out;
887
+ }
884
888
  .pro-header .pro-header-describe a {
885
889
  color: var(--zaui-link, #006aff);
886
890
  }
891
+ .pro-header .pro-header-describe .pro-header-describe-items-calc {
892
+ position: relative;
893
+ }
894
+ .pro-header .pro-header-describe.pro-header-describe-hidden {
895
+ height: 0;
896
+ padding: 0;
897
+ overflow: hidden;
898
+ border: 0;
899
+ }
900
+ .pro-header .pro-header-describe .ant-space .pro-header-describe-label {
901
+ font-weight: normal;
902
+ }
903
+ .pro-header .pro-header-describe .ant-space .pro-header-describe-value {
904
+ font-weight: 600;
905
+ }
906
+ .pro-header .pro-header-describe .ant-space .pro-header-describe-value .ant-space-item {
907
+ font-weight: 600;
908
+ }
909
+ .pro-header .pro-header-describe .ant-space .pro-header-describe-value .pro-header-describe-items span:first-child {
910
+ margin-right: 2px;
911
+ }
912
+ .pro-header .pro-header-describe .ant-space .pro-header-describe-value .pro-header-describe-items .pro-header-describe-items-omit {
913
+ position: absolute;
914
+ right: 0;
915
+ background: #fff;
916
+ letter-spacing: 2px;
917
+ }
918
+ .pro-header .pro-header-describe .ant-space .pro-header-describe-value .pro-header-describe-items.pro-header-describe-items-more .pro-header-tag {
919
+ padding: 0;
920
+ background: transparent;
921
+ color: #333;
922
+ }
887
923
  .pro-header .pro-header-copy {
888
924
  display: -webkit-box;
889
925
  display: -webkit-flex;
@@ -1167,7 +1203,13 @@
1167
1203
  font-size: var(--zaui-font-size, 14px);
1168
1204
  }
1169
1205
  .pro-header .pro-header-describe li {
1170
- margin-left: var(--zaui-space-card, 32px);
1206
+ -webkit-box-flex: 0;
1207
+ -webkit-flex: 0 0 auto;
1208
+ -ms-flex: 0 0 auto;
1209
+ flex: 0 0 auto;
1210
+ white-space: nowrap;
1211
+ overflow: hidden;
1212
+ text-overflow: ellipsis;
1171
1213
  }
1172
1214
  .pro-header .pro-header-describe li.pro-header-only-tag {
1173
1215
  margin-left: var(--zaui-space-size-sm, 8px);
@@ -1175,9 +1217,6 @@
1175
1217
  .pro-header .pro-header-describe li.pro-header-only-tag span:first-child {
1176
1218
  margin-right: 0;
1177
1219
  }
1178
- .pro-header .pro-header-describe li:first-child {
1179
- margin-left: 0;
1180
- }
1181
1220
  .pro-header .pro-header-describe li span {
1182
1221
  color: #0a0a0a;
1183
1222
  font-weight: 400;
@@ -1192,6 +1231,12 @@
1192
1231
  .pro-header .pro-header-describe li span:last-child .pro-header-tag {
1193
1232
  margin-left: 4px;
1194
1233
  }
1234
+ .pro-header-describe-items-tip {
1235
+ max-width: 600px;
1236
+ }
1237
+ .pro-header-describe-items-tip .pro-header-describe-items-tip-value {
1238
+ margin-bottom: var(--zaui-space-size-sm, 8px);
1239
+ }
1195
1240
  @media (max-width: 1366px) {
1196
1241
  .pro-header-describe li span:last-child {
1197
1242
  max-width: 350px;
@@ -1253,7 +1298,7 @@
1253
1298
  border-radius: 0 0 var(--zaui-border-radius, 8px) var(--zaui-border-radius, 8px);
1254
1299
  }
1255
1300
  .pro-layout.pro-layout-light .pro-header.pro-header-no-describe {
1256
- padding: var(--zaui-space-size-md, 16px) !important;
1301
+ padding: 10px var(--zaui-space-size-md, 16px) !important;
1257
1302
  }
1258
1303
  .pro-layout.pro-layout-light .pro-header.pro-header-no-describe .pro-header-top {
1259
1304
  padding-bottom: 0;
@@ -3220,6 +3265,7 @@ span.ant-input-group-compact.pro-range-limit .forever-checkbox {
3220
3265
  width: -webkit-max-content;
3221
3266
  width: -moz-max-content;
3222
3267
  width: max-content;
3268
+ max-width: 100%;
3223
3269
  }
3224
3270
  .original-value-tooltip .changed-tooltip .original-value-container .ant-space-item:nth-child(1) {
3225
3271
  white-space: nowrap;
package/dist/less.esm.css CHANGED
@@ -854,7 +854,7 @@
854
854
  background: var(--zaui-disabled-bg);
855
855
  }
856
856
  .pro-header {
857
- padding: 16px 0 0 0 !important;
857
+ padding: 10px 0 0 0 !important;
858
858
  background-color: var(--zaui-base-bg, #ffffff);
859
859
  -webkit-box-shadow: 2px 3px 8px 0px rgba(0, 55, 93, 0.1);
860
860
  box-shadow: 2px 3px 8px 0px rgba(0, 55, 93, 0.1);
@@ -881,9 +881,45 @@
881
881
  .pro-header.pro-header-fixed.pro-header-no-describe .pro-header-top {
882
882
  padding-bottom: calc(var(--zaui-space-size-md, 16px) * var(--zaui-size, 1) - var(--zaui-space-size-xs, 4px) * var(--zaui-size, 1));
883
883
  }
884
+ .pro-header .pro-header-describe {
885
+ -webkit-transition: height 0.2s ease-in-out;
886
+ transition: height 0.2s ease-in-out;
887
+ }
884
888
  .pro-header .pro-header-describe a {
885
889
  color: var(--zaui-link, #006aff);
886
890
  }
891
+ .pro-header .pro-header-describe .pro-header-describe-items-calc {
892
+ position: relative;
893
+ }
894
+ .pro-header .pro-header-describe.pro-header-describe-hidden {
895
+ height: 0;
896
+ padding: 0;
897
+ overflow: hidden;
898
+ border: 0;
899
+ }
900
+ .pro-header .pro-header-describe .ant-space .pro-header-describe-label {
901
+ font-weight: normal;
902
+ }
903
+ .pro-header .pro-header-describe .ant-space .pro-header-describe-value {
904
+ font-weight: 600;
905
+ }
906
+ .pro-header .pro-header-describe .ant-space .pro-header-describe-value .ant-space-item {
907
+ font-weight: 600;
908
+ }
909
+ .pro-header .pro-header-describe .ant-space .pro-header-describe-value .pro-header-describe-items span:first-child {
910
+ margin-right: 2px;
911
+ }
912
+ .pro-header .pro-header-describe .ant-space .pro-header-describe-value .pro-header-describe-items .pro-header-describe-items-omit {
913
+ position: absolute;
914
+ right: 0;
915
+ background: #fff;
916
+ letter-spacing: 2px;
917
+ }
918
+ .pro-header .pro-header-describe .ant-space .pro-header-describe-value .pro-header-describe-items.pro-header-describe-items-more .pro-header-tag {
919
+ padding: 0;
920
+ background: transparent;
921
+ color: #333;
922
+ }
887
923
  .pro-header .pro-header-copy {
888
924
  display: -webkit-box;
889
925
  display: -webkit-flex;
@@ -1167,7 +1203,13 @@
1167
1203
  font-size: var(--zaui-font-size, 14px);
1168
1204
  }
1169
1205
  .pro-header .pro-header-describe li {
1170
- margin-left: var(--zaui-space-card, 32px);
1206
+ -webkit-box-flex: 0;
1207
+ -webkit-flex: 0 0 auto;
1208
+ -ms-flex: 0 0 auto;
1209
+ flex: 0 0 auto;
1210
+ white-space: nowrap;
1211
+ overflow: hidden;
1212
+ text-overflow: ellipsis;
1171
1213
  }
1172
1214
  .pro-header .pro-header-describe li.pro-header-only-tag {
1173
1215
  margin-left: var(--zaui-space-size-sm, 8px);
@@ -1175,9 +1217,6 @@
1175
1217
  .pro-header .pro-header-describe li.pro-header-only-tag span:first-child {
1176
1218
  margin-right: 0;
1177
1219
  }
1178
- .pro-header .pro-header-describe li:first-child {
1179
- margin-left: 0;
1180
- }
1181
1220
  .pro-header .pro-header-describe li span {
1182
1221
  color: #0a0a0a;
1183
1222
  font-weight: 400;
@@ -1192,6 +1231,12 @@
1192
1231
  .pro-header .pro-header-describe li span:last-child .pro-header-tag {
1193
1232
  margin-left: 4px;
1194
1233
  }
1234
+ .pro-header-describe-items-tip {
1235
+ max-width: 600px;
1236
+ }
1237
+ .pro-header-describe-items-tip .pro-header-describe-items-tip-value {
1238
+ margin-bottom: var(--zaui-space-size-sm, 8px);
1239
+ }
1195
1240
  @media (max-width: 1366px) {
1196
1241
  .pro-header-describe li span:last-child {
1197
1242
  max-width: 350px;
@@ -1253,7 +1298,7 @@
1253
1298
  border-radius: 0 0 var(--zaui-border-radius, 8px) var(--zaui-border-radius, 8px);
1254
1299
  }
1255
1300
  .pro-layout.pro-layout-light .pro-header.pro-header-no-describe {
1256
- padding: var(--zaui-space-size-md, 16px) !important;
1301
+ padding: 10px var(--zaui-space-size-md, 16px) !important;
1257
1302
  }
1258
1303
  .pro-layout.pro-layout-light .pro-header.pro-header-no-describe .pro-header-top {
1259
1304
  padding-bottom: 0;
@@ -3220,6 +3265,7 @@ span.ant-input-group-compact.pro-range-limit .forever-checkbox {
3220
3265
  width: -webkit-max-content;
3221
3266
  width: -moz-max-content;
3222
3267
  width: max-content;
3268
+ max-width: 100%;
3223
3269
  }
3224
3270
  .original-value-tooltip .changed-tooltip .original-value-container .ant-space-item:nth-child(1) {
3225
3271
  white-space: nowrap;
@@ -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;
@@ -35,11 +35,6 @@ export function useProConfig(name) {
35
35
  var config = useContext(ProConfigContext);
36
36
  return name ? config.state[name] : config;
37
37
  }
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
38
  var antdLangMap = {
44
39
  'zh-CN': zhCN,
45
40
  'en-US': enUS // en-US
@@ -46,14 +46,17 @@ export var diffOriginal = function diffOriginal(params) {
46
46
  return 'add';
47
47
  }
48
48
  if (Array.isArray(_originalValue)) {
49
- var isSame = _originalValue.every(function (valueItem, index) {
50
- // 如果两个值有一个不是空值, 则进行深比较
51
- if (!isEmpty(value === null || value === void 0 ? void 0 : value[index]) || !isEmpty(valueItem)) {
52
- return isEqual(value === null || value === void 0 ? void 0 : value[index], valueItem);
53
- }
54
- return true;
55
- });
56
- return isSame ? 'same' : 'changed';
49
+ if ((_originalValue === null || _originalValue === void 0 ? void 0 : _originalValue.length) === (_value === null || _value === void 0 ? void 0 : _value.length)) {
50
+ var isSame = _originalValue.every(function (valueItem, index) {
51
+ // 如果两个值有一个不是空值, 则进行深比较
52
+ if (!isEmpty(value === null || value === void 0 ? void 0 : value[index]) || !isEmpty(valueItem)) {
53
+ return isEqual(value === null || value === void 0 ? void 0 : value[index], valueItem);
54
+ }
55
+ return true;
56
+ });
57
+ return isSame ? 'same' : 'changed';
58
+ }
59
+ return 'changed';
57
60
  }
58
61
  if (!isEmpty(_originalValue) || !isEmpty(_value)) {
59
62
  return isEqual(_value, _originalValue) ? 'same' : 'changed';
@@ -409,7 +409,10 @@ var Render = function Render(props) {
409
409
  if (type === 'FormList') {
410
410
  lastComponentProps.disabled = lastDisabled;
411
411
  var lessMode = lastComponentProps.mode === 'less';
412
- child = _jsx(_Form.List, _objectSpread(_objectSpread({
412
+ colProps = _objectSpread(_objectSpread({}, colProps), {}, {
413
+ span: lessMode ? colProps.span : 24 // 默认占一行
414
+ });
415
+ return _jsx(_Form.List, _objectSpread(_objectSpread({
413
416
  name: _otherFormItemProps.name
414
417
  }, omit(_otherFormItemProps, ['rules'])), {}, {
415
418
  children: function children(fields, operation, meta) {
@@ -421,9 +424,6 @@ var Render = function Render(props) {
421
424
  }));
422
425
  }
423
426
  }));
424
- colProps = _objectSpread(_objectSpread({}, colProps), {}, {
425
- span: lessMode ? colProps.span : 24 // 默认占一行
426
- });
427
427
  }
428
428
  // 默认占据一行
429
429
  if (['ProCollapse', 'Container'].includes(type)) {
@@ -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, useContextForms } from '../ProConfigProvider';
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 FormsProvider, { useContextForms, useForms } from '../FormsProvider';
28
29
  var ProForm = function ProForm(props, ref) {
29
- var _forms$formKey, _localStorage, _ref;
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,14 +70,11 @@ 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 _useProConfig = useProConfig(),
73
- state = _useProConfig.state,
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];
@@ -87,33 +85,6 @@ var ProForm = function ProForm(props, ref) {
87
85
  _useControlled2 = _slicedToArray(_useControlled, 2),
88
86
  openState = _useControlled2[0],
89
87
  setOpenState = _useControlled2[1];
90
- // 把表单实例存入表单组
91
- useMemo(function () {
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(function () {
96
- dispatch({
97
- type: 'set',
98
- payload: {
99
- forms: _objectSpread({}, forms)
100
- }
101
- });
102
- }, 300);
103
- }
104
- // 销毁
105
- return function () {
106
- if (formKey && forms[formKey]) {
107
- delete forms[formKey];
108
- dispatch({
109
- type: 'set',
110
- payload: {
111
- forms: _objectSpread({}, forms)
112
- }
113
- });
114
- }
115
- };
116
- }, [formKey, form]);
117
88
  var _getLayout = getLayout({
118
89
  span: span,
119
90
  form: form
@@ -310,7 +281,10 @@ export var ProFormProvider = function ProFormProvider(props) {
310
281
  };
311
282
  ProFormForward.Provider = ProFormProvider; // 包装Provider
312
283
  ProFormForward.useFieldProps = useFieldProps; // 获取每个字段的其他参数 -otherProps
313
- ProFormForward.useContextForms = useContextForms; // 获取 ProConfigProvider中的表单实例map
284
+ // 表单实例共享
285
+ ProFormForward.FormsProvider = FormsProvider; // 表单实例共享Provider
286
+ ProFormForward.useForms = useForms; // 获取上下文中的共享的表单实例map
287
+ ProFormForward.useContextForms = useContextForms; // 获取上下文中的共享的表单实例map
314
288
  // 内置组合
315
289
  ProFormForward.ProCascader = ProCascader;
316
290
  ProFormForward.ProCombination = ProCombination;
@@ -495,6 +495,7 @@
495
495
 
496
496
  .original-value-tooltip{
497
497
  width: max-content;
498
+ max-width: 100%;
498
499
  .changed-tooltip {
499
500
  .original-value-container {
500
501
  .ant-space-item:nth-child(1) {
@@ -3,7 +3,13 @@ import { isEmpty } from '../../utils';
3
3
  // 过滤对象中undefined字段
4
4
  // 防止{a: '1'} {a: '1', b: undefined | null}被认为不相等
5
5
  var filterObject = function filterObject(data) {
6
- if (!isObject(data) || Array.isArray(data) || data === null) return data;
6
+ if (!isObject(data) || data === null) return data;
7
+ // ['1', undefined] ['1', ''] 视为相等
8
+ if (Array.isArray(data)) {
9
+ return data.map(function (item) {
10
+ return isEmpty(item) ? null : item;
11
+ });
12
+ }
7
13
  var resData = {};
8
14
  Object.keys(data).forEach(function (key) {
9
15
  if (!isEmpty(data[key])) {
@@ -31,22 +37,11 @@ export var diffOriginal = function diffOriginal(params) {
31
37
  }
32
38
  var _value = filterObject(value);
33
39
  var _originalValue = filterObject(originalValue);
34
- // 如果原始值为空 且当前有值的话 认为变更类型是新增
35
- if (isEmpty(_originalValue) && !isEmpty(_value)) {
36
- return 'add';
37
- }
38
- if (Array.isArray(_originalValue)) {
39
- var isSame = _originalValue.every(function (valueItem, index) {
40
- // 如果两个值有一个不是空值, 则进行深比较
41
- if (!isEmpty(value === null || value === void 0 ? void 0 : value[index]) || !isEmpty(valueItem)) {
42
- return isEqual(value === null || value === void 0 ? void 0 : value[index], valueItem);
43
- }
44
- return true;
45
- });
46
- return isSame ? 'same' : 'changed';
47
- }
48
- if (!isEmpty(_originalValue) || !isEmpty(_value)) {
49
- return isEqual(_value, _originalValue) ? 'same' : 'changed';
50
- }
51
- return 'same';
40
+ var isEmptyVal = isEmpty(_value);
41
+ var isEmptyOrg = isEmpty(_originalValue);
42
+ // 都为空视为相等
43
+ if (isEmptyOrg && isEmptyVal) return 'same';
44
+ // 如果原始值为空 且当前有值的话 视为新增
45
+ if (isEmptyOrg && !isEmptyVal) return 'add';
46
+ return isEqual(_value, _originalValue) ? 'same' : 'changed';
52
47
  };
@@ -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,22 +5,31 @@ 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 '../../FormsProvider';
10
12
  export var useForm = function useForm(originForm, options) {
11
13
  // 如果没有form实例可以直接把options放在第一个参数位置
12
14
  // @ts-ignore
13
15
  var _originForm = (originForm === null || originForm === void 0 ? void 0 : originForm._init) ? originForm : undefined;
14
16
  var _options =
15
17
  // @ts-ignore
16
- options || originForm && !(originForm === null || originForm === void 0 ? void 0 : originForm._init) ? originForm : undefined;
18
+ options || (originForm && !(originForm === null || originForm === void 0 ? void 0 : originForm._init) ? originForm : undefined);
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
- var _Form$useForm = _Form.useForm(_originForm),
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,
@@ -26,6 +26,14 @@ export interface DescribeColumnsProps {
26
26
  show?: boolean;
27
27
  link?: string;
28
28
  tag?: string | React.ReactNode | (string | React.ReactNode)[];
29
+ width?: string | number;
30
+ /** 多值配置 */
31
+ items?: {
32
+ copyable?: boolean;
33
+ value: string | React.ReactNode;
34
+ link?: string;
35
+ tag?: string | React.ReactNode | (string | React.ReactNode)[];
36
+ }[];
29
37
  }
30
38
  export interface ProHeaderProps {
31
39
  title?: string | React.ReactNode;