react-hook-form 7.23.0-next.0 → 7.23.0-next.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/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.mjs +101 -102
- 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/types/form.d.ts +4 -4
- package/dist/types/form.d.ts.map +1 -1
- package/dist/useFieldArray.d.ts.map +1 -1
- package/dist/utils/compact.d.ts +1 -1
- package/dist/utils/compact.d.ts.map +1 -1
- package/dist/utils/get.d.ts.map +1 -1
- package/dist/utils/isDateObject.d.ts +1 -1
- package/dist/utils/isDateObject.d.ts.map +1 -1
- package/dist/utils/live.d.ts.map +1 -1
- package/dist/utils/update.d.ts +1 -1
- package/dist/utils/update.d.ts.map +1 -1
- package/package.json +8 -11
- package/dist/logic/mapCurrentIds.d.ts +0 -6
- package/dist/logic/mapCurrentIds.d.ts.map +0 -1
package/dist/index.esm.mjs
CHANGED
@@ -2,7 +2,7 @@ import React from 'react';
|
|
2
2
|
|
3
3
|
var isCheckBoxInput = (element) => element.type === 'checkbox';
|
4
4
|
|
5
|
-
var isDateObject = (
|
5
|
+
var isDateObject = (value) => value instanceof Date;
|
6
6
|
|
7
7
|
var isNullOrUndefined = (value) => value == null;
|
8
8
|
|
@@ -22,20 +22,20 @@ var getNodeParentName = (name) => name.substring(0, name.search(/.\d/)) || name;
|
|
22
22
|
|
23
23
|
var isNameInFieldArray = (names, name) => [...names].some((current) => getNodeParentName(name) === current);
|
24
24
|
|
25
|
-
var compact = (value) =>
|
25
|
+
var compact = (value) => value.filter(Boolean);
|
26
26
|
|
27
27
|
var isUndefined = (val) => val === undefined;
|
28
28
|
|
29
29
|
var get = (obj, path, defaultValue) => {
|
30
|
-
if (isObject(obj)
|
31
|
-
|
32
|
-
return isUndefined(result) || result === obj
|
33
|
-
? isUndefined(obj[path])
|
34
|
-
? defaultValue
|
35
|
-
: obj[path]
|
36
|
-
: result;
|
30
|
+
if (!path || !isObject(obj)) {
|
31
|
+
return defaultValue;
|
37
32
|
}
|
38
|
-
|
33
|
+
const result = compact(path.split(/[,[\].]+?/)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], obj);
|
34
|
+
return isUndefined(result) || result === obj
|
35
|
+
? isUndefined(obj[path])
|
36
|
+
? defaultValue
|
37
|
+
: obj[path]
|
38
|
+
: result;
|
39
39
|
};
|
40
40
|
|
41
41
|
const EVENTS = {
|
@@ -343,6 +343,14 @@ const focusFieldBy = (fields, callback, fieldsNames) => {
|
|
343
343
|
}
|
344
344
|
};
|
345
345
|
|
346
|
+
var generateId = () => {
|
347
|
+
const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;
|
348
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
349
|
+
const r = (Math.random() * 16 + d) % 16 | 0;
|
350
|
+
return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);
|
351
|
+
});
|
352
|
+
};
|
353
|
+
|
346
354
|
var getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)
|
347
355
|
? options.focusName ||
|
348
356
|
`${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`
|
@@ -354,20 +362,8 @@ var isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&
|
|
354
362
|
[..._names.watch].some((watchName) => name.startsWith(watchName) &&
|
355
363
|
/^\.\w+/.test(name.slice(watchName.length))));
|
356
364
|
|
357
|
-
var generateId = () => {
|
358
|
-
const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;
|
359
|
-
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
360
|
-
const r = (Math.random() * 16 + d) % 16 | 0;
|
361
|
-
return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);
|
362
|
-
});
|
363
|
-
};
|
364
|
-
|
365
|
-
var mapCurrentIds = (values, keyName, _fieldIds) => values.map((value, index) => (Object.assign(Object.assign({}, value), { [keyName]: _fieldIds && _fieldIds.current[index]
|
366
|
-
? _fieldIds.current[index][keyName]
|
367
|
-
: value[keyName] || generateId() })));
|
368
|
-
|
369
365
|
function append(data, value) {
|
370
|
-
return [...
|
366
|
+
return [...data, ...convertToArrayPayload(value)];
|
371
367
|
}
|
372
368
|
|
373
369
|
function cloneObject(data) {
|
@@ -416,8 +412,6 @@ var moveArrayAt = (data, from, to) => {
|
|
416
412
|
return [];
|
417
413
|
};
|
418
414
|
|
419
|
-
var omitKeys = (fields, keyName) => fields.map((field = {}) => omit(field, keyName));
|
420
|
-
|
421
415
|
function prepend(data, value) {
|
422
416
|
return [...convertToArrayPayload(value), ...convertToArrayPayload(data)];
|
423
417
|
}
|
@@ -447,8 +441,8 @@ var updateAt = (fieldValues, index, value) => {
|
|
447
441
|
const useFieldArray = (props) => {
|
448
442
|
const methods = useFormContext();
|
449
443
|
const { control = methods.control, name, keyName = 'id', shouldUnregister, } = props;
|
450
|
-
const
|
451
|
-
const
|
444
|
+
const [fields, setFields] = React.useState(control._getFieldArray(name));
|
445
|
+
const ids = React.useRef(control._getFieldArray(name).map(generateId));
|
452
446
|
const _fieldIds = React.useRef(fields);
|
453
447
|
const _name = React.useRef(name);
|
454
448
|
const _actioned = React.useRef(false);
|
@@ -457,98 +451,100 @@ const useFieldArray = (props) => {
|
|
457
451
|
control._names.array.add(name);
|
458
452
|
const callback = React.useCallback(({ values, name: fieldArrayName }) => {
|
459
453
|
if (fieldArrayName === _name.current || !fieldArrayName) {
|
460
|
-
|
454
|
+
const fieldValues = get(values, _name.current, []);
|
455
|
+
setFields(fieldValues);
|
456
|
+
ids.current = fieldValues.map(generateId);
|
461
457
|
}
|
462
|
-
}, [
|
458
|
+
}, []);
|
463
459
|
useSubscribe({
|
464
460
|
callback,
|
465
461
|
subject: control._subjects.array,
|
466
462
|
});
|
467
|
-
const updateValues = React.useCallback((
|
468
|
-
const updatedFieldArrayValues = hasKey
|
469
|
-
? updatedFieldArrayValuesWithKey
|
470
|
-
: omitKeys(updatedFieldArrayValuesWithKey, keyName);
|
471
|
-
hasKey && (_shouldKeepKeyName.current = true);
|
463
|
+
const updateValues = React.useCallback((updatedFieldArrayValues) => {
|
472
464
|
_actioned.current = true;
|
473
465
|
set(control._formValues, name, updatedFieldArrayValues);
|
474
|
-
|
475
|
-
}, [control, name, keyName]);
|
466
|
+
}, [control, name]);
|
476
467
|
const append$1 = (value, options) => {
|
477
468
|
const appendValue = convertToArrayPayload(cloneObject(value));
|
478
|
-
const
|
479
|
-
|
480
|
-
|
481
|
-
setFields(
|
469
|
+
const updatedFieldArrayValues = append(control._getFieldArray(name), appendValue);
|
470
|
+
control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);
|
471
|
+
ids.current = append(ids.current, appendValue.map(generateId));
|
472
|
+
setFields(updatedFieldArrayValues);
|
473
|
+
updateValues(updatedFieldArrayValues);
|
482
474
|
control._updateFieldArray(name, append, {
|
483
475
|
argA: fillEmptyArray(value),
|
484
|
-
},
|
476
|
+
}, updatedFieldArrayValues);
|
485
477
|
};
|
486
478
|
const prepend$1 = (value, options) => {
|
487
479
|
const prependValue = convertToArrayPayload(cloneObject(value));
|
488
|
-
const
|
489
|
-
const fieldArrayValues = updateValues(updatedFieldArrayValuesWithKey, prependValue[0][keyName]);
|
480
|
+
const updatedFieldArrayValues = prepend(control._getFieldArray(name), prependValue);
|
490
481
|
control._names.focus = getFocusFieldName(name, 0, options);
|
491
|
-
|
482
|
+
ids.current = prepend(ids.current, prependValue.map(generateId));
|
483
|
+
setFields(updatedFieldArrayValues);
|
484
|
+
updateValues(updatedFieldArrayValues);
|
492
485
|
control._updateFieldArray(name, prepend, {
|
493
486
|
argA: fillEmptyArray(value),
|
494
|
-
},
|
487
|
+
}, updatedFieldArrayValues);
|
495
488
|
};
|
496
489
|
const remove = (index) => {
|
497
|
-
const
|
498
|
-
|
499
|
-
setFields(
|
490
|
+
const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);
|
491
|
+
ids.current = removeArrayAt(ids.current, index);
|
492
|
+
setFields(updatedFieldArrayValues);
|
493
|
+
updateValues(updatedFieldArrayValues);
|
500
494
|
control._updateFieldArray(name, removeArrayAt, {
|
501
495
|
argA: index,
|
502
|
-
},
|
496
|
+
}, updatedFieldArrayValues);
|
503
497
|
};
|
504
498
|
const insert$1 = (index, value, options) => {
|
505
499
|
const insertValue = convertToArrayPayload(cloneObject(value));
|
506
|
-
const
|
507
|
-
|
500
|
+
const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);
|
501
|
+
updateValues(updatedFieldArrayValues);
|
508
502
|
control._names.focus = getFocusFieldName(name, index, options);
|
509
|
-
|
503
|
+
ids.current = insert(ids.current, index, insertValue.map(generateId));
|
504
|
+
setFields(updatedFieldArrayValues);
|
510
505
|
control._updateFieldArray(name, insert, {
|
511
506
|
argA: index,
|
512
507
|
argB: fillEmptyArray(value),
|
513
|
-
},
|
508
|
+
}, updatedFieldArrayValues);
|
514
509
|
};
|
515
510
|
const swap = (indexA, indexB) => {
|
516
|
-
const
|
517
|
-
swapArrayAt(
|
518
|
-
|
519
|
-
setFields(
|
511
|
+
const updatedFieldArrayValues = control._getFieldArray(name);
|
512
|
+
swapArrayAt(updatedFieldArrayValues, indexA, indexB);
|
513
|
+
swapArrayAt(ids.current, indexA, indexB);
|
514
|
+
setFields(updatedFieldArrayValues);
|
515
|
+
updateValues(updatedFieldArrayValues);
|
520
516
|
control._updateFieldArray(name, swapArrayAt, {
|
521
517
|
argA: indexA,
|
522
518
|
argB: indexB,
|
523
|
-
},
|
519
|
+
}, updatedFieldArrayValues, false);
|
524
520
|
};
|
525
521
|
const move = (from, to) => {
|
526
|
-
const
|
527
|
-
moveArrayAt(
|
528
|
-
|
529
|
-
setFields(
|
522
|
+
const updatedFieldArrayValues = control._getFieldArray(name);
|
523
|
+
moveArrayAt(updatedFieldArrayValues, from, to);
|
524
|
+
moveArrayAt(ids.current, from, to);
|
525
|
+
setFields(updatedFieldArrayValues);
|
526
|
+
updateValues(updatedFieldArrayValues);
|
530
527
|
control._updateFieldArray(name, moveArrayAt, {
|
531
528
|
argA: from,
|
532
529
|
argB: to,
|
533
|
-
},
|
530
|
+
}, updatedFieldArrayValues, false);
|
534
531
|
};
|
535
532
|
const update = (index, value) => {
|
536
|
-
const
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
setFields(_fieldIds.current);
|
533
|
+
const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, value);
|
534
|
+
ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);
|
535
|
+
setFields([...updatedFieldArrayValues]);
|
536
|
+
updateValues(updatedFieldArrayValues);
|
541
537
|
control._updateFieldArray(name, updateAt, {
|
542
538
|
argA: index,
|
543
539
|
argB: value,
|
544
|
-
},
|
540
|
+
}, updatedFieldArrayValues, true, false, false);
|
545
541
|
};
|
546
542
|
const replace = (value) => {
|
547
|
-
const
|
548
|
-
|
549
|
-
|
550
|
-
setFields(
|
551
|
-
control._updateFieldArray(name, () =>
|
543
|
+
const updatedFieldArrayValues = convertToArrayPayload(value);
|
544
|
+
ids.current = updatedFieldArrayValues.map(generateId);
|
545
|
+
updateValues([...updatedFieldArrayValues]);
|
546
|
+
setFields([...updatedFieldArrayValues]);
|
547
|
+
control._updateFieldArray(name, () => updatedFieldArrayValues, {}, [...updatedFieldArrayValues], true, false, false);
|
552
548
|
};
|
553
549
|
React.useEffect(() => {
|
554
550
|
control._stateFlags.action = false;
|
@@ -572,25 +568,24 @@ const useFieldArray = (props) => {
|
|
572
568
|
focusFieldBy(control._fields, (key) => key.startsWith(control._names.focus));
|
573
569
|
control._names.focus = '';
|
574
570
|
control._proxyFormState.isValid && control._updateValid();
|
575
|
-
}, [fields, name, control
|
571
|
+
}, [fields, name, control]);
|
576
572
|
React.useEffect(() => {
|
577
573
|
!get(control._formValues, name) && set(control._formValues, name, []);
|
578
574
|
return () => {
|
579
|
-
|
575
|
+
(control._options.shouldUnregister || shouldUnregister) &&
|
580
576
|
control.unregister(name);
|
581
|
-
}
|
582
577
|
};
|
583
578
|
}, [name, control, keyName, shouldUnregister]);
|
584
579
|
return {
|
585
|
-
swap: React.useCallback(swap, [updateValues, name, control
|
586
|
-
move: React.useCallback(move, [updateValues, name, control
|
587
|
-
prepend: React.useCallback(prepend$1, [updateValues, name, control
|
588
|
-
append: React.useCallback(append$1, [updateValues, name, control
|
589
|
-
remove: React.useCallback(remove, [updateValues, name, control
|
590
|
-
insert: React.useCallback(insert$1, [updateValues, name, control
|
591
|
-
update: React.useCallback(update, [updateValues, name, control
|
592
|
-
replace: React.useCallback(replace, [updateValues, name, control
|
593
|
-
fields: fields,
|
580
|
+
swap: React.useCallback(swap, [updateValues, name, control]),
|
581
|
+
move: React.useCallback(move, [updateValues, name, control]),
|
582
|
+
prepend: React.useCallback(prepend$1, [updateValues, name, control]),
|
583
|
+
append: React.useCallback(append$1, [updateValues, name, control]),
|
584
|
+
remove: React.useCallback(remove, [updateValues, name, control]),
|
585
|
+
insert: React.useCallback(insert$1, [updateValues, name, control]),
|
586
|
+
update: React.useCallback(update, [updateValues, name, control]),
|
587
|
+
replace: React.useCallback(replace, [updateValues, name, control]),
|
588
|
+
fields: React.useMemo(() => fields.map((field, index) => (Object.assign(Object.assign({}, field), { [keyName]: ids.current[index] || generateId() }))), [fields, keyName]),
|
594
589
|
};
|
595
590
|
};
|
596
591
|
|
@@ -679,7 +674,7 @@ var isWeb = typeof window !== 'undefined' &&
|
|
679
674
|
typeof window.HTMLElement !== 'undefined' &&
|
680
675
|
typeof document !== 'undefined';
|
681
676
|
|
682
|
-
var live = (ref) => isHTMLElement(ref) &&
|
677
|
+
var live = (ref) => isHTMLElement(ref) && ref.isConnected;
|
683
678
|
|
684
679
|
function baseGet(object, updatePath) {
|
685
680
|
const length = updatePath.slice(0, -1).length;
|
@@ -1176,10 +1171,10 @@ function createFormControl(props = {}) {
|
|
1176
1171
|
_subjects.state.next({
|
1177
1172
|
errors: _formState.errors,
|
1178
1173
|
}));
|
1179
|
-
const updateValidAndValue = (name, shouldSkipSetValueAs, ref) => {
|
1174
|
+
const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {
|
1180
1175
|
const field = get(_fields, name);
|
1181
1176
|
if (field) {
|
1182
|
-
const defaultValue = get(_formValues, name, get(_defaultValues, name));
|
1177
|
+
const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);
|
1183
1178
|
isUndefined(defaultValue) ||
|
1184
1179
|
(ref && ref.defaultChecked) ||
|
1185
1180
|
shouldSkipSetValueAs
|
@@ -1342,7 +1337,8 @@ function createFormControl(props = {}) {
|
|
1342
1337
|
? fieldReference.refs.forEach((checkboxRef) => (checkboxRef.checked = Array.isArray(fieldValue)
|
1343
1338
|
? !!fieldValue.find((data) => data === checkboxRef.value)
|
1344
1339
|
: fieldValue === checkboxRef.value))
|
1345
|
-
:
|
1340
|
+
: fieldReference.refs[0] &&
|
1341
|
+
(fieldReference.refs[0].checked = !!fieldValue);
|
1346
1342
|
}
|
1347
1343
|
else {
|
1348
1344
|
fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));
|
@@ -1549,20 +1545,18 @@ function createFormControl(props = {}) {
|
|
1549
1545
|
};
|
1550
1546
|
const register = (name, options = {}) => {
|
1551
1547
|
let field = get(_fields, name);
|
1548
|
+
const disabledIsDefined = isBoolean(options.disabled);
|
1552
1549
|
set(_fields, name, {
|
1553
1550
|
_f: Object.assign(Object.assign(Object.assign({}, (field && field._f ? field._f : { ref: { name } })), { name, mount: true }), options),
|
1554
1551
|
});
|
1555
1552
|
_names.mount.add(name);
|
1556
|
-
!isUndefined(options.value) &&
|
1557
|
-
!options.disabled &&
|
1558
|
-
set(_formValues, name, get(_formValues, name, options.value));
|
1559
1553
|
field
|
1560
|
-
?
|
1554
|
+
? disabledIsDefined &&
|
1561
1555
|
set(_formValues, name, options.disabled
|
1562
1556
|
? undefined
|
1563
1557
|
: get(_formValues, name, getFieldValue(field._f)))
|
1564
|
-
: updateValidAndValue(name, true);
|
1565
|
-
return Object.assign(Object.assign(Object.assign({}, (
|
1558
|
+
: updateValidAndValue(name, true, options.value);
|
1559
|
+
return Object.assign(Object.assign(Object.assign({}, (disabledIsDefined ? { disabled: options.disabled } : {})), (_options.shouldUseNativeValidation
|
1566
1560
|
? {
|
1567
1561
|
required: !!options.required,
|
1568
1562
|
min: getRuleValue(options.min),
|
@@ -1582,16 +1576,21 @@ function createFormControl(props = {}) {
|
|
1582
1576
|
: ref
|
1583
1577
|
: ref;
|
1584
1578
|
const radioOrCheckbox = isRadioOrCheckbox(fieldRef);
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1579
|
+
const refs = field._f.refs || [];
|
1580
|
+
if (radioOrCheckbox
|
1581
|
+
? refs.find((option) => option === fieldRef)
|
1582
|
+
: fieldRef === field._f.ref) {
|
1588
1583
|
return;
|
1589
1584
|
}
|
1590
1585
|
set(_fields, name, {
|
1591
|
-
_f: radioOrCheckbox
|
1592
|
-
?
|
1586
|
+
_f: Object.assign(Object.assign({}, field._f), (radioOrCheckbox
|
1587
|
+
? {
|
1588
|
+
refs: refs.concat(fieldRef).filter(live),
|
1589
|
+
ref: { type: fieldRef.type, name },
|
1590
|
+
}
|
1591
|
+
: { ref: fieldRef })),
|
1593
1592
|
});
|
1594
|
-
updateValidAndValue(name, false, fieldRef);
|
1593
|
+
updateValidAndValue(name, false, undefined, fieldRef);
|
1595
1594
|
}
|
1596
1595
|
else {
|
1597
1596
|
field = get(_fields, name, {});
|