@bombillazo/rhf-plus 7.57.0-plus.0 → 7.60.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/README.md +1 -0
- package/dist/__typetest__/form.test-d.d.ts +1 -1
- package/dist/__typetest__/form.test-d.d.ts.map +1 -1
- package/dist/controller.d.ts +15 -14
- package/dist/controller.d.ts.map +1 -1
- package/dist/form.d.ts +1 -1
- 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 +73 -44
- 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/appendErrors.d.ts +1 -1
- package/dist/logic/appendErrors.d.ts.map +1 -1
- package/dist/logic/createFormControl.d.ts +1 -1
- package/dist/logic/createFormControl.d.ts.map +1 -1
- package/dist/logic/generateId.d.ts.map +1 -1
- package/dist/logic/generateWatchOutput.d.ts +1 -1
- package/dist/logic/generateWatchOutput.d.ts.map +1 -1
- package/dist/logic/getFieldValue.d.ts +1 -1
- package/dist/logic/getFieldValue.d.ts.map +1 -1
- package/dist/logic/getFieldValueAs.d.ts +1 -1
- package/dist/logic/getFieldValueAs.d.ts.map +1 -1
- package/dist/logic/getFocusFieldName.d.ts +1 -1
- package/dist/logic/getFocusFieldName.d.ts.map +1 -1
- package/dist/logic/getProxyFormState.d.ts +1 -1
- package/dist/logic/getProxyFormState.d.ts.map +1 -1
- package/dist/logic/getResolverOptions.d.ts +1 -1
- package/dist/logic/getResolverOptions.d.ts.map +1 -1
- package/dist/logic/getRuleValue.d.ts +1 -1
- package/dist/logic/getRuleValue.d.ts.map +1 -1
- package/dist/logic/getValidateError.d.ts +1 -1
- package/dist/logic/getValidateError.d.ts.map +1 -1
- package/dist/logic/getValidationModes.d.ts +1 -1
- package/dist/logic/getValidationModes.d.ts.map +1 -1
- package/dist/logic/getValueAndMessage.d.ts +1 -1
- package/dist/logic/getValueAndMessage.d.ts.map +1 -1
- package/dist/logic/hasPromiseValidation.d.ts +1 -1
- package/dist/logic/hasPromiseValidation.d.ts.map +1 -1
- package/dist/logic/hasValidation.d.ts +1 -1
- package/dist/logic/hasValidation.d.ts.map +1 -1
- package/dist/logic/isNameInFieldArray.d.ts +1 -1
- package/dist/logic/isNameInFieldArray.d.ts.map +1 -1
- package/dist/logic/isWatched.d.ts +1 -1
- package/dist/logic/isWatched.d.ts.map +1 -1
- package/dist/logic/iterateFieldsByAction.d.ts +1 -1
- package/dist/logic/iterateFieldsByAction.d.ts.map +1 -1
- package/dist/logic/schemaErrorLookup.d.ts +1 -1
- package/dist/logic/schemaErrorLookup.d.ts.map +1 -1
- package/dist/logic/shouldRenderFormState.d.ts +1 -1
- package/dist/logic/shouldRenderFormState.d.ts.map +1 -1
- package/dist/logic/skipValidation.d.ts +1 -1
- package/dist/logic/skipValidation.d.ts.map +1 -1
- package/dist/logic/updateFieldArrayRootError.d.ts +1 -1
- package/dist/logic/updateFieldArrayRootError.d.ts.map +1 -1
- package/dist/logic/validateField.d.ts +1 -1
- package/dist/logic/validateField.d.ts.map +1 -1
- package/dist/react-server.esm.mjs +29 -17
- package/dist/react-server.esm.mjs.map +1 -1
- package/dist/types/controller.d.ts +13 -10
- package/dist/types/controller.d.ts.map +1 -1
- package/dist/types/errors.d.ts +3 -3
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/fieldArray.d.ts +4 -4
- package/dist/types/fieldArray.d.ts.map +1 -1
- package/dist/types/fields.d.ts +2 -2
- package/dist/types/fields.d.ts.map +1 -1
- package/dist/types/form.d.ts +17 -15
- package/dist/types/form.d.ts.map +1 -1
- package/dist/types/path/common.d.ts +1 -1
- package/dist/types/path/common.d.ts.map +1 -1
- package/dist/types/path/eager.d.ts +16 -3
- package/dist/types/path/eager.d.ts.map +1 -1
- package/dist/types/path/index.d.ts +1 -1
- package/dist/types/path/index.d.ts.map +1 -1
- package/dist/types/resolvers.d.ts +3 -3
- package/dist/types/resolvers.d.ts.map +1 -1
- package/dist/types/utils.d.ts +1 -1
- package/dist/types/utils.d.ts.map +1 -1
- package/dist/types/validator.d.ts +4 -4
- package/dist/types/validator.d.ts.map +1 -1
- package/dist/useController.d.ts +1 -1
- package/dist/useController.d.ts.map +1 -1
- package/dist/useFieldArray.d.ts +1 -1
- package/dist/useFieldArray.d.ts.map +1 -1
- package/dist/useForm.d.ts +1 -1
- package/dist/useForm.d.ts.map +1 -1
- package/dist/useFormContext.d.ts +1 -1
- package/dist/useFormContext.d.ts.map +1 -1
- package/dist/useFormState.d.ts +1 -1
- package/dist/useFormState.d.ts.map +1 -1
- package/dist/useWatch.d.ts +15 -15
- package/dist/useWatch.d.ts.map +1 -1
- package/dist/utils/cloneObject.d.ts.map +1 -1
- package/dist/utils/createSubject.d.ts +1 -1
- package/dist/utils/createSubject.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/flatten.d.ts +1 -1
- package/dist/utils/flatten.d.ts.map +1 -1
- package/dist/utils/get.d.ts.map +1 -1
- package/dist/utils/isCheckBoxInput.d.ts +1 -1
- package/dist/utils/isCheckBoxInput.d.ts.map +1 -1
- package/dist/utils/isEmptyObject.d.ts +1 -1
- package/dist/utils/isEmptyObject.d.ts.map +1 -1
- package/dist/utils/isFileInput.d.ts +1 -1
- package/dist/utils/isFileInput.d.ts.map +1 -1
- package/dist/utils/isMessage.d.ts +1 -1
- package/dist/utils/isMessage.d.ts.map +1 -1
- package/dist/utils/isMultipleSelect.d.ts +1 -1
- package/dist/utils/isMultipleSelect.d.ts.map +1 -1
- package/dist/utils/isPrimitive.d.ts +1 -1
- package/dist/utils/isPrimitive.d.ts.map +1 -1
- package/dist/utils/isRadioInput.d.ts +1 -1
- package/dist/utils/isRadioInput.d.ts.map +1 -1
- package/dist/utils/isRadioOrCheckbox.d.ts +1 -1
- package/dist/utils/isRadioOrCheckbox.d.ts.map +1 -1
- package/dist/utils/live.d.ts +1 -1
- package/dist/utils/live.d.ts.map +1 -1
- package/dist/utils/set.d.ts +1 -1
- package/dist/utils/set.d.ts.map +1 -1
- package/package.json +16 -16
package/dist/index.esm.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import React__default from 'react';
|
|
3
|
-
import crypto from 'crypto';
|
|
3
|
+
import crypto$1 from 'crypto';
|
|
4
4
|
|
|
5
5
|
var isCheckBoxInput = (element) => element.type === 'checkbox';
|
|
6
6
|
|
|
@@ -40,9 +40,6 @@ function cloneObject(data) {
|
|
|
40
40
|
if (data instanceof Date) {
|
|
41
41
|
copy = new Date(data);
|
|
42
42
|
}
|
|
43
|
-
else if (data instanceof Set) {
|
|
44
|
-
copy = new Set(data);
|
|
45
|
-
}
|
|
46
43
|
else if (!(isWeb && (data instanceof Blob || isFileListInstance)) &&
|
|
47
44
|
(isArray || isObject(data))) {
|
|
48
45
|
copy = isArray ? [] : {};
|
|
@@ -63,15 +60,19 @@ function cloneObject(data) {
|
|
|
63
60
|
return copy;
|
|
64
61
|
}
|
|
65
62
|
|
|
66
|
-
var
|
|
63
|
+
var isKey = (value) => /^\w*$/.test(value);
|
|
67
64
|
|
|
68
65
|
var isUndefined = (val) => val === undefined;
|
|
69
66
|
|
|
67
|
+
var compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];
|
|
68
|
+
|
|
69
|
+
var stringToPath = (input) => compact(input.replace(/["|']|\]/g, '').split(/\.|\[/));
|
|
70
|
+
|
|
70
71
|
var get = (object, path, defaultValue) => {
|
|
71
72
|
if (!path || !isObject(object)) {
|
|
72
73
|
return defaultValue;
|
|
73
74
|
}
|
|
74
|
-
const result =
|
|
75
|
+
const result = (isKey(path) ? [path] : stringToPath(path)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);
|
|
75
76
|
return isUndefined(result) || result === object
|
|
76
77
|
? isUndefined(object[path])
|
|
77
78
|
? defaultValue
|
|
@@ -81,10 +82,6 @@ var get = (object, path, defaultValue) => {
|
|
|
81
82
|
|
|
82
83
|
var isBoolean = (value) => typeof value === 'boolean';
|
|
83
84
|
|
|
84
|
-
var isKey = (value) => /^\w*$/.test(value);
|
|
85
|
-
|
|
86
|
-
var stringToPath = (input) => compact(input.replace(/["|']|\]/g, '').split(/\.|\[/));
|
|
87
|
-
|
|
88
85
|
var set = (object, path, value) => {
|
|
89
86
|
let index = -1;
|
|
90
87
|
const tempPath = isKey(path) ? [path] : stringToPath(path);
|
|
@@ -291,7 +288,8 @@ var generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) =>
|
|
|
291
288
|
return get(formValues, names, defaultValue);
|
|
292
289
|
}
|
|
293
290
|
if (Array.isArray(names)) {
|
|
294
|
-
return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),
|
|
291
|
+
return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),
|
|
292
|
+
get(formValues, fieldName)));
|
|
295
293
|
}
|
|
296
294
|
isGlobal && (_names.watchAll = true);
|
|
297
295
|
return formValues;
|
|
@@ -504,25 +502,29 @@ function useController(props) {
|
|
|
504
502
|
* <Controller
|
|
505
503
|
* control={control}
|
|
506
504
|
* name="test"
|
|
507
|
-
*
|
|
508
|
-
*
|
|
509
|
-
*
|
|
510
|
-
*
|
|
511
|
-
*
|
|
512
|
-
*
|
|
513
|
-
*
|
|
514
|
-
*
|
|
515
|
-
*
|
|
516
|
-
*
|
|
517
|
-
*
|
|
518
|
-
*
|
|
519
|
-
*
|
|
505
|
+
* >
|
|
506
|
+
* ({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (
|
|
507
|
+
* <>
|
|
508
|
+
* <input
|
|
509
|
+
* onChange={onChange} // send value to hook form
|
|
510
|
+
* onBlur={onBlur} // notify when input is touched
|
|
511
|
+
* value={value} // return updated value
|
|
512
|
+
* ref={ref} // set ref for focus management
|
|
513
|
+
* />
|
|
514
|
+
* <p>{formState.isSubmitted ? "submitted" : ""}</p>
|
|
515
|
+
* <p>{fieldState.isTouched ? "touched" : ""}</p>
|
|
516
|
+
* </>
|
|
517
|
+
* )
|
|
518
|
+
* </Controller>
|
|
520
519
|
* </form>
|
|
521
520
|
* );
|
|
522
521
|
* }
|
|
523
522
|
* ```
|
|
524
523
|
*/
|
|
525
|
-
const Controller = (props) =>
|
|
524
|
+
const Controller = (props) => {
|
|
525
|
+
const renderedController = useController(props);
|
|
526
|
+
return ('children' in props ? props.children : props.render)(renderedController);
|
|
527
|
+
};
|
|
526
528
|
|
|
527
529
|
const flatten = (obj) => {
|
|
528
530
|
const output = {};
|
|
@@ -656,7 +658,7 @@ var uuid = () => {
|
|
|
656
658
|
typeof window.crypto.randomUUID === 'function') {
|
|
657
659
|
return window.crypto.randomUUID();
|
|
658
660
|
}
|
|
659
|
-
return crypto.randomBytes(16).toString('hex');
|
|
661
|
+
return crypto$1.randomBytes(16).toString('hex');
|
|
660
662
|
};
|
|
661
663
|
|
|
662
664
|
var createId = (id) => id || `form-${uuid()}`;
|
|
@@ -691,7 +693,7 @@ var createSubject = () => {
|
|
|
691
693
|
|
|
692
694
|
var isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);
|
|
693
695
|
|
|
694
|
-
function deepEqual(object1, object2) {
|
|
696
|
+
function deepEqual(object1, object2, _internal_visited = new WeakSet()) {
|
|
695
697
|
if (isPrimitive(object1) || isPrimitive(object2)) {
|
|
696
698
|
return object1 === object2;
|
|
697
699
|
}
|
|
@@ -703,6 +705,11 @@ function deepEqual(object1, object2) {
|
|
|
703
705
|
if (keys1.length !== keys2.length) {
|
|
704
706
|
return false;
|
|
705
707
|
}
|
|
708
|
+
if (_internal_visited.has(object1) || _internal_visited.has(object2)) {
|
|
709
|
+
return true;
|
|
710
|
+
}
|
|
711
|
+
_internal_visited.add(object1);
|
|
712
|
+
_internal_visited.add(object2);
|
|
706
713
|
for (const key of keys1) {
|
|
707
714
|
const val1 = object1[key];
|
|
708
715
|
if (!keys2.includes(key)) {
|
|
@@ -713,7 +720,7 @@ function deepEqual(object1, object2) {
|
|
|
713
720
|
if ((isDateObject(val1) && isDateObject(val2)) ||
|
|
714
721
|
(isObject(val1) && isObject(val2)) ||
|
|
715
722
|
(Array.isArray(val1) && Array.isArray(val2))
|
|
716
|
-
? !deepEqual(val1, val2)
|
|
723
|
+
? !deepEqual(val1, val2, _internal_visited)
|
|
717
724
|
: val1 !== val2) {
|
|
718
725
|
return false;
|
|
719
726
|
}
|
|
@@ -1323,7 +1330,7 @@ function createFormControl(props = {}) {
|
|
|
1323
1330
|
disabled: _options.disabled || false,
|
|
1324
1331
|
metadata: _options.defaultMetadata || {},
|
|
1325
1332
|
};
|
|
1326
|
-
|
|
1333
|
+
let _fields = {};
|
|
1327
1334
|
let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)
|
|
1328
1335
|
? cloneObject(_options.defaultValues || _options.values) || {}
|
|
1329
1336
|
: {};
|
|
@@ -2067,14 +2074,14 @@ function createFormControl(props = {}) {
|
|
|
2067
2074
|
if (_options.resolver) {
|
|
2068
2075
|
const { errors, values } = await _runSchema();
|
|
2069
2076
|
_formState.errors = errors;
|
|
2070
|
-
fieldValues = values;
|
|
2077
|
+
fieldValues = cloneObject(values);
|
|
2071
2078
|
}
|
|
2072
2079
|
else {
|
|
2073
2080
|
await executeBuiltInValidation(_fields);
|
|
2074
2081
|
}
|
|
2075
2082
|
if (_names.disabled.size) {
|
|
2076
2083
|
for (const name of _names.disabled) {
|
|
2077
|
-
|
|
2084
|
+
unset(fieldValues, name);
|
|
2078
2085
|
}
|
|
2079
2086
|
}
|
|
2080
2087
|
unset(_formState.errors, 'root');
|
|
@@ -2170,11 +2177,20 @@ function createFormControl(props = {}) {
|
|
|
2170
2177
|
}
|
|
2171
2178
|
}
|
|
2172
2179
|
}
|
|
2173
|
-
|
|
2174
|
-
|
|
2180
|
+
if (keepStateOptions.keepFieldsRef) {
|
|
2181
|
+
for (const fieldName of _names.mount) {
|
|
2182
|
+
setValue(fieldName, get(values, fieldName));
|
|
2183
|
+
}
|
|
2184
|
+
}
|
|
2185
|
+
else {
|
|
2186
|
+
_fields = {};
|
|
2175
2187
|
}
|
|
2176
2188
|
}
|
|
2177
|
-
_formValues =
|
|
2189
|
+
_formValues = _options.shouldUnregister
|
|
2190
|
+
? keepStateOptions.keepDefaultValues
|
|
2191
|
+
? cloneObject(_defaultValues)
|
|
2192
|
+
: {}
|
|
2193
|
+
: cloneObject(values);
|
|
2178
2194
|
_subjects.array.next({
|
|
2179
2195
|
values: { ...values },
|
|
2180
2196
|
});
|
|
@@ -2388,6 +2404,9 @@ function createFormControl(props = {}) {
|
|
|
2388
2404
|
}
|
|
2389
2405
|
|
|
2390
2406
|
var generateId = () => {
|
|
2407
|
+
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
2408
|
+
return crypto.randomUUID();
|
|
2409
|
+
}
|
|
2391
2410
|
const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;
|
|
2392
2411
|
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
2393
2412
|
const r = (Math.random() * 16 + d) % 16 | 0;
|
|
@@ -2503,7 +2522,7 @@ function useFieldArray(props) {
|
|
|
2503
2522
|
control._names.array.add(name);
|
|
2504
2523
|
rules &&
|
|
2505
2524
|
control.register(name, rules);
|
|
2506
|
-
|
|
2525
|
+
useIsomorphicLayoutEffect(() => control._subjects.array.subscribe({
|
|
2507
2526
|
next: ({ values, name: fieldArrayName, }) => {
|
|
2508
2527
|
if (fieldArrayName === _name.current || !fieldArrayName) {
|
|
2509
2528
|
const fieldValues = get(values, _name.current);
|
|
@@ -2749,14 +2768,21 @@ function useForm(props = {}) {
|
|
|
2749
2768
|
{},
|
|
2750
2769
|
});
|
|
2751
2770
|
if (!_formControl.current) {
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
props.defaultValues &&
|
|
2758
|
-
|
|
2759
|
-
|
|
2771
|
+
if (props.formControl) {
|
|
2772
|
+
_formControl.current = {
|
|
2773
|
+
...props.formControl,
|
|
2774
|
+
formState,
|
|
2775
|
+
};
|
|
2776
|
+
if (props.defaultValues && !isFunction(props.defaultValues)) {
|
|
2777
|
+
props.formControl.reset(props.defaultValues, props.resetOptions);
|
|
2778
|
+
}
|
|
2779
|
+
}
|
|
2780
|
+
else {
|
|
2781
|
+
const { formControl, ...rest } = createFormControl(props);
|
|
2782
|
+
_formControl.current = {
|
|
2783
|
+
...rest,
|
|
2784
|
+
formState,
|
|
2785
|
+
};
|
|
2760
2786
|
}
|
|
2761
2787
|
}
|
|
2762
2788
|
const control = _formControl.current.control;
|
|
@@ -2810,7 +2836,10 @@ function useForm(props = {}) {
|
|
|
2810
2836
|
}, [control, formState.isDirty]);
|
|
2811
2837
|
React__default.useEffect(() => {
|
|
2812
2838
|
if (props.values && !deepEqual(props.values, _values.current)) {
|
|
2813
|
-
control._reset(props.values,
|
|
2839
|
+
control._reset(props.values, {
|
|
2840
|
+
keepFieldsRef: true,
|
|
2841
|
+
...control._options.resetOptions,
|
|
2842
|
+
});
|
|
2814
2843
|
_values.current = props.values;
|
|
2815
2844
|
updateFormState((state) => ({ ...state }));
|
|
2816
2845
|
}
|