react-hook-form 7.72.1 → 7.74.0
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/README.md +3 -20
- package/dist/form.d.ts.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.mjs +88 -48
- package/dist/index.esm.mjs.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/logic/createFormControl.d.ts.map +1 -1
- package/dist/logic/validateField.d.ts.map +1 -1
- package/dist/react-server.esm.mjs +68 -33
- package/dist/react-server.esm.mjs.map +1 -1
- package/dist/types/form.d.ts +2 -0
- package/dist/types/form.d.ts.map +1 -1
- package/dist/useController.d.ts.map +1 -1
- package/dist/useFieldArray.d.ts.map +1 -1
- package/dist/utils/deepEqual.d.ts +1 -1
- package/dist/utils/deepEqual.d.ts.map +1 -1
- package/dist/utils/unset.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/__tests__/controller.server.test.d.ts +0 -2
- package/dist/__tests__/controller.server.test.d.ts.map +0 -1
- package/dist/__tests__/controller.test.d.ts +0 -2
- package/dist/__tests__/controller.test.d.ts.map +0 -1
- package/dist/__tests__/form.test.d.ts +0 -2
- package/dist/__tests__/form.test.d.ts.map +0 -1
- package/dist/__tests__/formStateSubscribe.server.test.d.ts +0 -2
- package/dist/__tests__/formStateSubscribe.server.test.d.ts.map +0 -1
- package/dist/__tests__/formStateSubscribe.test.d.ts +0 -2
- package/dist/__tests__/formStateSubscribe.test.d.ts.map +0 -1
- package/dist/__tests__/isPlainObject.test.d.ts +0 -2
- package/dist/__tests__/isPlainObject.test.d.ts.map +0 -1
- package/dist/__tests__/logic/appendErrors.test.d.ts +0 -2
- package/dist/__tests__/logic/appendErrors.test.d.ts.map +0 -1
- package/dist/__tests__/logic/createFormControl.test.d.ts +0 -2
- package/dist/__tests__/logic/createFormControl.test.d.ts.map +0 -1
- package/dist/__tests__/logic/generateId.test.d.ts +0 -2
- package/dist/__tests__/logic/generateId.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getCheckboxValue.test.d.ts +0 -2
- package/dist/__tests__/logic/getCheckboxValue.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getDirtyFields.test.d.ts +0 -2
- package/dist/__tests__/logic/getDirtyFields.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getEventValue.test.d.ts +0 -2
- package/dist/__tests__/logic/getEventValue.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getFieldValue.test.d.ts +0 -2
- package/dist/__tests__/logic/getFieldValue.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getFieldValueAs.test.d.ts +0 -2
- package/dist/__tests__/logic/getFieldValueAs.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getFocusFieldName.test.d.ts +0 -2
- package/dist/__tests__/logic/getFocusFieldName.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getNodeParentName.test.d.ts +0 -2
- package/dist/__tests__/logic/getNodeParentName.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getRadioValue.test.d.ts +0 -2
- package/dist/__tests__/logic/getRadioValue.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getResolverOptions.test.d.ts +0 -2
- package/dist/__tests__/logic/getResolverOptions.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getRuleValue.test.d.ts +0 -2
- package/dist/__tests__/logic/getRuleValue.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getValidateError.test.d.ts +0 -2
- package/dist/__tests__/logic/getValidateError.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getValidationModes.test.d.ts +0 -2
- package/dist/__tests__/logic/getValidationModes.test.d.ts.map +0 -1
- package/dist/__tests__/logic/getValueAndMessage.test.d.ts +0 -2
- package/dist/__tests__/logic/getValueAndMessage.test.d.ts.map +0 -1
- package/dist/__tests__/logic/hasPromiseValidation.test.d.ts +0 -2
- package/dist/__tests__/logic/hasPromiseValidation.test.d.ts.map +0 -1
- package/dist/__tests__/logic/hasValidation.test.d.ts +0 -2
- package/dist/__tests__/logic/hasValidation.test.d.ts.map +0 -1
- package/dist/__tests__/logic/isNameInFieldArray.test.d.ts +0 -2
- package/dist/__tests__/logic/isNameInFieldArray.test.d.ts.map +0 -1
- package/dist/__tests__/logic/isWatched.test.d.ts +0 -2
- package/dist/__tests__/logic/isWatched.test.d.ts.map +0 -1
- package/dist/__tests__/logic/iterateFieldsByAction.test.d.ts +0 -2
- package/dist/__tests__/logic/iterateFieldsByAction.test.d.ts.map +0 -1
- package/dist/__tests__/logic/schemaErrorLookup.test.d.ts +0 -2
- package/dist/__tests__/logic/schemaErrorLookup.test.d.ts.map +0 -1
- package/dist/__tests__/logic/shouldRenderFormState.test.d.ts +0 -2
- package/dist/__tests__/logic/shouldRenderFormState.test.d.ts.map +0 -1
- package/dist/__tests__/logic/shouldSubscribeByName.test.d.ts +0 -2
- package/dist/__tests__/logic/shouldSubscribeByName.test.d.ts.map +0 -1
- package/dist/__tests__/logic/skipValidation.test.d.ts +0 -2
- package/dist/__tests__/logic/skipValidation.test.d.ts.map +0 -1
- package/dist/__tests__/logic/unsetEmptyArray.test.d.ts +0 -2
- package/dist/__tests__/logic/unsetEmptyArray.test.d.ts.map +0 -1
- package/dist/__tests__/logic/validateField.test.d.ts +0 -2
- package/dist/__tests__/logic/validateField.test.d.ts.map +0 -1
- package/dist/__tests__/type.test.d.ts +0 -2
- package/dist/__tests__/type.test.d.ts.map +0 -1
- package/dist/__tests__/useController.test.d.ts +0 -2
- package/dist/__tests__/useController.test.d.ts.map +0 -1
- package/dist/__tests__/useFieldArray/append.test.d.ts +0 -2
- package/dist/__tests__/useFieldArray/append.test.d.ts.map +0 -1
- package/dist/__tests__/useFieldArray/dirtyFields.test.d.ts +0 -2
- package/dist/__tests__/useFieldArray/dirtyFields.test.d.ts.map +0 -1
- package/dist/__tests__/useFieldArray/focus.test.d.ts +0 -2
- package/dist/__tests__/useFieldArray/focus.test.d.ts.map +0 -1
- package/dist/__tests__/useFieldArray/insert.test.d.ts +0 -2
- package/dist/__tests__/useFieldArray/insert.test.d.ts.map +0 -1
- package/dist/__tests__/useFieldArray/move.test.d.ts +0 -2
- package/dist/__tests__/useFieldArray/move.test.d.ts.map +0 -1
- package/dist/__tests__/useFieldArray/prepend.test.d.ts +0 -2
- package/dist/__tests__/useFieldArray/prepend.test.d.ts.map +0 -1
- package/dist/__tests__/useFieldArray/remove.test.d.ts +0 -2
- package/dist/__tests__/useFieldArray/remove.test.d.ts.map +0 -1
- package/dist/__tests__/useFieldArray/replace.test.d.ts +0 -2
- package/dist/__tests__/useFieldArray/replace.test.d.ts.map +0 -1
- package/dist/__tests__/useFieldArray/swap.test.d.ts +0 -2
- package/dist/__tests__/useFieldArray/swap.test.d.ts.map +0 -1
- package/dist/__tests__/useFieldArray/update.test.d.ts +0 -2
- package/dist/__tests__/useFieldArray/update.test.d.ts.map +0 -1
- package/dist/__tests__/useFieldArray.test.d.ts +0 -2
- package/dist/__tests__/useFieldArray.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/clearErrors.test.d.ts +0 -2
- package/dist/__tests__/useForm/clearErrors.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/formState.test.d.ts +0 -2
- package/dist/__tests__/useForm/formState.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/getFieldState.test.d.ts +0 -2
- package/dist/__tests__/useForm/getFieldState.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/getValues.test.d.ts +0 -2
- package/dist/__tests__/useForm/getValues.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/handleSubmit.test.d.ts +0 -2
- package/dist/__tests__/useForm/handleSubmit.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/register.test.d.ts +0 -2
- package/dist/__tests__/useForm/register.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/reset.test.d.ts +0 -2
- package/dist/__tests__/useForm/reset.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/resetField.test.d.ts +0 -2
- package/dist/__tests__/useForm/resetField.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/resolver.test.d.ts +0 -2
- package/dist/__tests__/useForm/resolver.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/setError.test.d.ts +0 -2
- package/dist/__tests__/useForm/setError.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/setFocus.test.d.ts +0 -2
- package/dist/__tests__/useForm/setFocus.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/setValue.test.d.ts +0 -2
- package/dist/__tests__/useForm/setValue.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/subscribe.test.d.ts +0 -2
- package/dist/__tests__/useForm/subscribe.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/trigger.test.d.ts +0 -2
- package/dist/__tests__/useForm/trigger.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/unregister.test.d.ts +0 -2
- package/dist/__tests__/useForm/unregister.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/useFormWithNullValues.test.d.ts +0 -2
- package/dist/__tests__/useForm/useFormWithNullValues.test.d.ts.map +0 -1
- package/dist/__tests__/useForm/watch.test.d.ts +0 -2
- package/dist/__tests__/useForm/watch.test.d.ts.map +0 -1
- package/dist/__tests__/useForm.server.test.d.ts +0 -2
- package/dist/__tests__/useForm.server.test.d.ts.map +0 -1
- package/dist/__tests__/useForm.test.d.ts +0 -2
- package/dist/__tests__/useForm.test.d.ts.map +0 -1
- package/dist/__tests__/useFormContext.server.test.d.ts +0 -2
- package/dist/__tests__/useFormContext.server.test.d.ts.map +0 -1
- package/dist/__tests__/useFormContext.test.d.ts +0 -2
- package/dist/__tests__/useFormContext.test.d.ts.map +0 -1
- package/dist/__tests__/useFormState.test.d.ts +0 -2
- package/dist/__tests__/useFormState.test.d.ts.map +0 -1
- package/dist/__tests__/useWatch.test.d.ts +0 -2
- package/dist/__tests__/useWatch.test.d.ts.map +0 -1
- package/dist/__tests__/utils/append.test.d.ts +0 -2
- package/dist/__tests__/utils/append.test.d.ts.map +0 -1
- package/dist/__tests__/utils/cloneObject.test.d.ts +0 -2
- package/dist/__tests__/utils/cloneObject.test.d.ts.map +0 -1
- package/dist/__tests__/utils/compact.test.d.ts +0 -2
- package/dist/__tests__/utils/compact.test.d.ts.map +0 -1
- package/dist/__tests__/utils/convertToArrayPayload.test.d.ts +0 -2
- package/dist/__tests__/utils/convertToArrayPayload.test.d.ts.map +0 -1
- package/dist/__tests__/utils/createSubject.test.d.ts +0 -2
- package/dist/__tests__/utils/createSubject.test.d.ts.map +0 -1
- package/dist/__tests__/utils/deepEqual.test.d.ts +0 -2
- package/dist/__tests__/utils/deepEqual.test.d.ts.map +0 -1
- package/dist/__tests__/utils/deepMerge.test.d.ts +0 -2
- package/dist/__tests__/utils/deepMerge.test.d.ts.map +0 -1
- package/dist/__tests__/utils/extractFormValues.test.d.ts +0 -2
- package/dist/__tests__/utils/extractFormValues.test.d.ts.map +0 -1
- package/dist/__tests__/utils/fillEmptyArray.test.d.ts +0 -2
- package/dist/__tests__/utils/fillEmptyArray.test.d.ts.map +0 -1
- package/dist/__tests__/utils/flatten.test.d.ts +0 -2
- package/dist/__tests__/utils/flatten.test.d.ts.map +0 -1
- package/dist/__tests__/utils/get.test.d.ts +0 -2
- package/dist/__tests__/utils/get.test.d.ts.map +0 -1
- package/dist/__tests__/utils/insert.test.d.ts +0 -2
- package/dist/__tests__/utils/insert.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isBoolean.test.d.ts +0 -2
- package/dist/__tests__/utils/isBoolean.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isCheckBoxInput.test.d.ts +0 -2
- package/dist/__tests__/utils/isCheckBoxInput.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isEmptyObject.test.d.ts +0 -2
- package/dist/__tests__/utils/isEmptyObject.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isFileInput.test.d.ts +0 -2
- package/dist/__tests__/utils/isFileInput.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isFunction.test.d.ts +0 -2
- package/dist/__tests__/utils/isFunction.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isHTMLElement.test.d.ts +0 -2
- package/dist/__tests__/utils/isHTMLElement.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isKey.test.d.ts +0 -2
- package/dist/__tests__/utils/isKey.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isMultipleSelect.test.d.ts +0 -2
- package/dist/__tests__/utils/isMultipleSelect.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isNullOrUndefined.test.d.ts +0 -2
- package/dist/__tests__/utils/isNullOrUndefined.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isObject.test.d.ts +0 -2
- package/dist/__tests__/utils/isObject.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isPrimitive.test.d.ts +0 -2
- package/dist/__tests__/utils/isPrimitive.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isRadioInput.test.d.ts +0 -2
- package/dist/__tests__/utils/isRadioInput.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isRadioOrCheckbox.test.d.ts +0 -2
- package/dist/__tests__/utils/isRadioOrCheckbox.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isRegex.test.d.ts +0 -2
- package/dist/__tests__/utils/isRegex.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isString.test.d.ts +0 -2
- package/dist/__tests__/utils/isString.test.d.ts.map +0 -1
- package/dist/__tests__/utils/isUndefined.test.d.ts +0 -2
- package/dist/__tests__/utils/isUndefined.test.d.ts.map +0 -1
- package/dist/__tests__/utils/live.test.d.ts +0 -2
- package/dist/__tests__/utils/live.test.d.ts.map +0 -1
- package/dist/__tests__/utils/move.test.d.ts +0 -2
- package/dist/__tests__/utils/move.test.d.ts.map +0 -1
- package/dist/__tests__/utils/noop.test.d.ts +0 -2
- package/dist/__tests__/utils/noop.test.d.ts.map +0 -1
- package/dist/__tests__/utils/objectHasFunction.test.d.ts +0 -2
- package/dist/__tests__/utils/objectHasFunction.test.d.ts.map +0 -1
- package/dist/__tests__/utils/prepend.test.d.ts +0 -2
- package/dist/__tests__/utils/prepend.test.d.ts.map +0 -1
- package/dist/__tests__/utils/remove.test.d.ts +0 -2
- package/dist/__tests__/utils/remove.test.d.ts.map +0 -1
- package/dist/__tests__/utils/set.test.d.ts +0 -2
- package/dist/__tests__/utils/set.test.d.ts.map +0 -1
- package/dist/__tests__/utils/stringToPath.test.d.ts +0 -2
- package/dist/__tests__/utils/stringToPath.test.d.ts.map +0 -1
- package/dist/__tests__/utils/swap.test.d.ts +0 -2
- package/dist/__tests__/utils/swap.test.d.ts.map +0 -1
- package/dist/__tests__/utils/unset.test.d.ts +0 -2
- package/dist/__tests__/utils/unset.test.d.ts.map +0 -1
- package/dist/__tests__/utils/update.test.d.ts +0 -2
- package/dist/__tests__/utils/update.test.d.ts.map +0 -1
- package/dist/__tests__/utils/validationModeChecker.test.d.ts +0 -2
- package/dist/__tests__/utils/validationModeChecker.test.d.ts.map +0 -1
- package/dist/__tests__/watch.server.test.d.ts +0 -2
- package/dist/__tests__/watch.server.test.d.ts.map +0 -1
- package/dist/__tests__/watch.test.d.ts +0 -2
- package/dist/__tests__/watch.test.d.ts.map +0 -1
package/dist/index.esm.mjs
CHANGED
|
@@ -64,7 +64,10 @@ var get = (object, path, defaultValue) => {
|
|
|
64
64
|
if (!path || !isObject(object)) {
|
|
65
65
|
return defaultValue;
|
|
66
66
|
}
|
|
67
|
-
const
|
|
67
|
+
const paths = isKey(path) ? [path] : stringToPath(path);
|
|
68
|
+
const result = paths.reduce((result, key) => {
|
|
69
|
+
return isNullOrUndefined(result) ? undefined : result[key];
|
|
70
|
+
}, object);
|
|
68
71
|
return isUndefined(result) || result === object
|
|
69
72
|
? isUndefined(object[path])
|
|
70
73
|
? defaultValue
|
|
@@ -239,7 +242,10 @@ var generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) =>
|
|
|
239
242
|
|
|
240
243
|
var isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);
|
|
241
244
|
|
|
242
|
-
function deepEqual(object1, object2,
|
|
245
|
+
function deepEqual(object1, object2, visited = new WeakSet()) {
|
|
246
|
+
if (object1 === object2) {
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
243
249
|
if (isPrimitive(object1) || isPrimitive(object2)) {
|
|
244
250
|
return Object.is(object1, object2);
|
|
245
251
|
}
|
|
@@ -251,14 +257,14 @@ function deepEqual(object1, object2, _internal_visited = new WeakSet()) {
|
|
|
251
257
|
if (keys1.length !== keys2.length) {
|
|
252
258
|
return false;
|
|
253
259
|
}
|
|
254
|
-
if (
|
|
260
|
+
if (visited.has(object1) || visited.has(object2)) {
|
|
255
261
|
return true;
|
|
256
262
|
}
|
|
257
|
-
|
|
258
|
-
|
|
263
|
+
visited.add(object1);
|
|
264
|
+
visited.add(object2);
|
|
259
265
|
for (const key of keys1) {
|
|
260
266
|
const val1 = object1[key];
|
|
261
|
-
if (!
|
|
267
|
+
if (!(key in object2)) {
|
|
262
268
|
return false;
|
|
263
269
|
}
|
|
264
270
|
if (key !== 'ref') {
|
|
@@ -266,7 +272,7 @@ function deepEqual(object1, object2, _internal_visited = new WeakSet()) {
|
|
|
266
272
|
if ((isDateObject(val1) && isDateObject(val2)) ||
|
|
267
273
|
((isObject(val1) || Array.isArray(val1)) &&
|
|
268
274
|
(isObject(val2) || Array.isArray(val2)))
|
|
269
|
-
? !deepEqual(val1, val2,
|
|
275
|
+
? !deepEqual(val1, val2, visited)
|
|
270
276
|
: !Object.is(val1, val2)) {
|
|
271
277
|
return false;
|
|
272
278
|
}
|
|
@@ -402,7 +408,6 @@ function useController(props) {
|
|
|
402
408
|
exact,
|
|
403
409
|
});
|
|
404
410
|
const _props = React.useRef(props);
|
|
405
|
-
const _previousNameRef = React.useRef(undefined);
|
|
406
411
|
const _registerProps = React.useRef(control.register(name, {
|
|
407
412
|
...props.rules,
|
|
408
413
|
value,
|
|
@@ -468,10 +473,6 @@ function useController(props) {
|
|
|
468
473
|
}), [name, disabled, formState.disabled, onChange, onBlur, ref, value]);
|
|
469
474
|
React.useEffect(() => {
|
|
470
475
|
const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;
|
|
471
|
-
const previousName = _previousNameRef.current;
|
|
472
|
-
if (previousName && previousName !== name && !isArrayField) {
|
|
473
|
-
control.unregister(previousName);
|
|
474
|
-
}
|
|
475
476
|
control.register(name, {
|
|
476
477
|
..._props.current.rules,
|
|
477
478
|
...(isBoolean(_props.current.disabled)
|
|
@@ -493,7 +494,6 @@ function useController(props) {
|
|
|
493
494
|
}
|
|
494
495
|
}
|
|
495
496
|
!isArrayField && control.register(name);
|
|
496
|
-
_previousNameRef.current = name;
|
|
497
497
|
return () => {
|
|
498
498
|
(isArrayField
|
|
499
499
|
? _shouldUnregisterField && !control._state.action
|
|
@@ -706,7 +706,7 @@ function Form(props) {
|
|
|
706
706
|
const methods = useFormContext();
|
|
707
707
|
const [mounted, setMounted] = React.useState(false);
|
|
708
708
|
const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;
|
|
709
|
-
const submit = async (event) => {
|
|
709
|
+
const submit = React.useCallback(async (event) => {
|
|
710
710
|
let hasError = false;
|
|
711
711
|
let type = '';
|
|
712
712
|
await control.handleSubmit(async (data) => {
|
|
@@ -716,7 +716,7 @@ function Form(props) {
|
|
|
716
716
|
formDataJson = JSON.stringify(data);
|
|
717
717
|
}
|
|
718
718
|
catch (_a) { }
|
|
719
|
-
const flattenFormValues = flatten(
|
|
719
|
+
const flattenFormValues = flatten(data);
|
|
720
720
|
for (const key in flattenFormValues) {
|
|
721
721
|
formData.append(key, flattenFormValues[key]);
|
|
722
722
|
}
|
|
@@ -763,15 +763,25 @@ function Form(props) {
|
|
|
763
763
|
}
|
|
764
764
|
}
|
|
765
765
|
})(event);
|
|
766
|
-
if (hasError &&
|
|
767
|
-
|
|
766
|
+
if (hasError && control) {
|
|
767
|
+
control._subjects.state.next({
|
|
768
768
|
isSubmitSuccessful: false,
|
|
769
769
|
});
|
|
770
|
-
|
|
770
|
+
control.setError('root.server', {
|
|
771
771
|
type,
|
|
772
772
|
});
|
|
773
773
|
}
|
|
774
|
-
}
|
|
774
|
+
}, [
|
|
775
|
+
control,
|
|
776
|
+
onSubmit,
|
|
777
|
+
method,
|
|
778
|
+
action,
|
|
779
|
+
headers,
|
|
780
|
+
encType,
|
|
781
|
+
validateStatus,
|
|
782
|
+
onError,
|
|
783
|
+
onSuccess,
|
|
784
|
+
]);
|
|
775
785
|
React.useEffect(() => {
|
|
776
786
|
setMounted(true);
|
|
777
787
|
}, []);
|
|
@@ -867,7 +877,12 @@ function baseGet(object, updatePath) {
|
|
|
867
877
|
const length = updatePath.slice(0, -1).length;
|
|
868
878
|
let index = 0;
|
|
869
879
|
while (index < length) {
|
|
870
|
-
|
|
880
|
+
if (isNullOrUndefined(object)) {
|
|
881
|
+
object = undefined;
|
|
882
|
+
break;
|
|
883
|
+
}
|
|
884
|
+
object = object[updatePath[index]];
|
|
885
|
+
index++;
|
|
871
886
|
}
|
|
872
887
|
return object;
|
|
873
888
|
}
|
|
@@ -880,6 +895,10 @@ function isEmptyArray(obj) {
|
|
|
880
895
|
return true;
|
|
881
896
|
}
|
|
882
897
|
function unset(object, path) {
|
|
898
|
+
if (isString(path) && Object.prototype.hasOwnProperty.call(object, path)) {
|
|
899
|
+
delete object[path];
|
|
900
|
+
return object;
|
|
901
|
+
}
|
|
883
902
|
const paths = Array.isArray(path)
|
|
884
903
|
? path
|
|
885
904
|
: isKey(path)
|
|
@@ -1221,7 +1240,8 @@ var validateField = async (field, disabledFieldNames, formValues, validateAllFie
|
|
|
1221
1240
|
isUndefined(inputValue)) ||
|
|
1222
1241
|
(isHTMLElement(ref) && ref.value === '') ||
|
|
1223
1242
|
inputValue === '' ||
|
|
1224
|
-
(Array.isArray(inputValue) && !inputValue.length)
|
|
1243
|
+
(Array.isArray(inputValue) && !inputValue.length) ||
|
|
1244
|
+
(valueAsNumber && typeof inputValue === 'number' && isNaN(inputValue));
|
|
1225
1245
|
const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);
|
|
1226
1246
|
const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {
|
|
1227
1247
|
const message = exceedMax ? maxLengthMessage : minLengthMessage;
|
|
@@ -1821,7 +1841,7 @@ function createFormControl(props = {}) {
|
|
|
1821
1841
|
updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);
|
|
1822
1842
|
options.shouldValidate && trigger(name);
|
|
1823
1843
|
};
|
|
1824
|
-
const
|
|
1844
|
+
const setFieldValues = (name, value, options) => {
|
|
1825
1845
|
for (const fieldKey in value) {
|
|
1826
1846
|
if (!value.hasOwnProperty(fieldKey)) {
|
|
1827
1847
|
return;
|
|
@@ -1833,7 +1853,7 @@ function createFormControl(props = {}) {
|
|
|
1833
1853
|
isObject(fieldValue) ||
|
|
1834
1854
|
(field && !field._f)) &&
|
|
1835
1855
|
!isDateObject(fieldValue)
|
|
1836
|
-
?
|
|
1856
|
+
? setFieldValues(fieldName, fieldValue, options)
|
|
1837
1857
|
: setFieldValue(fieldName, fieldValue, options);
|
|
1838
1858
|
}
|
|
1839
1859
|
};
|
|
@@ -1841,17 +1861,15 @@ function createFormControl(props = {}) {
|
|
|
1841
1861
|
const field = get(_fields, name);
|
|
1842
1862
|
const isFieldArray = _names.array.has(name);
|
|
1843
1863
|
const cloneValue = cloneObject(value);
|
|
1864
|
+
const previousValue = get(_formValues, name);
|
|
1865
|
+
const isValueUnchanged = deepEqual(previousValue, cloneValue);
|
|
1844
1866
|
set(_formValues, name, cloneValue);
|
|
1845
1867
|
if (isFieldArray) {
|
|
1846
1868
|
_subjects.array.next({
|
|
1847
1869
|
name,
|
|
1848
1870
|
values: cloneObject(_formValues),
|
|
1849
1871
|
});
|
|
1850
|
-
if (
|
|
1851
|
-
_proxyFormState.dirtyFields ||
|
|
1852
|
-
_proxySubscribeFormState.isDirty ||
|
|
1853
|
-
_proxySubscribeFormState.dirtyFields) &&
|
|
1854
|
-
options.shouldDirty) {
|
|
1872
|
+
if (options.shouldDirty) {
|
|
1855
1873
|
_updateDirtyFields(name);
|
|
1856
1874
|
_subjects.state.next({
|
|
1857
1875
|
name,
|
|
@@ -1861,22 +1879,41 @@ function createFormControl(props = {}) {
|
|
|
1861
1879
|
}
|
|
1862
1880
|
}
|
|
1863
1881
|
else {
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1882
|
+
const isEmpty = (Array.isArray(cloneValue) && !cloneValue.length) ||
|
|
1883
|
+
isEmptyObject(cloneValue);
|
|
1884
|
+
if (!field || field._f || isNullOrUndefined(cloneValue) || isEmpty) {
|
|
1885
|
+
setFieldValue(name, cloneValue, options);
|
|
1886
|
+
}
|
|
1887
|
+
else {
|
|
1888
|
+
setFieldValues(name, cloneValue, options);
|
|
1889
|
+
}
|
|
1867
1890
|
}
|
|
1868
|
-
if (
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1891
|
+
if (!isValueUnchanged) {
|
|
1892
|
+
if (isWatched(name, _names)) {
|
|
1893
|
+
_subjects.state.next({
|
|
1894
|
+
..._formState,
|
|
1895
|
+
name,
|
|
1896
|
+
values: cloneObject(_formValues),
|
|
1897
|
+
});
|
|
1898
|
+
}
|
|
1899
|
+
else {
|
|
1900
|
+
_subjects.state.next({
|
|
1901
|
+
name: _state.mount ? name : undefined,
|
|
1902
|
+
values: cloneObject(_formValues),
|
|
1903
|
+
});
|
|
1904
|
+
}
|
|
1874
1905
|
}
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1906
|
+
};
|
|
1907
|
+
const setValues = (formValues) => {
|
|
1908
|
+
const updatedFormValues = isFunction(formValues)
|
|
1909
|
+
? formValues(_formValues)
|
|
1910
|
+
: formValues;
|
|
1911
|
+
if (!deepEqual(_formValues, updatedFormValues)) {
|
|
1912
|
+
_formValues = {
|
|
1913
|
+
..._formValues,
|
|
1914
|
+
...updatedFormValues,
|
|
1915
|
+
};
|
|
1916
|
+
_subjects.state.next({ ..._formState, values: _formValues });
|
|
1880
1917
|
}
|
|
1881
1918
|
};
|
|
1882
1919
|
const onChange = async (event) => {
|
|
@@ -2095,15 +2132,16 @@ function createFormControl(props = {}) {
|
|
|
2095
2132
|
const watch = (name, defaultValue) => isFunction(name)
|
|
2096
2133
|
? _subjects.state.subscribe({
|
|
2097
2134
|
next: (payload) => 'values' in payload &&
|
|
2098
|
-
name(_getWatch(undefined, defaultValue), payload),
|
|
2135
|
+
name(payload.values || _getWatch(undefined, defaultValue), payload),
|
|
2099
2136
|
})
|
|
2100
2137
|
: _getWatch(name, defaultValue, true);
|
|
2101
2138
|
const _subscribe = (props) => _subjects.state.subscribe({
|
|
2102
2139
|
next: (formState) => {
|
|
2103
2140
|
if (shouldSubscribeByName(props.name, formState.name, props.exact) &&
|
|
2104
2141
|
shouldRenderFormState(formState, props.formState || _proxyFormState, _setFormState, props.reRenderRoot)) {
|
|
2142
|
+
const snapshot = { ..._formValues };
|
|
2105
2143
|
props.callback({
|
|
2106
|
-
values:
|
|
2144
|
+
values: snapshot,
|
|
2107
2145
|
..._formState,
|
|
2108
2146
|
...formState,
|
|
2109
2147
|
defaultValues: _defaultValues,
|
|
@@ -2165,7 +2203,7 @@ function createFormControl(props = {}) {
|
|
|
2165
2203
|
const register = (name, options = {}) => {
|
|
2166
2204
|
let field = get(_fields, name);
|
|
2167
2205
|
const disabledIsDefined = isBoolean(options.disabled) || isBoolean(_options.disabled);
|
|
2168
|
-
const shouldRevalidateRemount = !_names.registerName.has(name) && field && !field._f.mount;
|
|
2206
|
+
const shouldRevalidateRemount = !_names.registerName.has(name) && field && field._f && !field._f.mount;
|
|
2169
2207
|
set(_fields, name, {
|
|
2170
2208
|
...(field || {}),
|
|
2171
2209
|
_f: {
|
|
@@ -2575,6 +2613,7 @@ function createFormControl(props = {}) {
|
|
|
2575
2613
|
handleSubmit,
|
|
2576
2614
|
watch,
|
|
2577
2615
|
setValue,
|
|
2616
|
+
setValues,
|
|
2578
2617
|
getValues,
|
|
2579
2618
|
reset,
|
|
2580
2619
|
resetField,
|
|
@@ -2812,10 +2851,11 @@ function useFieldArray(props) {
|
|
|
2812
2851
|
control._subjects.state.next({
|
|
2813
2852
|
...control._formState,
|
|
2814
2853
|
});
|
|
2854
|
+
const validationModes = getValidationModes(control._options.mode);
|
|
2815
2855
|
if (_actioned.current &&
|
|
2816
|
-
(!
|
|
2817
|
-
|
|
2818
|
-
!
|
|
2856
|
+
(!validationModes.isOnSubmit || control._formState.isSubmitted) &&
|
|
2857
|
+
!getValidationModes(control._options.reValidateMode).isOnSubmit &&
|
|
2858
|
+
!validationModes.isOnBlur) {
|
|
2819
2859
|
if (control._options.resolver) {
|
|
2820
2860
|
control._runSchema([name]).then((result) => {
|
|
2821
2861
|
control._updateIsValidating([name]);
|