react-hook-form 7.26.1 → 8.0.0-alpha.1
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/__typetests__/__fixtures__/index.d.ts +2 -0
- package/dist/__typetests__/__fixtures__/index.d.ts.map +1 -0
- package/dist/__typetests__/__fixtures__/type.d.ts +12 -0
- package/dist/__typetests__/__fixtures__/type.d.ts.map +1 -0
- package/dist/__typetests__/types/__fixtures__/index.d.ts +4 -0
- package/dist/__typetests__/types/__fixtures__/index.d.ts.map +1 -0
- package/dist/__typetests__/types/__fixtures__/pathString.d.ts +4 -0
- package/dist/__typetests__/types/__fixtures__/pathString.d.ts.map +1 -0
- package/dist/__typetests__/types/__fixtures__/traversable.d.ts +14 -0
- package/dist/__typetests__/types/__fixtures__/traversable.d.ts.map +1 -0
- package/dist/__typetests__/types/__fixtures__/tuple.d.ts +15 -0
- package/dist/__typetests__/types/__fixtures__/tuple.d.ts.map +1 -0
- package/dist/__typetests__/types/form.test-d.d.ts +2 -0
- package/dist/__typetests__/types/form.test-d.d.ts.map +1 -0
- package/dist/__typetests__/types/path/auto.test-d.d.ts +2 -0
- package/dist/__typetests__/types/path/auto.test-d.d.ts.map +1 -0
- package/dist/__typetests__/types/path/internal/autoCompletePath.test-d.d.ts +2 -0
- package/dist/__typetests__/types/path/internal/autoCompletePath.test-d.d.ts.map +1 -0
- package/dist/__typetests__/types/path/internal/hasPath.test-d.d.ts +2 -0
- package/dist/__typetests__/types/path/internal/hasPath.test-d.d.ts.map +1 -0
- package/dist/__typetests__/types/path/internal/keys.test-d.d.ts +2 -0
- package/dist/__typetests__/types/path/internal/keys.test-d.d.ts.map +1 -0
- package/dist/__typetests__/types/path/internal/pathGetValue.test-d.d.ts +2 -0
- package/dist/__typetests__/types/path/internal/pathGetValue.test-d.d.ts.map +1 -0
- package/dist/__typetests__/types/path/internal/pathSetValue.test-d.d.ts +2 -0
- package/dist/__typetests__/types/path/internal/pathSetValue.test-d.d.ts.map +1 -0
- package/dist/__typetests__/types/path/internal/pathTuple.test-d.d.ts +2 -0
- package/dist/__typetests__/types/path/internal/pathTuple.test-d.d.ts.map +1 -0
- package/dist/__typetests__/types/path/internal/utils.test-d.d.ts +2 -0
- package/dist/__typetests__/types/path/internal/utils.test-d.d.ts.map +1 -0
- package/dist/__typetests__/types/path/lazy.test-d.d.ts +2 -0
- package/dist/__typetests__/types/path/lazy.test-d.d.ts.map +1 -0
- package/dist/__typetests__/types/path/value.test-d.d.ts +2 -0
- package/dist/__typetests__/types/path/value.test-d.d.ts.map +1 -0
- package/dist/__typetests__/types/util.test-d.d.ts +2 -0
- package/dist/__typetests__/types/util.test-d.d.ts.map +1 -0
- package/dist/__typetests__/utils/join.test-d.d.ts +2 -0
- package/dist/__typetests__/utils/join.test-d.d.ts.map +1 -0
- package/dist/__typetests__/utils/of.test-d.d.ts +2 -0
- package/dist/__typetests__/utils/of.test-d.d.ts.map +1 -0
- package/dist/controller.d.ts +1 -1
- package/dist/controller.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 +47 -33
- 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 +1 -1
- package/dist/logic/createFormControl.d.ts.map +1 -1
- package/dist/logic/getResolverOptions.d.ts +2 -2
- package/dist/logic/hasValidation.d.ts +1 -1
- package/dist/types/controller.d.ts +8 -8
- package/dist/types/controller.d.ts.map +1 -1
- package/dist/types/errors.d.ts +8 -2
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/fieldArray.d.ts +12 -13
- package/dist/types/fieldArray.d.ts.map +1 -1
- package/dist/types/form.d.ts +44 -50
- package/dist/types/form.d.ts.map +1 -1
- package/dist/types/path/auto.d.ts +76 -0
- package/dist/types/path/auto.d.ts.map +1 -0
- package/dist/types/path/branded.d.ts +61 -0
- package/dist/types/path/branded.d.ts.map +1 -0
- package/dist/types/path/index.d.ts +7 -3
- package/dist/types/path/index.d.ts.map +1 -1
- package/dist/types/path/internal/autoCompletePath.d.ts +173 -0
- package/dist/types/path/internal/autoCompletePath.d.ts.map +1 -0
- package/dist/types/path/internal/hasPath.d.ts +56 -0
- package/dist/types/path/internal/hasPath.d.ts.map +1 -0
- package/dist/types/path/internal/keys.d.ts +103 -0
- package/dist/types/path/internal/keys.d.ts.map +1 -0
- package/dist/types/path/internal/pathGetValue.d.ts +76 -0
- package/dist/types/path/internal/pathGetValue.d.ts.map +1 -0
- package/dist/types/path/internal/pathSetValue.d.ts +96 -0
- package/dist/types/path/internal/pathSetValue.d.ts.map +1 -0
- package/dist/types/path/internal/pathTuple.d.ts +73 -0
- package/dist/types/path/internal/pathTuple.d.ts.map +1 -0
- package/dist/types/path/internal/utils.d.ts +84 -0
- package/dist/types/path/internal/utils.d.ts.map +1 -0
- package/dist/types/path/lazy.d.ts +62 -0
- package/dist/types/path/lazy.d.ts.map +1 -0
- package/dist/types/path/pathString.d.ts +6 -0
- package/dist/types/path/pathString.d.ts.map +1 -0
- package/dist/types/path/value.d.ts +49 -0
- package/dist/types/path/value.d.ts.map +1 -0
- package/dist/types/resolvers.d.ts +3 -3
- package/dist/types/resolvers.d.ts.map +1 -1
- package/dist/types/utils.d.ts +15 -7
- package/dist/types/utils.d.ts.map +1 -1
- package/dist/types/validator.d.ts +2 -2
- package/dist/types/validator.d.ts.map +1 -1
- package/dist/useController.d.ts +2 -2
- package/dist/useController.d.ts.map +1 -1
- package/dist/useFieldArray.d.ts +2 -2
- 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 +2 -2
- package/dist/useFormContext.d.ts.map +1 -1
- package/dist/useFormState.d.ts +2 -2
- package/dist/useFormState.d.ts.map +1 -1
- package/dist/useWatch.d.ts +9 -23
- package/dist/useWatch.d.ts.map +1 -1
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/join.d.ts +16 -0
- package/dist/utils/join.d.ts.map +1 -0
- package/dist/utils/of.d.ts +13 -0
- package/dist/utils/of.d.ts.map +1 -0
- package/dist/utils/unset.d.ts.map +1 -1
- package/package.json +15 -15
- package/dist/types/path/common.d.ts +0 -316
- package/dist/types/path/common.d.ts.map +0 -1
- package/dist/types/path/eager.d.ts +0 -82
- package/dist/types/path/eager.d.ts.map +0 -1
- package/dist/utils/omitKeys.d.ts +0 -3
- package/dist/utils/omitKeys.d.ts.map +0 -1
package/dist/index.esm.mjs
CHANGED
@@ -281,11 +281,8 @@ var objectHasFunction = (data) => {
|
|
281
281
|
*
|
282
282
|
* @example
|
283
283
|
* ```tsx
|
284
|
-
*
|
285
|
-
* const values = useWatch(
|
286
|
-
* name: "fieldName"
|
287
|
-
* control,
|
288
|
-
* })
|
284
|
+
* // can skip passing down the control into useWatch if the form is wrapped with the FormProvider
|
285
|
+
* const values = useWatch()
|
289
286
|
* ```
|
290
287
|
*/
|
291
288
|
function useWatch(props) {
|
@@ -357,7 +354,7 @@ function useController(props) {
|
|
357
354
|
control,
|
358
355
|
name,
|
359
356
|
});
|
360
|
-
const _registerProps = React.useRef(control.register(name, Object.assign(Object.assign({}, props.rules), { value })));
|
357
|
+
const _registerProps = React.useRef(control.register(name, Object.assign(Object.assign({}, props.rules), { value: value })));
|
361
358
|
React.useEffect(() => {
|
362
359
|
const updateMounted = (name, value) => {
|
363
360
|
const field = get(control._fields, name);
|
@@ -377,7 +374,7 @@ function useController(props) {
|
|
377
374
|
}, [name, control, isArrayField, shouldUnregister]);
|
378
375
|
return {
|
379
376
|
field: {
|
380
|
-
name,
|
377
|
+
name: name,
|
381
378
|
value,
|
382
379
|
onChange: React.useCallback((event) => {
|
383
380
|
_registerProps.current.onChange({
|
@@ -460,6 +457,37 @@ const Controller = (props) => props.render(useController(props));
|
|
460
457
|
var appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria
|
461
458
|
? Object.assign(Object.assign({}, errors[name]), { types: Object.assign(Object.assign({}, (errors[name] && errors[name].types ? errors[name].types : {})), { [type]: message || true }) }) : {};
|
462
459
|
|
460
|
+
/**
|
461
|
+
* Function for joining two paths / path strings to a {@link TypedFieldPath}.
|
462
|
+
* @param path - base path
|
463
|
+
* @param childPath - the path which should be appended to the base path
|
464
|
+
* @example
|
465
|
+
* ```
|
466
|
+
* type Baz = { baz: string }
|
467
|
+
* type FooBarBaz = { foo: { bar: Baz }}
|
468
|
+
*
|
469
|
+
* const path: TypedFieldPath<FooBarBaz, Baz> = of('foo.bar')
|
470
|
+
* const joinedPath: TypedFieldPath<FooBar, string> = join(path, 'baz')
|
471
|
+
* ```
|
472
|
+
*/
|
473
|
+
function join(path, childPath) {
|
474
|
+
return `${path}.${childPath}`;
|
475
|
+
}
|
476
|
+
|
477
|
+
/**
|
478
|
+
* Function for creating a {@link TypedFieldPath} from a path string.
|
479
|
+
* @param path - path string
|
480
|
+
* @example
|
481
|
+
* ```
|
482
|
+
* type FooBar = { foo: { bar: string }}
|
483
|
+
*
|
484
|
+
* const path: TypedFieldPath<FooBar, string> = of('foo.bar')
|
485
|
+
* ```
|
486
|
+
*/
|
487
|
+
function of(path) {
|
488
|
+
return path;
|
489
|
+
}
|
490
|
+
|
463
491
|
var isKey = (value) => /^\w*$/.test(value);
|
464
492
|
|
465
493
|
var stringToPath = (input) => compact(input.replace(/["|']|\]/g, '').split(/\.|\[/));
|
@@ -643,7 +671,7 @@ var updateAt = (fieldValues, index, value) => {
|
|
643
671
|
*/
|
644
672
|
function useFieldArray(props) {
|
645
673
|
const methods = useFormContext();
|
646
|
-
const { control = methods.control, name,
|
674
|
+
const { control = methods.control, name, shouldUnregister } = props;
|
647
675
|
const [fields, setFields] = React.useState(control._getFieldArray(name));
|
648
676
|
const ids = React.useRef(control._getFieldArray(name).map(generateId));
|
649
677
|
const _fieldIds = React.useRef(fields);
|
@@ -778,7 +806,7 @@ function useFieldArray(props) {
|
|
778
806
|
(control._options.shouldUnregister || shouldUnregister) &&
|
779
807
|
control.unregister(name);
|
780
808
|
};
|
781
|
-
}, [name, control,
|
809
|
+
}, [name, control, shouldUnregister]);
|
782
810
|
return {
|
783
811
|
swap: React.useCallback(swap, [updateValues, name, control]),
|
784
812
|
move: React.useCallback(move, [updateValues, name, control]),
|
@@ -788,7 +816,7 @@ function useFieldArray(props) {
|
|
788
816
|
insert: React.useCallback(insert$1, [updateValues, name, control]),
|
789
817
|
update: React.useCallback(update, [updateValues, name, control]),
|
790
818
|
replace: React.useCallback(replace, [updateValues, name, control]),
|
791
|
-
fields: React.useMemo(() => fields.map((field, index) => (Object.assign(Object.assign({}, field), {
|
819
|
+
fields: React.useMemo(() => fields.map((field, index) => (Object.assign(Object.assign({}, field), { id: ids.current[index] || generateId() }))), [fields]),
|
792
820
|
};
|
793
821
|
}
|
794
822
|
|
@@ -909,7 +937,9 @@ function unset(object, path) {
|
|
909
937
|
if (currentPathsLength === index &&
|
910
938
|
((isObject(objectRef) && isEmptyObject(objectRef)) ||
|
911
939
|
(Array.isArray(objectRef) &&
|
912
|
-
!objectRef.filter((data) => (isObject(data) && !isEmptyObject(data)) ||
|
940
|
+
!objectRef.filter((data) => (isObject(data) && !isEmptyObject(data)) ||
|
941
|
+
isBoolean(data) ||
|
942
|
+
(Array.isArray(data) && data.length)).length))) {
|
913
943
|
previousObjRef ? delete previousObjRef[item] : delete object[item];
|
914
944
|
}
|
915
945
|
previousObjRef = objectRef;
|
@@ -1758,7 +1788,7 @@ function createFormControl(props = {}) {
|
|
1758
1788
|
}
|
1759
1789
|
_subjects.watch.next({});
|
1760
1790
|
_subjects.state.next(Object.assign(Object.assign({}, _formState), (!options.keepDirty ? {} : { isDirty: _getDirty() })));
|
1761
|
-
|
1791
|
+
_proxyFormState.isValid && _updateValid();
|
1762
1792
|
};
|
1763
1793
|
const register = (name, options = {}) => {
|
1764
1794
|
let field = get(_fields, name);
|
@@ -1905,22 +1935,6 @@ function createFormControl(props = {}) {
|
|
1905
1935
|
_defaultValues = updatedValues;
|
1906
1936
|
}
|
1907
1937
|
if (!keepStateOptions.keepValues) {
|
1908
|
-
if (isWeb && isUndefined(formValues)) {
|
1909
|
-
for (const name of _names.mount) {
|
1910
|
-
const field = get(_fields, name);
|
1911
|
-
if (field && field._f) {
|
1912
|
-
const fieldReference = Array.isArray(field._f.refs)
|
1913
|
-
? field._f.refs[0]
|
1914
|
-
: field._f.ref;
|
1915
|
-
try {
|
1916
|
-
isHTMLElement(fieldReference) &&
|
1917
|
-
fieldReference.closest('form').reset();
|
1918
|
-
break;
|
1919
|
-
}
|
1920
|
-
catch (_a) { }
|
1921
|
-
}
|
1922
|
-
}
|
1923
|
-
}
|
1924
1938
|
_formValues = props.shouldUnregister
|
1925
1939
|
? keepStateOptions.keepDefaultValues
|
1926
1940
|
? cloneObject(_defaultValues)
|
@@ -1942,8 +1956,7 @@ function createFormControl(props = {}) {
|
|
1942
1956
|
watchAll: false,
|
1943
1957
|
focus: '',
|
1944
1958
|
};
|
1945
|
-
_stateFlags.mount =
|
1946
|
-
!_proxyFormState.isValid || !!keepStateOptions.keepIsValid;
|
1959
|
+
_stateFlags.mount = !_proxyFormState.isValid;
|
1947
1960
|
_stateFlags.watch = !!props.shouldUnregister;
|
1948
1961
|
_subjects.state.next({
|
1949
1962
|
submitCount: keepStateOptions.keepSubmitCount
|
@@ -1972,9 +1985,10 @@ function createFormControl(props = {}) {
|
|
1972
1985
|
isSubmitSuccessful: false,
|
1973
1986
|
});
|
1974
1987
|
};
|
1975
|
-
const setFocus = (name) => {
|
1988
|
+
const setFocus = (name, options = {}) => {
|
1976
1989
|
const field = get(_fields, name)._f;
|
1977
|
-
|
1990
|
+
const fieldRef = field.refs ? field.refs[0] : field.ref;
|
1991
|
+
options.shouldSelect ? fieldRef.select() : fieldRef.focus();
|
1978
1992
|
};
|
1979
1993
|
return {
|
1980
1994
|
control: {
|
@@ -2115,5 +2129,5 @@ function useForm(props = {}) {
|
|
2115
2129
|
return _formControl.current;
|
2116
2130
|
}
|
2117
2131
|
|
2118
|
-
export { Controller, FormProvider, appendErrors, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };
|
2132
|
+
export { Controller, FormProvider, appendErrors, get, join, of, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };
|
2119
2133
|
//# sourceMappingURL=index.esm.mjs.map
|