react-hook-form 7.40.0 → 7.41.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/__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__/logic/validateField.test.d.ts +2 -0
- package/dist/__tests__/logic/validateField.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/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/setValue.test.d.ts +2 -0
- package/dist/__tests__/useForm/setValue.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/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/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 +77 -60
- 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 +25 -2
- package/dist/logic/createFormControl.d.ts.map +1 -1
- package/dist/logic/generateWatchOutput.d.ts +2 -2
- package/dist/logic/generateWatchOutput.d.ts.map +1 -1
- package/dist/{utils → logic}/getValidationModes.d.ts +0 -0
- package/dist/{utils → logic}/getValidationModes.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.map +1 -1
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/types/errors.d.ts +2 -2
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/form.d.ts +11 -7
- package/dist/types/form.d.ts.map +1 -1
- package/dist/types/path/eager.d.ts +5 -5
- package/dist/types/path/eager.d.ts.map +1 -1
- package/dist/types/utils.d.ts +1 -0
- package/dist/types/utils.d.ts.map +1 -1
- package/dist/types/validator.d.ts +1 -1
- package/dist/types/validator.d.ts.map +1 -1
- package/dist/useFieldArray.d.ts.map +1 -1
- package/dist/useForm.d.ts.map +1 -1
- package/dist/useFormContext.d.ts +1 -0
- package/dist/useFormContext.d.ts.map +1 -1
- package/dist/useFormState.d.ts.map +1 -1
- package/dist/useSubscribe.d.ts +1 -1
- package/dist/useSubscribe.d.ts.map +1 -1
- package/dist/useWatch.d.ts.map +1 -1
- package/dist/utils/isHTMLElement.d.ts.map +1 -1
- package/package.json +18 -18
package/dist/index.esm.mjs
CHANGED
@@ -173,7 +173,7 @@ function useSubscribe(props) {
|
|
173
173
|
React.useEffect(() => {
|
174
174
|
const subscription = !props.disabled &&
|
175
175
|
_props.current.subject.subscribe({
|
176
|
-
next: _props.current.
|
176
|
+
next: _props.current.next,
|
177
177
|
});
|
178
178
|
return () => {
|
179
179
|
subscription && subscription.unsubscribe();
|
@@ -218,6 +218,7 @@ function useFormState(props) {
|
|
218
218
|
const _mounted = React.useRef(true);
|
219
219
|
const _localProxyFormState = React.useRef({
|
220
220
|
isDirty: false,
|
221
|
+
isLoading: false,
|
221
222
|
dirtyFields: false,
|
222
223
|
touchedFields: false,
|
223
224
|
isValidating: false,
|
@@ -228,13 +229,13 @@ function useFormState(props) {
|
|
228
229
|
_name.current = name;
|
229
230
|
useSubscribe({
|
230
231
|
disabled,
|
231
|
-
|
232
|
+
next: (value) => _mounted.current &&
|
232
233
|
shouldSubscribeByName(_name.current, value.name, exact) &&
|
233
234
|
shouldRenderFormState(value, _localProxyFormState.current) &&
|
234
235
|
updateFormState({
|
235
236
|
...control._formState,
|
236
237
|
...value,
|
237
|
-
}),
|
238
|
+
}),
|
238
239
|
subject: control._subjects.state,
|
239
240
|
});
|
240
241
|
React.useEffect(() => {
|
@@ -255,10 +256,10 @@ function useFormState(props) {
|
|
255
256
|
|
256
257
|
var isString = (value) => typeof value === 'string';
|
257
258
|
|
258
|
-
var generateWatchOutput = (names, _names, formValues, isGlobal) => {
|
259
|
+
var generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {
|
259
260
|
if (isString(names)) {
|
260
261
|
isGlobal && _names.watch.add(names);
|
261
|
-
return get(formValues, names);
|
262
|
+
return get(formValues, names, defaultValue);
|
262
263
|
}
|
263
264
|
if (Array.isArray(names)) {
|
264
265
|
return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName), get(formValues, fieldName)));
|
@@ -327,16 +328,13 @@ function useWatch(props) {
|
|
327
328
|
useSubscribe({
|
328
329
|
disabled,
|
329
330
|
subject: control._subjects.watch,
|
330
|
-
|
331
|
+
next: (formState) => {
|
331
332
|
if (shouldSubscribeByName(_name.current, formState.name, exact)) {
|
332
|
-
|
333
|
-
updateValue(isUndefined(fieldValues) ? defaultValue : cloneObject(fieldValues));
|
333
|
+
updateValue(cloneObject(generateWatchOutput(_name.current, control._names, formState.values || control._formValues, false, defaultValue)));
|
334
334
|
}
|
335
335
|
},
|
336
336
|
});
|
337
|
-
const [value, updateValue] = React.useState(
|
338
|
-
? control._getWatch(name)
|
339
|
-
: defaultValue);
|
337
|
+
const [value, updateValue] = React.useState(control._getWatch(name, defaultValue));
|
340
338
|
React.useEffect(() => control._removeUnmounted());
|
341
339
|
return value;
|
342
340
|
}
|
@@ -568,6 +566,14 @@ var getFocusFieldName = (name, index, options = {}) => options.shouldFocus || is
|
|
568
566
|
`${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`
|
569
567
|
: '';
|
570
568
|
|
569
|
+
var getValidationModes = (mode) => ({
|
570
|
+
isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,
|
571
|
+
isOnBlur: mode === VALIDATION_MODE.onBlur,
|
572
|
+
isOnChange: mode === VALIDATION_MODE.onChange,
|
573
|
+
isOnAll: mode === VALIDATION_MODE.all,
|
574
|
+
isOnTouch: mode === VALIDATION_MODE.onTouched,
|
575
|
+
});
|
576
|
+
|
571
577
|
var isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&
|
572
578
|
(_names.watchAll ||
|
573
579
|
_names.watch.has(name) ||
|
@@ -666,7 +672,9 @@ var validateField = async (field, inputValue, validateAllFieldCriteria, shouldUs
|
|
666
672
|
const isRadio = isRadioInput(ref);
|
667
673
|
const isCheckBox = isCheckBoxInput(ref);
|
668
674
|
const isRadioOrCheckbox = isRadio || isCheckBox;
|
669
|
-
const isEmpty = ((valueAsNumber || isFileInput(ref)) &&
|
675
|
+
const isEmpty = ((valueAsNumber || isFileInput(ref)) &&
|
676
|
+
isUndefined(ref.value) &&
|
677
|
+
isUndefined(inputValue)) ||
|
670
678
|
inputValue === '' ||
|
671
679
|
(Array.isArray(inputValue) && !inputValue.length);
|
672
680
|
const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);
|
@@ -831,14 +839,6 @@ function append(data, value) {
|
|
831
839
|
|
832
840
|
var fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;
|
833
841
|
|
834
|
-
var getValidationModes = (mode) => ({
|
835
|
-
isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,
|
836
|
-
isOnBlur: mode === VALIDATION_MODE.onBlur,
|
837
|
-
isOnChange: mode === VALIDATION_MODE.onChange,
|
838
|
-
isOnAll: mode === VALIDATION_MODE.all,
|
839
|
-
isOnTouch: mode === VALIDATION_MODE.onTouched,
|
840
|
-
});
|
841
|
-
|
842
842
|
function insert(data, index, value) {
|
843
843
|
return [
|
844
844
|
...data.slice(0, index),
|
@@ -980,17 +980,16 @@ function useFieldArray(props) {
|
|
980
980
|
control._names.array.add(name);
|
981
981
|
props.rules &&
|
982
982
|
control.register(name, props.rules);
|
983
|
-
const callback = React.useCallback(({ values, name: fieldArrayName, }) => {
|
984
|
-
if (fieldArrayName === _name.current || !fieldArrayName) {
|
985
|
-
const fieldValues = get(values, _name.current);
|
986
|
-
if (Array.isArray(fieldValues)) {
|
987
|
-
setFields(fieldValues);
|
988
|
-
ids.current = fieldValues.map(generateId);
|
989
|
-
}
|
990
|
-
}
|
991
|
-
}, []);
|
992
983
|
useSubscribe({
|
993
|
-
|
984
|
+
next: ({ values, name: fieldArrayName, }) => {
|
985
|
+
if (fieldArrayName === _name.current || !fieldArrayName) {
|
986
|
+
const fieldValues = get(values, _name.current);
|
987
|
+
if (Array.isArray(fieldValues)) {
|
988
|
+
setFields(fieldValues);
|
989
|
+
ids.current = fieldValues.map(generateId);
|
990
|
+
}
|
991
|
+
}
|
992
|
+
},
|
994
993
|
subject: control._subjects.array,
|
995
994
|
});
|
996
995
|
const updateValues = React.useCallback((updatedFieldArrayValues) => {
|
@@ -1205,8 +1204,8 @@ function deepEqual(object1, object2) {
|
|
1205
1204
|
|
1206
1205
|
var isHTMLElement = (value) => {
|
1207
1206
|
const owner = value ? value.ownerDocument : 0;
|
1208
|
-
|
1209
|
-
|
1207
|
+
return (value instanceof
|
1208
|
+
(owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement));
|
1210
1209
|
};
|
1211
1210
|
|
1212
1211
|
var isMultipleSelect = (element) => element.type === `select-multiple`;
|
@@ -1386,14 +1385,16 @@ const defaultOptions = {
|
|
1386
1385
|
reValidateMode: VALIDATION_MODE.onChange,
|
1387
1386
|
shouldFocusError: true,
|
1388
1387
|
};
|
1389
|
-
function createFormControl(props = {}) {
|
1388
|
+
function createFormControl(props = {}, flushRootRender) {
|
1390
1389
|
let _options = {
|
1391
1390
|
...defaultOptions,
|
1392
1391
|
...props,
|
1393
1392
|
};
|
1393
|
+
const shouldCaptureDirtyFields = props.resetOptions && props.resetOptions.keepDirtyValues;
|
1394
1394
|
let _formState = {
|
1395
1395
|
submitCount: 0,
|
1396
1396
|
isDirty: false,
|
1397
|
+
isLoading: true,
|
1397
1398
|
isValidating: false,
|
1398
1399
|
isSubmitted: false,
|
1399
1400
|
isSubmitting: false,
|
@@ -1404,7 +1405,9 @@ function createFormControl(props = {}) {
|
|
1404
1405
|
errors: {},
|
1405
1406
|
};
|
1406
1407
|
let _fields = {};
|
1407
|
-
let _defaultValues =
|
1408
|
+
let _defaultValues = isObject(_options.defaultValues)
|
1409
|
+
? cloneObject(_options.defaultValues) || {}
|
1410
|
+
: {};
|
1408
1411
|
let _formValues = _options.shouldUnregister
|
1409
1412
|
? {}
|
1410
1413
|
: cloneObject(_defaultValues);
|
@@ -1455,7 +1458,6 @@ function createFormControl(props = {}) {
|
|
1455
1458
|
}
|
1456
1459
|
};
|
1457
1460
|
const _updateIsValidating = (value) => _proxyFormState.isValidating &&
|
1458
|
-
value !== _formState.isValidating &&
|
1459
1461
|
_subjects.state.next({
|
1460
1462
|
isValidating: value,
|
1461
1463
|
});
|
@@ -1523,16 +1525,16 @@ function createFormControl(props = {}) {
|
|
1523
1525
|
_formState.isDirty = output.isDirty = _getDirty();
|
1524
1526
|
shouldUpdateField = isPreviousDirty !== output.isDirty;
|
1525
1527
|
}
|
1526
|
-
|
1527
|
-
|
1528
|
-
|
1529
|
-
|
1530
|
-
|
1531
|
-
|
1532
|
-
|
1533
|
-
shouldUpdateField
|
1534
|
-
|
1535
|
-
|
1528
|
+
const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);
|
1529
|
+
isPreviousDirty = get(_formState.dirtyFields, name);
|
1530
|
+
isCurrentFieldPristine
|
1531
|
+
? unset(_formState.dirtyFields, name)
|
1532
|
+
: set(_formState.dirtyFields, name, true);
|
1533
|
+
output.dirtyFields = _formState.dirtyFields;
|
1534
|
+
shouldUpdateField =
|
1535
|
+
shouldUpdateField ||
|
1536
|
+
(_proxyFormState.dirtyFields &&
|
1537
|
+
isPreviousDirty !== !isCurrentFieldPristine);
|
1536
1538
|
}
|
1537
1539
|
if (isBlurEvent) {
|
1538
1540
|
const isPreviousFieldTouched = get(_formState.touchedFields, name);
|
@@ -1647,7 +1649,7 @@ function createFormControl(props = {}) {
|
|
1647
1649
|
: isString(names)
|
1648
1650
|
? { [names]: defaultValue }
|
1649
1651
|
: defaultValue),
|
1650
|
-
}, isGlobal);
|
1652
|
+
}, isGlobal, defaultValue);
|
1651
1653
|
const _getFieldArray = (name) => compact(get(_stateFlags.mount ? _formValues : _defaultValues, name, props.shouldUnregister ? get(_defaultValues, name, []) : []));
|
1652
1654
|
const setFieldValue = (name, value, options = {}) => {
|
1653
1655
|
const field = get(_fields, name);
|
@@ -1693,7 +1695,8 @@ function createFormControl(props = {}) {
|
|
1693
1695
|
}
|
1694
1696
|
(options.shouldDirty || options.shouldTouch) &&
|
1695
1697
|
updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);
|
1696
|
-
options.shouldValidate &&
|
1698
|
+
options.shouldValidate &&
|
1699
|
+
trigger(name);
|
1697
1700
|
};
|
1698
1701
|
const setValues = (name, value, options) => {
|
1699
1702
|
for (const fieldKey in value) {
|
@@ -1737,6 +1740,7 @@ function createFormControl(props = {}) {
|
|
1737
1740
|
_subjects.watch.next({
|
1738
1741
|
name,
|
1739
1742
|
});
|
1743
|
+
!_stateFlags.mount && flushRootRender();
|
1740
1744
|
};
|
1741
1745
|
const onChange = async (event) => {
|
1742
1746
|
const target = event.target;
|
@@ -1793,14 +1797,9 @@ function createFormControl(props = {}) {
|
|
1793
1797
|
isValid = await executeBuiltInValidation(_fields, true);
|
1794
1798
|
}
|
1795
1799
|
}
|
1796
|
-
|
1797
|
-
field._f.deps
|
1798
|
-
|
1799
|
-
shouldRenderByError(name, isValid, error, fieldState);
|
1800
|
-
}
|
1801
|
-
else {
|
1802
|
-
_updateIsValidating(false);
|
1803
|
-
}
|
1800
|
+
field._f.deps &&
|
1801
|
+
trigger(field._f.deps);
|
1802
|
+
shouldRenderByError(name, isValid, error, fieldState);
|
1804
1803
|
}
|
1805
1804
|
};
|
1806
1805
|
const trigger = async (name, options = {}) => {
|
@@ -2070,7 +2069,7 @@ function createFormControl(props = {}) {
|
|
2070
2069
|
_defaultValues = updatedValues;
|
2071
2070
|
}
|
2072
2071
|
if (!keepStateOptions.keepValues) {
|
2073
|
-
if (keepStateOptions.keepDirtyValues) {
|
2072
|
+
if (keepStateOptions.keepDirtyValues || shouldCaptureDirtyFields) {
|
2074
2073
|
for (const fieldName of _names.mount) {
|
2075
2074
|
get(_formState.dirtyFields, fieldName)
|
2076
2075
|
? set(values, fieldName, get(_formValues, fieldName))
|
@@ -2117,6 +2116,7 @@ function createFormControl(props = {}) {
|
|
2117
2116
|
watchAll: false,
|
2118
2117
|
focus: '',
|
2119
2118
|
};
|
2119
|
+
!_stateFlags.mount && flushRootRender();
|
2120
2120
|
_stateFlags.mount =
|
2121
2121
|
!_proxyFormState.isValid || !!keepStateOptions.keepIsValid;
|
2122
2122
|
_stateFlags.watch = !!props.shouldUnregister;
|
@@ -2160,6 +2160,14 @@ function createFormControl(props = {}) {
|
|
2160
2160
|
}
|
2161
2161
|
}
|
2162
2162
|
};
|
2163
|
+
if (isFunction(_options.defaultValues)) {
|
2164
|
+
_options.defaultValues().then((values) => {
|
2165
|
+
reset(values, _options.resetOptions);
|
2166
|
+
_subjects.state.next({
|
2167
|
+
isLoading: false,
|
2168
|
+
});
|
2169
|
+
});
|
2170
|
+
}
|
2163
2171
|
return {
|
2164
2172
|
control: {
|
2165
2173
|
register,
|
@@ -2173,6 +2181,7 @@ function createFormControl(props = {}) {
|
|
2173
2181
|
_removeUnmounted,
|
2174
2182
|
_updateFieldArray,
|
2175
2183
|
_getFieldArray,
|
2184
|
+
_reset,
|
2176
2185
|
_subjects,
|
2177
2186
|
_proxyFormState,
|
2178
2187
|
get _fields() {
|
@@ -2262,6 +2271,7 @@ function useForm(props = {}) {
|
|
2262
2271
|
const [formState, updateFormState] = React.useState({
|
2263
2272
|
isDirty: false,
|
2264
2273
|
isValidating: false,
|
2274
|
+
isLoading: true,
|
2265
2275
|
isSubmitted: false,
|
2266
2276
|
isSubmitting: false,
|
2267
2277
|
isSubmitSuccessful: false,
|
@@ -2270,11 +2280,13 @@ function useForm(props = {}) {
|
|
2270
2280
|
dirtyFields: {},
|
2271
2281
|
touchedFields: {},
|
2272
2282
|
errors: {},
|
2273
|
-
defaultValues: props.defaultValues
|
2283
|
+
defaultValues: isFunction(props.defaultValues)
|
2284
|
+
? undefined
|
2285
|
+
: props.defaultValues,
|
2274
2286
|
});
|
2275
2287
|
if (!_formControl.current) {
|
2276
2288
|
_formControl.current = {
|
2277
|
-
...createFormControl(props),
|
2289
|
+
...createFormControl(props, () => updateFormState((formState) => ({ ...formState }))),
|
2278
2290
|
formState,
|
2279
2291
|
};
|
2280
2292
|
}
|
@@ -2282,7 +2294,7 @@ function useForm(props = {}) {
|
|
2282
2294
|
control._options = props;
|
2283
2295
|
useSubscribe({
|
2284
2296
|
subject: control._subjects.state,
|
2285
|
-
|
2297
|
+
next: (value) => {
|
2286
2298
|
if (shouldRenderFormState(value, control._proxyFormState, true)) {
|
2287
2299
|
control._formState = {
|
2288
2300
|
...control._formState,
|
@@ -2290,7 +2302,7 @@ function useForm(props = {}) {
|
|
2290
2302
|
};
|
2291
2303
|
updateFormState({ ...control._formState });
|
2292
2304
|
}
|
2293
|
-
},
|
2305
|
+
},
|
2294
2306
|
});
|
2295
2307
|
React.useEffect(() => {
|
2296
2308
|
if (!control._stateFlags.mount) {
|
@@ -2303,6 +2315,11 @@ function useForm(props = {}) {
|
|
2303
2315
|
}
|
2304
2316
|
control._removeUnmounted();
|
2305
2317
|
});
|
2318
|
+
React.useEffect(() => {
|
2319
|
+
if (props.values && !deepEqual(props.values, control._defaultValues)) {
|
2320
|
+
control._reset(props.values, control._options.resetOptions);
|
2321
|
+
}
|
2322
|
+
}, [props.values, control]);
|
2306
2323
|
React.useEffect(() => {
|
2307
2324
|
formState.submitCount && control._focusError();
|
2308
2325
|
}, [control, formState.submitCount]);
|