@hi-ui/form 4.1.2 → 4.1.4

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.
@@ -10,103 +10,81 @@
10
10
  'use strict';
11
11
 
12
12
  var _typeof = require("@babel/runtime/helpers/typeof");
13
-
14
13
  Object.defineProperty(exports, '__esModule', {
15
14
  value: true
16
15
  });
17
-
18
16
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
19
-
20
17
  var tslib = require('tslib');
21
-
22
18
  var index = require('./utils/index.js');
23
-
24
19
  var React = require('react');
25
-
26
20
  var useLatest = require('@hi-ui/use-latest');
27
-
28
21
  var typeAssertion = require('@hi-ui/type-assertion');
29
-
30
22
  var funcUtils = require('@hi-ui/func-utils');
31
-
32
23
  var objectUtils = require('@hi-ui/object-utils');
33
-
34
24
  var domUtils = require('@hi-ui/dom-utils');
35
-
36
- function _interopDefaultLegacy(e) {
25
+ function _interopDefaultCompat(e) {
37
26
  return e && _typeof(e) === 'object' && 'default' in e ? e : {
38
27
  'default': e
39
28
  };
40
29
  }
41
-
42
- var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
43
-
44
- var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
45
-
30
+ var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultCompat(_regeneratorRuntime);
31
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
46
32
  var EMPTY_RULES = {};
47
33
  var EMPTY_ERRORS = {};
48
34
  var EMPTY_TOUCHED = {};
49
35
  var DEFAULT_VALIDATE_TRIGGER = ['onChange', 'onBlur'];
50
-
51
36
  var EMPTY_FUNC = function EMPTY_FUNC() {};
52
-
53
37
  var useForm = function useForm(_a) {
54
38
  var initialValues = _a.initialValues,
55
- _a$initialErrors = _a.initialErrors,
56
- initialErrors = _a$initialErrors === void 0 ? EMPTY_ERRORS : _a$initialErrors,
57
- _a$initialTouched = _a.initialTouched,
58
- initialTouched = _a$initialTouched === void 0 ? EMPTY_TOUCHED : _a$initialTouched,
59
- _a$lazyValidate = _a.lazyValidate,
60
- lazyValidate = _a$lazyValidate === void 0 ? false : _a$lazyValidate,
61
- onValuesChange = _a.onValuesChange,
62
- onReset = _a.onReset,
63
- onSubmit = _a.onSubmit,
64
- _a$rules = _a.rules,
65
- rules = _a$rules === void 0 ? EMPTY_RULES : _a$rules,
66
- _a$validateAfterTouch = _a.validateAfterTouched,
67
- validateAfterTouched = _a$validateAfterTouch === void 0 ? false : _a$validateAfterTouch,
68
- _a$validateTrigger = _a.validateTrigger,
69
- validateTriggerProp = _a$validateTrigger === void 0 ? DEFAULT_VALIDATE_TRIGGER : _a$validateTrigger,
70
- rest = tslib.__rest(_a, ["initialValues", "initialErrors", "initialTouched", "lazyValidate", "onValuesChange", "onReset", "onSubmit", "rules", "validateAfterTouched", "validateTrigger"]);
39
+ _a$initialErrors = _a.initialErrors,
40
+ initialErrors = _a$initialErrors === void 0 ? EMPTY_ERRORS : _a$initialErrors,
41
+ _a$initialTouched = _a.initialTouched,
42
+ initialTouched = _a$initialTouched === void 0 ? EMPTY_TOUCHED : _a$initialTouched,
43
+ _a$lazyValidate = _a.lazyValidate,
44
+ lazyValidate = _a$lazyValidate === void 0 ? false : _a$lazyValidate,
45
+ onValuesChange = _a.onValuesChange,
46
+ onReset = _a.onReset,
47
+ onSubmit = _a.onSubmit,
48
+ _a$rules = _a.rules,
49
+ rules = _a$rules === void 0 ? EMPTY_RULES : _a$rules,
50
+ _a$validateAfterTouch = _a.validateAfterTouched,
51
+ validateAfterTouched = _a$validateAfterTouch === void 0 ? false : _a$validateAfterTouch,
52
+ _a$validateTrigger = _a.validateTrigger,
53
+ validateTriggerProp = _a$validateTrigger === void 0 ? DEFAULT_VALIDATE_TRIGGER : _a$validateTrigger,
54
+ rest = tslib.__rest(_a, ["initialValues", "initialErrors", "initialTouched", "lazyValidate", "onValuesChange", "onReset", "onSubmit", "rules", "validateAfterTouched", "validateTrigger"]);
71
55
  /**
72
56
  * 处理校验触发器,保证 memo 依赖的是数组每个项,避免无效重渲染
73
57
  */
74
-
75
-
76
- var validateTrigger = typeAssertion.isArray(validateTriggerProp) ? validateTriggerProp : [validateTriggerProp]; // eslint-disable-next-line react-hooks/exhaustive-deps
77
-
58
+ var validateTrigger = typeAssertion.isArray(validateTriggerProp) ? validateTriggerProp : [validateTriggerProp];
59
+ // eslint-disable-next-line react-hooks/exhaustive-deps
78
60
  var validateTriggersMemo = React.useMemo(function () {
79
61
  return validateTrigger;
80
62
  }, validateTrigger);
81
63
  /**
82
64
  * 收集 Field 的校验器注册表
83
65
  */
84
-
85
66
  var _useCollection = useCollection(),
86
- getValidation = _useCollection[0],
87
- registerField = _useCollection[1],
88
- unregisterField = _useCollection[2],
89
- getRegisteredKeys = _useCollection[3];
67
+ getValidation = _useCollection[0],
68
+ registerField = _useCollection[1],
69
+ unregisterField = _useCollection[2],
70
+ getRegisteredKeys = _useCollection[3];
90
71
  /**
91
72
  * form 数据管理中心
92
73
  */
93
-
94
-
95
74
  var _useReducer = React.useReducer(formReducer, {
96
- values: initialValues,
97
- errors: initialErrors,
98
- touched: initialTouched,
99
- validating: false,
100
- submitting: false
101
- }),
102
- formState = _useReducer[0],
103
- formDispatch = _useReducer[1]; // 使用 latest ref 维护,保证每次主动拿取的 formState 都是最新的
104
-
105
-
106
- var formStateRef = useLatest.useLatestRef(formState); // const getFieldNames = useCallback(() => Object.keys(formStateRef.current.values as any), [
75
+ values: initialValues,
76
+ errors: initialErrors,
77
+ touched: initialTouched,
78
+ validating: false,
79
+ submitting: false
80
+ }),
81
+ formState = _useReducer[0],
82
+ formDispatch = _useReducer[1];
83
+ // 使用 latest ref 维护,保证每次主动拿取的 formState 都是最新的
84
+ var formStateRef = useLatest.useLatestRef(formState);
85
+ // const getFieldNames = useCallback(() => Object.keys(formStateRef.current.values as any), [
107
86
  // formStateRef,
108
87
  // ])
109
-
110
88
  var getFieldValue = React.useCallback(function (fieldName) {
111
89
  return objectUtils.getNested(formStateRef.current.values, fieldName);
112
90
  }, [formStateRef]);
@@ -133,7 +111,6 @@ var useForm = function useForm(_a) {
133
111
  if (touched === void 0) {
134
112
  touched = false;
135
113
  }
136
-
137
114
  formDispatch({
138
115
  type: 'SET_FIELD_TOUCHED',
139
116
  // @ts-ignore
@@ -146,7 +123,6 @@ var useForm = function useForm(_a) {
146
123
  /**
147
124
  * 使用单个 Field 规则对给定值进行校验
148
125
  */
149
-
150
126
  var validateField = React.useCallback(function (field, value) {
151
127
  return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee() {
152
128
  var fieldValidation, errorResultAsPromise;
@@ -155,14 +131,11 @@ var useForm = function useForm(_a) {
155
131
  switch (_context.prev = _context.next) {
156
132
  case 0:
157
133
  fieldValidation = getValidation(field);
158
-
159
134
  if (fieldValidation) {
160
135
  _context.next = 3;
161
136
  break;
162
137
  }
163
-
164
138
  return _context.abrupt("return");
165
-
166
139
  case 3:
167
140
  formDispatch({
168
141
  type: 'SET_VALIDATING',
@@ -178,16 +151,14 @@ var useForm = function useForm(_a) {
178
151
  return objectUtils.setNested({}, field, value);
179
152
  }, function (errorMsg) {
180
153
  var _a, _b, _c;
181
-
182
154
  formDispatch({
183
155
  type: 'SET_VALIDATING',
184
156
  payload: false
185
- }); // @ts-ignore
186
-
157
+ });
158
+ // @ts-ignore
187
159
  setFieldError(field, (_c = (_b = (_a = errorMsg.fields[index.stringify(field)]) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) !== null && _c !== void 0 ? _c : '');
188
160
  throw errorMsg;
189
161
  }));
190
-
191
162
  case 6:
192
163
  case "end":
193
164
  return _context.stop();
@@ -199,7 +170,6 @@ var useForm = function useForm(_a) {
199
170
  /**
200
171
  * 校验单个 Field 及其当前值
201
172
  */
202
-
203
173
  var validateFieldState = React.useCallback(function (field) {
204
174
  var value = getFieldValue(field);
205
175
  return validateField(field, value);
@@ -207,7 +177,6 @@ var useForm = function useForm(_a) {
207
177
  /**
208
178
  * 检验所有字段
209
179
  */
210
-
211
180
  var validateAll = React.useCallback(function () {
212
181
  var fieldNames = getRegisteredKeys();
213
182
  formDispatch({
@@ -217,37 +186,30 @@ var useForm = function useForm(_a) {
217
186
  return Promise.all(fieldNames.map(function (fieldName) {
218
187
  var value = getFieldValue(fieldName);
219
188
  var fieldValidation = getValidation(fieldName);
220
-
221
189
  if (!fieldValidation) {
222
190
  return Promise.resolve(null);
223
- } // catch 错误,保证检验所有表单项
224
-
225
-
191
+ }
192
+ // catch 错误,保证检验所有表单项
226
193
  return fieldValidation.validate(value)["catch"](function (error) {
227
194
  // 第一个出错,即退出校验
228
195
  if (lazyValidate) {
229
196
  throw error;
230
197
  }
231
-
232
198
  return error;
233
199
  });
234
200
  })).then(function (result) {
235
201
  // 合并错误,批量更新并返回
236
202
  var combinedError = result.reduce(function (prev, cur, index$1) {
237
203
  var _a, _b;
238
-
239
204
  var fieldName = fieldNames[index$1];
240
205
  var errorMsg;
241
-
242
206
  if (cur instanceof Error) {
243
207
  // @ts-ignore
244
208
  errorMsg = ((_b = (_a = cur.fields[index.stringify(fieldName)]) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) || '';
245
-
246
209
  if (typeof errorMsg === 'string' && !!errorMsg) {
247
210
  return objectUtils.setNested(prev, fieldName, errorMsg);
248
211
  }
249
212
  }
250
-
251
213
  return prev;
252
214
  }, {});
253
215
  formDispatch({
@@ -261,16 +223,14 @@ var useForm = function useForm(_a) {
261
223
  return combinedError;
262
224
  })["catch"](function (error) {
263
225
  var _a, _b;
264
-
265
226
  var fieldNameStrings = fieldNames.map(function (item) {
266
227
  return index.stringify(item);
267
- }); // @ts-ignore
268
-
228
+ });
229
+ // @ts-ignore
269
230
  var fieldNameString = Object.keys(error.fields).find(function (item) {
270
231
  return fieldNameStrings.includes(item);
271
232
  });
272
233
  var combinedError = {};
273
-
274
234
  if (!fieldNameString) {
275
235
  formDispatch({
276
236
  type: 'SET_VALIDATING',
@@ -278,20 +238,15 @@ var useForm = function useForm(_a) {
278
238
  });
279
239
  return error;
280
240
  }
281
-
282
241
  var errorMsg;
283
-
284
242
  if (error instanceof Error) {
285
243
  // @ts-ignore
286
244
  errorMsg = ((_b = (_a = error.fields[fieldNameString]) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) || '';
287
245
  }
288
-
289
246
  var fieldName = index.parse(fieldNameString);
290
-
291
247
  if (typeof errorMsg === 'string' && !!errorMsg) {
292
248
  combinedError = objectUtils.setNested(combinedError, fieldName, errorMsg);
293
249
  }
294
-
295
250
  formDispatch({
296
251
  type: 'SET_VALIDATING',
297
252
  payload: false
@@ -306,7 +261,6 @@ var useForm = function useForm(_a) {
306
261
  /**
307
262
  * 控件值更新策略
308
263
  */
309
-
310
264
  var setFieldValue = React.useCallback(function (field, value, shouldValidate) {
311
265
  formDispatch({
312
266
  type: 'SET_FIELD_VALUE',
@@ -314,10 +268,9 @@ var useForm = function useForm(_a) {
314
268
  field: field,
315
269
  value: value
316
270
  }
317
- }); // touched 给外部控制展示,而不是当做参数暴露
318
-
271
+ });
272
+ // touched 给外部控制展示,而不是当做参数暴露
319
273
  var shouldValidateField = validateAfterTouched ? objectUtils.getNested(formState.touched, field) && shouldValidate : shouldValidate;
320
-
321
274
  if (shouldValidateField) {
322
275
  validateField(field, value)["catch"](EMPTY_FUNC);
323
276
  }
@@ -332,26 +285,23 @@ var useForm = function useForm(_a) {
332
285
  }, []);
333
286
  var normalizeValueFromChange = React.useCallback(function (eventOrValue, valuePropName) {
334
287
  var nextValue = eventOrValue;
335
-
336
288
  if (typeAssertion.isObjectLike(eventOrValue) && eventOrValue.target) {
337
- var event = eventOrValue; // @see https://reactjs.org/docs/events.html#event-pooling
338
-
289
+ var event = eventOrValue;
290
+ // @see https://reactjs.org/docs/events.html#event-pooling
339
291
  if (typeAssertion.isFunction(event.persist)) {
340
292
  event.persist();
341
293
  }
342
-
343
- var target = event.target || event.currentTarget; // if (hasOwnProp(target, valuePropName)) {
294
+ var target = event.target || event.currentTarget;
295
+ // if (hasOwnProp(target, valuePropName)) {
344
296
  // nextValue = target[valuePropName]
345
297
  // }
346
298
  // TODO: support all native html field
347
-
348
299
  if (/checkbox/.test(target.type)) {
349
300
  nextValue = target.checked;
350
301
  } else {
351
302
  nextValue = target.value;
352
303
  }
353
304
  }
354
-
355
305
  return nextValue;
356
306
  }, []);
357
307
  var handleFieldChange = React.useCallback(function (fieldName, valuePropName, valueDispatchTransform, shouldValidate) {
@@ -359,7 +309,6 @@ var useForm = function useForm(_a) {
359
309
  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
360
310
  args[_key - 1] = arguments[_key];
361
311
  }
362
-
363
312
  var nextValue = typeAssertion.isFunction(valueDispatchTransform) ? valueDispatchTransform.apply(void 0, [evt].concat(args)) : normalizeValueFromChange(evt, valuePropName);
364
313
  setFieldValue(fieldName, nextValue, shouldValidate);
365
314
  var changedValues = objectUtils.setNested({}, fieldName, nextValue);
@@ -370,13 +319,11 @@ var useForm = function useForm(_a) {
370
319
  /**
371
320
  * 控件失焦策略
372
321
  */
373
-
374
322
  var handleFieldBlur = React.useCallback(function (fieldName, shouldValidate) {
375
323
  return function (evt) {
376
324
  if (shouldValidate) {
377
325
  validateFieldState(fieldName)["catch"](EMPTY_FUNC);
378
326
  }
379
-
380
327
  setFieldTouched(fieldName, true);
381
328
  };
382
329
  }, [setFieldTouched, validateFieldState]);
@@ -388,7 +335,6 @@ var useForm = function useForm(_a) {
388
335
  /**
389
336
  * 表单重置,永远使用第一次的初始值
390
337
  */
391
-
392
338
  var initialValuesRef = React.useRef(initialValues);
393
339
  var initialErrorsRef = React.useRef(initialErrors);
394
340
  var initialTouchedRef = React.useRef(initialTouched);
@@ -403,13 +349,12 @@ var useForm = function useForm(_a) {
403
349
  values = nextState && nextState.values ? nextState.values : initialValuesRef.current;
404
350
  errors = nextState && nextState.errors ? nextState.errors : initialErrorsRef.current;
405
351
  touched = nextState && nextState.touched ? nextState.touched : initialTouchedRef.current;
406
- initialValuesRef.current = values; // @ts-ignore
407
-
352
+ initialValuesRef.current = values;
353
+ // @ts-ignore
408
354
  initialErrorsRef.current = errors;
409
355
  initialTouchedRef.current = touched;
410
356
  submitting = !!(nextState && nextState.submitting);
411
357
  validating = !!(nextState && nextState.validating);
412
-
413
358
  dispatchFn = function dispatchFn() {
414
359
  formDispatch({
415
360
  type: 'SET_FORM',
@@ -422,23 +367,18 @@ var useForm = function useForm(_a) {
422
367
  }
423
368
  });
424
369
  };
425
-
426
370
  if (!onResetLatestRef.current) {
427
371
  _context2.next = 15;
428
372
  break;
429
373
  }
430
-
431
374
  _context2.next = 12;
432
375
  return onResetLatestRef.current(formState.values);
433
-
434
376
  case 12:
435
377
  dispatchFn();
436
378
  _context2.next = 16;
437
379
  break;
438
-
439
380
  case 15:
440
381
  dispatchFn();
441
-
442
382
  case 16:
443
383
  case "end":
444
384
  return _context2.stop();
@@ -450,7 +390,6 @@ var useForm = function useForm(_a) {
450
390
  /**
451
391
  * 表单提交
452
392
  */
453
-
454
393
  var submitForm = React.useCallback(function () {
455
394
  return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3() {
456
395
  return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) {
@@ -463,10 +402,8 @@ var useForm = function useForm(_a) {
463
402
  return _context3.abrupt("return", validateAll().then(function (combinedErrors) {
464
403
  var isInstanceOfError = combinedErrors instanceof Error;
465
404
  var isActuallyValid = !!combinedErrors && !isInstanceOfError && Object.keys(combinedErrors).length === 0;
466
-
467
405
  if (isActuallyValid) {
468
406
  var promiseOrUndefined;
469
-
470
407
  try {
471
408
  // @ts-ignore
472
409
  promiseOrUndefined = onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(formState.values);
@@ -476,21 +413,19 @@ var useForm = function useForm(_a) {
476
413
  });
477
414
  throw error;
478
415
  }
479
-
480
416
  if (promiseOrUndefined === undefined) {
481
417
  formDispatch({
482
418
  type: 'SUBMIT_DONE'
483
- }); // return combinedErrors
484
-
419
+ });
420
+ // return combinedErrors
485
421
  return formState.values;
486
422
  }
487
-
488
423
  return Promise.resolve(promiseOrUndefined).then(function (result) {
489
424
  formDispatch({
490
425
  type: 'SUBMIT_DONE'
491
- }); // return result
426
+ });
427
+ // return result
492
428
  // TODO: 满足promise 如果既给到values 又给到 errors
493
-
494
429
  return formState.values;
495
430
  })["catch"](function (_errors) {
496
431
  formDispatch({
@@ -502,7 +437,6 @@ var useForm = function useForm(_a) {
502
437
  formDispatch({
503
438
  type: 'SUBMIT_DONE'
504
439
  });
505
-
506
440
  if (isInstanceOfError) {
507
441
  throw combinedErrors;
508
442
  } else {
@@ -515,7 +449,6 @@ var useForm = function useForm(_a) {
515
449
  });
516
450
  throw error;
517
451
  }));
518
-
519
452
  case 2:
520
453
  case "end":
521
454
  return _context3.stop();
@@ -556,25 +489,23 @@ var useForm = function useForm(_a) {
556
489
  });
557
490
  var getFieldProps = React.useCallback(function (props) {
558
491
  var _returnProps;
559
-
560
492
  if (props === void 0) {
561
493
  props = {};
562
494
  }
563
-
564
495
  var _props = props,
565
- field = _props.field,
566
- _props$valuePropName = _props.valuePropName,
567
- valuePropName = _props$valuePropName === void 0 ? 'value' : _props$valuePropName,
568
- _props$valueChangeFun = _props.valueChangeFuncPropName,
569
- valueChangeFuncPropName = _props$valueChangeFun === void 0 ? 'onChange' : _props$valueChangeFun,
570
- valueDispatchTransform = _props.valueDispatchTransform,
571
- valueConnectTransform = _props.valueConnectTransform,
572
- _props$validateTrigge = _props.validateTrigger,
573
- validateTriggerProp = _props$validateTrigge === void 0 ? validateTriggersMemo : _props$validateTrigge,
574
- children = _props.children; // field 未设置,不进行收集管理
575
-
576
- if (!index.isValidField(field)) return {}; // 控件的 props
577
-
496
+ field = _props.field,
497
+ _props$valuePropName = _props.valuePropName,
498
+ valuePropName = _props$valuePropName === void 0 ? 'value' : _props$valuePropName,
499
+ _props$valueChangeFun = _props.valueChangeFuncPropName,
500
+ valueChangeFuncPropName = _props$valueChangeFun === void 0 ? 'onChange' : _props$valueChangeFun,
501
+ valueDispatchTransform = _props.valueDispatchTransform,
502
+ valueConnectTransform = _props.valueConnectTransform,
503
+ _props$validateTrigge = _props.validateTrigger,
504
+ validateTriggerProp = _props$validateTrigge === void 0 ? validateTriggersMemo : _props$validateTrigge,
505
+ children = _props.children;
506
+ // field 未设置,不进行收集管理
507
+ if (!index.isValidField(field)) return {};
508
+ // 控件的 props
578
509
  var controlProps = children && children.props || {};
579
510
  var validateTrigger = typeAssertion.isArray(validateTriggerProp) ? validateTriggerProp : [validateTriggerProp];
580
511
  var validateOnCollect = validateTrigger.includes(valueChangeFuncPropName);
@@ -614,62 +545,50 @@ var useForm = function useForm(_a) {
614
545
  getFieldsError: getFieldsError
615
546
  });
616
547
  };
617
-
618
548
  function formReducer(state, action) {
619
549
  switch (action.type) {
620
550
  case 'SET_STATE':
621
551
  var nextState = typeAssertion.isFunction(action.payload) ? action.payload(state) : action.payload;
622
552
  return Object.assign(Object.assign({}, state), nextState);
623
-
624
553
  case 'SET_VALUES':
625
554
  var nextValues = typeAssertion.isFunction(action.payload) ? action.payload(state.values) : action.payload;
626
555
  return Object.assign(Object.assign({}, state), {
627
556
  values: nextValues
628
557
  });
629
-
630
558
  case 'SET_ERRORS':
631
559
  return Object.assign(Object.assign({}, state), {
632
560
  errors: action.payload
633
561
  });
634
-
635
562
  case 'SET_TOUCHED':
636
563
  return Object.assign(Object.assign({}, state), {
637
564
  touched: action.payload
638
565
  });
639
-
640
566
  case 'SET_SUBMITTING':
641
567
  return Object.assign(Object.assign({}, state), {
642
568
  submitting: action.payload
643
569
  });
644
-
645
570
  case 'SET_VALIDATING':
646
571
  return Object.assign(Object.assign({}, state), {
647
572
  validating: action.payload
648
573
  });
649
-
650
574
  case 'SET_FIELD_VALUE':
651
575
  return Object.assign(Object.assign({}, state), {
652
576
  values: objectUtils.setNested(state.values, action.payload.field, action.payload.value)
653
577
  });
654
-
655
578
  case 'SET_FIELD_TOUCHED':
656
579
  return Object.assign(Object.assign({}, state), {
657
580
  touched: objectUtils.setNested(state.touched, action.payload.field, action.payload.value)
658
581
  });
659
-
660
582
  case 'SET_FIELD_ERROR':
661
583
  return Object.assign(Object.assign({}, state), {
662
584
  errors: objectUtils.setNested(state.errors, action.payload.field, action.payload.value)
663
585
  });
664
-
665
586
  case 'SET_FORM':
666
587
  return Object.assign(Object.assign({}, state), action.payload);
667
-
668
588
  case 'SUBMIT_DONE':
669
589
  return Object.assign(Object.assign({}, state), {
670
590
  submitting: false
671
591
  });
672
-
673
592
  default:
674
593
  return state;
675
594
  }
@@ -677,8 +596,6 @@ function formReducer(state, action) {
677
596
  /**
678
597
  * 一个注册表的收集器
679
598
  */
680
-
681
-
682
599
  var useCollection = function useCollection() {
683
600
  var collectionMp = React.useMemo(function () {
684
601
  return new Map();
@@ -692,11 +609,9 @@ var useCollection = function useCollection() {
692
609
  }, []);
693
610
  var getCollection = React.useCallback(function (keyOrKeys) {
694
611
  var key = index.stringify(keyOrKeys);
695
-
696
612
  if (collectionRef.current.has(key)) {
697
613
  return collectionRef.current.get(key);
698
614
  }
699
-
700
615
  return null;
701
616
  }, []);
702
617
  var getRegisteredKeys = React.useCallback(function () {
@@ -708,5 +623,4 @@ var useCollection = function useCollection() {
708
623
  }, []);
709
624
  return [getCollection, register, unregister, getRegisteredKeys];
710
625
  };
711
-
712
626
  exports.useForm = useForm;
@@ -12,19 +12,16 @@
12
12
  Object.defineProperty(exports, '__esModule', {
13
13
  value: true
14
14
  });
15
-
16
15
  var typeAssertion = require('@hi-ui/type-assertion');
17
-
18
16
  var objectUtils = require('@hi-ui/object-utils');
19
17
 
18
+ // TODO: 支持 数字字符串持久化 唯一化
20
19
  var stringify = function stringify(field) {
21
20
  return JSON.stringify(field);
22
21
  };
23
-
24
22
  var parse = function parse(fieldStr) {
25
23
  return JSON.parse(fieldStr);
26
24
  };
27
-
28
25
  var isValidField = function isValidField(field) {
29
26
  if (typeAssertion.isNullish(field) || field === '') return false;
30
27
  if (typeAssertion.isArray(field) && field.every(function (item) {
@@ -32,21 +29,17 @@ var isValidField = function isValidField(field) {
32
29
  })) return false;
33
30
  return true;
34
31
  };
35
-
36
32
  var mergeValues = function mergeValues(source, override) {
37
33
  if (!override) return source;
38
34
  if (!source) return objectUtils.clone(override);
39
35
  var target = objectUtils.clone(source);
40
-
41
36
  for (var key in override) {
42
37
  if (objectUtils.hasOwnProp(override, key)) {
43
38
  target[key] = override[key];
44
39
  }
45
40
  }
46
-
47
41
  return target;
48
42
  };
49
-
50
43
  exports.isValidField = isValidField;
51
44
  exports.mergeValues = mergeValues;
52
45
  exports.parse = parse;