react-hook-form 7.31.3 → 7.32.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.
@@ -575,7 +575,11 @@ function cloneObject(data) {
575
575
  (isArray || isObject(data))) {
576
576
  copy = isArray ? [] : {};
577
577
  for (const key in data) {
578
- copy[key] = isFunction(data[key]) ? data[key] : cloneObject(data[key]);
578
+ if (isFunction(data[key])) {
579
+ copy = data;
580
+ break;
581
+ }
582
+ copy[key] = cloneObject(data[key]);
579
583
  }
580
584
  }
581
585
  else {
@@ -938,7 +942,11 @@ var isBoolean = (value) => typeof value === 'boolean';
938
942
 
939
943
  var isFileInput = (element) => element.type === 'file';
940
944
 
941
- var isHTMLElement = (value) => value instanceof HTMLElement;
945
+ var isHTMLElement = (value) => {
946
+ const owner = value ? value.ownerDocument : 0;
947
+ const ElementClass = owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement;
948
+ return value instanceof ElementClass;
949
+ };
942
950
 
943
951
  var isMultipleSelect = (element) => element.type === `select-multiple`;
944
952
 
@@ -1017,7 +1025,7 @@ var getCheckboxValue = (options) => {
1017
1025
  var getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)
1018
1026
  ? value
1019
1027
  : valueAsNumber
1020
- ? value === ''
1028
+ ? value === '' || isNullOrUndefined(value)
1021
1029
  ? NaN
1022
1030
  : +value
1023
1031
  : valueAsDate && isString(value)
@@ -1217,7 +1225,7 @@ var validateField = async (field, inputValue, validateAllFieldCriteria, shouldUs
1217
1225
  let exceedMin;
1218
1226
  const maxOutput = getValueAndMessage(max);
1219
1227
  const minOutput = getValueAndMessage(min);
1220
- if (!isNaN(inputValue)) {
1228
+ if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {
1221
1229
  const valueNumber = ref.valueAsNumber || +inputValue;
1222
1230
  if (!isNullOrUndefined(maxOutput.value)) {
1223
1231
  exceedMax = valueNumber > maxOutput.value;
@@ -1378,9 +1386,9 @@ function createFormControl(props = {}) {
1378
1386
  const validationModeBeforeSubmit = getValidationModes(_options.mode);
1379
1387
  const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);
1380
1388
  const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;
1381
- const debounce = (callback, wait) => (...args) => {
1389
+ const debounce = (callback) => (wait) => {
1382
1390
  clearTimeout(timer);
1383
- timer = window.setTimeout(() => callback(...args), wait);
1391
+ timer = window.setTimeout(callback, wait);
1384
1392
  };
1385
1393
  const _updateValid = async (shouldSkipRender) => {
1386
1394
  let isValid = false;
@@ -1431,10 +1439,12 @@ function createFormControl(props = {}) {
1431
1439
  set(_formValues, name, values);
1432
1440
  }
1433
1441
  };
1434
- const updateErrors = (name, error) => (set(_formState.errors, name, error),
1442
+ const updateErrors = (name, error) => {
1443
+ set(_formState.errors, name, error);
1435
1444
  _subjects.state.next({
1436
1445
  errors: _formState.errors,
1437
- }));
1446
+ });
1447
+ };
1438
1448
  const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {
1439
1449
  const field = get(_fields, name);
1440
1450
  if (field) {
@@ -1480,24 +1490,23 @@ function createFormControl(props = {}) {
1480
1490
  isFieldDirty && shouldRender && _subjects.state.next(output);
1481
1491
  return isFieldDirty ? output : {};
1482
1492
  };
1483
- const shouldRenderByError = async (shouldSkipRender, name, isValid, error, fieldState) => {
1493
+ const shouldRenderByError = async (name, isValid, error, fieldState) => {
1484
1494
  const previousFieldError = get(_formState.errors, name);
1485
1495
  const shouldUpdateValid = _proxyFormState.isValid && _formState.isValid !== isValid;
1486
1496
  if (props.delayError && error) {
1487
- delayErrorCallback =
1488
- delayErrorCallback || debounce(updateErrors, props.delayError);
1489
- delayErrorCallback(name, error);
1497
+ delayErrorCallback = debounce(() => updateErrors(name, error));
1498
+ delayErrorCallback(props.delayError);
1490
1499
  }
1491
1500
  else {
1492
1501
  clearTimeout(timer);
1502
+ delayErrorCallback = null;
1493
1503
  error
1494
1504
  ? set(_formState.errors, name, error)
1495
1505
  : unset(_formState.errors, name);
1496
1506
  }
1497
- if (((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||
1507
+ if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||
1498
1508
  !isEmptyObject(fieldState) ||
1499
- shouldUpdateValid) &&
1500
- !shouldSkipRender) {
1509
+ shouldUpdateValid) {
1501
1510
  const updatedFormState = {
1502
1511
  ...fieldState,
1503
1512
  ...(shouldUpdateValid ? { isValid } : {}),
@@ -1699,6 +1708,7 @@ function createFormControl(props = {}) {
1699
1708
  set(_formValues, name, fieldValue);
1700
1709
  if (isBlurEvent) {
1701
1710
  field._f.onBlur && field._f.onBlur(event);
1711
+ delayErrorCallback && delayErrorCallback(0);
1702
1712
  }
1703
1713
  else if (field._f.onChange) {
1704
1714
  field._f.onChange(event);
@@ -1733,7 +1743,7 @@ function createFormControl(props = {}) {
1733
1743
  }
1734
1744
  field._f.deps &&
1735
1745
  trigger(field._f.deps);
1736
- shouldRenderByError(false, name, isValid, error, fieldState);
1746
+ shouldRenderByError(name, isValid, error, fieldState);
1737
1747
  }
1738
1748
  };
1739
1749
  const trigger = async (name, options = {}) => {