react-hook-form 7.56.1 → 7.57.0-next.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/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.mjs +34 -22
- 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/types/form.d.ts +1 -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/useWatch.d.ts +91 -0
- package/dist/useWatch.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.mjs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import * as React from 'react';
|
2
|
-
import React__default from 'react';
|
2
|
+
import React__default, { useEffect } from 'react';
|
3
3
|
|
4
4
|
var isCheckBoxInput = (element) => element.type === 'checkbox';
|
5
5
|
|
@@ -353,17 +353,34 @@ var generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) =>
|
|
353
353
|
*/
|
354
354
|
function useWatch(props) {
|
355
355
|
const methods = useFormContext();
|
356
|
-
const { control = methods.control, name, defaultValue, disabled, exact, } = props || {};
|
357
|
-
const
|
356
|
+
const { control = methods.control, name, defaultValue, disabled, exact, compute, } = props || {};
|
357
|
+
const _compute = React__default.useRef(compute);
|
358
|
+
const _computeFormValues = React__default.useRef(undefined);
|
359
|
+
_compute.current = compute;
|
360
|
+
const defaultValueMemo = React__default.useMemo(() => control._getWatch(name, defaultValue), [control, name, defaultValue]);
|
361
|
+
const [value, updateValue] = React__default.useState(_compute.current ? _compute.current(defaultValueMemo) : defaultValueMemo);
|
358
362
|
useDeepEqualEffect(() => control._subscribe({
|
359
363
|
name: name,
|
360
364
|
formState: {
|
361
365
|
values: true,
|
362
366
|
},
|
363
367
|
exact,
|
364
|
-
callback: (formState) =>
|
365
|
-
|
366
|
-
|
368
|
+
callback: (formState) => {
|
369
|
+
if (!disabled) {
|
370
|
+
const formValues = generateWatchOutput(name, control._names, formState.values || control._formValues, false, defaultValue);
|
371
|
+
if (_compute.current) {
|
372
|
+
const computedFormValues = _compute.current(formValues);
|
373
|
+
if (!deepEqual(computedFormValues, _computeFormValues.current)) {
|
374
|
+
updateValue(computedFormValues);
|
375
|
+
_computeFormValues.current = computedFormValues;
|
376
|
+
}
|
377
|
+
}
|
378
|
+
else {
|
379
|
+
updateValue(formValues);
|
380
|
+
}
|
381
|
+
}
|
382
|
+
},
|
383
|
+
}), [defaultValue, disabled, name, exact]);
|
367
384
|
React__default.useEffect(() => control._removeUnmounted());
|
368
385
|
return value;
|
369
386
|
}
|
@@ -394,12 +411,13 @@ function useWatch(props) {
|
|
394
411
|
*/
|
395
412
|
function useController(props) {
|
396
413
|
const methods = useFormContext();
|
397
|
-
const { name, disabled, control = methods.control, shouldUnregister } = props;
|
414
|
+
const { name, disabled, control = methods.control, shouldUnregister, defaultValue, } = props;
|
398
415
|
const isArrayField = isNameInFieldArray(control._names.array, name);
|
416
|
+
const defaultValueMemo = React__default.useMemo(() => get(control._formValues, name, get(control._defaultValues, name, defaultValue)), [control, name, defaultValue]);
|
399
417
|
const value = useWatch({
|
400
418
|
control,
|
401
419
|
name,
|
402
|
-
defaultValue:
|
420
|
+
defaultValue: defaultValueMemo,
|
403
421
|
exact: true,
|
404
422
|
});
|
405
423
|
const formState = useFormState({
|
@@ -413,6 +431,7 @@ function useController(props) {
|
|
413
431
|
value,
|
414
432
|
...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),
|
415
433
|
}));
|
434
|
+
_props.current = props;
|
416
435
|
const fieldState = React__default.useMemo(() => Object.defineProperties({}, {
|
417
436
|
invalid: {
|
418
437
|
enumerable: true,
|
@@ -452,12 +471,7 @@ function useController(props) {
|
|
452
471
|
const ref = React__default.useCallback((elm) => {
|
453
472
|
const field = get(control._fields, name);
|
454
473
|
if (field && elm) {
|
455
|
-
field._f.ref =
|
456
|
-
focus: () => elm.focus(),
|
457
|
-
select: () => elm.select(),
|
458
|
-
setCustomValidity: (message) => elm.setCustomValidity(message),
|
459
|
-
reportValidity: () => elm.reportValidity(),
|
460
|
-
};
|
474
|
+
field._f.ref = elm;
|
461
475
|
}
|
462
476
|
}, [control._fields, name]);
|
463
477
|
const field = React__default.useMemo(() => ({
|
@@ -2390,24 +2404,22 @@ function useFieldArray(props) {
|
|
2390
2404
|
const [fields, setFields] = React__default.useState(control._getFieldArray(name));
|
2391
2405
|
const ids = React__default.useRef(control._getFieldArray(name).map(generateId));
|
2392
2406
|
const _fieldIds = React__default.useRef(fields);
|
2393
|
-
const _name = React__default.useRef(name);
|
2394
2407
|
const _actioned = React__default.useRef(false);
|
2395
|
-
_name.current = name;
|
2396
2408
|
_fieldIds.current = fields;
|
2397
2409
|
control._names.array.add(name);
|
2398
|
-
rules &&
|
2399
|
-
control.register(name, rules);
|
2400
|
-
|
2410
|
+
React__default.useMemo(() => rules &&
|
2411
|
+
control.register(name, rules), [control, rules, name]);
|
2412
|
+
useEffect(() => control._subjects.array.subscribe({
|
2401
2413
|
next: ({ values, name: fieldArrayName, }) => {
|
2402
|
-
if (fieldArrayName ===
|
2403
|
-
const fieldValues = get(values,
|
2414
|
+
if (fieldArrayName === name || !fieldArrayName) {
|
2415
|
+
const fieldValues = get(values, name);
|
2404
2416
|
if (Array.isArray(fieldValues)) {
|
2405
2417
|
setFields(fieldValues);
|
2406
2418
|
ids.current = fieldValues.map(generateId);
|
2407
2419
|
}
|
2408
2420
|
}
|
2409
2421
|
},
|
2410
|
-
}).unsubscribe, [control]);
|
2422
|
+
}).unsubscribe, [control, name]);
|
2411
2423
|
const updateValues = React__default.useCallback((updatedFieldArrayValues) => {
|
2412
2424
|
_actioned.current = true;
|
2413
2425
|
control._setFieldArray(name, updatedFieldArrayValues);
|