react-hook-form 7.55.0-next.1 → 7.55.0-next.3

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.
@@ -106,7 +106,6 @@ var set = (object, path, value) => {
106
106
  object[key] = newValue;
107
107
  object = object[key];
108
108
  }
109
- return object;
110
109
  };
111
110
 
112
111
  const EVENTS = {
@@ -323,7 +322,7 @@ function useWatch(props) {
323
322
  },
324
323
  exact,
325
324
  callback: (formState) => !disabled &&
326
- updateValue(cloneObject(generateWatchOutput(_name.current, control._names, formState.values || control._formValues, false, defaultValue))),
325
+ updateValue(generateWatchOutput(_name.current, control._names, formState.values || control._formValues, false, defaultValue)),
327
326
  }), [control, defaultValue, disabled, exact]);
328
327
  const [value, updateValue] = React.useState(control._getWatch(name, defaultValue));
329
328
  React.useEffect(() => control._removeUnmounted());
@@ -369,6 +368,7 @@ function useController(props) {
369
368
  name,
370
369
  exact: true,
371
370
  });
371
+ const _props = React.useRef(props);
372
372
  const _registerProps = React.useRef(control.register(name, {
373
373
  ...props.rules,
374
374
  value,
@@ -396,47 +396,49 @@ function useController(props) {
396
396
  get: () => get(formState.errors, name),
397
397
  },
398
398
  }), [formState, name]);
399
+ const onChange = React.useCallback((event) => _registerProps.current.onChange({
400
+ target: {
401
+ value: getEventValue(event),
402
+ name: name,
403
+ },
404
+ type: EVENTS.CHANGE,
405
+ }), [name]);
406
+ const onBlur = React.useCallback(() => _registerProps.current.onBlur({
407
+ target: {
408
+ value: get(control._formValues, name),
409
+ name: name,
410
+ },
411
+ type: EVENTS.BLUR,
412
+ }), [name, control._formValues]);
413
+ const ref = React.useCallback((elm) => {
414
+ const field = get(control._fields, name);
415
+ if (field && elm) {
416
+ field._f.ref = {
417
+ focus: () => elm.focus(),
418
+ select: () => elm.select(),
419
+ setCustomValidity: (message) => elm.setCustomValidity(message),
420
+ reportValidity: () => elm.reportValidity(),
421
+ };
422
+ }
423
+ }, [control._fields, name]);
399
424
  const field = React.useMemo(() => ({
400
425
  name,
401
426
  value,
402
427
  ...(isBoolean(disabled) || formState.disabled
403
428
  ? { disabled: formState.disabled || disabled }
404
429
  : {}),
405
- onChange: (event) => _registerProps.current.onChange({
406
- target: {
407
- value: getEventValue(event),
408
- name: name,
409
- },
410
- type: EVENTS.CHANGE,
411
- }),
412
- onBlur: () => _registerProps.current.onBlur({
413
- target: {
414
- value: get(control._formValues, name),
415
- name: name,
416
- },
417
- type: EVENTS.BLUR,
418
- }),
419
- ref: (elm) => {
420
- const field = get(control._fields, name);
421
- if (field && elm) {
422
- field._f.ref = {
423
- focus: () => elm.focus(),
424
- select: () => elm.select(),
425
- setCustomValidity: (message) => elm.setCustomValidity(message),
426
- reportValidity: () => elm.reportValidity(),
427
- };
428
- }
429
- },
430
- }), [
431
- name,
432
- control._formValues,
433
- disabled,
434
- formState.disabled,
435
- value,
436
- control._fields,
437
- ]);
430
+ onChange,
431
+ onBlur,
432
+ ref,
433
+ }), [name, disabled, formState.disabled, onChange, onBlur, ref, value]);
438
434
  React.useEffect(() => {
439
435
  const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;
436
+ control.register(name, {
437
+ ..._props.current.rules,
438
+ ...(isBoolean(_props.current.disabled)
439
+ ? { disabled: _props.current.disabled }
440
+ : {}),
441
+ });
440
442
  const updateMounted = (name, value) => {
441
443
  const field = get(control._fields, name);
442
444
  if (field && field._f) {
@@ -463,7 +465,6 @@ function useController(props) {
463
465
  React.useEffect(() => {
464
466
  control._setDisabledField({
465
467
  disabled,
466
- fields: control._fields,
467
468
  name,
468
469
  });
469
470
  }, [disabled, name, control]);
@@ -1411,18 +1412,15 @@ function createFormControl(props = {}) {
1411
1412
  name,
1412
1413
  };
1413
1414
  if (!_options.disabled) {
1414
- const disabledField = !!(get(_fields, name) &&
1415
- get(_fields, name)._f &&
1416
- get(_fields, name)._f.disabled);
1417
1415
  if (!isBlurEvent || shouldDirty) {
1418
1416
  if (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty) {
1419
1417
  isPreviousDirty = _formState.isDirty;
1420
1418
  _formState.isDirty = output.isDirty = _getDirty();
1421
1419
  shouldUpdateField = isPreviousDirty !== output.isDirty;
1422
1420
  }
1423
- const isCurrentFieldPristine = disabledField || deepEqual(get(_defaultValues, name), fieldValue);
1424
- isPreviousDirty = !!(!disabledField && get(_formState.dirtyFields, name));
1425
- isCurrentFieldPristine || disabledField
1421
+ const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);
1422
+ isPreviousDirty = !!get(_formState.dirtyFields, name);
1423
+ isCurrentFieldPristine
1426
1424
  ? unset(_formState.dirtyFields, name)
1427
1425
  : set(_formState.dirtyFields, name, true);
1428
1426
  output.dirtyFields = _formState.dirtyFields;
@@ -1598,7 +1596,7 @@ function createFormControl(props = {}) {
1598
1596
  if (!fieldReference.ref.type) {
1599
1597
  _subjects.state.next({
1600
1598
  name,
1601
- values: { ..._formValues },
1599
+ values: cloneObject(_formValues),
1602
1600
  });
1603
1601
  }
1604
1602
  }
@@ -1629,7 +1627,7 @@ function createFormControl(props = {}) {
1629
1627
  if (isFieldArray) {
1630
1628
  _subjects.array.next({
1631
1629
  name,
1632
- values: { ..._formValues },
1630
+ values: cloneObject(_formValues),
1633
1631
  });
1634
1632
  if ((_proxyFormState.isDirty ||
1635
1633
  _proxyFormState.dirtyFields ||
@@ -1651,7 +1649,7 @@ function createFormControl(props = {}) {
1651
1649
  isWatched(name, _names) && _subjects.state.next({ ..._formState });
1652
1650
  _subjects.state.next({
1653
1651
  name: _state.mount ? name : undefined,
1654
- values: { ..._formValues },
1652
+ values: cloneObject(_formValues),
1655
1653
  });
1656
1654
  };
1657
1655
  const onChange = async (event) => {
@@ -1693,7 +1691,7 @@ function createFormControl(props = {}) {
1693
1691
  _subjects.state.next({
1694
1692
  name,
1695
1693
  type: event.type,
1696
- values: { ..._formValues },
1694
+ values: cloneObject(_formValues),
1697
1695
  });
1698
1696
  if (shouldSkipValidation) {
1699
1697
  if (_proxyFormState.isValid || _proxySubscribeFormState.isValid) {
@@ -1834,7 +1832,7 @@ function createFormControl(props = {}) {
1834
1832
  if (shouldSubscribeByName(props.name, formState.name, props.exact) &&
1835
1833
  shouldRenderFormState(formState, props.formState || _proxyFormState, _setFormState, props.reRenderRoot)) {
1836
1834
  props.callback({
1837
- values: _formValues,
1835
+ values: { ..._formValues },
1838
1836
  ..._formState,
1839
1837
  ...formState,
1840
1838
  });
@@ -1870,7 +1868,7 @@ function createFormControl(props = {}) {
1870
1868
  unset(_defaultValues, fieldName);
1871
1869
  }
1872
1870
  _subjects.state.next({
1873
- values: { ..._formValues },
1871
+ values: cloneObject(_formValues),
1874
1872
  });
1875
1873
  _subjects.state.next({
1876
1874
  ..._formState,
@@ -1878,12 +1876,11 @@ function createFormControl(props = {}) {
1878
1876
  });
1879
1877
  !options.keepIsValid && _setValid();
1880
1878
  };
1881
- const _setDisabledField = ({ disabled, name, field, fields, }) => {
1879
+ const _setDisabledField = ({ disabled, name, }) => {
1882
1880
  if ((isBoolean(disabled) && _state.mount) ||
1883
1881
  !!disabled ||
1884
1882
  _names.disabled.has(name)) {
1885
1883
  disabled ? _names.disabled.add(name) : _names.disabled.delete(name);
1886
- updateTouchAndDirty(name, getFieldValue(field ? field._f : get(fields, name)._f), false, false, true);
1887
1884
  }
1888
1885
  };
1889
1886
  const register = (name, options = {}) => {
@@ -1901,7 +1898,6 @@ function createFormControl(props = {}) {
1901
1898
  _names.mount.add(name);
1902
1899
  if (field) {
1903
1900
  _setDisabledField({
1904
- field,
1905
1901
  disabled: isBoolean(options.disabled)
1906
1902
  ? options.disabled
1907
1903
  : _options.disabled,
@@ -2536,7 +2532,7 @@ function useFieldArray(props) {
2536
2532
  }
2537
2533
  control._subjects.state.next({
2538
2534
  name,
2539
- values: { ...control._formValues },
2535
+ values: cloneObject(control._formValues),
2540
2536
  });
2541
2537
  control._names.focus &&
2542
2538
  iterateFieldsByAction(control._fields, (ref, key) => {