react-hook-form 7.56.0-next.0 → 7.56.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/README.md +30 -28
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.mjs +56 -54
- 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/useDeepEqualEffect.d.ts +2 -2
- package/dist/useDeepEqualEffect.d.ts.map +1 -1
- package/dist/useForm.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/index.esm.mjs
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
import
|
1
|
+
import * as React from 'react';
|
2
|
+
import React__default from 'react';
|
2
3
|
|
3
4
|
var isCheckBoxInput = (element) => element.type === 'checkbox';
|
4
5
|
|
@@ -130,7 +131,7 @@ const INPUT_VALIDATION_RULES = {
|
|
130
131
|
validate: 'validate',
|
131
132
|
};
|
132
133
|
|
133
|
-
const HookFormContext =
|
134
|
+
const HookFormContext = React__default.createContext(null);
|
134
135
|
/**
|
135
136
|
* This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.
|
136
137
|
*
|
@@ -161,7 +162,7 @@ const HookFormContext = React.createContext(null);
|
|
161
162
|
* }
|
162
163
|
* ```
|
163
164
|
*/
|
164
|
-
const useFormContext = () =>
|
165
|
+
const useFormContext = () => React__default.useContext(HookFormContext);
|
165
166
|
/**
|
166
167
|
* A provider component that propagates the `useForm` methods to all children components via [React Context](https://reactjs.org/docs/context.html) API. To be used with {@link useFormContext}.
|
167
168
|
*
|
@@ -194,7 +195,7 @@ const useFormContext = () => React.useContext(HookFormContext);
|
|
194
195
|
*/
|
195
196
|
const FormProvider = (props) => {
|
196
197
|
const { children, ...data } = props;
|
197
|
-
return (
|
198
|
+
return (React__default.createElement(HookFormContext.Provider, { value: data }, children));
|
198
199
|
};
|
199
200
|
|
200
201
|
var getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {
|
@@ -250,12 +251,12 @@ function deepEqual(object1, object2) {
|
|
250
251
|
}
|
251
252
|
|
252
253
|
const useDeepEqualEffect = (effect, deps) => {
|
253
|
-
const ref = useRef(deps);
|
254
|
+
const ref = React.useRef(deps);
|
254
255
|
if (!deepEqual(deps, ref.current)) {
|
255
256
|
ref.current = deps;
|
256
257
|
}
|
257
258
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
258
|
-
useEffect(effect, ref.current);
|
259
|
+
React.useEffect(effect, ref.current);
|
259
260
|
};
|
260
261
|
|
261
262
|
/**
|
@@ -291,8 +292,8 @@ const useDeepEqualEffect = (effect, deps) => {
|
|
291
292
|
function useFormState(props) {
|
292
293
|
const methods = useFormContext();
|
293
294
|
const { control = methods.control, disabled, name, exact } = props || {};
|
294
|
-
const [formState, updateFormState] =
|
295
|
-
const _localProxyFormState =
|
295
|
+
const [formState, updateFormState] = React__default.useState(control._formState);
|
296
|
+
const _localProxyFormState = React__default.useRef({
|
296
297
|
isDirty: false,
|
297
298
|
isLoading: false,
|
298
299
|
dirtyFields: false,
|
@@ -314,10 +315,10 @@ function useFormState(props) {
|
|
314
315
|
});
|
315
316
|
},
|
316
317
|
}), [name, disabled, exact]);
|
317
|
-
|
318
|
+
React__default.useEffect(() => {
|
318
319
|
_localProxyFormState.current.isValid && control._setValid(true);
|
319
320
|
}, [control]);
|
320
|
-
return
|
321
|
+
return React__default.useMemo(() => getProxyFormState(formState, control, _localProxyFormState.current, false), [formState, control]);
|
321
322
|
}
|
322
323
|
|
323
324
|
var isString = (value) => typeof value === 'string';
|
@@ -353,7 +354,7 @@ var generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) =>
|
|
353
354
|
function useWatch(props) {
|
354
355
|
const methods = useFormContext();
|
355
356
|
const { control = methods.control, name, defaultValue, disabled, exact, } = props || {};
|
356
|
-
const [value, updateValue] =
|
357
|
+
const [value, updateValue] = React__default.useState(control._getWatch(name, defaultValue));
|
357
358
|
useDeepEqualEffect(() => control._subscribe({
|
358
359
|
name: name,
|
359
360
|
formState: {
|
@@ -363,7 +364,7 @@ function useWatch(props) {
|
|
363
364
|
callback: (formState) => !disabled &&
|
364
365
|
updateValue(generateWatchOutput(name, control._names, formState.values || control._formValues, false, defaultValue)),
|
365
366
|
}), [name, defaultValue, disabled, exact]);
|
366
|
-
|
367
|
+
React__default.useEffect(() => control._removeUnmounted());
|
367
368
|
return value;
|
368
369
|
}
|
369
370
|
|
@@ -406,13 +407,13 @@ function useController(props) {
|
|
406
407
|
name,
|
407
408
|
exact: true,
|
408
409
|
});
|
409
|
-
const _props =
|
410
|
-
const _registerProps =
|
410
|
+
const _props = React__default.useRef(props);
|
411
|
+
const _registerProps = React__default.useRef(control.register(name, {
|
411
412
|
...props.rules,
|
412
413
|
value,
|
413
414
|
...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),
|
414
415
|
}));
|
415
|
-
const fieldState =
|
416
|
+
const fieldState = React__default.useMemo(() => Object.defineProperties({}, {
|
416
417
|
invalid: {
|
417
418
|
enumerable: true,
|
418
419
|
get: () => !!get(formState.errors, name),
|
@@ -434,21 +435,21 @@ function useController(props) {
|
|
434
435
|
get: () => get(formState.errors, name),
|
435
436
|
},
|
436
437
|
}), [formState, name]);
|
437
|
-
const onChange =
|
438
|
+
const onChange = React__default.useCallback((event) => _registerProps.current.onChange({
|
438
439
|
target: {
|
439
440
|
value: getEventValue(event),
|
440
441
|
name: name,
|
441
442
|
},
|
442
443
|
type: EVENTS.CHANGE,
|
443
444
|
}), [name]);
|
444
|
-
const onBlur =
|
445
|
+
const onBlur = React__default.useCallback(() => _registerProps.current.onBlur({
|
445
446
|
target: {
|
446
447
|
value: get(control._formValues, name),
|
447
448
|
name: name,
|
448
449
|
},
|
449
450
|
type: EVENTS.BLUR,
|
450
451
|
}), [name, control._formValues]);
|
451
|
-
const ref =
|
452
|
+
const ref = React__default.useCallback((elm) => {
|
452
453
|
const field = get(control._fields, name);
|
453
454
|
if (field && elm) {
|
454
455
|
field._f.ref = {
|
@@ -459,7 +460,7 @@ function useController(props) {
|
|
459
460
|
};
|
460
461
|
}
|
461
462
|
}, [control._fields, name]);
|
462
|
-
const field =
|
463
|
+
const field = React__default.useMemo(() => ({
|
463
464
|
name,
|
464
465
|
value,
|
465
466
|
...(isBoolean(disabled) || formState.disabled
|
@@ -469,7 +470,7 @@ function useController(props) {
|
|
469
470
|
onBlur,
|
470
471
|
ref,
|
471
472
|
}), [name, disabled, formState.disabled, onChange, onBlur, ref, value]);
|
472
|
-
|
473
|
+
React__default.useEffect(() => {
|
473
474
|
const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;
|
474
475
|
control.register(name, {
|
475
476
|
..._props.current.rules,
|
@@ -500,13 +501,13 @@ function useController(props) {
|
|
500
501
|
: updateMounted(name, false);
|
501
502
|
};
|
502
503
|
}, [name, control, isArrayField, shouldUnregister]);
|
503
|
-
|
504
|
+
React__default.useEffect(() => {
|
504
505
|
control._setDisabledField({
|
505
506
|
disabled,
|
506
507
|
name,
|
507
508
|
});
|
508
509
|
}, [disabled, name, control]);
|
509
|
-
return
|
510
|
+
return React__default.useMemo(() => ({
|
510
511
|
field,
|
511
512
|
formState,
|
512
513
|
fieldState,
|
@@ -598,7 +599,7 @@ const POST_REQUEST = 'post';
|
|
598
599
|
*/
|
599
600
|
function Form(props) {
|
600
601
|
const methods = useFormContext();
|
601
|
-
const [mounted, setMounted] =
|
602
|
+
const [mounted, setMounted] = React__default.useState(false);
|
602
603
|
const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;
|
603
604
|
const submit = async (event) => {
|
604
605
|
let hasError = false;
|
@@ -664,12 +665,12 @@ function Form(props) {
|
|
664
665
|
});
|
665
666
|
}
|
666
667
|
};
|
667
|
-
|
668
|
+
React__default.useEffect(() => {
|
668
669
|
setMounted(true);
|
669
670
|
}, []);
|
670
|
-
return render ? (
|
671
|
+
return render ? (React__default.createElement(React__default.Fragment, null, render({
|
671
672
|
submit,
|
672
|
-
}))) : (
|
673
|
+
}))) : (React__default.createElement("form", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));
|
673
674
|
}
|
674
675
|
|
675
676
|
var appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria
|
@@ -2386,17 +2387,17 @@ var updateAt = (fieldValues, index, value) => {
|
|
2386
2387
|
function useFieldArray(props) {
|
2387
2388
|
const methods = useFormContext();
|
2388
2389
|
const { control = methods.control, name, keyName = 'id', shouldUnregister, rules, } = props;
|
2389
|
-
const [fields, setFields] =
|
2390
|
-
const ids =
|
2391
|
-
const _fieldIds =
|
2392
|
-
const _name =
|
2393
|
-
const _actioned =
|
2390
|
+
const [fields, setFields] = React__default.useState(control._getFieldArray(name));
|
2391
|
+
const ids = React__default.useRef(control._getFieldArray(name).map(generateId));
|
2392
|
+
const _fieldIds = React__default.useRef(fields);
|
2393
|
+
const _name = React__default.useRef(name);
|
2394
|
+
const _actioned = React__default.useRef(false);
|
2394
2395
|
_name.current = name;
|
2395
2396
|
_fieldIds.current = fields;
|
2396
2397
|
control._names.array.add(name);
|
2397
2398
|
rules &&
|
2398
2399
|
control.register(name, rules);
|
2399
|
-
|
2400
|
+
React__default.useEffect(() => control._subjects.array.subscribe({
|
2400
2401
|
next: ({ values, name: fieldArrayName, }) => {
|
2401
2402
|
if (fieldArrayName === _name.current || !fieldArrayName) {
|
2402
2403
|
const fieldValues = get(values, _name.current);
|
@@ -2407,7 +2408,7 @@ function useFieldArray(props) {
|
|
2407
2408
|
}
|
2408
2409
|
},
|
2409
2410
|
}).unsubscribe, [control]);
|
2410
|
-
const updateValues =
|
2411
|
+
const updateValues = React__default.useCallback((updatedFieldArrayValues) => {
|
2411
2412
|
_actioned.current = true;
|
2412
2413
|
control._setFieldArray(name, updatedFieldArrayValues);
|
2413
2414
|
}, [control, name]);
|
@@ -2496,7 +2497,7 @@ function useFieldArray(props) {
|
|
2496
2497
|
setFields([...updatedFieldArrayValues]);
|
2497
2498
|
control._setFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);
|
2498
2499
|
};
|
2499
|
-
|
2500
|
+
React__default.useEffect(() => {
|
2500
2501
|
control._state.action = false;
|
2501
2502
|
isWatched(name, control._names) &&
|
2502
2503
|
control._subjects.state.next({
|
@@ -2556,7 +2557,7 @@ function useFieldArray(props) {
|
|
2556
2557
|
control._setValid();
|
2557
2558
|
_actioned.current = false;
|
2558
2559
|
}, [fields, name, control]);
|
2559
|
-
|
2560
|
+
React__default.useEffect(() => {
|
2560
2561
|
!get(control._formValues, name) && control._setFieldArray(name);
|
2561
2562
|
return () => {
|
2562
2563
|
const updateMounted = (name, value) => {
|
@@ -2571,22 +2572,22 @@ function useFieldArray(props) {
|
|
2571
2572
|
};
|
2572
2573
|
}, [name, control, keyName, shouldUnregister]);
|
2573
2574
|
return {
|
2574
|
-
swap:
|
2575
|
-
move:
|
2576
|
-
prepend:
|
2577
|
-
append:
|
2578
|
-
remove:
|
2579
|
-
insert:
|
2580
|
-
update:
|
2581
|
-
replace:
|
2582
|
-
fields:
|
2575
|
+
swap: React__default.useCallback(swap, [updateValues, name, control]),
|
2576
|
+
move: React__default.useCallback(move, [updateValues, name, control]),
|
2577
|
+
prepend: React__default.useCallback(prepend, [updateValues, name, control]),
|
2578
|
+
append: React__default.useCallback(append, [updateValues, name, control]),
|
2579
|
+
remove: React__default.useCallback(remove, [updateValues, name, control]),
|
2580
|
+
insert: React__default.useCallback(insert$1, [updateValues, name, control]),
|
2581
|
+
update: React__default.useCallback(update, [updateValues, name, control]),
|
2582
|
+
replace: React__default.useCallback(replace, [updateValues, name, control]),
|
2583
|
+
fields: React__default.useMemo(() => fields.map((field, index) => ({
|
2583
2584
|
...field,
|
2584
2585
|
[keyName]: ids.current[index] || generateId(),
|
2585
2586
|
})), [fields, keyName]),
|
2586
2587
|
};
|
2587
2588
|
}
|
2588
2589
|
|
2589
|
-
const useIsomorphicLayoutEffect = typeof window !== 'undefined' ?
|
2590
|
+
const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React__default.useLayoutEffect : React__default.useEffect;
|
2590
2591
|
/**
|
2591
2592
|
* Custom hook to manage the entire form.
|
2592
2593
|
*
|
@@ -2617,9 +2618,9 @@ const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayou
|
|
2617
2618
|
* ```
|
2618
2619
|
*/
|
2619
2620
|
function useForm(props = {}) {
|
2620
|
-
const _formControl =
|
2621
|
-
const _values =
|
2622
|
-
const [formState, updateFormState] =
|
2621
|
+
const _formControl = React__default.useRef(undefined);
|
2622
|
+
const _values = React__default.useRef(undefined);
|
2623
|
+
const [formState, updateFormState] = React__default.useState({
|
2623
2624
|
isDirty: false,
|
2624
2625
|
isValidating: false,
|
2625
2626
|
isLoading: isFunction(props.defaultValues),
|
@@ -2661,10 +2662,11 @@ function useForm(props = {}) {
|
|
2661
2662
|
...data,
|
2662
2663
|
isReady: true,
|
2663
2664
|
}));
|
2665
|
+
control._formState.isReady = true;
|
2664
2666
|
return sub;
|
2665
2667
|
}, [control]);
|
2666
|
-
|
2667
|
-
|
2668
|
+
React__default.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);
|
2669
|
+
React__default.useEffect(() => {
|
2668
2670
|
if (props.mode) {
|
2669
2671
|
control._options.mode = props.mode;
|
2670
2672
|
}
|
@@ -2675,13 +2677,13 @@ function useForm(props = {}) {
|
|
2675
2677
|
control._setErrors(props.errors);
|
2676
2678
|
}
|
2677
2679
|
}, [control, props.errors, props.mode, props.reValidateMode]);
|
2678
|
-
|
2680
|
+
React__default.useEffect(() => {
|
2679
2681
|
props.shouldUnregister &&
|
2680
2682
|
control._subjects.state.next({
|
2681
2683
|
values: control._getWatch(),
|
2682
2684
|
});
|
2683
2685
|
}, [control, props.shouldUnregister]);
|
2684
|
-
|
2686
|
+
React__default.useEffect(() => {
|
2685
2687
|
if (control._proxyFormState.isDirty) {
|
2686
2688
|
const isDirty = control._getDirty();
|
2687
2689
|
if (isDirty !== formState.isDirty) {
|
@@ -2691,7 +2693,7 @@ function useForm(props = {}) {
|
|
2691
2693
|
}
|
2692
2694
|
}
|
2693
2695
|
}, [control, formState.isDirty]);
|
2694
|
-
|
2696
|
+
React__default.useEffect(() => {
|
2695
2697
|
if (props.values && !deepEqual(props.values, _values.current)) {
|
2696
2698
|
control._reset(props.values, control._options.resetOptions);
|
2697
2699
|
_values.current = props.values;
|
@@ -2701,7 +2703,7 @@ function useForm(props = {}) {
|
|
2701
2703
|
control._resetDefaultValues();
|
2702
2704
|
}
|
2703
2705
|
}, [control, props.values]);
|
2704
|
-
|
2706
|
+
React__default.useEffect(() => {
|
2705
2707
|
if (!control._state.mount) {
|
2706
2708
|
control._setValid();
|
2707
2709
|
control._state.mount = true;
|