react-hook-form 7.25.0 → 8.0.0-alpha.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 +15 -4
- 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/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- 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 +113 -90
- 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.map +1 -1
- package/dist/logic/getProxyFormState.d.ts.map +1 -1
- package/dist/logic/getResolverOptions.d.ts +2 -2
- package/dist/logic/hasValidation.d.ts +1 -1
- package/dist/logic/validateField.d.ts.map +1 -1
- package/dist/types/controller.d.ts +6 -6
- package/dist/types/controller.d.ts.map +1 -1
- package/dist/types/fieldArray.d.ts +7 -9
- package/dist/types/fieldArray.d.ts.map +1 -1
- package/dist/types/form.d.ts +26 -27
- 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/utils.d.ts +11 -2
- 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 +1 -1
- package/dist/useFieldArray.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 +6 -7
- 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/package.json +24 -24
- 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
@@ -40,6 +40,7 @@ var get = (obj, path, defaultValue) => {
|
|
40
40
|
|
41
41
|
const EVENTS = {
|
42
42
|
BLUR: 'blur',
|
43
|
+
FOCUS_OUT: 'focusout',
|
43
44
|
CHANGE: 'change',
|
44
45
|
};
|
45
46
|
const VALIDATION_MODE = {
|
@@ -70,22 +71,17 @@ const useFormContext = () => React.useContext(HookFormContext);
|
|
70
71
|
const FormProvider = (props) => (React.createElement(HookFormContext.Provider, { value: omit(props, 'children') }, props.children));
|
71
72
|
|
72
73
|
var getProxyFormState = (formState, _proxyFormState, localProxyFormState, isRoot = true) => {
|
73
|
-
function createGetter(prop) {
|
74
|
-
return () => {
|
75
|
-
if (prop in formState) {
|
76
|
-
if (_proxyFormState[prop] !== VALIDATION_MODE.all) {
|
77
|
-
_proxyFormState[prop] = !isRoot || VALIDATION_MODE.all;
|
78
|
-
}
|
79
|
-
localProxyFormState && (localProxyFormState[prop] = true);
|
80
|
-
return formState[prop];
|
81
|
-
}
|
82
|
-
return undefined;
|
83
|
-
};
|
84
|
-
}
|
85
74
|
const result = {};
|
86
75
|
for (const key in formState) {
|
87
76
|
Object.defineProperty(result, key, {
|
88
|
-
get:
|
77
|
+
get: () => {
|
78
|
+
const _key = key;
|
79
|
+
if (_proxyFormState[_key] !== VALIDATION_MODE.all) {
|
80
|
+
_proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;
|
81
|
+
}
|
82
|
+
localProxyFormState && (localProxyFormState[_key] = true);
|
83
|
+
return formState[_key];
|
84
|
+
},
|
89
85
|
});
|
90
86
|
}
|
91
87
|
return result;
|
@@ -231,7 +227,7 @@ function useController(props) {
|
|
231
227
|
control,
|
232
228
|
name,
|
233
229
|
});
|
234
|
-
const _registerProps = React.useRef(control.register(name, Object.assign(Object.assign({}, props.rules), { value })));
|
230
|
+
const _registerProps = React.useRef(control.register(name, Object.assign(Object.assign({}, props.rules), { value: value })));
|
235
231
|
React.useEffect(() => {
|
236
232
|
const updateMounted = (name, value) => {
|
237
233
|
const field = get(control._fields, name);
|
@@ -251,7 +247,7 @@ function useController(props) {
|
|
251
247
|
}, [name, control, isArrayField, shouldUnregister]);
|
252
248
|
return {
|
253
249
|
field: {
|
254
|
-
name,
|
250
|
+
name: name,
|
255
251
|
value,
|
256
252
|
onChange: React.useCallback((event) => {
|
257
253
|
_registerProps.current.onChange({
|
@@ -280,7 +276,7 @@ function useController(props) {
|
|
280
276
|
reportValidity: () => elm.reportValidity(),
|
281
277
|
};
|
282
278
|
}
|
283
|
-
}, [name, control]),
|
279
|
+
}, [name, control._fields]),
|
284
280
|
},
|
285
281
|
formState,
|
286
282
|
fieldState: control.getFieldState(name, formState),
|
@@ -292,6 +288,37 @@ const Controller = (props) => props.render(useController(props));
|
|
292
288
|
var appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria
|
293
289
|
? Object.assign(Object.assign({}, errors[name]), { types: Object.assign(Object.assign({}, (errors[name] && errors[name].types ? errors[name].types : {})), { [type]: message || true }) }) : {};
|
294
290
|
|
291
|
+
/**
|
292
|
+
* Function for joining two paths / path strings to a {@link TypedFieldPath}.
|
293
|
+
* @param path - base path
|
294
|
+
* @param childPath - the path which should be appended to the base path
|
295
|
+
* @example
|
296
|
+
* ```
|
297
|
+
* type Baz = { baz: string }
|
298
|
+
* type FooBarBaz = { foo: { bar: Baz }}
|
299
|
+
*
|
300
|
+
* const path: TypedFieldPath<FooBarBaz, Baz> = of('foo.bar')
|
301
|
+
* const joinedPath: TypedFieldPath<FooBar, string> = join(path, 'baz')
|
302
|
+
* ```
|
303
|
+
*/
|
304
|
+
function join(path, childPath) {
|
305
|
+
return `${path}.${childPath}`;
|
306
|
+
}
|
307
|
+
|
308
|
+
/**
|
309
|
+
* Function for creating a {@link TypedFieldPath} from a path string.
|
310
|
+
* @param path - path string
|
311
|
+
* @example
|
312
|
+
* ```
|
313
|
+
* type FooBar = { foo: { bar: string }}
|
314
|
+
*
|
315
|
+
* const path: TypedFieldPath<FooBar, string> = of('foo.bar')
|
316
|
+
* ```
|
317
|
+
*/
|
318
|
+
function of(path) {
|
319
|
+
return path;
|
320
|
+
}
|
321
|
+
|
295
322
|
var isKey = (value) => /^\w*$/.test(value);
|
296
323
|
|
297
324
|
var stringToPath = (input) => compact(input.replace(/["|']|\]/g, '').split(/\.|\[/));
|
@@ -438,7 +465,7 @@ var updateAt = (fieldValues, index, value) => {
|
|
438
465
|
|
439
466
|
const useFieldArray = (props) => {
|
440
467
|
const methods = useFormContext();
|
441
|
-
const { control = methods.control, name,
|
468
|
+
const { control = methods.control, name, shouldUnregister } = props;
|
442
469
|
const [fields, setFields] = React.useState(control._getFieldArray(name));
|
443
470
|
const ids = React.useRef(control._getFieldArray(name).map(generateId));
|
444
471
|
const _fieldIds = React.useRef(fields);
|
@@ -460,89 +487,89 @@ const useFieldArray = (props) => {
|
|
460
487
|
});
|
461
488
|
const updateValues = React.useCallback((updatedFieldArrayValues) => {
|
462
489
|
_actioned.current = true;
|
463
|
-
|
490
|
+
control._updateFieldArray(name, updatedFieldArrayValues);
|
464
491
|
}, [control, name]);
|
465
492
|
const append$1 = (value, options) => {
|
466
493
|
const appendValue = convertToArrayPayload(cloneObject(value));
|
467
494
|
const updatedFieldArrayValues = append(control._getFieldArray(name), appendValue);
|
468
495
|
control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);
|
469
496
|
ids.current = append(ids.current, appendValue.map(generateId));
|
470
|
-
setFields(updatedFieldArrayValues);
|
471
497
|
updateValues(updatedFieldArrayValues);
|
472
|
-
|
498
|
+
setFields(updatedFieldArrayValues);
|
499
|
+
control._updateFieldArray(name, updatedFieldArrayValues, append, {
|
473
500
|
argA: fillEmptyArray(value),
|
474
|
-
}
|
501
|
+
});
|
475
502
|
};
|
476
503
|
const prepend$1 = (value, options) => {
|
477
504
|
const prependValue = convertToArrayPayload(cloneObject(value));
|
478
505
|
const updatedFieldArrayValues = prepend(control._getFieldArray(name), prependValue);
|
479
506
|
control._names.focus = getFocusFieldName(name, 0, options);
|
480
507
|
ids.current = prepend(ids.current, prependValue.map(generateId));
|
481
|
-
setFields(updatedFieldArrayValues);
|
482
508
|
updateValues(updatedFieldArrayValues);
|
483
|
-
|
509
|
+
setFields(updatedFieldArrayValues);
|
510
|
+
control._updateFieldArray(name, updatedFieldArrayValues, prepend, {
|
484
511
|
argA: fillEmptyArray(value),
|
485
|
-
}
|
512
|
+
});
|
486
513
|
};
|
487
514
|
const remove = (index) => {
|
488
515
|
const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);
|
489
516
|
ids.current = removeArrayAt(ids.current, index);
|
490
|
-
setFields(updatedFieldArrayValues);
|
491
517
|
updateValues(updatedFieldArrayValues);
|
492
|
-
|
518
|
+
setFields(updatedFieldArrayValues);
|
519
|
+
control._updateFieldArray(name, updatedFieldArrayValues, removeArrayAt, {
|
493
520
|
argA: index,
|
494
|
-
}
|
521
|
+
});
|
495
522
|
};
|
496
523
|
const insert$1 = (index, value, options) => {
|
497
524
|
const insertValue = convertToArrayPayload(cloneObject(value));
|
498
525
|
const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);
|
499
|
-
updateValues(updatedFieldArrayValues);
|
500
526
|
control._names.focus = getFocusFieldName(name, index, options);
|
501
527
|
ids.current = insert(ids.current, index, insertValue.map(generateId));
|
528
|
+
updateValues(updatedFieldArrayValues);
|
502
529
|
setFields(updatedFieldArrayValues);
|
503
|
-
control._updateFieldArray(name, insert, {
|
530
|
+
control._updateFieldArray(name, updatedFieldArrayValues, insert, {
|
504
531
|
argA: index,
|
505
532
|
argB: fillEmptyArray(value),
|
506
|
-
}
|
533
|
+
});
|
507
534
|
};
|
508
535
|
const swap = (indexA, indexB) => {
|
509
536
|
const updatedFieldArrayValues = control._getFieldArray(name);
|
510
537
|
swapArrayAt(updatedFieldArrayValues, indexA, indexB);
|
511
538
|
swapArrayAt(ids.current, indexA, indexB);
|
512
|
-
setFields(updatedFieldArrayValues);
|
513
539
|
updateValues(updatedFieldArrayValues);
|
514
|
-
|
540
|
+
setFields(updatedFieldArrayValues);
|
541
|
+
control._updateFieldArray(name, updatedFieldArrayValues, swapArrayAt, {
|
515
542
|
argA: indexA,
|
516
543
|
argB: indexB,
|
517
|
-
},
|
544
|
+
}, false);
|
518
545
|
};
|
519
546
|
const move = (from, to) => {
|
520
547
|
const updatedFieldArrayValues = control._getFieldArray(name);
|
521
548
|
moveArrayAt(updatedFieldArrayValues, from, to);
|
522
549
|
moveArrayAt(ids.current, from, to);
|
523
|
-
setFields(updatedFieldArrayValues);
|
524
550
|
updateValues(updatedFieldArrayValues);
|
525
|
-
|
551
|
+
setFields(updatedFieldArrayValues);
|
552
|
+
control._updateFieldArray(name, updatedFieldArrayValues, moveArrayAt, {
|
526
553
|
argA: from,
|
527
554
|
argB: to,
|
528
|
-
},
|
555
|
+
}, false);
|
529
556
|
};
|
530
557
|
const update = (index, value) => {
|
531
558
|
const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, value);
|
532
559
|
ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);
|
533
|
-
setFields([...updatedFieldArrayValues]);
|
534
560
|
updateValues(updatedFieldArrayValues);
|
535
|
-
|
561
|
+
setFields([...updatedFieldArrayValues]);
|
562
|
+
control._updateFieldArray(name, updatedFieldArrayValues, updateAt, {
|
536
563
|
argA: index,
|
537
564
|
argB: value,
|
538
|
-
},
|
565
|
+
}, true, false);
|
539
566
|
};
|
540
567
|
const replace = (value) => {
|
541
|
-
const updatedFieldArrayValues = convertToArrayPayload(value);
|
568
|
+
const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));
|
542
569
|
ids.current = updatedFieldArrayValues.map(generateId);
|
543
570
|
updateValues([...updatedFieldArrayValues]);
|
544
571
|
setFields([...updatedFieldArrayValues]);
|
545
|
-
control._updateFieldArray(name, () =>
|
572
|
+
control._updateFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);
|
546
573
|
};
|
547
574
|
React.useEffect(() => {
|
548
575
|
control._stateFlags.action = false;
|
@@ -568,12 +595,12 @@ const useFieldArray = (props) => {
|
|
568
595
|
control._proxyFormState.isValid && control._updateValid();
|
569
596
|
}, [fields, name, control]);
|
570
597
|
React.useEffect(() => {
|
571
|
-
!get(control._formValues, name) &&
|
598
|
+
!get(control._formValues, name) && control._updateFieldArray(name);
|
572
599
|
return () => {
|
573
600
|
(control._options.shouldUnregister || shouldUnregister) &&
|
574
601
|
control.unregister(name);
|
575
602
|
};
|
576
|
-
}, [name, control,
|
603
|
+
}, [name, control, shouldUnregister]);
|
577
604
|
return {
|
578
605
|
swap: React.useCallback(swap, [updateValues, name, control]),
|
579
606
|
move: React.useCallback(move, [updateValues, name, control]),
|
@@ -583,7 +610,7 @@ const useFieldArray = (props) => {
|
|
583
610
|
insert: React.useCallback(insert$1, [updateValues, name, control]),
|
584
611
|
update: React.useCallback(update, [updateValues, name, control]),
|
585
612
|
replace: React.useCallback(replace, [updateValues, name, control]),
|
586
|
-
fields: React.useMemo(() => fields.map((field, index) => (Object.assign(Object.assign({}, field), {
|
613
|
+
fields: React.useMemo(() => fields.map((field, index) => (Object.assign(Object.assign({}, field), { id: ids.current[index] || generateId() }))), [fields]),
|
587
614
|
};
|
588
615
|
};
|
589
616
|
|
@@ -974,8 +1001,7 @@ var validateField = async (field, inputValue, validateAllFieldCriteria, shouldUs
|
|
974
1001
|
const maxOutput = getValueAndMessage(max);
|
975
1002
|
const minOutput = getValueAndMessage(min);
|
976
1003
|
if (!isNaN(inputValue)) {
|
977
|
-
const valueNumber = ref.valueAsNumber ||
|
978
|
-
parseFloat(inputValue);
|
1004
|
+
const valueNumber = ref.valueAsNumber || +inputValue;
|
979
1005
|
if (!isNullOrUndefined(maxOutput.value)) {
|
980
1006
|
exceedMax = valueNumber > maxOutput.value;
|
981
1007
|
}
|
@@ -1138,33 +1164,38 @@ function createFormControl(props = {}) {
|
|
1138
1164
|
}
|
1139
1165
|
return isValid;
|
1140
1166
|
};
|
1141
|
-
const _updateFieldArray = (name,
|
1142
|
-
|
1143
|
-
|
1144
|
-
|
1145
|
-
|
1146
|
-
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1167
|
+
const _updateFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndErrors = true) => {
|
1168
|
+
if (args && method) {
|
1169
|
+
_stateFlags.action = true;
|
1170
|
+
if (shouldUpdateFieldsAndErrors && Array.isArray(get(_fields, name))) {
|
1171
|
+
const fieldValues = method(get(_fields, name), args.argA, args.argB);
|
1172
|
+
shouldSetValues && set(_fields, name, fieldValues);
|
1173
|
+
}
|
1174
|
+
if (_proxyFormState.errors &&
|
1175
|
+
shouldUpdateFieldsAndErrors &&
|
1176
|
+
Array.isArray(get(_formState.errors, name))) {
|
1177
|
+
const errors = method(get(_formState.errors, name), args.argA, args.argB);
|
1178
|
+
shouldSetValues && set(_formState.errors, name, errors);
|
1179
|
+
unsetEmptyArray(_formState.errors, name);
|
1180
|
+
}
|
1181
|
+
if (_proxyFormState.touchedFields &&
|
1182
|
+
Array.isArray(get(_formState.touchedFields, name))) {
|
1183
|
+
const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);
|
1184
|
+
shouldSetValues && set(_formState.touchedFields, name, touchedFields);
|
1185
|
+
}
|
1186
|
+
if (_proxyFormState.dirtyFields) {
|
1187
|
+
_formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);
|
1188
|
+
}
|
1189
|
+
_subjects.state.next({
|
1190
|
+
isDirty: _getDirty(name, values),
|
1191
|
+
dirtyFields: _formState.dirtyFields,
|
1192
|
+
errors: _formState.errors,
|
1193
|
+
isValid: _formState.isValid,
|
1194
|
+
});
|
1158
1195
|
}
|
1159
|
-
|
1160
|
-
|
1196
|
+
else {
|
1197
|
+
set(_formValues, name, values);
|
1161
1198
|
}
|
1162
|
-
_subjects.state.next({
|
1163
|
-
isDirty: _getDirty(name, values),
|
1164
|
-
dirtyFields: _formState.dirtyFields,
|
1165
|
-
errors: _formState.errors,
|
1166
|
-
isValid: _formState.isValid,
|
1167
|
-
});
|
1168
1199
|
};
|
1169
1200
|
const updateErrors = (name, error) => (set(_formState.errors, name, error),
|
1170
1201
|
_subjects.state.next({
|
@@ -1343,7 +1374,10 @@ function createFormControl(props = {}) {
|
|
1343
1374
|
fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));
|
1344
1375
|
}
|
1345
1376
|
}
|
1346
|
-
else if (
|
1377
|
+
else if (isFileInput(fieldReference.ref)) {
|
1378
|
+
fieldReference.ref.value = '';
|
1379
|
+
}
|
1380
|
+
else {
|
1347
1381
|
fieldReference.ref.value = fieldValue;
|
1348
1382
|
if (!fieldReference.ref.type) {
|
1349
1383
|
_subjects.watch.next({
|
@@ -1410,7 +1444,7 @@ function createFormControl(props = {}) {
|
|
1410
1444
|
const fieldValue = target.type
|
1411
1445
|
? getFieldValue(field._f)
|
1412
1446
|
: getEventValue(event);
|
1413
|
-
const isBlurEvent = event.type === EVENTS.BLUR;
|
1447
|
+
const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;
|
1414
1448
|
const shouldSkipValidation = (!hasValidation(field._f) &&
|
1415
1449
|
!_options.resolver &&
|
1416
1450
|
!get(_formState.errors, name) &&
|
@@ -1437,10 +1471,9 @@ function createFormControl(props = {}) {
|
|
1437
1471
|
}
|
1438
1472
|
!isBlurEvent && watched && _subjects.state.next({});
|
1439
1473
|
validateFields[name] = validateFields[name] ? +1 : 1;
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
1443
|
-
});
|
1474
|
+
_subjects.state.next({
|
1475
|
+
isValidating: true,
|
1476
|
+
});
|
1444
1477
|
if (_options.resolver) {
|
1445
1478
|
const { errors } = await _executeSchema([name]);
|
1446
1479
|
const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);
|
@@ -1546,7 +1579,7 @@ function createFormControl(props = {}) {
|
|
1546
1579
|
}
|
1547
1580
|
_subjects.watch.next({});
|
1548
1581
|
_subjects.state.next(Object.assign(Object.assign({}, _formState), (!options.keepDirty ? {} : { isDirty: _getDirty() })));
|
1549
|
-
|
1582
|
+
_proxyFormState.isValid && _updateValid();
|
1550
1583
|
};
|
1551
1584
|
const register = (name, options = {}) => {
|
1552
1585
|
let field = get(_fields, name);
|
@@ -1730,8 +1763,7 @@ function createFormControl(props = {}) {
|
|
1730
1763
|
watchAll: false,
|
1731
1764
|
focus: '',
|
1732
1765
|
};
|
1733
|
-
_stateFlags.mount =
|
1734
|
-
!_proxyFormState.isValid || !!keepStateOptions.keepIsValid;
|
1766
|
+
_stateFlags.mount = !_proxyFormState.isValid;
|
1735
1767
|
_stateFlags.watch = !!props.shouldUnregister;
|
1736
1768
|
_subjects.state.next({
|
1737
1769
|
submitCount: keepStateOptions.keepSubmitCount
|
@@ -1781,15 +1813,9 @@ function createFormControl(props = {}) {
|
|
1781
1813
|
get _fields() {
|
1782
1814
|
return _fields;
|
1783
1815
|
},
|
1784
|
-
set _fields(value) {
|
1785
|
-
_fields = value;
|
1786
|
-
},
|
1787
1816
|
get _formValues() {
|
1788
1817
|
return _formValues;
|
1789
1818
|
},
|
1790
|
-
set _formValues(value) {
|
1791
|
-
_formValues = value;
|
1792
|
-
},
|
1793
1819
|
get _stateFlags() {
|
1794
1820
|
return _stateFlags;
|
1795
1821
|
},
|
@@ -1799,9 +1825,6 @@ function createFormControl(props = {}) {
|
|
1799
1825
|
get _defaultValues() {
|
1800
1826
|
return _defaultValues;
|
1801
1827
|
},
|
1802
|
-
set _defaultValues(value) {
|
1803
|
-
_defaultValues = value;
|
1804
|
-
},
|
1805
1828
|
get _names() {
|
1806
1829
|
return _names;
|
1807
1830
|
},
|
@@ -1883,5 +1906,5 @@ function useForm(props = {}) {
|
|
1883
1906
|
return _formControl.current;
|
1884
1907
|
}
|
1885
1908
|
|
1886
|
-
export { Controller, FormProvider, appendErrors, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };
|
1909
|
+
export { Controller, FormProvider, appendErrors, get, join, of, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };
|
1887
1910
|
//# sourceMappingURL=index.esm.mjs.map
|