react-hook-form 7.72.0 → 7.72.1

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.
@@ -18,9 +18,9 @@ var getEventValue = (event) => isObject(event) && event.target
18
18
  : event.target.value
19
19
  : event;
20
20
 
21
- var getNodeParentName = (name) => name.substring(0, name.search(/\.\d+(\.|$)/)) || name;
22
-
23
- var isNameInFieldArray = (names, name) => names.has(getNodeParentName(name));
21
+ var isNameInFieldArray = (names, name) => name
22
+ .split('.')
23
+ .some((part, index, arr) => !isNaN(Number(part)) && names.has(arr.slice(0, index).join('.')));
24
24
 
25
25
  var isPlainObject = (tempObject) => {
26
26
  const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;
@@ -264,8 +264,8 @@ function deepEqual(object1, object2, _internal_visited = new WeakSet()) {
264
264
  if (key !== 'ref') {
265
265
  const val2 = object2[key];
266
266
  if ((isDateObject(val1) && isDateObject(val2)) ||
267
- (isObject(val1) && isObject(val2)) ||
268
- (Array.isArray(val1) && Array.isArray(val2))
267
+ ((isObject(val1) || Array.isArray(val1)) &&
268
+ (isObject(val2) || Array.isArray(val2)))
269
269
  ? !deepEqual(val1, val2, _internal_visited)
270
270
  : !Object.is(val1, val2)) {
271
271
  return false;
@@ -640,42 +640,43 @@ const useFormContext = () => React.useContext(HookFormContext);
640
640
  */
641
641
  const FormProvider = (props) => {
642
642
  const { children, watch, getValues, getFieldState, setError, clearErrors, setValue, trigger, formState, resetField, reset, handleSubmit, unregister, control, register, setFocus, subscribe, } = props;
643
- return (React.createElement(HookFormContext.Provider, { value: React.useMemo(() => ({
644
- watch,
645
- getValues,
646
- getFieldState,
647
- setError,
648
- clearErrors,
649
- setValue,
650
- trigger,
651
- formState,
652
- resetField,
653
- reset,
654
- handleSubmit,
655
- unregister,
656
- control,
657
- register,
658
- setFocus,
659
- subscribe,
660
- }), [
661
- clearErrors,
662
- control,
663
- formState,
664
- getFieldState,
665
- getValues,
666
- handleSubmit,
667
- register,
668
- reset,
669
- resetField,
670
- setError,
671
- setFocus,
672
- setValue,
673
- subscribe,
674
- trigger,
675
- unregister,
676
- watch,
677
- ]) },
678
- React.createElement(HookFormControlContext.Provider, { value: control }, children)));
643
+ const memoizedValue = React.useMemo(() => ({
644
+ watch,
645
+ getValues,
646
+ getFieldState,
647
+ setError,
648
+ clearErrors,
649
+ setValue,
650
+ trigger,
651
+ formState,
652
+ resetField,
653
+ reset,
654
+ handleSubmit,
655
+ unregister,
656
+ control,
657
+ register,
658
+ setFocus,
659
+ subscribe,
660
+ }), [
661
+ clearErrors,
662
+ control,
663
+ formState,
664
+ getFieldState,
665
+ getValues,
666
+ handleSubmit,
667
+ register,
668
+ reset,
669
+ resetField,
670
+ setError,
671
+ setFocus,
672
+ setValue,
673
+ subscribe,
674
+ trigger,
675
+ unregister,
676
+ watch,
677
+ ]);
678
+ return (React.createElement(HookFormContext.Provider, { value: memoizedValue },
679
+ React.createElement(HookFormControlContext.Provider, { value: memoizedValue.control }, children)));
679
680
  };
680
681
 
681
682
  const POST_REQUEST = 'post';
@@ -1014,6 +1015,8 @@ function getFieldValue(_f) {
1014
1015
  return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);
1015
1016
  }
1016
1017
 
1018
+ var getNodeParentName = (name) => name.substring(0, name.search(/\.\d+(\.|$)/)) || name;
1019
+
1017
1020
  var getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {
1018
1021
  const fields = {};
1019
1022
  for (const name of fieldsNames) {
@@ -1420,6 +1423,7 @@ function createFormControl(props = {}) {
1420
1423
  unMount: new Set(),
1421
1424
  array: new Set(),
1422
1425
  watch: new Set(),
1426
+ registerName: new Set(),
1423
1427
  };
1424
1428
  let delayErrorCallback;
1425
1429
  let timer = 0;
@@ -1493,6 +1497,11 @@ function createFormControl(props = {}) {
1493
1497
  });
1494
1498
  }
1495
1499
  };
1500
+ const _updateDirtyFields = (name) => {
1501
+ const fullDirtyFields = getDirtyFields(_defaultValues, _formValues);
1502
+ const rootName = getNodeParentName(name);
1503
+ set(_formState.dirtyFields, rootName, get(fullDirtyFields, rootName));
1504
+ };
1496
1505
  const _setFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {
1497
1506
  if (args && method && !_options.disabled) {
1498
1507
  _state.action = true;
@@ -1514,9 +1523,7 @@ function createFormControl(props = {}) {
1514
1523
  shouldSetValues && set(_formState.touchedFields, name, touchedFields);
1515
1524
  }
1516
1525
  if (_proxyFormState.dirtyFields || _proxySubscribeFormState.dirtyFields) {
1517
- const fullDirtyFields = getDirtyFields(_defaultValues, _formValues);
1518
- const rootName = getNodeParentName(name);
1519
- set(_formState.dirtyFields, rootName, get(fullDirtyFields, rootName));
1526
+ _updateDirtyFields(name);
1520
1527
  }
1521
1528
  _subjects.state.next({
1522
1529
  name,
@@ -1845,9 +1852,10 @@ function createFormControl(props = {}) {
1845
1852
  _proxySubscribeFormState.isDirty ||
1846
1853
  _proxySubscribeFormState.dirtyFields) &&
1847
1854
  options.shouldDirty) {
1855
+ _updateDirtyFields(name);
1848
1856
  _subjects.state.next({
1849
1857
  name,
1850
- dirtyFields: getDirtyFields(_defaultValues, _formValues),
1858
+ dirtyFields: _formState.dirtyFields,
1851
1859
  isDirty: _getDirty(name, cloneValue),
1852
1860
  });
1853
1861
  }
@@ -2157,6 +2165,7 @@ function createFormControl(props = {}) {
2157
2165
  const register = (name, options = {}) => {
2158
2166
  let field = get(_fields, name);
2159
2167
  const disabledIsDefined = isBoolean(options.disabled) || isBoolean(_options.disabled);
2168
+ const shouldRevalidateRemount = !_names.registerName.has(name) && field && !field._f.mount;
2160
2169
  set(_fields, name, {
2161
2170
  ...(field || {}),
2162
2171
  _f: {
@@ -2167,7 +2176,7 @@ function createFormControl(props = {}) {
2167
2176
  },
2168
2177
  });
2169
2178
  _names.mount.add(name);
2170
- if (field) {
2179
+ if (field && !shouldRevalidateRemount) {
2171
2180
  _setDisabledField({
2172
2181
  disabled: isBoolean(options.disabled)
2173
2182
  ? options.disabled
@@ -2197,7 +2206,9 @@ function createFormControl(props = {}) {
2197
2206
  onBlur: onChange,
2198
2207
  ref: (ref) => {
2199
2208
  if (ref) {
2209
+ _names.registerName.add(name);
2200
2210
  register(name, options);
2211
+ _names.registerName.delete(name);
2201
2212
  field = get(_fields, name);
2202
2213
  const fieldRef = isUndefined(ref.value)
2203
2214
  ? ref.querySelectorAll
@@ -2410,6 +2421,7 @@ function createFormControl(props = {}) {
2410
2421
  mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),
2411
2422
  unMount: new Set(),
2412
2423
  array: new Set(),
2424
+ registerName: new Set(),
2413
2425
  disabled: new Set(),
2414
2426
  watch: new Set(),
2415
2427
  watchAll: false,