@sheinx/hooks 3.9.1 → 3.9.2-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 (25) hide show
  1. package/cjs/common/use-collapse-animation/use-collapse-animation.d.ts +19 -3
  2. package/cjs/common/use-collapse-animation/use-collapse-animation.d.ts.map +1 -1
  3. package/cjs/common/use-collapse-animation/use-collapse-animation.js +64 -9
  4. package/cjs/components/use-form/use-form-control/use-form-control.d.ts.map +1 -1
  5. package/cjs/components/use-form/use-form-control/use-form-control.js +8 -7
  6. package/cjs/components/use-form/use-form.d.ts.map +1 -1
  7. package/cjs/components/use-form/use-form.js +34 -17
  8. package/cjs/components/use-form/use-form.type.d.ts +1 -0
  9. package/cjs/components/use-form/use-form.type.d.ts.map +1 -1
  10. package/cjs/utils/object.d.ts +7 -0
  11. package/cjs/utils/object.d.ts.map +1 -1
  12. package/cjs/utils/object.js +21 -1
  13. package/esm/common/use-collapse-animation/use-collapse-animation.d.ts +19 -3
  14. package/esm/common/use-collapse-animation/use-collapse-animation.d.ts.map +1 -1
  15. package/esm/common/use-collapse-animation/use-collapse-animation.js +65 -10
  16. package/esm/components/use-form/use-form-control/use-form-control.d.ts.map +1 -1
  17. package/esm/components/use-form/use-form-control/use-form-control.js +8 -7
  18. package/esm/components/use-form/use-form.d.ts.map +1 -1
  19. package/esm/components/use-form/use-form.js +35 -18
  20. package/esm/components/use-form/use-form.type.d.ts +1 -0
  21. package/esm/components/use-form/use-form.type.d.ts.map +1 -1
  22. package/esm/utils/object.d.ts +7 -0
  23. package/esm/utils/object.d.ts.map +1 -1
  24. package/esm/utils/object.js +20 -0
  25. package/package.json +1 -1
@@ -19,6 +19,21 @@ export interface UseCollapseAnimationOptions {
19
19
  * @default 'cubic-bezier(.2,0,0,1)'
20
20
  */
21
21
  timingFunction?: string;
22
+ /**
23
+ * 父元素的 open class 名称
24
+ * 用于在获取 scrollHeight 时临时添加,确保用户依赖此 class 的样式生效
25
+ */
26
+ parentOpenClassName?: string;
27
+ }
28
+ export interface UseCollapseAnimationResult {
29
+ /**
30
+ * 是否应该隐藏元素(动画结束后且 isOpen 为 false 时返回 true)
31
+ */
32
+ shouldHide: boolean;
33
+ /**
34
+ * 是否应该保持 open 状态(动画进行中时返回 true)
35
+ */
36
+ shouldKeepOpen: boolean;
22
37
  }
23
38
  /**
24
39
  * 为元素添加折叠/展开动画的 Hook
@@ -26,10 +41,11 @@ export interface UseCollapseAnimationOptions {
26
41
  * @example
27
42
  * ```tsx
28
43
  * const ref = useRef<HTMLDivElement>(null);
29
- * useCollapseAnimation(ref, { isOpen: true });
44
+ * const { shouldHide, shouldKeepOpen } = useCollapseAnimation(ref, { isOpen: true });
30
45
  *
31
- * return <div ref={ref}>Content</div>;
46
+ * return <div ref={ref} className={shouldHide ? 'hide' : ''}>Content</div>;
32
47
  * ```
48
+ * @returns 动画状态对象
33
49
  */
34
- export declare function useCollapseAnimation<T extends HTMLElement = HTMLElement>(elementRef: React.RefObject<T>, options: UseCollapseAnimationOptions): void;
50
+ export declare function useCollapseAnimation<T extends HTMLElement = HTMLElement>(elementRef: React.RefObject<T>, options: UseCollapseAnimationOptions): UseCollapseAnimationResult;
35
51
  //# sourceMappingURL=use-collapse-animation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-collapse-animation.d.ts","sourceRoot":"","sources":["use-collapse-animation.ts"],"names":[],"mappings":";AAEA,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EACtE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAC9B,OAAO,EAAE,2BAA2B,QAwFrC"}
1
+ {"version":3,"file":"use-collapse-animation.d.ts","sourceRoot":"","sources":["use-collapse-animation.ts"],"names":[],"mappings":";AAEA,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EACtE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAC9B,OAAO,EAAE,2BAA2B,GACnC,0BAA0B,CAoI5B"}
@@ -5,16 +5,23 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.useCollapseAnimation = useCollapseAnimation;
7
7
  var _react = require("react");
8
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
9
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
11
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
12
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
13
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8
14
  /**
9
15
  * 为元素添加折叠/展开动画的 Hook
10
16
  *
11
17
  * @example
12
18
  * ```tsx
13
19
  * const ref = useRef<HTMLDivElement>(null);
14
- * useCollapseAnimation(ref, { isOpen: true });
20
+ * const { shouldHide, shouldKeepOpen } = useCollapseAnimation(ref, { isOpen: true });
15
21
  *
16
- * return <div ref={ref}>Content</div>;
22
+ * return <div ref={ref} className={shouldHide ? 'hide' : ''}>Content</div>;
17
23
  * ```
24
+ * @returns 动画状态对象
18
25
  */
19
26
  function useCollapseAnimation(elementRef, options) {
20
27
  var isOpen = options.isOpen,
@@ -23,8 +30,17 @@ function useCollapseAnimation(elementRef, options) {
23
30
  _options$disabled = options.disabled,
24
31
  disabled = _options$disabled === void 0 ? false : _options$disabled,
25
32
  _options$timingFuncti = options.timingFunction,
26
- timingFunction = _options$timingFuncti === void 0 ? 'cubic-bezier(.2,0,0,1)' : _options$timingFuncti;
33
+ timingFunction = _options$timingFuncti === void 0 ? 'cubic-bezier(.2,0,0,1)' : _options$timingFuncti,
34
+ parentOpenClassName = options.parentOpenClassName;
27
35
  var isFirstRenderRef = (0, _react.useRef)(true);
36
+ var _useState = (0, _react.useState)(!isOpen),
37
+ _useState2 = _slicedToArray(_useState, 2),
38
+ shouldHide = _useState2[0],
39
+ setShouldHide = _useState2[1];
40
+ var _useState3 = (0, _react.useState)(false),
41
+ _useState4 = _slicedToArray(_useState3, 2),
42
+ isAnimating = _useState4[0],
43
+ setIsAnimating = _useState4[1];
28
44
 
29
45
  // 当 disabled 状态变化时,重置首次渲染标记
30
46
  (0, _react.useEffect)(function () {
@@ -32,6 +48,8 @@ function useCollapseAnimation(elementRef, options) {
32
48
  isFirstRenderRef.current = true;
33
49
  }
34
50
  }, [disabled]);
51
+
52
+ // 使用 useLayoutEffect 确保动画状态在 DOM 更新前同步设置
35
53
  (0, _react.useEffect)(function () {
36
54
  if (!elementRef.current) return;
37
55
  var el = elementRef.current;
@@ -46,9 +64,6 @@ function useCollapseAnimation(elementRef, options) {
46
64
  }
47
65
  var timer = null;
48
66
 
49
- // 设置 display: block,让元素始终可见,由高度控制折叠
50
- el.style.display = 'block';
51
-
52
67
  // 首次渲染时,直接设置初始状态,不做动画
53
68
  if (isFirstRenderRef.current) {
54
69
  isFirstRenderRef.current = false;
@@ -59,9 +74,13 @@ function useCollapseAnimation(elementRef, options) {
59
74
  return;
60
75
  }
61
76
  if (isOpen) {
62
- // 展开动画
77
+ // 展开动画 - 先显示元素
78
+ setShouldHide(false);
79
+ setIsAnimating(true);
80
+ el.style.display = 'block';
63
81
  el.style.height = '0px';
64
82
  el.style.overflow = 'hidden';
83
+ el.style.opacity = '0';
65
84
 
66
85
  // 强制重绘
67
86
  void el.offsetHeight;
@@ -71,8 +90,9 @@ function useCollapseAnimation(elementRef, options) {
71
90
 
72
91
  // 启动动画
73
92
  requestAnimationFrame(function () {
74
- el.style.transition = "height ".concat(duration, "ms ").concat(timingFunction);
93
+ el.style.transition = "height ".concat(duration, "ms ").concat(timingFunction, ", opacity ").concat(duration, "ms ").concat(timingFunction);
75
94
  el.style.height = "".concat(scrollHeight, "px");
95
+ el.style.opacity = '1';
76
96
 
77
97
  // 动画结束后恢复 auto
78
98
  timer = setTimeout(function () {
@@ -80,20 +100,45 @@ function useCollapseAnimation(elementRef, options) {
80
100
  el.style.height = '';
81
101
  el.style.overflow = '';
82
102
  el.style.transition = '';
103
+ el.style.opacity = '';
104
+ setIsAnimating(false);
83
105
  }
84
106
  }, duration);
85
107
  });
86
108
  } else {
87
109
  // 收起动画
110
+ setIsAnimating(true);
111
+
112
+ // 临时添加父元素的 open class,确保用户依赖此 class 的布局样式在获取高度时生效
113
+ var parentElement = el.parentElement;
114
+ var needTempClass = parentOpenClassName && parentElement;
115
+ if (needTempClass) {
116
+ parentElement.classList.add(parentOpenClassName);
117
+ }
118
+
119
+ // 强制重绘,确保临时 class 生效
120
+ void el.offsetHeight;
88
121
  var _scrollHeight = el.scrollHeight;
89
122
  el.style.height = "".concat(_scrollHeight, "px");
90
123
  el.style.overflow = 'hidden';
124
+ el.style.opacity = '1';
91
125
 
92
126
  // 强制重绘
93
127
  void el.offsetHeight;
94
128
  requestAnimationFrame(function () {
95
- el.style.transition = "height ".concat(duration, "ms ").concat(timingFunction);
129
+ el.style.transition = "height ".concat(duration, "ms ").concat(timingFunction, ", opacity ").concat(duration, "ms ").concat(timingFunction);
96
130
  el.style.height = '0px';
131
+ el.style.opacity = '0';
132
+
133
+ // 动画结束后隐藏元素
134
+ timer = setTimeout(function () {
135
+ // 移除临时 class
136
+ if (needTempClass) {
137
+ parentElement.classList.remove(parentOpenClassName);
138
+ }
139
+ setShouldHide(true);
140
+ setIsAnimating(false);
141
+ }, duration);
97
142
  });
98
143
  }
99
144
 
@@ -104,4 +149,14 @@ function useCollapseAnimation(elementRef, options) {
104
149
  }
105
150
  };
106
151
  }, [isOpen, disabled, duration, timingFunction]);
152
+ if (disabled) {
153
+ return {
154
+ shouldHide: !isOpen,
155
+ shouldKeepOpen: false
156
+ };
157
+ }
158
+ return {
159
+ shouldHide: shouldHide,
160
+ shouldKeepOpen: isAnimating && !isOpen
161
+ };
107
162
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-form-control.d.ts","sourceRoot":"","sources":["use-form-control.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,oBAAoB,EAAsB,MAAM,yBAAyB,CAAC;AA4BnF,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;;kBA4JpC,CAAC,YAAY,GAAG,EAAE;;;;;EAiFrD"}
1
+ {"version":3,"file":"use-form-control.d.ts","sourceRoot":"","sources":["use-form-control.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,oBAAoB,EAAsB,MAAM,yBAAyB,CAAC;AA4BnF,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;;kBA8JpC,CAAC,YAAY,GAAG,EAAE;;;;;EAiFrD"}
@@ -179,13 +179,14 @@ function useFormControl(props) {
179
179
  if ((0, _is.isArray)(e)) {
180
180
  e.forEach(function (error, index) {
181
181
  if (error) {
182
- var _Object$keys, _Object$values;
183
- var fieldSetName = (_Object$keys = Object.keys(error)) === null || _Object$keys === void 0 ? void 0 : _Object$keys[0];
184
- var fieldSetError = (_Object$values = Object.values(error)) === null || _Object$values === void 0 ? void 0 : _Object$values[0];
185
- var na = "".concat(name, "[").concat(index, "].").concat(fieldSetName);
186
- if (fieldSetName && fieldSetError) {
187
- formFunc === null || formFunc === void 0 || formFunc.setError(na, fieldSetError);
188
- }
182
+ var keys = Object.keys(error);
183
+ keys.forEach(function (fieldName) {
184
+ var fieldError = error === null || error === void 0 ? void 0 : error[fieldName];
185
+ var na = "".concat(name, "[").concat(index, "].").concat(fieldName);
186
+ if (fieldName && fieldError) {
187
+ formFunc === null || formFunc === void 0 || formFunc.setError(na, fieldError);
188
+ }
189
+ });
189
190
  }
190
191
  });
191
192
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["use-form.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AA2BtE,OAAO,EAEL,aAAa,EACb,YAAY,EACZ,gBAAgB,EAGhB,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAe,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI5D,QAAA,MAAM,OAAO;;;;;;;;;wBAySC;gBAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;gBAAC,WAAW,CAAC,EAAE,OAAO,CAAA;aAAE;8BAzPnB,MAAM;oCAwUD,OAAO,aAAoB,MAAM,IAAI;;6BAf3C,MAAM,KAAK,KAAK,GAAG,SAAS;;oCAdrB,MAAM,EAAE;sCAnSxC,MAAM,GAAG,MAAM,EAAE,WAAU,gBAAgB;qCAsWvB,MAAM,WAAW,gBAAgB;gCAhDzB,MAAM,SAAS,MAAM,UAAU,KAAK;gCAKpC,MAAM,SAAS,MAAM;kCAzJpD,MAAM,0BAAyB,qBAAqB;;;;;;;;oBA+EjD;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE;0BAzPnB,MAAM;gCAwUD,OAAO,aAAoB,MAAM,IAAI;;yBAf3C,MAAM,KAAK,KAAK,GAAG,SAAS;;gCAdrB,MAAM,EAAE;kCAnSxC,MAAM,GAAG,MAAM,EAAE,WAAU,gBAAgB;iCAsWvB,MAAM,WAAW,gBAAgB;4BAhDzB,MAAM,SAAS,MAAM,UAAU,KAAK;4BAKpC,MAAM,SAAS,MAAM;8BAzJpD,MAAM,0BAAyB,qBAAqB;;;CA4b9D,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["use-form.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AA4BtE,OAAO,EAEL,aAAa,EACb,YAAY,EACZ,gBAAgB,EAGhB,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAe,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI5D,QAAA,MAAM,OAAO;;;;;;;;;wBAsTC;gBAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;gBAAC,WAAW,CAAC,EAAE,OAAO,CAAA;aAAE;8BArQnB,MAAM;oCAoVD,OAAO,aAAoB,MAAM,IAAI;;6BAf3C,MAAM,KAAK,KAAK,GAAG,SAAS;;oCAdrB,MAAM,EAAE;sCA/SxC,MAAM,GAAG,MAAM,EAAE,WAAU,gBAAgB;qCAkXvB,MAAM,WAAW,gBAAgB;gCAhDzB,MAAM,SAAS,MAAM,UAAU,KAAK;gCAKpC,MAAM,SAAS,MAAM;kCAzJpD,MAAM,0BAAyB,qBAAqB;;;;;;;;oBA+EjD;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE;0BArQnB,MAAM;gCAoVD,OAAO,aAAoB,MAAM,IAAI;;yBAf3C,MAAM,KAAK,KAAK,GAAG,SAAS;;gCAdrB,MAAM,EAAE;kCA/SxC,MAAM,GAAG,MAAM,EAAE,WAAU,gBAAgB;iCAkXvB,MAAM,WAAW,gBAAgB;4BAhDzB,MAAM,SAAS,MAAM,UAAU,KAAK;4BAKpC,MAAM,SAAS,MAAM;8BAzJpD,MAAM,0BAAyB,qBAAqB;;;CAgc9D,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -62,6 +62,7 @@ var useForm = function useForm(props) {
62
62
  ignoreValidateFields: [],
63
63
  updateMap: {},
64
64
  flowMap: {},
65
+ rulesMap: {},
65
66
  removeArr: new Set(),
66
67
  names: new Set(),
67
68
  submitLock: false,
@@ -161,18 +162,30 @@ var useForm = function useForm(props) {
161
162
  var update = function update(name) {
162
163
  var _context$flowMap$glob;
163
164
  if (!name) {
165
+ var needValidateParentKeys = new Set();
164
166
  Object.keys(context.updateMap).forEach(function (key) {
165
167
  var _context$updateMap$ke;
166
- (_context$updateMap$ke = context.updateMap[key]) === null || _context$updateMap$ke === void 0 || _context$updateMap$ke.forEach(function (update) {
167
- update(context.value, context.errors, context.serverErrors);
168
+ (_context$updateMap$ke = context.updateMap[key]) === null || _context$updateMap$ke === void 0 || _context$updateMap$ke.forEach(function (updateFn) {
169
+ updateFn(context.value, context.errors, context.serverErrors);
168
170
  if (context.errors[key]) {
169
171
  validateFields(key).catch(function () {});
172
+ (0, _utils.getParentKeys)(key).forEach(function (parentKey) {
173
+ if (context.validateMap[parentKey] && context.rulesMap[parentKey]) {
174
+ needValidateParentKeys.add(parentKey);
175
+ }
176
+ });
170
177
  }
171
178
  });
172
179
  });
180
+ // fix issue's playground id: 0898fabb-a1b4-4453-a2aa-f5a92e7777c0
181
+ if (needValidateParentKeys.size > 0) {
182
+ needValidateParentKeys.forEach(function (parentKey) {
183
+ validateFields(parentKey).catch(function () {});
184
+ });
185
+ }
173
186
  Object.keys(context.flowMap).forEach(function (key) {
174
- context.flowMap[key].forEach(function (update) {
175
- update();
187
+ context.flowMap[key].forEach(function (updateFn) {
188
+ updateFn();
176
189
  });
177
190
  });
178
191
  } else {
@@ -184,22 +197,22 @@ var useForm = function useForm(props) {
184
197
  if (!context.updateMap[key]) {
185
198
  var _context$updateMap$pa;
186
199
  var parentKey = key.split('.')[0];
187
- (_context$updateMap$pa = context.updateMap[parentKey]) === null || _context$updateMap$pa === void 0 || _context$updateMap$pa.forEach(function (update) {
188
- update(context.value, context.errors, context.serverErrors);
200
+ (_context$updateMap$pa = context.updateMap[parentKey]) === null || _context$updateMap$pa === void 0 || _context$updateMap$pa.forEach(function (updateFn) {
201
+ updateFn(context.value, context.errors, context.serverErrors);
189
202
  });
190
203
  } else {
191
204
  var _context$updateMap$ke2;
192
- (_context$updateMap$ke2 = context.updateMap[key]) === null || _context$updateMap$ke2 === void 0 || _context$updateMap$ke2.forEach(function (update) {
193
- update(context.value, context.errors, context.serverErrors);
205
+ (_context$updateMap$ke2 = context.updateMap[key]) === null || _context$updateMap$ke2 === void 0 || _context$updateMap$ke2.forEach(function (updateFn) {
206
+ updateFn(context.value, context.errors, context.serverErrors);
194
207
  });
195
208
  }
196
- (_context$flowMap$key = context.flowMap[key]) === null || _context$flowMap$key === void 0 || _context$flowMap$key.forEach(function (update) {
197
- update();
209
+ (_context$flowMap$key = context.flowMap[key]) === null || _context$flowMap$key === void 0 || _context$flowMap$key.forEach(function (updateFn) {
210
+ updateFn();
198
211
  });
199
212
  });
200
213
  }
201
- (_context$flowMap$glob = context.flowMap[globalKey]) === null || _context$flowMap$glob === void 0 || _context$flowMap$glob.forEach(function (update) {
202
- update();
214
+ (_context$flowMap$glob = context.flowMap[globalKey]) === null || _context$flowMap$glob === void 0 || _context$flowMap$glob.forEach(function (updateFn) {
215
+ updateFn();
203
216
  });
204
217
  };
205
218
  var updateFieldsets = (0, _usePersistFn.default)(function (name) {
@@ -532,6 +545,7 @@ var useForm = function useForm(props) {
532
545
  if (validateFieldSet.size === 0 && updateFieldSet.size === 0) {
533
546
  context.names.delete(n);
534
547
  delete context.defaultValues[n];
548
+ delete context.rulesMap[n];
535
549
  }
536
550
  var finalReserveAble = (_props$reserveAble = props.reserveAble) !== null && _props$reserveAble !== void 0 ? _props$reserveAble : reserveAble;
537
551
  if (!finalReserveAble && !context.removeLock) {
@@ -546,22 +560,25 @@ var useForm = function useForm(props) {
546
560
  if ((0, _utils.isArray)(propRules)) {
547
561
  newRules = newRules.concat(propRules);
548
562
  }
563
+ if (newRules.length > 0) {
564
+ context.rulesMap[name] = newRules;
565
+ }
549
566
  return newRules;
550
567
  },
551
568
  watch: function watch() {
552
569
  var names = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [globalKey];
553
- var update = arguments.length > 1 ? arguments[1] : undefined;
570
+ var updateFn = arguments.length > 1 ? arguments[1] : undefined;
554
571
  names.forEach(function (name) {
555
572
  context.flowMap[name] = context.flowMap[name] || new Set();
556
- context.flowMap[name].add(update);
573
+ context.flowMap[name].add(updateFn);
557
574
  });
558
575
  },
559
576
  unWatch: function unWatch() {
560
577
  var names = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [globalKey];
561
- var update = arguments.length > 1 ? arguments[1] : undefined;
578
+ var updateFn = arguments.length > 1 ? arguments[1] : undefined;
562
579
  names.forEach(function (name) {
563
- if (update) {
564
- context.flowMap[name].delete(update);
580
+ if (updateFn) {
581
+ context.flowMap[name].delete(updateFn);
565
582
  } else {
566
583
  delete context.flowMap[name];
567
584
  }
@@ -216,6 +216,7 @@ export type FormContext = {
216
216
  mounted: boolean;
217
217
  updateMap: ObjectType<Set<(formValue: ObjectType, errors: ObjectType<Error | undefined>, serverErrors: ObjectType<Error | undefined>) => void>>;
218
218
  flowMap: ObjectType<Set<() => void>>;
219
+ rulesMap: ObjectType<FormItemRule<any>>;
219
220
  value: ObjectType;
220
221
  errors: ObjectType<Error | undefined>;
221
222
  serverErrors: ObjectType<Error | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"use-form.type.d.ts","sourceRoot":"","sources":["use-form.type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-form.type.d.ts","sourceRoot":"","sources":["use-form.type.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE/C,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC;IACV,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,EAAE,CAAC;CACL;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CACvB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,UAAU,EACpB,MAAM,CAAC,EAAE,gBAAgB,KACtB,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;AAE/B,MAAM,MAAM,QAAQ,GAAG,CACrB,SAAS,EAAE,UAAU,EACrB,MAAM,EAAE,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC,EACrC,YAAY,EAAE,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC,KACxC,IAAI,CAAC;AAEV,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE;QACL,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;QAC7F,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAC;QAC3E,YAAY,EAAE,CAAC,SAAS,EACtB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,KAC/B,YAAY,CAAC,SAAS,CAAC,CAAC;QAC7B,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;QACjE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;KACpE,CAAC;IACF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AACD,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,SAAS,EAAE,oBAAoB,CAAC;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IACtC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;IACjD;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;CACnC;AACD,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAErC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,GAAG;IAC/B,QAAQ,EAAE,CACR,IAAI,EAAE;QACJ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,EACD,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,KACE,IAAI,CAAC;IACV,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;IACjC,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,GAAG,SAAS,KAAK,IAAI,CAAC;IACvD,SAAS,EAAE,MAAM,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAC/C,aAAa,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,cAAc,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACpE,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAClE,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;AAED,UAAU,cAAc,CAAC,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;IAC1E,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACxC;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IACnC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG;IAC/C,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC5C,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,EAAE,UAAU,CAAC;IAC1B,WAAW,EAAE,UAAU,CACrB,GAAG,CACD,CACE,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,GAAG,EACN,SAAS,EAAE,UAAU,EACrB,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,KAC9B,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAC/B,CACF,CAAC;IAEF,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAEvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;IACtC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,UAAU,GAAG,SAAS,CAAC;IAElC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IAEjB,SAAS,EAAE,UAAU,CACnB,GAAG,CACD,CACE,SAAS,EAAE,UAAU,EACrB,MAAM,EAAE,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC,EACrC,YAAY,EAAE,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC,KACxC,IAAI,CACV,CACF,CAAC;IAEF,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACrC,QAAQ,EAAE,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IACtC,YAAY,EAAE,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAC5C,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,EAAE,GAAG,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,UAAU,CACzE,mBAAmB,EACnB,MAAM,CACP,CAAC"}
@@ -45,6 +45,13 @@ export declare const getAllKeyPaths: (obj: ObjectType, parentKey?: string) => st
45
45
  * console.log(completeFields) // ['user', 'user.name', 'user.age', 'user[0].name', 'user[0].age', 'user[1].name', 'user[1].age']
46
46
  */
47
47
  export declare const getCompleteFieldKeys: (fields: string | string[], allFields: string[]) => string[];
48
+ /**
49
+ * 获取字段的所有父级key数组
50
+ * @param field 字段key
51
+ * @description 获取字段的所有父级key数组,并去掉数组下标部分, 结果按从近及远排序
52
+ * @example a.b[0].c => ['a.b', 'a']
53
+ */
54
+ export declare const getParentKeys: (field: string) => string[];
48
55
  /**
49
56
  * 将对象中的所有值设置为空, 如果值是数组,重置为空数组,如果是对象,重置为空对象,如果是基础类型,重置为undefined
50
57
  * @param obj 对象
@@ -1 +1 @@
1
- {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["object.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,UAGvC;AASD,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAGD,eAAO,MAAM,YAAY,QAAS,UAAU,UAG3C,CAAC;AAGF,eAAO,MAAM,SAAS,2CAEZ,UAAU,YACT,WAAW,eAwBrB,CAAC;AAEF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,+DA4BxC;AAED,UAAU,cAAc;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,OAAO,WACV,UAAU,QACZ,MAAM,SACL,GAAG,YACD,cAAc,eAiDxB,CAAC;AAEF,eAAO,MAAM,OAAO,WAAY,UAAU,QAAQ,MAAM,YAAW,WAAW,YAyB7E,CAAC;AAEF,eAAO,MAAM,UAAU,WAAY,UAAU,QAAQ,MAAM,eA0B1D,CAAC;AAEF,eAAO,MAAM,OAAO,WAAY,UAAU,QAAQ,MAAM,YAavD,CAAC;AAEF,eAAO,MAAM,OAAO,QAAS,UAAU,YAItC,CAAC;AAEF,eAAO,MAAM,WAAW,wFAQvB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,QAAS,UAAU,cAAa,MAAM,KAAQ,MAAM,EAoB9E,CAAC;AAGF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,WAAY,MAAM,GAAG,MAAM,EAAE,aAAa,MAAM,EAAE,KAAG,MAAM,EAmB3F,CAAA;AAGD;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAS,UAAU,KAAG,GAW5C,CAAC"}
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["object.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,UAGvC;AASD,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAGD,eAAO,MAAM,YAAY,QAAS,UAAU,UAG3C,CAAC;AAGF,eAAO,MAAM,SAAS,2CAEZ,UAAU,YACT,WAAW,eAwBrB,CAAC;AAEF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,+DA4BxC;AAED,UAAU,cAAc;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,OAAO,WACV,UAAU,QACZ,MAAM,SACL,GAAG,YACD,cAAc,eAiDxB,CAAC;AAEF,eAAO,MAAM,OAAO,WAAY,UAAU,QAAQ,MAAM,YAAW,WAAW,YAyB7E,CAAC;AAEF,eAAO,MAAM,UAAU,WAAY,UAAU,QAAQ,MAAM,eA0B1D,CAAC;AAEF,eAAO,MAAM,OAAO,WAAY,UAAU,QAAQ,MAAM,YAavD,CAAC;AAEF,eAAO,MAAM,OAAO,QAAS,UAAU,YAItC,CAAC;AAEF,eAAO,MAAM,WAAW,wFAQvB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,QAAS,UAAU,cAAa,MAAM,KAAQ,MAAM,EAoB9E,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,WAAY,MAAM,GAAG,MAAM,EAAE,aAAa,MAAM,EAAE,KAAG,MAAM,EAmB3F,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAAM,EAYnD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAS,UAAU,KAAG,GAW5C,CAAC"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getCompleteFieldKeys = exports.getAllKeyPaths = exports.entries = exports.deepSet = exports.deepRemove = exports.deepMerge = exports.deepHas = exports.deepGet = exports.clearValue = void 0;
6
+ exports.getParentKeys = exports.getCompleteFieldKeys = exports.getAllKeyPaths = exports.entries = exports.deepSet = exports.deepRemove = exports.deepMerge = exports.deepHas = exports.deepGet = exports.clearValue = void 0;
7
7
  exports.insertPoint = insertPoint;
8
8
  exports.objectValues = void 0;
9
9
  exports.pathGenerator = pathGenerator;
@@ -337,6 +337,26 @@ var getCompleteFieldKeys = exports.getCompleteFieldKeys = function getCompleteFi
337
337
  return Array.from(new Set(completeFields));
338
338
  };
339
339
 
340
+ /**
341
+ * 获取字段的所有父级key数组
342
+ * @param field 字段key
343
+ * @description 获取字段的所有父级key数组,并去掉数组下标部分, 结果按从近及远排序
344
+ * @example a.b[0].c => ['a.b', 'a']
345
+ */
346
+ var getParentKeys = exports.getParentKeys = function getParentKeys(field) {
347
+ if (!field) return [];
348
+ var parts = field.split('.');
349
+ var parentKeys = [];
350
+ for (var i = parts.length - 1; i > 0; i--) {
351
+ var parentKey = parts.slice(0, i).join('.');
352
+ var cleanedKey = parentKey.replace(/\[\d+\]/g, '');
353
+ if (cleanedKey && !parentKeys.includes(cleanedKey)) {
354
+ parentKeys.push(cleanedKey);
355
+ }
356
+ }
357
+ return parentKeys;
358
+ };
359
+
340
360
  /**
341
361
  * 将对象中的所有值设置为空, 如果值是数组,重置为空数组,如果是对象,重置为空对象,如果是基础类型,重置为undefined
342
362
  * @param obj 对象
@@ -19,6 +19,21 @@ export interface UseCollapseAnimationOptions {
19
19
  * @default 'cubic-bezier(.2,0,0,1)'
20
20
  */
21
21
  timingFunction?: string;
22
+ /**
23
+ * 父元素的 open class 名称
24
+ * 用于在获取 scrollHeight 时临时添加,确保用户依赖此 class 的样式生效
25
+ */
26
+ parentOpenClassName?: string;
27
+ }
28
+ export interface UseCollapseAnimationResult {
29
+ /**
30
+ * 是否应该隐藏元素(动画结束后且 isOpen 为 false 时返回 true)
31
+ */
32
+ shouldHide: boolean;
33
+ /**
34
+ * 是否应该保持 open 状态(动画进行中时返回 true)
35
+ */
36
+ shouldKeepOpen: boolean;
22
37
  }
23
38
  /**
24
39
  * 为元素添加折叠/展开动画的 Hook
@@ -26,10 +41,11 @@ export interface UseCollapseAnimationOptions {
26
41
  * @example
27
42
  * ```tsx
28
43
  * const ref = useRef<HTMLDivElement>(null);
29
- * useCollapseAnimation(ref, { isOpen: true });
44
+ * const { shouldHide, shouldKeepOpen } = useCollapseAnimation(ref, { isOpen: true });
30
45
  *
31
- * return <div ref={ref}>Content</div>;
46
+ * return <div ref={ref} className={shouldHide ? 'hide' : ''}>Content</div>;
32
47
  * ```
48
+ * @returns 动画状态对象
33
49
  */
34
- export declare function useCollapseAnimation<T extends HTMLElement = HTMLElement>(elementRef: React.RefObject<T>, options: UseCollapseAnimationOptions): void;
50
+ export declare function useCollapseAnimation<T extends HTMLElement = HTMLElement>(elementRef: React.RefObject<T>, options: UseCollapseAnimationOptions): UseCollapseAnimationResult;
35
51
  //# sourceMappingURL=use-collapse-animation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-collapse-animation.d.ts","sourceRoot":"","sources":["use-collapse-animation.ts"],"names":[],"mappings":";AAEA,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EACtE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAC9B,OAAO,EAAE,2BAA2B,QAwFrC"}
1
+ {"version":3,"file":"use-collapse-animation.d.ts","sourceRoot":"","sources":["use-collapse-animation.ts"],"names":[],"mappings":";AAEA,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EACtE,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAC9B,OAAO,EAAE,2BAA2B,GACnC,0BAA0B,CAoI5B"}
@@ -1,14 +1,21 @@
1
- import { useEffect, useRef } from 'react';
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
+ import { useEffect, useRef, useState } from 'react';
2
8
  /**
3
9
  * 为元素添加折叠/展开动画的 Hook
4
10
  *
5
11
  * @example
6
12
  * ```tsx
7
13
  * const ref = useRef<HTMLDivElement>(null);
8
- * useCollapseAnimation(ref, { isOpen: true });
14
+ * const { shouldHide, shouldKeepOpen } = useCollapseAnimation(ref, { isOpen: true });
9
15
  *
10
- * return <div ref={ref}>Content</div>;
16
+ * return <div ref={ref} className={shouldHide ? 'hide' : ''}>Content</div>;
11
17
  * ```
18
+ * @returns 动画状态对象
12
19
  */
13
20
  export function useCollapseAnimation(elementRef, options) {
14
21
  var isOpen = options.isOpen,
@@ -17,8 +24,17 @@ export function useCollapseAnimation(elementRef, options) {
17
24
  _options$disabled = options.disabled,
18
25
  disabled = _options$disabled === void 0 ? false : _options$disabled,
19
26
  _options$timingFuncti = options.timingFunction,
20
- timingFunction = _options$timingFuncti === void 0 ? 'cubic-bezier(.2,0,0,1)' : _options$timingFuncti;
27
+ timingFunction = _options$timingFuncti === void 0 ? 'cubic-bezier(.2,0,0,1)' : _options$timingFuncti,
28
+ parentOpenClassName = options.parentOpenClassName;
21
29
  var isFirstRenderRef = useRef(true);
30
+ var _useState = useState(!isOpen),
31
+ _useState2 = _slicedToArray(_useState, 2),
32
+ shouldHide = _useState2[0],
33
+ setShouldHide = _useState2[1];
34
+ var _useState3 = useState(false),
35
+ _useState4 = _slicedToArray(_useState3, 2),
36
+ isAnimating = _useState4[0],
37
+ setIsAnimating = _useState4[1];
22
38
 
23
39
  // 当 disabled 状态变化时,重置首次渲染标记
24
40
  useEffect(function () {
@@ -26,6 +42,8 @@ export function useCollapseAnimation(elementRef, options) {
26
42
  isFirstRenderRef.current = true;
27
43
  }
28
44
  }, [disabled]);
45
+
46
+ // 使用 useLayoutEffect 确保动画状态在 DOM 更新前同步设置
29
47
  useEffect(function () {
30
48
  if (!elementRef.current) return;
31
49
  var el = elementRef.current;
@@ -40,9 +58,6 @@ export function useCollapseAnimation(elementRef, options) {
40
58
  }
41
59
  var timer = null;
42
60
 
43
- // 设置 display: block,让元素始终可见,由高度控制折叠
44
- el.style.display = 'block';
45
-
46
61
  // 首次渲染时,直接设置初始状态,不做动画
47
62
  if (isFirstRenderRef.current) {
48
63
  isFirstRenderRef.current = false;
@@ -53,9 +68,13 @@ export function useCollapseAnimation(elementRef, options) {
53
68
  return;
54
69
  }
55
70
  if (isOpen) {
56
- // 展开动画
71
+ // 展开动画 - 先显示元素
72
+ setShouldHide(false);
73
+ setIsAnimating(true);
74
+ el.style.display = 'block';
57
75
  el.style.height = '0px';
58
76
  el.style.overflow = 'hidden';
77
+ el.style.opacity = '0';
59
78
 
60
79
  // 强制重绘
61
80
  void el.offsetHeight;
@@ -65,8 +84,9 @@ export function useCollapseAnimation(elementRef, options) {
65
84
 
66
85
  // 启动动画
67
86
  requestAnimationFrame(function () {
68
- el.style.transition = "height ".concat(duration, "ms ").concat(timingFunction);
87
+ el.style.transition = "height ".concat(duration, "ms ").concat(timingFunction, ", opacity ").concat(duration, "ms ").concat(timingFunction);
69
88
  el.style.height = "".concat(scrollHeight, "px");
89
+ el.style.opacity = '1';
70
90
 
71
91
  // 动画结束后恢复 auto
72
92
  timer = setTimeout(function () {
@@ -74,20 +94,45 @@ export function useCollapseAnimation(elementRef, options) {
74
94
  el.style.height = '';
75
95
  el.style.overflow = '';
76
96
  el.style.transition = '';
97
+ el.style.opacity = '';
98
+ setIsAnimating(false);
77
99
  }
78
100
  }, duration);
79
101
  });
80
102
  } else {
81
103
  // 收起动画
104
+ setIsAnimating(true);
105
+
106
+ // 临时添加父元素的 open class,确保用户依赖此 class 的布局样式在获取高度时生效
107
+ var parentElement = el.parentElement;
108
+ var needTempClass = parentOpenClassName && parentElement;
109
+ if (needTempClass) {
110
+ parentElement.classList.add(parentOpenClassName);
111
+ }
112
+
113
+ // 强制重绘,确保临时 class 生效
114
+ void el.offsetHeight;
82
115
  var _scrollHeight = el.scrollHeight;
83
116
  el.style.height = "".concat(_scrollHeight, "px");
84
117
  el.style.overflow = 'hidden';
118
+ el.style.opacity = '1';
85
119
 
86
120
  // 强制重绘
87
121
  void el.offsetHeight;
88
122
  requestAnimationFrame(function () {
89
- el.style.transition = "height ".concat(duration, "ms ").concat(timingFunction);
123
+ el.style.transition = "height ".concat(duration, "ms ").concat(timingFunction, ", opacity ").concat(duration, "ms ").concat(timingFunction);
90
124
  el.style.height = '0px';
125
+ el.style.opacity = '0';
126
+
127
+ // 动画结束后隐藏元素
128
+ timer = setTimeout(function () {
129
+ // 移除临时 class
130
+ if (needTempClass) {
131
+ parentElement.classList.remove(parentOpenClassName);
132
+ }
133
+ setShouldHide(true);
134
+ setIsAnimating(false);
135
+ }, duration);
91
136
  });
92
137
  }
93
138
 
@@ -98,4 +143,14 @@ export function useCollapseAnimation(elementRef, options) {
98
143
  }
99
144
  };
100
145
  }, [isOpen, disabled, duration, timingFunction]);
146
+ if (disabled) {
147
+ return {
148
+ shouldHide: !isOpen,
149
+ shouldKeepOpen: false
150
+ };
151
+ }
152
+ return {
153
+ shouldHide: shouldHide,
154
+ shouldKeepOpen: isAnimating && !isOpen
155
+ };
101
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-form-control.d.ts","sourceRoot":"","sources":["use-form-control.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,oBAAoB,EAAsB,MAAM,yBAAyB,CAAC;AA4BnF,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;;kBA4JpC,CAAC,YAAY,GAAG,EAAE;;;;;EAiFrD"}
1
+ {"version":3,"file":"use-form-control.d.ts","sourceRoot":"","sources":["use-form-control.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,oBAAoB,EAAsB,MAAM,yBAAyB,CAAC;AA4BnF,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;;kBA8JpC,CAAC,YAAY,GAAG,EAAE;;;;;EAiFrD"}
@@ -170,13 +170,14 @@ export default function useFormControl(props) {
170
170
  if (isArray(e)) {
171
171
  e.forEach(function (error, index) {
172
172
  if (error) {
173
- var _Object$keys, _Object$values;
174
- var fieldSetName = (_Object$keys = Object.keys(error)) === null || _Object$keys === void 0 ? void 0 : _Object$keys[0];
175
- var fieldSetError = (_Object$values = Object.values(error)) === null || _Object$values === void 0 ? void 0 : _Object$values[0];
176
- var na = "".concat(name, "[").concat(index, "].").concat(fieldSetName);
177
- if (fieldSetName && fieldSetError) {
178
- formFunc === null || formFunc === void 0 || formFunc.setError(na, fieldSetError);
179
- }
173
+ var keys = Object.keys(error);
174
+ keys.forEach(function (fieldName) {
175
+ var fieldError = error === null || error === void 0 ? void 0 : error[fieldName];
176
+ var na = "".concat(name, "[").concat(index, "].").concat(fieldName);
177
+ if (fieldName && fieldError) {
178
+ formFunc === null || formFunc === void 0 || formFunc.setError(na, fieldError);
179
+ }
180
+ });
180
181
  }
181
182
  });
182
183
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["use-form.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AA2BtE,OAAO,EAEL,aAAa,EACb,YAAY,EACZ,gBAAgB,EAGhB,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAe,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI5D,QAAA,MAAM,OAAO;;;;;;;;;wBAySC;gBAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;gBAAC,WAAW,CAAC,EAAE,OAAO,CAAA;aAAE;8BAzPnB,MAAM;oCAwUD,OAAO,aAAoB,MAAM,IAAI;;6BAf3C,MAAM,KAAK,KAAK,GAAG,SAAS;;oCAdrB,MAAM,EAAE;sCAnSxC,MAAM,GAAG,MAAM,EAAE,WAAU,gBAAgB;qCAsWvB,MAAM,WAAW,gBAAgB;gCAhDzB,MAAM,SAAS,MAAM,UAAU,KAAK;gCAKpC,MAAM,SAAS,MAAM;kCAzJpD,MAAM,0BAAyB,qBAAqB;;;;;;;;oBA+EjD;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE;0BAzPnB,MAAM;gCAwUD,OAAO,aAAoB,MAAM,IAAI;;yBAf3C,MAAM,KAAK,KAAK,GAAG,SAAS;;gCAdrB,MAAM,EAAE;kCAnSxC,MAAM,GAAG,MAAM,EAAE,WAAU,gBAAgB;iCAsWvB,MAAM,WAAW,gBAAgB;4BAhDzB,MAAM,SAAS,MAAM,UAAU,KAAK;4BAKpC,MAAM,SAAS,MAAM;8BAzJpD,MAAM,0BAAyB,qBAAqB;;;CA4b9D,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["use-form.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AA4BtE,OAAO,EAEL,aAAa,EACb,YAAY,EACZ,gBAAgB,EAGhB,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAe,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAI5D,QAAA,MAAM,OAAO;;;;;;;;;wBAsTC;gBAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;gBAAC,WAAW,CAAC,EAAE,OAAO,CAAA;aAAE;8BArQnB,MAAM;oCAoVD,OAAO,aAAoB,MAAM,IAAI;;6BAf3C,MAAM,KAAK,KAAK,GAAG,SAAS;;oCAdrB,MAAM,EAAE;sCA/SxC,MAAM,GAAG,MAAM,EAAE,WAAU,gBAAgB;qCAkXvB,MAAM,WAAW,gBAAgB;gCAhDzB,MAAM,SAAS,MAAM,UAAU,KAAK;gCAKpC,MAAM,SAAS,MAAM;kCAzJpD,MAAM,0BAAyB,qBAAqB;;;;;;;;oBA+EjD;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE;0BArQnB,MAAM;gCAoVD,OAAO,aAAoB,MAAM,IAAI;;yBAf3C,MAAM,KAAK,KAAK,GAAG,SAAS;;gCAdrB,MAAM,EAAE;kCA/SxC,MAAM,GAAG,MAAM,EAAE,WAAU,gBAAgB;iCAkXvB,MAAM,WAAW,gBAAgB;4BAhDzB,MAAM,SAAS,MAAM,UAAU,KAAK;4BAKpC,MAAM,SAAS,MAAM;8BAzJpD,MAAM,0BAAyB,qBAAqB;;;CAgc9D,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -18,7 +18,7 @@ import { SchemaBuilder } from "./use-form-schema/form-schema-builder";
18
18
  var globalKey = '__global__&&@@';
19
19
  var SUBMIT_TIMEOUT = 10;
20
20
  import { current, produce } from "../../utils/immer";
21
- import { deepGet, deepRemove, deepSet, docScroll, extractEventHandlers, isArray, isObject, shallowEqual, wrapFormError, deepClone, getAllKeyPaths, getCompleteFieldKeys, devUseWarning, getFieldId, getClosestScrollContainer } from "../../utils";
21
+ import { deepGet, deepRemove, deepSet, docScroll, extractEventHandlers, isArray, isObject, shallowEqual, wrapFormError, deepClone, getAllKeyPaths, getParentKeys, getCompleteFieldKeys, devUseWarning, getFieldId, getClosestScrollContainer } from "../../utils";
22
22
  var emptyObj = {};
23
23
  var useForm = function useForm(props) {
24
24
  var _props$defaultValue = props.defaultValue,
@@ -53,6 +53,7 @@ var useForm = function useForm(props) {
53
53
  ignoreValidateFields: [],
54
54
  updateMap: {},
55
55
  flowMap: {},
56
+ rulesMap: {},
56
57
  removeArr: new Set(),
57
58
  names: new Set(),
58
59
  submitLock: false,
@@ -152,18 +153,30 @@ var useForm = function useForm(props) {
152
153
  var update = function update(name) {
153
154
  var _context$flowMap$glob;
154
155
  if (!name) {
156
+ var needValidateParentKeys = new Set();
155
157
  Object.keys(context.updateMap).forEach(function (key) {
156
158
  var _context$updateMap$ke;
157
- (_context$updateMap$ke = context.updateMap[key]) === null || _context$updateMap$ke === void 0 || _context$updateMap$ke.forEach(function (update) {
158
- update(context.value, context.errors, context.serverErrors);
159
+ (_context$updateMap$ke = context.updateMap[key]) === null || _context$updateMap$ke === void 0 || _context$updateMap$ke.forEach(function (updateFn) {
160
+ updateFn(context.value, context.errors, context.serverErrors);
159
161
  if (context.errors[key]) {
160
162
  validateFields(key).catch(function () {});
163
+ getParentKeys(key).forEach(function (parentKey) {
164
+ if (context.validateMap[parentKey] && context.rulesMap[parentKey]) {
165
+ needValidateParentKeys.add(parentKey);
166
+ }
167
+ });
161
168
  }
162
169
  });
163
170
  });
171
+ // fix issue's playground id: 0898fabb-a1b4-4453-a2aa-f5a92e7777c0
172
+ if (needValidateParentKeys.size > 0) {
173
+ needValidateParentKeys.forEach(function (parentKey) {
174
+ validateFields(parentKey).catch(function () {});
175
+ });
176
+ }
164
177
  Object.keys(context.flowMap).forEach(function (key) {
165
- context.flowMap[key].forEach(function (update) {
166
- update();
178
+ context.flowMap[key].forEach(function (updateFn) {
179
+ updateFn();
167
180
  });
168
181
  });
169
182
  } else {
@@ -175,22 +188,22 @@ var useForm = function useForm(props) {
175
188
  if (!context.updateMap[key]) {
176
189
  var _context$updateMap$pa;
177
190
  var parentKey = key.split('.')[0];
178
- (_context$updateMap$pa = context.updateMap[parentKey]) === null || _context$updateMap$pa === void 0 || _context$updateMap$pa.forEach(function (update) {
179
- update(context.value, context.errors, context.serverErrors);
191
+ (_context$updateMap$pa = context.updateMap[parentKey]) === null || _context$updateMap$pa === void 0 || _context$updateMap$pa.forEach(function (updateFn) {
192
+ updateFn(context.value, context.errors, context.serverErrors);
180
193
  });
181
194
  } else {
182
195
  var _context$updateMap$ke2;
183
- (_context$updateMap$ke2 = context.updateMap[key]) === null || _context$updateMap$ke2 === void 0 || _context$updateMap$ke2.forEach(function (update) {
184
- update(context.value, context.errors, context.serverErrors);
196
+ (_context$updateMap$ke2 = context.updateMap[key]) === null || _context$updateMap$ke2 === void 0 || _context$updateMap$ke2.forEach(function (updateFn) {
197
+ updateFn(context.value, context.errors, context.serverErrors);
185
198
  });
186
199
  }
187
- (_context$flowMap$key = context.flowMap[key]) === null || _context$flowMap$key === void 0 || _context$flowMap$key.forEach(function (update) {
188
- update();
200
+ (_context$flowMap$key = context.flowMap[key]) === null || _context$flowMap$key === void 0 || _context$flowMap$key.forEach(function (updateFn) {
201
+ updateFn();
189
202
  });
190
203
  });
191
204
  }
192
- (_context$flowMap$glob = context.flowMap[globalKey]) === null || _context$flowMap$glob === void 0 || _context$flowMap$glob.forEach(function (update) {
193
- update();
205
+ (_context$flowMap$glob = context.flowMap[globalKey]) === null || _context$flowMap$glob === void 0 || _context$flowMap$glob.forEach(function (updateFn) {
206
+ updateFn();
194
207
  });
195
208
  };
196
209
  var updateFieldsets = usePersistFn(function (name) {
@@ -523,6 +536,7 @@ var useForm = function useForm(props) {
523
536
  if (validateFieldSet.size === 0 && updateFieldSet.size === 0) {
524
537
  context.names.delete(n);
525
538
  delete context.defaultValues[n];
539
+ delete context.rulesMap[n];
526
540
  }
527
541
  var finalReserveAble = (_props$reserveAble = props.reserveAble) !== null && _props$reserveAble !== void 0 ? _props$reserveAble : reserveAble;
528
542
  if (!finalReserveAble && !context.removeLock) {
@@ -537,22 +551,25 @@ var useForm = function useForm(props) {
537
551
  if (isArray(propRules)) {
538
552
  newRules = newRules.concat(propRules);
539
553
  }
554
+ if (newRules.length > 0) {
555
+ context.rulesMap[name] = newRules;
556
+ }
540
557
  return newRules;
541
558
  },
542
559
  watch: function watch() {
543
560
  var names = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [globalKey];
544
- var update = arguments.length > 1 ? arguments[1] : undefined;
561
+ var updateFn = arguments.length > 1 ? arguments[1] : undefined;
545
562
  names.forEach(function (name) {
546
563
  context.flowMap[name] = context.flowMap[name] || new Set();
547
- context.flowMap[name].add(update);
564
+ context.flowMap[name].add(updateFn);
548
565
  });
549
566
  },
550
567
  unWatch: function unWatch() {
551
568
  var names = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [globalKey];
552
- var update = arguments.length > 1 ? arguments[1] : undefined;
569
+ var updateFn = arguments.length > 1 ? arguments[1] : undefined;
553
570
  names.forEach(function (name) {
554
- if (update) {
555
- context.flowMap[name].delete(update);
571
+ if (updateFn) {
572
+ context.flowMap[name].delete(updateFn);
556
573
  } else {
557
574
  delete context.flowMap[name];
558
575
  }
@@ -216,6 +216,7 @@ export type FormContext = {
216
216
  mounted: boolean;
217
217
  updateMap: ObjectType<Set<(formValue: ObjectType, errors: ObjectType<Error | undefined>, serverErrors: ObjectType<Error | undefined>) => void>>;
218
218
  flowMap: ObjectType<Set<() => void>>;
219
+ rulesMap: ObjectType<FormItemRule<any>>;
219
220
  value: ObjectType;
220
221
  errors: ObjectType<Error | undefined>;
221
222
  serverErrors: ObjectType<Error | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"use-form.type.d.ts","sourceRoot":"","sources":["use-form.type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-form.type.d.ts","sourceRoot":"","sources":["use-form.type.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,13 @@ export declare const getAllKeyPaths: (obj: ObjectType, parentKey?: string) => st
45
45
  * console.log(completeFields) // ['user', 'user.name', 'user.age', 'user[0].name', 'user[0].age', 'user[1].name', 'user[1].age']
46
46
  */
47
47
  export declare const getCompleteFieldKeys: (fields: string | string[], allFields: string[]) => string[];
48
+ /**
49
+ * 获取字段的所有父级key数组
50
+ * @param field 字段key
51
+ * @description 获取字段的所有父级key数组,并去掉数组下标部分, 结果按从近及远排序
52
+ * @example a.b[0].c => ['a.b', 'a']
53
+ */
54
+ export declare const getParentKeys: (field: string) => string[];
48
55
  /**
49
56
  * 将对象中的所有值设置为空, 如果值是数组,重置为空数组,如果是对象,重置为空对象,如果是基础类型,重置为undefined
50
57
  * @param obj 对象
@@ -1 +1 @@
1
- {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["object.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,UAGvC;AASD,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAGD,eAAO,MAAM,YAAY,QAAS,UAAU,UAG3C,CAAC;AAGF,eAAO,MAAM,SAAS,2CAEZ,UAAU,YACT,WAAW,eAwBrB,CAAC;AAEF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,+DA4BxC;AAED,UAAU,cAAc;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,OAAO,WACV,UAAU,QACZ,MAAM,SACL,GAAG,YACD,cAAc,eAiDxB,CAAC;AAEF,eAAO,MAAM,OAAO,WAAY,UAAU,QAAQ,MAAM,YAAW,WAAW,YAyB7E,CAAC;AAEF,eAAO,MAAM,UAAU,WAAY,UAAU,QAAQ,MAAM,eA0B1D,CAAC;AAEF,eAAO,MAAM,OAAO,WAAY,UAAU,QAAQ,MAAM,YAavD,CAAC;AAEF,eAAO,MAAM,OAAO,QAAS,UAAU,YAItC,CAAC;AAEF,eAAO,MAAM,WAAW,wFAQvB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,QAAS,UAAU,cAAa,MAAM,KAAQ,MAAM,EAoB9E,CAAC;AAGF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,WAAY,MAAM,GAAG,MAAM,EAAE,aAAa,MAAM,EAAE,KAAG,MAAM,EAmB3F,CAAA;AAGD;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAS,UAAU,KAAG,GAW5C,CAAC"}
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["object.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,UAGvC;AASD,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAGD,eAAO,MAAM,YAAY,QAAS,UAAU,UAG3C,CAAC;AAGF,eAAO,MAAM,SAAS,2CAEZ,UAAU,YACT,WAAW,eAwBrB,CAAC;AAEF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,+DA4BxC;AAED,UAAU,cAAc;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,OAAO,WACV,UAAU,QACZ,MAAM,SACL,GAAG,YACD,cAAc,eAiDxB,CAAC;AAEF,eAAO,MAAM,OAAO,WAAY,UAAU,QAAQ,MAAM,YAAW,WAAW,YAyB7E,CAAC;AAEF,eAAO,MAAM,UAAU,WAAY,UAAU,QAAQ,MAAM,eA0B1D,CAAC;AAEF,eAAO,MAAM,OAAO,WAAY,UAAU,QAAQ,MAAM,YAavD,CAAC;AAEF,eAAO,MAAM,OAAO,QAAS,UAAU,YAItC,CAAC;AAEF,eAAO,MAAM,WAAW,wFAQvB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,QAAS,UAAU,cAAa,MAAM,KAAQ,MAAM,EAoB9E,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,WAAY,MAAM,GAAG,MAAM,EAAE,aAAa,MAAM,EAAE,KAAG,MAAM,EAmB3F,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAAM,EAYnD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAS,UAAU,KAAG,GAW5C,CAAC"}
@@ -327,6 +327,26 @@ export var getCompleteFieldKeys = function getCompleteFieldKeys(fields, allField
327
327
  return Array.from(new Set(completeFields));
328
328
  };
329
329
 
330
+ /**
331
+ * 获取字段的所有父级key数组
332
+ * @param field 字段key
333
+ * @description 获取字段的所有父级key数组,并去掉数组下标部分, 结果按从近及远排序
334
+ * @example a.b[0].c => ['a.b', 'a']
335
+ */
336
+ export var getParentKeys = function getParentKeys(field) {
337
+ if (!field) return [];
338
+ var parts = field.split('.');
339
+ var parentKeys = [];
340
+ for (var i = parts.length - 1; i > 0; i--) {
341
+ var parentKey = parts.slice(0, i).join('.');
342
+ var cleanedKey = parentKey.replace(/\[\d+\]/g, '');
343
+ if (cleanedKey && !parentKeys.includes(cleanedKey)) {
344
+ parentKeys.push(cleanedKey);
345
+ }
346
+ }
347
+ return parentKeys;
348
+ };
349
+
330
350
  /**
331
351
  * 将对象中的所有值设置为空, 如果值是数组,重置为空数组,如果是对象,重置为空对象,如果是基础类型,重置为undefined
332
352
  * @param obj 对象
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sheinx/hooks",
3
- "version": "3.9.1",
3
+ "version": "3.9.2-beta.2",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "license": "MIT",