@sunggang/ui-lib 0.4.3 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.esm.cjs.js CHANGED
@@ -4,26 +4,7 @@ var React = require('react');
4
4
 
5
5
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
6
6
 
7
- function _interopNamespace(e) {
8
- if (e && e.__esModule) return e;
9
- var n = Object.create(null);
10
- if (e) {
11
- Object.keys(e).forEach(function (k) {
12
- if (k !== 'default') {
13
- var d = Object.getOwnPropertyDescriptor(e, k);
14
- Object.defineProperty(n, k, d.get ? d : {
15
- enumerable: true,
16
- get: function () { return e[k]; }
17
- });
18
- }
19
- });
20
- }
21
- n["default"] = e;
22
- return Object.freeze(n);
23
- }
24
-
25
7
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
26
- var React__namespace = /*#__PURE__*/_interopNamespace(React);
27
8
 
28
9
  function _array_like_to_array(arr, len) {
29
10
  if (len == null || len > arr.length) len = arr.length;
@@ -328,10 +309,8 @@ function cloneObject(data) {
328
309
  var isFileListInstance = typeof FileList !== "undefined" ? _instanceof(data, FileList) : false;
329
310
  if (_instanceof(data, Date)) {
330
311
  copy = new Date(data);
331
- } else if (_instanceof(data, Set)) {
332
- copy = new Set(data);
333
312
  } else if (!(isWeb && (_instanceof(data, Blob) || isFileListInstance)) && (isArray || isObject(data))) {
334
- copy = isArray ? [] : {};
313
+ copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));
335
314
  if (!isArray && !isPlainObject(data)) {
336
315
  copy = data;
337
316
  } else {
@@ -346,17 +325,25 @@ function cloneObject(data) {
346
325
  }
347
326
  return copy;
348
327
  }
349
- var compact = function(value1) {
350
- return Array.isArray(value1) ? value1.filter(Boolean) : [];
328
+ var isKey = function(value1) {
329
+ return /^\w*$/.test(value1);
351
330
  };
352
331
  var isUndefined = function(val) {
353
332
  return val === undefined;
354
333
  };
334
+ var compact = function(value1) {
335
+ return Array.isArray(value1) ? value1.filter(Boolean) : [];
336
+ };
337
+ var stringToPath = function(input) {
338
+ return compact(input.replace(/["|']|\]/g, "").split(/\.|\[/));
339
+ };
355
340
  var get = function(object, path, defaultValue) {
356
341
  if (!path || !isObject(object)) {
357
342
  return defaultValue;
358
343
  }
359
- var result = compact(path.split(/[,[\].]+?/)).reduce(function(result, key) {
344
+ var result = (isKey(path) ? [
345
+ path
346
+ ] : stringToPath(path)).reduce(function(result, key) {
360
347
  return isNullOrUndefined(result) ? result : result[key];
361
348
  }, object);
362
349
  return isUndefined(result) || result === object ? isUndefined(object[path]) ? defaultValue : object[path] : result;
@@ -364,12 +351,6 @@ var get = function(object, path, defaultValue) {
364
351
  var isBoolean = function(value1) {
365
352
  return typeof value1 === "boolean";
366
353
  };
367
- var isKey = function(value1) {
368
- return /^\w*$/.test(value1);
369
- };
370
- var stringToPath = function(input) {
371
- return compact(input.replace(/["|']|\]/g, "").split(/\.|\[/));
372
- };
373
354
  var set = function(object, path, value1) {
374
355
  var index = -1;
375
356
  var tempPath = isKey(path) ? [
@@ -413,6 +394,7 @@ var INPUT_VALIDATION_RULES = {
413
394
  validate: "validate"
414
395
  };
415
396
  var HookFormContext = React__default["default"].createContext(null);
397
+ HookFormContext.displayName = "HookFormContext";
416
398
  /**
417
399
  * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.
418
400
  *
@@ -502,7 +484,7 @@ var getProxyFormState = function(formState, control, localProxyFormState) {
502
484
  for(var key in formState)_loop(key);
503
485
  return result;
504
486
  };
505
- var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React__namespace.useLayoutEffect : React__namespace.useEffect;
487
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React__default["default"].useLayoutEffect : React__default["default"].useEffect;
506
488
  /**
507
489
  * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.
508
490
  *
@@ -535,7 +517,7 @@ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React__namespace
535
517
  */ function useFormState(props) {
536
518
  var methods = useFormContext();
537
519
  var _ref = props || {}, _ref_control = _ref.control, control = _ref_control === void 0 ? methods.control : _ref_control, disabled = _ref.disabled, name = _ref.name, exact = _ref.exact;
538
- var _React__default_useState = _sliced_to_array(React__default["default"].useState(control._formState), 2), formState = _React__default_useState[0], updateFormState = _React__default_useState[1];
520
+ var _React_useState = _sliced_to_array(React__default["default"].useState(control._formState), 2), formState = _React_useState[0], updateFormState = _React_useState[1];
539
521
  var _localProxyFormState = React__default["default"].useRef({
540
522
  isDirty: false,
541
523
  isLoading: false,
@@ -588,6 +570,58 @@ var generateWatchOutput = function(names, _names, formValues, isGlobal, defaultV
588
570
  isGlobal && (_names.watchAll = true);
589
571
  return formValues;
590
572
  };
573
+ var isPrimitive = function(value1) {
574
+ return isNullOrUndefined(value1) || !isObjectType(value1);
575
+ };
576
+ function deepEqual(object1, object2) {
577
+ var _internal_visited = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : new WeakSet();
578
+ if (isPrimitive(object1) || isPrimitive(object2)) {
579
+ return object1 === object2;
580
+ }
581
+ if (isDateObject(object1) && isDateObject(object2)) {
582
+ return object1.getTime() === object2.getTime();
583
+ }
584
+ var keys1 = Object.keys(object1);
585
+ var keys2 = Object.keys(object2);
586
+ if (keys1.length !== keys2.length) {
587
+ return false;
588
+ }
589
+ if (_internal_visited.has(object1) || _internal_visited.has(object2)) {
590
+ return true;
591
+ }
592
+ _internal_visited.add(object1);
593
+ _internal_visited.add(object2);
594
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
595
+ try {
596
+ for(var _iterator = keys1[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
597
+ var key = _step.value;
598
+ var val1 = object1[key];
599
+ if (!keys2.includes(key)) {
600
+ return false;
601
+ }
602
+ if (key !== "ref") {
603
+ var val2 = object2[key];
604
+ if (isDateObject(val1) && isDateObject(val2) || isObject(val1) && isObject(val2) || Array.isArray(val1) && Array.isArray(val2) ? !deepEqual(val1, val2, _internal_visited) : val1 !== val2) {
605
+ return false;
606
+ }
607
+ }
608
+ }
609
+ } catch (err) {
610
+ _didIteratorError = true;
611
+ _iteratorError = err;
612
+ } finally{
613
+ try {
614
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
615
+ _iterator.return();
616
+ }
617
+ } finally{
618
+ if (_didIteratorError) {
619
+ throw _iteratorError;
620
+ }
621
+ }
622
+ }
623
+ return true;
624
+ }
591
625
  /**
592
626
  * Custom hook to subscribe to field change and isolate re-rendering at the component level.
593
627
  *
@@ -605,9 +639,18 @@ var generateWatchOutput = function(names, _names, formValues, isGlobal, defaultV
605
639
  * ```
606
640
  */ function useWatch(props) {
607
641
  var methods = useFormContext();
608
- var _ref = props || {}, _ref_control = _ref.control, control = _ref_control === void 0 ? methods.control : _ref_control, name = _ref.name, defaultValue = _ref.defaultValue, disabled = _ref.disabled, exact = _ref.exact;
642
+ var _ref = props || {}, _ref_control = _ref.control, control = _ref_control === void 0 ? methods.control : _ref_control, name = _ref.name, defaultValue = _ref.defaultValue, disabled = _ref.disabled, exact = _ref.exact, compute = _ref.compute;
609
643
  var _defaultValue = React__default["default"].useRef(defaultValue);
610
- var _React__default_useState = _sliced_to_array(React__default["default"].useState(control._getWatch(name, _defaultValue.current)), 2), value1 = _React__default_useState[0], updateValue = _React__default_useState[1];
644
+ var _compute = React__default["default"].useRef(compute);
645
+ var _computeFormValues = React__default["default"].useRef(undefined);
646
+ _compute.current = compute;
647
+ var defaultValueMemo = React__default["default"].useMemo(function() {
648
+ return control._getWatch(name, _defaultValue.current);
649
+ }, [
650
+ control,
651
+ name
652
+ ]);
653
+ var _React_useState = _sliced_to_array(React__default["default"].useState(_compute.current ? _compute.current(defaultValueMemo) : defaultValueMemo), 2), value1 = _React_useState[0], updateValue = _React_useState[1];
611
654
  useIsomorphicLayoutEffect(function() {
612
655
  return control._subscribe({
613
656
  name: name,
@@ -616,13 +659,24 @@ var generateWatchOutput = function(names, _names, formValues, isGlobal, defaultV
616
659
  },
617
660
  exact: exact,
618
661
  callback: function(formState) {
619
- return !disabled && updateValue(generateWatchOutput(name, control._names, formState.values || control._formValues, false, _defaultValue.current));
662
+ if (!disabled) {
663
+ var formValues = generateWatchOutput(name, control._names, formState.values || control._formValues, false, _defaultValue.current);
664
+ if (_compute.current) {
665
+ var computedFormValues = _compute.current(formValues);
666
+ if (!deepEqual(computedFormValues, _computeFormValues.current)) {
667
+ updateValue(computedFormValues);
668
+ _computeFormValues.current = computedFormValues;
669
+ }
670
+ } else {
671
+ updateValue(formValues);
672
+ }
673
+ }
620
674
  }
621
675
  });
622
676
  }, [
623
- name,
624
677
  control,
625
678
  disabled,
679
+ name,
626
680
  exact
627
681
  ]);
628
682
  React__default["default"].useEffect(function() {
@@ -655,12 +709,19 @@ var generateWatchOutput = function(names, _names, formValues, isGlobal, defaultV
655
709
  * ```
656
710
  */ function useController(props) {
657
711
  var methods = useFormContext();
658
- var name = props.name, disabled = props.disabled, _props_control = props.control, control = _props_control === void 0 ? methods.control : _props_control, shouldUnregister = props.shouldUnregister;
712
+ var name = props.name, disabled = props.disabled, _props_control = props.control, control = _props_control === void 0 ? methods.control : _props_control, shouldUnregister = props.shouldUnregister, defaultValue = props.defaultValue;
659
713
  var isArrayField = isNameInFieldArray(control._names.array, name);
714
+ var defaultValueMemo = React__default["default"].useMemo(function() {
715
+ return get(control._formValues, name, get(control._defaultValues, name, defaultValue));
716
+ }, [
717
+ control,
718
+ name,
719
+ defaultValue
720
+ ]);
660
721
  var value1 = useWatch({
661
722
  control: control,
662
723
  name: name,
663
- defaultValue: get(control._formValues, name, get(control._defaultValues, name, props.defaultValue)),
724
+ defaultValue: defaultValueMemo,
664
725
  exact: true
665
726
  });
666
727
  var formState = useFormState({
@@ -674,6 +735,7 @@ var generateWatchOutput = function(names, _names, formValues, isGlobal, defaultV
674
735
  }), isBoolean(props.disabled) ? {
675
736
  disabled: props.disabled
676
737
  } : {})));
738
+ _props.current = props;
677
739
  var fieldState = React__default["default"].useMemo(function() {
678
740
  return Object.defineProperties({}, {
679
741
  invalid: {
@@ -739,10 +801,10 @@ var generateWatchOutput = function(names, _names, formValues, isGlobal, defaultV
739
801
  if (field && elm) {
740
802
  field._f.ref = {
741
803
  focus: function() {
742
- return elm.focus();
804
+ return elm.focus && elm.focus();
743
805
  },
744
806
  select: function() {
745
- return elm.select();
807
+ return elm.select && elm.select();
746
808
  },
747
809
  setCustomValidity: function(message) {
748
810
  return elm.setCustomValidity(message);
@@ -927,52 +989,6 @@ var createSubject = function() {
927
989
  unsubscribe: unsubscribe
928
990
  };
929
991
  };
930
- var isPrimitive = function(value1) {
931
- return isNullOrUndefined(value1) || !isObjectType(value1);
932
- };
933
- function deepEqual(object1, object2) {
934
- if (isPrimitive(object1) || isPrimitive(object2)) {
935
- return object1 === object2;
936
- }
937
- if (isDateObject(object1) && isDateObject(object2)) {
938
- return object1.getTime() === object2.getTime();
939
- }
940
- var keys1 = Object.keys(object1);
941
- var keys2 = Object.keys(object2);
942
- if (keys1.length !== keys2.length) {
943
- return false;
944
- }
945
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
946
- try {
947
- for(var _iterator = keys1[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
948
- var key = _step.value;
949
- var val1 = object1[key];
950
- if (!keys2.includes(key)) {
951
- return false;
952
- }
953
- if (key !== "ref") {
954
- var val2 = object2[key];
955
- if (isDateObject(val1) && isDateObject(val2) || isObject(val1) && isObject(val2) || Array.isArray(val1) && Array.isArray(val2) ? !deepEqual(val1, val2) : val1 !== val2) {
956
- return false;
957
- }
958
- }
959
- }
960
- } catch (err) {
961
- _didIteratorError = true;
962
- _iteratorError = err;
963
- } finally{
964
- try {
965
- if (!_iteratorNormalCompletion && _iterator.return != null) {
966
- _iterator.return();
967
- }
968
- } finally{
969
- if (_didIteratorError) {
970
- throw _iteratorError;
971
- }
972
- }
973
- }
974
- return true;
975
- }
976
992
  var isEmptyObject = function(value1) {
977
993
  return isObject(value1) && !Object.keys(value1).length;
978
994
  };
@@ -1265,6 +1281,12 @@ function schemaErrorLookup(errors, _fields, name) {
1265
1281
  error: foundError
1266
1282
  };
1267
1283
  }
1284
+ if (foundError && foundError.root && foundError.root.type) {
1285
+ return {
1286
+ name: "".concat(fieldName, ".root"),
1287
+ error: foundError.root
1288
+ };
1289
+ }
1268
1290
  names.pop();
1269
1291
  }
1270
1292
  return {
@@ -2042,7 +2064,7 @@ function createFormControl() {
2042
2064
  return;
2043
2065
  }
2044
2066
  var fieldValue = value1[fieldKey];
2045
- var fieldName = "".concat(name, ".").concat(fieldKey);
2067
+ var fieldName = name + "." + fieldKey;
2046
2068
  var field = get(_fields, fieldName);
2047
2069
  (_names.array.has(name) || isObject(fieldValue) || field && !field._f) && !isDateObject(fieldValue) ? setValues(fieldName, fieldValue, options) : setFieldValue(fieldName, fieldValue, options);
2048
2070
  }
@@ -2068,7 +2090,9 @@ function createFormControl() {
2068
2090
  } else {
2069
2091
  field && !field._f && !isNullOrUndefined(cloneValue) ? setValues(name, cloneValue, options) : setFieldValue(name, cloneValue, options);
2070
2092
  }
2071
- isWatched(name, _names) && _subjects.state.next(_object_spread({}, _formState));
2093
+ isWatched(name, _names) && _subjects.state.next(_object_spread_props(_object_spread({}, _formState), {
2094
+ name: name
2095
+ }));
2072
2096
  _subjects.state.next({
2073
2097
  name: _state.mount ? name : undefined,
2074
2098
  values: cloneObject(_formValues)
@@ -2100,8 +2124,10 @@ function createFormControl() {
2100
2124
  watched = isWatched(name, _names, isBlurEvent);
2101
2125
  set(_formValues, name, fieldValue);
2102
2126
  if (isBlurEvent) {
2103
- field._f.onBlur && field._f.onBlur(event);
2104
- delayErrorCallback && delayErrorCallback(0);
2127
+ if (!target || !target.readOnly) {
2128
+ field._f.onBlur && field._f.onBlur(event);
2129
+ delayErrorCallback && delayErrorCallback(0);
2130
+ }
2105
2131
  } else if (field._f.onChange) {
2106
2132
  field._f.onChange(event);
2107
2133
  }
@@ -2357,7 +2383,7 @@ function createFormControl() {
2357
2383
  var watch = function(name, defaultValue) {
2358
2384
  return isFunction(name) ? _subjects.state.subscribe({
2359
2385
  next: function(payload) {
2360
- return name(_getWatch(undefined, defaultValue), payload);
2386
+ return "values" in payload && name(_getWatch(undefined, defaultValue), payload);
2361
2387
  }
2362
2388
  }) : _getWatch(name, defaultValue, true);
2363
2389
  };
@@ -2365,9 +2391,11 @@ function createFormControl() {
2365
2391
  return _subjects.state.subscribe({
2366
2392
  next: function(formState) {
2367
2393
  if (shouldSubscribeByName(props.name, formState.name, props.exact) && shouldRenderFormState(formState, props.formState || _proxyFormState, _setFormState, props.reRenderRoot)) {
2368
- props.callback(_object_spread({
2394
+ props.callback(_object_spread_props(_object_spread({
2369
2395
  values: _object_spread({}, _formValues)
2370
- }, _formState, formState));
2396
+ }, _formState, formState), {
2397
+ defaultValues: _defaultValues
2398
+ }));
2371
2399
  }
2372
2400
  }
2373
2401
  }).unsubscribe;
@@ -2547,7 +2575,7 @@ function createFormControl() {
2547
2575
  case 1:
2548
2576
  _ref = _state.sent(), errors = _ref.errors, values = _ref.values;
2549
2577
  _formState.errors = errors;
2550
- fieldValues = values;
2578
+ fieldValues = cloneObject(values);
2551
2579
  return [
2552
2580
  3,
2553
2581
  4
@@ -2566,7 +2594,7 @@ function createFormControl() {
2566
2594
  try {
2567
2595
  for(_iterator = _names.disabled[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
2568
2596
  name = _step.value;
2569
- set(fieldValues, name, undefined);
2597
+ unset(fieldValues, name);
2570
2598
  }
2571
2599
  } catch (err) {
2572
2600
  _didIteratorError = true;
@@ -2747,28 +2775,32 @@ function createFormControl() {
2747
2775
  }
2748
2776
  }
2749
2777
  }
2750
- var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
2751
- try {
2752
- for(var _iterator2 = _names.mount[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
2753
- var fieldName1 = _step2.value;
2754
- setValue(fieldName1, get(values, fieldName1));
2755
- }
2756
- } catch (err) {
2757
- _didIteratorError2 = true;
2758
- _iteratorError2 = err;
2759
- } finally{
2778
+ if (keepStateOptions.keepFieldsRef) {
2779
+ var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
2760
2780
  try {
2761
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
2762
- _iterator2.return();
2781
+ for(var _iterator2 = _names.mount[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
2782
+ var fieldName1 = _step2.value;
2783
+ setValue(fieldName1, get(values, fieldName1));
2763
2784
  }
2785
+ } catch (err) {
2786
+ _didIteratorError2 = true;
2787
+ _iteratorError2 = err;
2764
2788
  } finally{
2765
- if (_didIteratorError2) {
2766
- throw _iteratorError2;
2789
+ try {
2790
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
2791
+ _iterator2.return();
2792
+ }
2793
+ } finally{
2794
+ if (_didIteratorError2) {
2795
+ throw _iteratorError2;
2796
+ }
2767
2797
  }
2768
2798
  }
2799
+ } else {
2800
+ _fields = {};
2769
2801
  }
2770
2802
  }
2771
- _formValues = cloneObject(values);
2803
+ _formValues = _options.shouldUnregister ? keepStateOptions.keepDefaultValues ? cloneObject(_defaultValues) : {} : cloneObject(values);
2772
2804
  _subjects.array.next({
2773
2805
  values: _object_spread({}, values)
2774
2806
  });
@@ -2795,7 +2827,8 @@ function createFormControl() {
2795
2827
  touchedFields: keepStateOptions.keepTouched ? _formState.touchedFields : {},
2796
2828
  errors: keepStateOptions.keepErrors ? _formState.errors : {},
2797
2829
  isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful ? _formState.isSubmitSuccessful : false,
2798
- isSubmitting: false
2830
+ isSubmitting: false,
2831
+ defaultValues: _defaultValues
2799
2832
  });
2800
2833
  };
2801
2834
  var reset = function(formValues, keepStateOptions) {
@@ -2833,6 +2866,7 @@ function createFormControl() {
2833
2866
  setError: setError,
2834
2867
  _subscribe: _subscribe,
2835
2868
  _runSchema: _runSchema,
2869
+ _focusError: _focusError,
2836
2870
  _getWatch: _getWatch,
2837
2871
  _getDirty: _getDirty,
2838
2872
  _setValid: _setValid,
@@ -2897,6 +2931,9 @@ function createFormControl() {
2897
2931
  });
2898
2932
  }
2899
2933
  var generateId = function() {
2934
+ if (typeof crypto !== "undefined" && crypto.randomUUID) {
2935
+ return crypto.randomUUID();
2936
+ }
2900
2937
  var d = typeof performance === "undefined" ? Date.now() : performance.now() * 1000;
2901
2938
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
2902
2939
  var r = (Math.random() * 16 + d) % 16 | 0;
@@ -3012,21 +3049,25 @@ var updateAt = function(fieldValues, index, value1) {
3012
3049
  */ function useFieldArray(props) {
3013
3050
  var methods = useFormContext();
3014
3051
  var _props_control = props.control, control = _props_control === void 0 ? methods.control : _props_control, name = props.name, _props_keyName = props.keyName, keyName = _props_keyName === void 0 ? "id" : _props_keyName, shouldUnregister = props.shouldUnregister, rules = props.rules;
3015
- var _React__default_useState = _sliced_to_array(React__default["default"].useState(control._getFieldArray(name)), 2), fields = _React__default_useState[0], setFields = _React__default_useState[1];
3052
+ var _React_useState = _sliced_to_array(React__default["default"].useState(control._getFieldArray(name)), 2), fields = _React_useState[0], setFields = _React_useState[1];
3016
3053
  var ids = React__default["default"].useRef(control._getFieldArray(name).map(generateId));
3017
3054
  var _fieldIds = React__default["default"].useRef(fields);
3018
- var _name = React__default["default"].useRef(name);
3019
3055
  var _actioned = React__default["default"].useRef(false);
3020
- _name.current = name;
3021
3056
  _fieldIds.current = fields;
3022
3057
  control._names.array.add(name);
3023
- rules && control.register(name, rules);
3024
- React__default["default"].useEffect(function() {
3058
+ React__default["default"].useMemo(function() {
3059
+ return rules && control.register(name, rules);
3060
+ }, [
3061
+ control,
3062
+ rules,
3063
+ name
3064
+ ]);
3065
+ useIsomorphicLayoutEffect(function() {
3025
3066
  return control._subjects.array.subscribe({
3026
3067
  next: function(param) {
3027
3068
  var values = param.values, fieldArrayName = param.name;
3028
- if (fieldArrayName === _name.current || !fieldArrayName) {
3029
- var fieldValues = get(values, _name.current);
3069
+ if (fieldArrayName === name || !fieldArrayName) {
3070
+ var fieldValues = get(values, name);
3030
3071
  if (Array.isArray(fieldValues)) {
3031
3072
  setFields(fieldValues);
3032
3073
  ids.current = fieldValues.map(generateId);
@@ -3035,7 +3076,8 @@ var updateAt = function(fieldValues, index, value1) {
3035
3076
  }
3036
3077
  }).unsubscribe;
3037
3078
  }, [
3038
- control
3079
+ control,
3080
+ name
3039
3081
  ]);
3040
3082
  var updateValues = React__default["default"].useCallback(function(updatedFieldArrayValues) {
3041
3083
  _actioned.current = true;
@@ -3279,7 +3321,7 @@ var updateAt = function(fieldValues, index, value1) {
3279
3321
  var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
3280
3322
  var _formControl = React__default["default"].useRef(undefined);
3281
3323
  var _values = React__default["default"].useRef(undefined);
3282
- var _React__default_useState = _sliced_to_array(React__default["default"].useState({
3324
+ var _React_useState = _sliced_to_array(React__default["default"].useState({
3283
3325
  isDirty: false,
3284
3326
  isValidating: false,
3285
3327
  isLoading: isFunction(props.defaultValues),
@@ -3295,13 +3337,22 @@ var updateAt = function(fieldValues, index, value1) {
3295
3337
  disabled: props.disabled || false,
3296
3338
  isReady: false,
3297
3339
  defaultValues: isFunction(props.defaultValues) ? undefined : props.defaultValues
3298
- }), 2), formState = _React__default_useState[0], updateFormState = _React__default_useState[1];
3340
+ }), 2), formState = _React_useState[0], updateFormState = _React_useState[1];
3299
3341
  if (!_formControl.current) {
3300
- _formControl.current = _object_spread_props(_object_spread({}, props.formControl ? props.formControl : createFormControl(props)), {
3301
- formState: formState
3302
- });
3303
- if (props.formControl && props.defaultValues && !isFunction(props.defaultValues)) {
3304
- props.formControl.reset(props.defaultValues, props.resetOptions);
3342
+ if (props.formControl) {
3343
+ _formControl.current = _object_spread_props(_object_spread({}, props.formControl), {
3344
+ formState: formState
3345
+ });
3346
+ if (props.defaultValues && !isFunction(props.defaultValues)) {
3347
+ props.formControl.reset(props.defaultValues, props.resetOptions);
3348
+ }
3349
+ } else {
3350
+ var _createFormControl = createFormControl(props); _createFormControl.formControl; var rest = _object_without_properties(_createFormControl, [
3351
+ "formControl"
3352
+ ]);
3353
+ _formControl.current = _object_spread_props(_object_spread({}, rest), {
3354
+ formState: formState
3355
+ });
3305
3356
  }
3306
3357
  }
3307
3358
  var control = _formControl.current.control;
@@ -3337,15 +3388,20 @@ var updateAt = function(fieldValues, index, value1) {
3337
3388
  if (props.reValidateMode) {
3338
3389
  control._options.reValidateMode = props.reValidateMode;
3339
3390
  }
3340
- if (props.errors && !isEmptyObject(props.errors)) {
3341
- control._setErrors(props.errors);
3342
- }
3343
3391
  }, [
3344
3392
  control,
3345
- props.errors,
3346
3393
  props.mode,
3347
3394
  props.reValidateMode
3348
3395
  ]);
3396
+ React__default["default"].useEffect(function() {
3397
+ if (props.errors) {
3398
+ control._setErrors(props.errors);
3399
+ control._focusError();
3400
+ }
3401
+ }, [
3402
+ control,
3403
+ props.errors
3404
+ ]);
3349
3405
  React__default["default"].useEffect(function() {
3350
3406
  props.shouldUnregister && control._subjects.state.next({
3351
3407
  values: control._getWatch()
@@ -3369,7 +3425,9 @@ var updateAt = function(fieldValues, index, value1) {
3369
3425
  ]);
3370
3426
  React__default["default"].useEffect(function() {
3371
3427
  if (props.values && !deepEqual(props.values, _values.current)) {
3372
- control._reset(props.values, control._options.resetOptions);
3428
+ control._reset(props.values, _object_spread({
3429
+ keepFieldsRef: true
3430
+ }, control._options.resetOptions));
3373
3431
  _values.current = props.values;
3374
3432
  updateFormState(function(state) {
3375
3433
  return _object_spread({}, state);
package/index.esm.css CHANGED
@@ -3070,13 +3070,10 @@ video {
3070
3070
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
3071
3071
  }
3072
3072
  .backdrop-filter {
3073
- -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
3074
3073
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
3075
3074
  }
3076
3075
  .transition {
3077
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
3078
3076
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
3079
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
3080
3077
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
3081
3078
  transition-duration: 150ms;
3082
3079
  }