@bombillazo/rhf-plus 7.68.0-plus.0 → 7.70.0-plus.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/dist/__tests__/controller.server.test.d.ts +2 -0
- package/dist/__tests__/controller.server.test.d.ts.map +1 -0
- package/dist/__tests__/controller.test.d.ts +2 -0
- package/dist/__tests__/controller.test.d.ts.map +1 -0
- package/dist/__tests__/disabled-arrays.test.d.ts +2 -0
- package/dist/__tests__/disabled-arrays.test.d.ts.map +1 -0
- package/dist/__tests__/form.test.d.ts +2 -0
- package/dist/__tests__/form.test.d.ts.map +1 -0
- package/dist/__tests__/formStateSubscribe.server.test.d.ts +2 -0
- package/dist/__tests__/formStateSubscribe.server.test.d.ts.map +1 -0
- package/dist/__tests__/formStateSubscribe.test.d.ts +2 -0
- package/dist/__tests__/formStateSubscribe.test.d.ts.map +1 -0
- package/dist/__tests__/isPlainObject.test.d.ts +2 -0
- package/dist/__tests__/isPlainObject.test.d.ts.map +1 -0
- package/dist/__tests__/logic/appendErrors.test.d.ts +2 -0
- package/dist/__tests__/logic/appendErrors.test.d.ts.map +1 -0
- package/dist/__tests__/logic/createFormControl.test.d.ts +2 -0
- package/dist/__tests__/logic/createFormControl.test.d.ts.map +1 -0
- package/dist/__tests__/logic/generateId.test.d.ts +2 -0
- package/dist/__tests__/logic/generateId.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getCheckboxValue.test.d.ts +2 -0
- package/dist/__tests__/logic/getCheckboxValue.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getDirtyFields.test.d.ts +2 -0
- package/dist/__tests__/logic/getDirtyFields.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getEventValue.test.d.ts +2 -0
- package/dist/__tests__/logic/getEventValue.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getFieldValue.test.d.ts +2 -0
- package/dist/__tests__/logic/getFieldValue.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getFieldValueAs.test.d.ts +2 -0
- package/dist/__tests__/logic/getFieldValueAs.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getFocusFieldName.test.d.ts +2 -0
- package/dist/__tests__/logic/getFocusFieldName.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getNodeParentName.test.d.ts +2 -0
- package/dist/__tests__/logic/getNodeParentName.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getRadioValue.test.d.ts +2 -0
- package/dist/__tests__/logic/getRadioValue.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getResolverOptions.test.d.ts +2 -0
- package/dist/__tests__/logic/getResolverOptions.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getRuleValue.test.d.ts +2 -0
- package/dist/__tests__/logic/getRuleValue.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getValidateError.test.d.ts +2 -0
- package/dist/__tests__/logic/getValidateError.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getValidationModes.test.d.ts +2 -0
- package/dist/__tests__/logic/getValidationModes.test.d.ts.map +1 -0
- package/dist/__tests__/logic/getValueAndMessage.test.d.ts +2 -0
- package/dist/__tests__/logic/getValueAndMessage.test.d.ts.map +1 -0
- package/dist/__tests__/logic/hasPromiseValidation.test.d.ts +2 -0
- package/dist/__tests__/logic/hasPromiseValidation.test.d.ts.map +1 -0
- package/dist/__tests__/logic/hasValidation.test.d.ts +2 -0
- package/dist/__tests__/logic/hasValidation.test.d.ts.map +1 -0
- package/dist/__tests__/logic/isNameInFieldArray.test.d.ts +2 -0
- package/dist/__tests__/logic/isNameInFieldArray.test.d.ts.map +1 -0
- package/dist/__tests__/logic/isWatched.test.d.ts +2 -0
- package/dist/__tests__/logic/isWatched.test.d.ts.map +1 -0
- package/dist/__tests__/logic/iterateFieldsByAction.test.d.ts +2 -0
- package/dist/__tests__/logic/iterateFieldsByAction.test.d.ts.map +1 -0
- package/dist/__tests__/logic/schemaErrorLookup.test.d.ts +2 -0
- package/dist/__tests__/logic/schemaErrorLookup.test.d.ts.map +1 -0
- package/dist/__tests__/logic/shouldRenderFormState.test.d.ts +2 -0
- package/dist/__tests__/logic/shouldRenderFormState.test.d.ts.map +1 -0
- package/dist/__tests__/logic/shouldSubscribeByName.test.d.ts +2 -0
- package/dist/__tests__/logic/shouldSubscribeByName.test.d.ts.map +1 -0
- package/dist/__tests__/logic/skipValidation.test.d.ts +2 -0
- package/dist/__tests__/logic/skipValidation.test.d.ts.map +1 -0
- package/dist/__tests__/logic/unsetEmptyArray.test.d.ts +2 -0
- package/dist/__tests__/logic/unsetEmptyArray.test.d.ts.map +1 -0
- package/dist/__tests__/logic/validateField.test.d.ts +2 -0
- package/dist/__tests__/logic/validateField.test.d.ts.map +1 -0
- package/dist/__tests__/readonly-validation.test.d.ts +2 -0
- package/dist/__tests__/readonly-validation.test.d.ts.map +1 -0
- package/dist/__tests__/type.test.d.ts +2 -0
- package/dist/__tests__/type.test.d.ts.map +1 -0
- package/dist/__tests__/useController.test.d.ts +2 -0
- package/dist/__tests__/useController.test.d.ts.map +1 -0
- package/dist/__tests__/useFieldArray/append.test.d.ts +2 -0
- package/dist/__tests__/useFieldArray/append.test.d.ts.map +1 -0
- package/dist/__tests__/useFieldArray/focus.test.d.ts +2 -0
- package/dist/__tests__/useFieldArray/focus.test.d.ts.map +1 -0
- package/dist/__tests__/useFieldArray/insert.test.d.ts +2 -0
- package/dist/__tests__/useFieldArray/insert.test.d.ts.map +1 -0
- package/dist/__tests__/useFieldArray/move.test.d.ts +2 -0
- package/dist/__tests__/useFieldArray/move.test.d.ts.map +1 -0
- package/dist/__tests__/useFieldArray/prepend.test.d.ts +2 -0
- package/dist/__tests__/useFieldArray/prepend.test.d.ts.map +1 -0
- package/dist/__tests__/useFieldArray/remove.test.d.ts +2 -0
- package/dist/__tests__/useFieldArray/remove.test.d.ts.map +1 -0
- package/dist/__tests__/useFieldArray/replace.test.d.ts +2 -0
- package/dist/__tests__/useFieldArray/replace.test.d.ts.map +1 -0
- package/dist/__tests__/useFieldArray/swap.test.d.ts +2 -0
- package/dist/__tests__/useFieldArray/swap.test.d.ts.map +1 -0
- package/dist/__tests__/useFieldArray/update.test.d.ts +2 -0
- package/dist/__tests__/useFieldArray/update.test.d.ts.map +1 -0
- package/dist/__tests__/useFieldArray.test.d.ts +2 -0
- package/dist/__tests__/useFieldArray.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/clearErrors.test.d.ts +2 -0
- package/dist/__tests__/useForm/clearErrors.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/formState.test.d.ts +2 -0
- package/dist/__tests__/useForm/formState.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/getFieldState.test.d.ts +2 -0
- package/dist/__tests__/useForm/getFieldState.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/getValues.test.d.ts +2 -0
- package/dist/__tests__/useForm/getValues.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/handleSubmit.test.d.ts +2 -0
- package/dist/__tests__/useForm/handleSubmit.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/hasBeenSubmitted.test.d.ts +2 -0
- package/dist/__tests__/useForm/hasBeenSubmitted.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/isDirtySinceSubmit.test.d.ts +2 -0
- package/dist/__tests__/useForm/isDirtySinceSubmit.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/register.test.d.ts +2 -0
- package/dist/__tests__/useForm/register.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/reset.test.d.ts +2 -0
- package/dist/__tests__/useForm/reset.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/resetField.test.d.ts +2 -0
- package/dist/__tests__/useForm/resetField.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/resolver.test.d.ts +2 -0
- package/dist/__tests__/useForm/resolver.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/setError.test.d.ts +2 -0
- package/dist/__tests__/useForm/setError.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/setFocus.test.d.ts +2 -0
- package/dist/__tests__/useForm/setFocus.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/setValue.test.d.ts +2 -0
- package/dist/__tests__/useForm/setValue.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/setValueEmptyArray.test.d.ts +2 -0
- package/dist/__tests__/useForm/setValueEmptyArray.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/subscribe.test.d.ts +2 -0
- package/dist/__tests__/useForm/subscribe.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/trigger.test.d.ts +2 -0
- package/dist/__tests__/useForm/trigger.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/unregister.test.d.ts +2 -0
- package/dist/__tests__/useForm/unregister.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/useFormWithNullValues.test.d.ts +2 -0
- package/dist/__tests__/useForm/useFormWithNullValues.test.d.ts.map +1 -0
- package/dist/__tests__/useForm/watch.test.d.ts +2 -0
- package/dist/__tests__/useForm/watch.test.d.ts.map +1 -0
- package/dist/__tests__/useForm.server.test.d.ts +2 -0
- package/dist/__tests__/useForm.server.test.d.ts.map +1 -0
- package/dist/__tests__/useForm.test.d.ts +2 -0
- package/dist/__tests__/useForm.test.d.ts.map +1 -0
- package/dist/__tests__/useFormContext.server.test.d.ts +2 -0
- package/dist/__tests__/useFormContext.server.test.d.ts.map +1 -0
- package/dist/__tests__/useFormContext.test.d.ts +2 -0
- package/dist/__tests__/useFormContext.test.d.ts.map +1 -0
- package/dist/__tests__/useFormState.test.d.ts +2 -0
- package/dist/__tests__/useFormState.test.d.ts.map +1 -0
- package/dist/__tests__/useWatch.test.d.ts +2 -0
- package/dist/__tests__/useWatch.test.d.ts.map +1 -0
- package/dist/__tests__/utils/append.test.d.ts +2 -0
- package/dist/__tests__/utils/append.test.d.ts.map +1 -0
- package/dist/__tests__/utils/cloneObject.test.d.ts +2 -0
- package/dist/__tests__/utils/cloneObject.test.d.ts.map +1 -0
- package/dist/__tests__/utils/compact.test.d.ts +2 -0
- package/dist/__tests__/utils/compact.test.d.ts.map +1 -0
- package/dist/__tests__/utils/convertToArrayPayload.test.d.ts +2 -0
- package/dist/__tests__/utils/convertToArrayPayload.test.d.ts.map +1 -0
- package/dist/__tests__/utils/createSubject.test.d.ts +2 -0
- package/dist/__tests__/utils/createSubject.test.d.ts.map +1 -0
- package/dist/__tests__/utils/deepEqual.test.d.ts +2 -0
- package/dist/__tests__/utils/deepEqual.test.d.ts.map +1 -0
- package/dist/__tests__/utils/deepMerge.test.d.ts +2 -0
- package/dist/__tests__/utils/deepMerge.test.d.ts.map +1 -0
- package/dist/__tests__/utils/extractFormValues.test.d.ts +2 -0
- package/dist/__tests__/utils/extractFormValues.test.d.ts.map +1 -0
- package/dist/__tests__/utils/fillEmptyArray.test.d.ts +2 -0
- package/dist/__tests__/utils/fillEmptyArray.test.d.ts.map +1 -0
- package/dist/__tests__/utils/flatten.test.d.ts +2 -0
- package/dist/__tests__/utils/flatten.test.d.ts.map +1 -0
- package/dist/__tests__/utils/get.test.d.ts +2 -0
- package/dist/__tests__/utils/get.test.d.ts.map +1 -0
- package/dist/__tests__/utils/insert.test.d.ts +2 -0
- package/dist/__tests__/utils/insert.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isBoolean.test.d.ts +2 -0
- package/dist/__tests__/utils/isBoolean.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isCheckBoxInput.test.d.ts +2 -0
- package/dist/__tests__/utils/isCheckBoxInput.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isEmptyObject.test.d.ts +2 -0
- package/dist/__tests__/utils/isEmptyObject.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isFileInput.test.d.ts +2 -0
- package/dist/__tests__/utils/isFileInput.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isFunction.test.d.ts +2 -0
- package/dist/__tests__/utils/isFunction.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isHTMLElement.test.d.ts +2 -0
- package/dist/__tests__/utils/isHTMLElement.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isKey.test.d.ts +2 -0
- package/dist/__tests__/utils/isKey.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isMultipleSelect.test.d.ts +2 -0
- package/dist/__tests__/utils/isMultipleSelect.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isNullOrUndefined.test.d.ts +2 -0
- package/dist/__tests__/utils/isNullOrUndefined.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isObject.test.d.ts +2 -0
- package/dist/__tests__/utils/isObject.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isPrimitive.test.d.ts +2 -0
- package/dist/__tests__/utils/isPrimitive.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isRadioInput.test.d.ts +2 -0
- package/dist/__tests__/utils/isRadioInput.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isRadioOrCheckbox.test.d.ts +2 -0
- package/dist/__tests__/utils/isRadioOrCheckbox.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isRegex.test.d.ts +2 -0
- package/dist/__tests__/utils/isRegex.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isString.test.d.ts +2 -0
- package/dist/__tests__/utils/isString.test.d.ts.map +1 -0
- package/dist/__tests__/utils/isUndefined.test.d.ts +2 -0
- package/dist/__tests__/utils/isUndefined.test.d.ts.map +1 -0
- package/dist/__tests__/utils/live.test.d.ts +2 -0
- package/dist/__tests__/utils/live.test.d.ts.map +1 -0
- package/dist/__tests__/utils/mergeMissingKeysAsUndefined.test.d.ts +2 -0
- package/dist/__tests__/utils/mergeMissingKeysAsUndefined.test.d.ts.map +1 -0
- package/dist/__tests__/utils/move.test.d.ts +2 -0
- package/dist/__tests__/utils/move.test.d.ts.map +1 -0
- package/dist/__tests__/utils/noop.test.d.ts +2 -0
- package/dist/__tests__/utils/noop.test.d.ts.map +1 -0
- package/dist/__tests__/utils/objectHasFunction.test.d.ts +2 -0
- package/dist/__tests__/utils/objectHasFunction.test.d.ts.map +1 -0
- package/dist/__tests__/utils/prepend.test.d.ts +2 -0
- package/dist/__tests__/utils/prepend.test.d.ts.map +1 -0
- package/dist/__tests__/utils/remove.test.d.ts +2 -0
- package/dist/__tests__/utils/remove.test.d.ts.map +1 -0
- package/dist/__tests__/utils/set.test.d.ts +2 -0
- package/dist/__tests__/utils/set.test.d.ts.map +1 -0
- package/dist/__tests__/utils/stringToPath.test.d.ts +2 -0
- package/dist/__tests__/utils/stringToPath.test.d.ts.map +1 -0
- package/dist/__tests__/utils/swap.test.d.ts +2 -0
- package/dist/__tests__/utils/swap.test.d.ts.map +1 -0
- package/dist/__tests__/utils/unset.test.d.ts +2 -0
- package/dist/__tests__/utils/unset.test.d.ts.map +1 -0
- package/dist/__tests__/utils/validationModeChecker.test.d.ts +2 -0
- package/dist/__tests__/utils/validationModeChecker.test.d.ts.map +1 -0
- package/dist/__tests__/watch.server.test.d.ts +2 -0
- package/dist/__tests__/watch.server.test.d.ts.map +1 -0
- package/dist/__tests__/watch.test.d.ts +2 -0
- package/dist/__tests__/watch.test.d.ts.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.mjs +85 -49
- 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/react-server.esm.mjs +70 -39
- package/dist/react-server.esm.mjs.map +1 -1
- package/dist/types/fieldArray.d.ts.map +1 -1
- package/dist/types/form.d.ts +1 -8
- package/dist/types/form.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/utils.d.ts +3 -2
- package/dist/types/utils.d.ts.map +1 -1
- package/dist/types/watch.d.ts +32 -0
- package/dist/types/watch.d.ts.map +1 -0
- package/dist/useController.d.ts.map +1 -1
- package/dist/useFieldArray.d.ts.map +1 -1
- package/dist/useWatch.d.ts.map +1 -1
- package/dist/utils/cloneObject.d.ts.map +1 -1
- package/dist/watch.d.ts +7 -17
- package/dist/watch.d.ts.map +1 -1
- package/package.json +18 -18
package/dist/index.esm.mjs
CHANGED
|
@@ -33,29 +33,23 @@ var isWeb = typeof window !== 'undefined' &&
|
|
|
33
33
|
typeof document !== 'undefined';
|
|
34
34
|
|
|
35
35
|
function cloneObject(data) {
|
|
36
|
-
let copy;
|
|
37
|
-
const isArray = Array.isArray(data);
|
|
38
|
-
const isFileListInstance = typeof FileList !== 'undefined' ? data instanceof FileList : false;
|
|
39
36
|
if (data instanceof Date) {
|
|
40
|
-
|
|
37
|
+
return new Date(data);
|
|
41
38
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (!isArray && !isPlainObject(data)) {
|
|
46
|
-
copy = data;
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
for (const key in data) {
|
|
50
|
-
if (data.hasOwnProperty(key)) {
|
|
51
|
-
copy[key] = cloneObject(data[key]);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
39
|
+
const isFileListInstance = typeof FileList !== 'undefined' && data instanceof FileList;
|
|
40
|
+
if (isWeb && (data instanceof Blob || isFileListInstance)) {
|
|
41
|
+
return data;
|
|
55
42
|
}
|
|
56
|
-
|
|
43
|
+
const isArray = Array.isArray(data);
|
|
44
|
+
if (!isArray && !(isObject(data) && isPlainObject(data))) {
|
|
57
45
|
return data;
|
|
58
46
|
}
|
|
47
|
+
const copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));
|
|
48
|
+
for (const key in data) {
|
|
49
|
+
if (Object.prototype.hasOwnProperty.call(data, key)) {
|
|
50
|
+
copy[key] = cloneObject(data[key]);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
59
53
|
return copy;
|
|
60
54
|
}
|
|
61
55
|
|
|
@@ -81,6 +75,8 @@ var get = (object, path, defaultValue) => {
|
|
|
81
75
|
|
|
82
76
|
var isBoolean = (value) => typeof value === 'boolean';
|
|
83
77
|
|
|
78
|
+
var isFunction = (value) => typeof value === 'function';
|
|
79
|
+
|
|
84
80
|
function mergeMissingKeysAsUndefined(oldObject, newObject) {
|
|
85
81
|
if (!newObject) {
|
|
86
82
|
return newObject;
|
|
@@ -321,7 +317,7 @@ function deepEqual(object1, object2, _internal_visited = new WeakSet()) {
|
|
|
321
317
|
return Object.is(object1, object2);
|
|
322
318
|
}
|
|
323
319
|
if (isDateObject(object1) && isDateObject(object2)) {
|
|
324
|
-
return object1.getTime()
|
|
320
|
+
return Object.is(object1.getTime(), object2.getTime());
|
|
325
321
|
}
|
|
326
322
|
const keys1 = Object.keys(object1);
|
|
327
323
|
const keys2 = Object.keys(object2);
|
|
@@ -564,12 +560,12 @@ function useController(props) {
|
|
|
564
560
|
const ref = React.useCallback((elm) => {
|
|
565
561
|
elementRef.current = elm;
|
|
566
562
|
const field = get(control._fields, name);
|
|
567
|
-
if (field && elm) {
|
|
563
|
+
if (field && field._f && elm) {
|
|
568
564
|
field._f.ref = {
|
|
569
|
-
focus: () =>
|
|
570
|
-
select: () =>
|
|
571
|
-
setCustomValidity: (message) => elm.setCustomValidity(message),
|
|
572
|
-
reportValidity: () => elm.reportValidity(),
|
|
565
|
+
focus: () => isFunction(elm.focus) && elm.focus(),
|
|
566
|
+
select: () => isFunction(elm.select) && elm.select(),
|
|
567
|
+
setCustomValidity: (message) => isFunction(elm.setCustomValidity) && elm.setCustomValidity(message),
|
|
568
|
+
reportValidity: () => isFunction(elm.reportValidity) && elm.reportValidity(),
|
|
573
569
|
};
|
|
574
570
|
}
|
|
575
571
|
}, [control._fields, name]);
|
|
@@ -927,8 +923,6 @@ var isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;
|
|
|
927
923
|
|
|
928
924
|
var isFileInput = (element) => element.type === 'file';
|
|
929
925
|
|
|
930
|
-
var isFunction = (value) => typeof value === 'function';
|
|
931
|
-
|
|
932
926
|
var isHTMLElement = (value) => {
|
|
933
927
|
if (!isWeb) {
|
|
934
928
|
return false;
|
|
@@ -1541,6 +1535,7 @@ function createFormControl(props = {}) {
|
|
|
1541
1535
|
action: false,
|
|
1542
1536
|
mount: false,
|
|
1543
1537
|
watch: false,
|
|
1538
|
+
keepIsValid: false,
|
|
1544
1539
|
};
|
|
1545
1540
|
let _names = {
|
|
1546
1541
|
mount: new Set(),
|
|
@@ -1552,7 +1547,7 @@ function createFormControl(props = {}) {
|
|
|
1552
1547
|
};
|
|
1553
1548
|
let delayErrorCallback;
|
|
1554
1549
|
let timer = 0;
|
|
1555
|
-
const
|
|
1550
|
+
const defaultProxyFormState = {
|
|
1556
1551
|
isDirty: false,
|
|
1557
1552
|
isDirtySinceSubmit: false,
|
|
1558
1553
|
hasBeenSubmitted: false,
|
|
@@ -1564,6 +1559,9 @@ function createFormControl(props = {}) {
|
|
|
1564
1559
|
isValid: false,
|
|
1565
1560
|
errors: false,
|
|
1566
1561
|
};
|
|
1562
|
+
const _proxyFormState = {
|
|
1563
|
+
...defaultProxyFormState,
|
|
1564
|
+
};
|
|
1567
1565
|
let _proxySubscribeFormState = {
|
|
1568
1566
|
..._proxyFormState,
|
|
1569
1567
|
};
|
|
@@ -1580,13 +1578,21 @@ function createFormControl(props = {}) {
|
|
|
1580
1578
|
timer = setTimeout(callback, wait);
|
|
1581
1579
|
};
|
|
1582
1580
|
const _setValid = async (shouldUpdateValid) => {
|
|
1581
|
+
if (_state.keepIsValid) {
|
|
1582
|
+
return;
|
|
1583
|
+
}
|
|
1583
1584
|
if ((Array.isArray(_options.disabled) || !_options.disabled) &&
|
|
1584
1585
|
(_proxyFormState.isValid ||
|
|
1585
1586
|
_proxySubscribeFormState.isValid ||
|
|
1586
1587
|
shouldUpdateValid)) {
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1588
|
+
let isValid;
|
|
1589
|
+
if (_options.resolver) {
|
|
1590
|
+
isValid = isEmptyObject((await _runSchema()).errors);
|
|
1591
|
+
_updateIsValidating();
|
|
1592
|
+
}
|
|
1593
|
+
else {
|
|
1594
|
+
isValid = await executeBuiltInValidation(_fields, true);
|
|
1595
|
+
}
|
|
1590
1596
|
if (isValid !== _formState.isValid) {
|
|
1591
1597
|
_subjects.state.next({
|
|
1592
1598
|
isValid,
|
|
@@ -1782,11 +1788,11 @@ function createFormControl(props = {}) {
|
|
|
1782
1788
|
const _runSchema = async (name) => {
|
|
1783
1789
|
_updateIsValidating(name, true);
|
|
1784
1790
|
const result = await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));
|
|
1785
|
-
_updateIsValidating(name);
|
|
1786
1791
|
return result;
|
|
1787
1792
|
};
|
|
1788
1793
|
const executeSchemaAndUpdateState = async (names) => {
|
|
1789
1794
|
const { errors } = await _runSchema(names);
|
|
1795
|
+
_updateIsValidating(names);
|
|
1790
1796
|
if (names) {
|
|
1791
1797
|
for (const name of names) {
|
|
1792
1798
|
const error = get(errors, name);
|
|
@@ -1824,7 +1830,7 @@ function createFormControl(props = {}) {
|
|
|
1824
1830
|
}
|
|
1825
1831
|
if (fieldError[_f.name]) {
|
|
1826
1832
|
context.valid = false;
|
|
1827
|
-
if (shouldOnlyCheckValid) {
|
|
1833
|
+
if (shouldOnlyCheckValid || props.shouldUseNativeValidation) {
|
|
1828
1834
|
break;
|
|
1829
1835
|
}
|
|
1830
1836
|
}
|
|
@@ -1979,11 +1985,19 @@ function createFormControl(props = {}) {
|
|
|
1979
1985
|
? setValues(name, cloneValue, options)
|
|
1980
1986
|
: setFieldValue(name, cloneValue, options);
|
|
1981
1987
|
}
|
|
1982
|
-
isWatched(name, _names)
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1988
|
+
if (isWatched(name, _names)) {
|
|
1989
|
+
_subjects.state.next({
|
|
1990
|
+
..._formState,
|
|
1991
|
+
name,
|
|
1992
|
+
values: cloneObject(_formValues),
|
|
1993
|
+
});
|
|
1994
|
+
}
|
|
1995
|
+
else {
|
|
1996
|
+
_subjects.state.next({
|
|
1997
|
+
name: _state.mount ? name : undefined,
|
|
1998
|
+
values: cloneObject(_formValues),
|
|
1999
|
+
});
|
|
2000
|
+
}
|
|
1987
2001
|
// Trigger validation when shouldValidate is true
|
|
1988
2002
|
// This ensures validation happens for all cases including:
|
|
1989
2003
|
// - Field arrays
|
|
@@ -2112,6 +2126,7 @@ function createFormControl(props = {}) {
|
|
|
2112
2126
|
!isBlurEvent && watched && _subjects.state.next({ ..._formState });
|
|
2113
2127
|
if (_options.resolver) {
|
|
2114
2128
|
const { errors } = await _runSchema([name]);
|
|
2129
|
+
_updateIsValidating([name]);
|
|
2115
2130
|
_updateIsFieldValueUpdated(fieldValue);
|
|
2116
2131
|
if (isFieldValueUpdated) {
|
|
2117
2132
|
const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);
|
|
@@ -2263,7 +2278,10 @@ function createFormControl(props = {}) {
|
|
|
2263
2278
|
};
|
|
2264
2279
|
return _subscribe({
|
|
2265
2280
|
...props,
|
|
2266
|
-
formState:
|
|
2281
|
+
formState: {
|
|
2282
|
+
...defaultProxyFormState,
|
|
2283
|
+
...props.formState,
|
|
2284
|
+
},
|
|
2267
2285
|
});
|
|
2268
2286
|
};
|
|
2269
2287
|
const unregister = (name, options = {}) => {
|
|
@@ -2457,6 +2475,7 @@ function createFormControl(props = {}) {
|
|
|
2457
2475
|
});
|
|
2458
2476
|
if (_options.resolver) {
|
|
2459
2477
|
const { errors, values } = await _runSchema();
|
|
2478
|
+
_updateIsValidating();
|
|
2460
2479
|
_formState.errors = errors;
|
|
2461
2480
|
fieldValues = cloneObject(values);
|
|
2462
2481
|
}
|
|
@@ -2541,9 +2560,15 @@ function createFormControl(props = {}) {
|
|
|
2541
2560
|
...Object.keys(getDirtyFields(_defaultValues, _formValues)),
|
|
2542
2561
|
]);
|
|
2543
2562
|
for (const fieldName of Array.from(fieldsToCheck)) {
|
|
2544
|
-
get(_formState.dirtyFields, fieldName)
|
|
2545
|
-
|
|
2546
|
-
|
|
2563
|
+
const isDirty = get(_formState.dirtyFields, fieldName);
|
|
2564
|
+
const existingValue = get(_formValues, fieldName);
|
|
2565
|
+
const newValue = get(values, fieldName);
|
|
2566
|
+
if (isDirty && !isUndefined(existingValue)) {
|
|
2567
|
+
set(values, fieldName, existingValue);
|
|
2568
|
+
}
|
|
2569
|
+
else if (!isDirty && !isUndefined(newValue)) {
|
|
2570
|
+
setValue(fieldName, newValue);
|
|
2571
|
+
}
|
|
2547
2572
|
}
|
|
2548
2573
|
}
|
|
2549
2574
|
else {
|
|
@@ -2601,6 +2626,7 @@ function createFormControl(props = {}) {
|
|
|
2601
2626
|
!!keepStateOptions.keepDirtyValues ||
|
|
2602
2627
|
(!_options.shouldUnregister && !isEmptyObject(values));
|
|
2603
2628
|
_state.watch = !!_options.shouldUnregister;
|
|
2629
|
+
_state.keepIsValid = !!keepStateOptions.keepIsValid;
|
|
2604
2630
|
_state.action = false;
|
|
2605
2631
|
// Clear errors synchronously to prevent validation errors on subsequent submissions
|
|
2606
2632
|
// This fixes the issue where form.reset() causes validation errors on subsequent
|
|
@@ -2648,7 +2674,7 @@ function createFormControl(props = {}) {
|
|
|
2648
2674
|
};
|
|
2649
2675
|
const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues)
|
|
2650
2676
|
? formValues(_formValues)
|
|
2651
|
-
: formValues, keepStateOptions);
|
|
2677
|
+
: formValues, { ..._options.resetOptions, ...keepStateOptions });
|
|
2652
2678
|
const setFocus = (name, options = {}) => {
|
|
2653
2679
|
const field = get(_fields, name);
|
|
2654
2680
|
const fieldReference = field && field._f;
|
|
@@ -2657,10 +2683,14 @@ function createFormControl(props = {}) {
|
|
|
2657
2683
|
? fieldReference.refs[0]
|
|
2658
2684
|
: fieldReference.ref;
|
|
2659
2685
|
if (fieldRef.focus) {
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
fieldRef.
|
|
2686
|
+
// Use setTimeout to ensure focus happens after any pending state updates
|
|
2687
|
+
// This fixes the issue where setFocus doesn't work immediately after setError
|
|
2688
|
+
setTimeout(() => {
|
|
2689
|
+
fieldRef.focus();
|
|
2690
|
+
options.shouldSelect &&
|
|
2691
|
+
isFunction(fieldRef.select) &&
|
|
2692
|
+
fieldRef.select();
|
|
2693
|
+
});
|
|
2664
2694
|
}
|
|
2665
2695
|
}
|
|
2666
2696
|
};
|
|
@@ -2751,6 +2781,7 @@ function createFormControl(props = {}) {
|
|
|
2751
2781
|
setError,
|
|
2752
2782
|
_subscribe,
|
|
2753
2783
|
_runSchema,
|
|
2784
|
+
_updateIsValidating,
|
|
2754
2785
|
_focusError,
|
|
2755
2786
|
_getWatch,
|
|
2756
2787
|
_getDirty,
|
|
@@ -2832,7 +2863,7 @@ var generateId = () => {
|
|
|
2832
2863
|
}
|
|
2833
2864
|
const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;
|
|
2834
2865
|
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
2835
|
-
const r = (Math.random() * 16 + d) % 16 | 0;
|
|
2866
|
+
const r = ((Math.random() * 16 + d) % 16) | 0;
|
|
2836
2867
|
return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);
|
|
2837
2868
|
});
|
|
2838
2869
|
};
|
|
@@ -3054,6 +3085,7 @@ function useFieldArray(props) {
|
|
|
3054
3085
|
!getValidationModes(control._options.reValidateMode).isOnSubmit) {
|
|
3055
3086
|
if (control._options.resolver) {
|
|
3056
3087
|
control._runSchema([name]).then((result) => {
|
|
3088
|
+
control._updateIsValidating([name]);
|
|
3057
3089
|
const error = get(result.errors, name);
|
|
3058
3090
|
const existingError = get(control._formState.errors, name);
|
|
3059
3091
|
if (existingError
|
|
@@ -3312,7 +3344,11 @@ function useForm(props = {}) {
|
|
|
3312
3344
|
* Watch component that subscribes to form field changes and re-renders when watched fields update.
|
|
3313
3345
|
*
|
|
3314
3346
|
* @param control - The form control object from useForm
|
|
3315
|
-
* @param
|
|
3347
|
+
* @param name - Can be field name, array of field names, or undefined to watch the entire form
|
|
3348
|
+
* @param disabled - Disable subscription
|
|
3349
|
+
* @param exact - Whether to watch exact field names or not
|
|
3350
|
+
* @param defaultValue - The default value to use if the field is not yet set
|
|
3351
|
+
* @param compute - Function to compute derived values from watched fields
|
|
3316
3352
|
* @param render - The function that receives watched values and returns ReactNode
|
|
3317
3353
|
* @returns The result of calling render function with watched values
|
|
3318
3354
|
*
|
|
@@ -3330,7 +3366,7 @@ function useForm(props = {}) {
|
|
|
3330
3366
|
* />
|
|
3331
3367
|
* ```
|
|
3332
3368
|
*/
|
|
3333
|
-
const Watch = (
|
|
3369
|
+
const Watch = (props) => props.render(useWatch({ name: props.names, ...props }));
|
|
3334
3370
|
|
|
3335
3371
|
export { Controller, Form, FormProvider, FormStateSubscribe, Watch, appendErrors, createFormControl, get, set, submitForm as submit, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };
|
|
3336
3372
|
//# sourceMappingURL=index.esm.mjs.map
|