react-hook-form 7.22.3 → 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/README.md +6 -0
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/controller.d.ts +1 -0
- package/dist/controller.d.ts.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.mjs +136 -126
- 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/appendErrors.d.ts +1 -0
- package/dist/logic/appendErrors.d.ts.map +1 -0
- package/dist/logic/createFormControl.d.ts +1 -0
- package/dist/logic/createFormControl.d.ts.map +1 -0
- package/dist/logic/focusFieldBy.d.ts +1 -0
- package/dist/logic/focusFieldBy.d.ts.map +1 -0
- package/dist/logic/generateId.d.ts +1 -0
- package/dist/logic/generateId.d.ts.map +1 -0
- package/dist/logic/generateWatchOutput.d.ts +1 -0
- package/dist/logic/generateWatchOutput.d.ts.map +1 -0
- package/dist/logic/getCheckboxValue.d.ts +1 -0
- package/dist/logic/getCheckboxValue.d.ts.map +1 -0
- package/dist/logic/getDirtyFields.d.ts +1 -0
- package/dist/logic/getDirtyFields.d.ts.map +1 -0
- package/dist/logic/getEventValue.d.ts +1 -0
- package/dist/logic/getEventValue.d.ts.map +1 -0
- package/dist/logic/getFieldValue.d.ts +1 -0
- package/dist/logic/getFieldValue.d.ts.map +1 -0
- package/dist/logic/getFieldValueAs.d.ts +1 -0
- package/dist/logic/getFieldValueAs.d.ts.map +1 -0
- package/dist/logic/getFocusFieldName.d.ts +1 -0
- package/dist/logic/getFocusFieldName.d.ts.map +1 -0
- package/dist/logic/getNodeParentName.d.ts +1 -0
- package/dist/logic/getNodeParentName.d.ts.map +1 -0
- package/dist/logic/getProxyFormState.d.ts +1 -0
- package/dist/logic/getProxyFormState.d.ts.map +1 -0
- package/dist/logic/getRadioValue.d.ts +1 -0
- package/dist/logic/getRadioValue.d.ts.map +1 -0
- package/dist/logic/getResolverOptions.d.ts +1 -0
- package/dist/logic/getResolverOptions.d.ts.map +1 -0
- package/dist/logic/getRuleValue.d.ts +1 -0
- package/dist/logic/getRuleValue.d.ts.map +1 -0
- package/dist/logic/getValidateError.d.ts +1 -0
- package/dist/logic/getValidateError.d.ts.map +1 -0
- package/dist/logic/getValueAndMessage.d.ts +1 -0
- package/dist/logic/getValueAndMessage.d.ts.map +1 -0
- package/dist/logic/hasValidation.d.ts +1 -0
- package/dist/logic/hasValidation.d.ts.map +1 -0
- package/dist/logic/index.d.ts +1 -0
- package/dist/logic/index.d.ts.map +1 -0
- package/dist/logic/isNameInFieldArray.d.ts +1 -0
- package/dist/logic/isNameInFieldArray.d.ts.map +1 -0
- package/dist/logic/isWatched.d.ts +1 -0
- package/dist/logic/isWatched.d.ts.map +1 -0
- package/dist/logic/schemaErrorLookup.d.ts +1 -0
- package/dist/logic/schemaErrorLookup.d.ts.map +1 -0
- package/dist/logic/setCustomValidty.d.ts +1 -0
- package/dist/logic/setCustomValidty.d.ts.map +1 -0
- package/dist/logic/shouldRenderFormState.d.ts +1 -0
- package/dist/logic/shouldRenderFormState.d.ts.map +1 -0
- package/dist/logic/shouldSubscribeByName.d.ts +1 -0
- package/dist/logic/shouldSubscribeByName.d.ts.map +1 -0
- package/dist/logic/skipValidation.d.ts +1 -0
- package/dist/logic/skipValidation.d.ts.map +1 -0
- package/dist/logic/unsetEmptyArray.d.ts +1 -0
- package/dist/logic/unsetEmptyArray.d.ts.map +1 -0
- package/dist/logic/validateField.d.ts +1 -0
- package/dist/logic/validateField.d.ts.map +1 -0
- package/dist/types/controller.d.ts +1 -0
- package/dist/types/controller.d.ts.map +1 -0
- package/dist/types/errors.d.ts +1 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/events.d.ts +1 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/fieldArray.d.ts +2 -1
- package/dist/types/fieldArray.d.ts.map +1 -0
- package/dist/types/fields.d.ts +1 -0
- package/dist/types/fields.d.ts.map +1 -0
- package/dist/types/form.d.ts +10 -8
- package/dist/types/form.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/path/common.d.ts +316 -0
- package/dist/types/path/common.d.ts.map +1 -0
- package/dist/types/path/eager.d.ts +82 -0
- package/dist/types/path/eager.d.ts.map +1 -0
- package/dist/types/path/index.d.ts +4 -0
- package/dist/types/path/index.d.ts.map +1 -0
- package/dist/types/resolvers.d.ts +1 -0
- package/dist/types/resolvers.d.ts.map +1 -0
- package/dist/types/utils.d.ts +20 -25
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/validator.d.ts +2 -1
- package/dist/types/validator.d.ts.map +1 -0
- package/dist/useController.d.ts +1 -0
- package/dist/useController.d.ts.map +1 -0
- package/dist/useFieldArray.d.ts +1 -0
- package/dist/useFieldArray.d.ts.map +1 -0
- package/dist/useForm.d.ts +1 -0
- package/dist/useForm.d.ts.map +1 -0
- package/dist/useFormContext.d.ts +1 -0
- package/dist/useFormContext.d.ts.map +1 -0
- package/dist/useFormState.d.ts +1 -0
- package/dist/useFormState.d.ts.map +1 -0
- package/dist/useSubscribe.d.ts +1 -0
- package/dist/useSubscribe.d.ts.map +1 -0
- package/dist/useWatch.d.ts +1 -0
- package/dist/useWatch.d.ts.map +1 -0
- package/dist/utils/append.d.ts +1 -0
- package/dist/utils/append.d.ts.map +1 -0
- package/dist/utils/cloneObject.d.ts +1 -0
- package/dist/utils/cloneObject.d.ts.map +1 -0
- package/dist/utils/compact.d.ts +2 -1
- package/dist/utils/compact.d.ts.map +1 -0
- package/dist/utils/convertToArrayPayload.d.ts +1 -0
- package/dist/utils/convertToArrayPayload.d.ts.map +1 -0
- package/dist/utils/createSubject.d.ts +1 -0
- package/dist/utils/createSubject.d.ts.map +1 -0
- package/dist/utils/deepEqual.d.ts +1 -0
- package/dist/utils/deepEqual.d.ts.map +1 -0
- package/dist/utils/deepMerge.d.ts +1 -0
- package/dist/utils/deepMerge.d.ts.map +1 -0
- package/dist/utils/fillBooleanArray.d.ts +1 -0
- package/dist/utils/fillBooleanArray.d.ts.map +1 -0
- package/dist/utils/fillEmptyArray.d.ts +1 -0
- package/dist/utils/fillEmptyArray.d.ts.map +1 -0
- package/dist/utils/get.d.ts +1 -0
- package/dist/utils/get.d.ts.map +1 -0
- package/dist/utils/getValidationModes.d.ts +1 -0
- package/dist/utils/getValidationModes.d.ts.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/insert.d.ts +1 -0
- package/dist/utils/insert.d.ts.map +1 -0
- package/dist/utils/isBoolean.d.ts +1 -0
- package/dist/utils/isBoolean.d.ts.map +1 -0
- package/dist/utils/isCheckBoxInput.d.ts +1 -0
- package/dist/utils/isCheckBoxInput.d.ts.map +1 -0
- package/dist/utils/isDateObject.d.ts +2 -1
- package/dist/utils/isDateObject.d.ts.map +1 -0
- package/dist/utils/isEmptyObject.d.ts +1 -0
- package/dist/utils/isEmptyObject.d.ts.map +1 -0
- package/dist/utils/isFileInput.d.ts +1 -0
- package/dist/utils/isFileInput.d.ts.map +1 -0
- package/dist/utils/isFunction.d.ts +1 -0
- package/dist/utils/isFunction.d.ts.map +1 -0
- package/dist/utils/isHTMLElement.d.ts +1 -0
- package/dist/utils/isHTMLElement.d.ts.map +1 -0
- package/dist/utils/isKey.d.ts +1 -0
- package/dist/utils/isKey.d.ts.map +1 -0
- package/dist/utils/isMessage.d.ts +1 -0
- package/dist/utils/isMessage.d.ts.map +1 -0
- package/dist/utils/isMultipleSelect.d.ts +1 -0
- package/dist/utils/isMultipleSelect.d.ts.map +1 -0
- package/dist/utils/isNullOrUndefined.d.ts +1 -0
- package/dist/utils/isNullOrUndefined.d.ts.map +1 -0
- package/dist/utils/isObject.d.ts +1 -0
- package/dist/utils/isObject.d.ts.map +1 -0
- package/dist/utils/isPrimitive.d.ts +1 -0
- package/dist/utils/isPrimitive.d.ts.map +1 -0
- package/dist/utils/isRadioInput.d.ts +1 -0
- package/dist/utils/isRadioInput.d.ts.map +1 -0
- package/dist/utils/isRadioOrCheckbox.d.ts +1 -0
- package/dist/utils/isRadioOrCheckbox.d.ts.map +1 -0
- package/dist/utils/isRegex.d.ts +1 -0
- package/dist/utils/isRegex.d.ts.map +1 -0
- package/dist/utils/isSelectInput.d.ts +1 -0
- package/dist/utils/isSelectInput.d.ts.map +1 -0
- package/dist/utils/isString.d.ts +1 -0
- package/dist/utils/isString.d.ts.map +1 -0
- package/dist/utils/isUndefined.d.ts +1 -0
- package/dist/utils/isUndefined.d.ts.map +1 -0
- package/dist/utils/isWeb.d.ts +1 -0
- package/dist/utils/isWeb.d.ts.map +1 -0
- package/dist/utils/live.d.ts +1 -0
- package/dist/utils/live.d.ts.map +1 -0
- package/dist/utils/move.d.ts +1 -0
- package/dist/utils/move.d.ts.map +1 -0
- package/dist/utils/objectHasFunction.d.ts +1 -0
- package/dist/utils/objectHasFunction.d.ts.map +1 -0
- package/dist/utils/omit.d.ts +1 -0
- package/dist/utils/omit.d.ts.map +1 -0
- package/dist/utils/omitKeys.d.ts +1 -0
- package/dist/utils/omitKeys.d.ts.map +1 -0
- package/dist/utils/prepend.d.ts +1 -0
- package/dist/utils/prepend.d.ts.map +1 -0
- package/dist/utils/remove.d.ts +1 -0
- package/dist/utils/remove.d.ts.map +1 -0
- package/dist/utils/set.d.ts +1 -0
- package/dist/utils/set.d.ts.map +1 -0
- package/dist/utils/stringToPath.d.ts +1 -0
- package/dist/utils/stringToPath.d.ts.map +1 -0
- package/dist/utils/swap.d.ts +1 -0
- package/dist/utils/swap.d.ts.map +1 -0
- package/dist/utils/unset.d.ts +1 -0
- package/dist/utils/unset.d.ts.map +1 -0
- package/dist/utils/update.d.ts +2 -1
- package/dist/utils/update.d.ts.map +1 -0
- package/package.json +24 -20
- package/CHANGELOG.md +0 -1311
- package/dist/logic/mapCurrentIds.d.ts +0 -5
- package/dist/logic/mapId.d.ts +0 -3
package/dist/index.d.ts
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
|
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 = {
|
@@ -143,11 +143,12 @@ function useFormState(props) {
|
|
143
143
|
});
|
144
144
|
const _name = React.useRef(name);
|
145
145
|
_name.current = name;
|
146
|
+
const callback = React.useCallback((value) => shouldSubscribeByName(_name.current, value.name, exact) &&
|
147
|
+
shouldRenderFormState(value, _localProxyFormState.current) &&
|
148
|
+
updateFormState(Object.assign(Object.assign({}, control._formState), value)), [control, exact]);
|
146
149
|
useSubscribe({
|
147
150
|
disabled,
|
148
|
-
callback
|
149
|
-
shouldRenderFormState(value, _localProxyFormState.current) &&
|
150
|
-
updateFormState(Object.assign(Object.assign({}, control._formState), value)),
|
151
|
+
callback,
|
151
152
|
subject: control._subjects.state,
|
152
153
|
});
|
153
154
|
return getProxyFormState(formState, control._proxyFormState, _localProxyFormState.current, false);
|
@@ -185,19 +186,22 @@ function useWatch(props) {
|
|
185
186
|
const { control = methods.control, name, defaultValue, disabled, exact, } = props || {};
|
186
187
|
const _name = React.useRef(name);
|
187
188
|
_name.current = name;
|
189
|
+
const callback = React.useCallback((formState) => {
|
190
|
+
if (shouldSubscribeByName(_name.current, formState.name, exact)) {
|
191
|
+
const fieldValues = generateWatchOutput(_name.current, control._names, formState.values || control._formValues);
|
192
|
+
updateValue(isUndefined(_name.current) ||
|
193
|
+
(isObject(fieldValues) && !objectHasFunction(fieldValues))
|
194
|
+
? Object.assign({}, fieldValues) : Array.isArray(fieldValues)
|
195
|
+
? [...fieldValues]
|
196
|
+
: isUndefined(fieldValues)
|
197
|
+
? defaultValue
|
198
|
+
: fieldValues);
|
199
|
+
}
|
200
|
+
}, [control, exact, defaultValue]);
|
188
201
|
useSubscribe({
|
189
202
|
disabled,
|
190
203
|
subject: control._subjects.watch,
|
191
|
-
callback
|
192
|
-
if (shouldSubscribeByName(_name.current, formState.name, exact)) {
|
193
|
-
const fieldValues = generateWatchOutput(_name.current, control._names, formState.values || control._formValues);
|
194
|
-
updateValue(isUndefined(_name.current) ||
|
195
|
-
(isObject(fieldValues) && !objectHasFunction(fieldValues))
|
196
|
-
? Object.assign({}, fieldValues) : Array.isArray(fieldValues)
|
197
|
-
? [...fieldValues]
|
198
|
-
: fieldValues);
|
199
|
-
}
|
200
|
-
},
|
204
|
+
callback,
|
201
205
|
});
|
202
206
|
const [value, updateValue] = React.useState(isUndefined(defaultValue)
|
203
207
|
? control._getWatch(name)
|
@@ -339,6 +343,14 @@ const focusFieldBy = (fields, callback, fieldsNames) => {
|
|
339
343
|
}
|
340
344
|
};
|
341
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
|
+
|
342
354
|
var getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)
|
343
355
|
? options.focusName ||
|
344
356
|
`${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`
|
@@ -350,23 +362,8 @@ var isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&
|
|
350
362
|
[..._names.watch].some((watchName) => name.startsWith(watchName) &&
|
351
363
|
/^\.\w+/.test(name.slice(watchName.length))));
|
352
364
|
|
353
|
-
var mapCurrentIds = (values, _fieldIds, keyName) => values.map((value, index) => {
|
354
|
-
const output = _fieldIds.current[index];
|
355
|
-
return Object.assign(Object.assign({}, value), (output ? { [keyName]: output[keyName] } : {}));
|
356
|
-
});
|
357
|
-
|
358
|
-
var generateId = () => {
|
359
|
-
const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;
|
360
|
-
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
361
|
-
const r = (Math.random() * 16 + d) % 16 | 0;
|
362
|
-
return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);
|
363
|
-
});
|
364
|
-
};
|
365
|
-
|
366
|
-
var mapIds = (values = [], keyName) => values.map((value) => (Object.assign(Object.assign({}, (value[keyName] ? {} : { [keyName]: generateId() })), value)));
|
367
|
-
|
368
365
|
function append(data, value) {
|
369
|
-
return [...
|
366
|
+
return [...data, ...convertToArrayPayload(value)];
|
370
367
|
}
|
371
368
|
|
372
369
|
function cloneObject(data) {
|
@@ -415,8 +412,6 @@ var moveArrayAt = (data, from, to) => {
|
|
415
412
|
return [];
|
416
413
|
};
|
417
414
|
|
418
|
-
var omitKeys = (fields, keyName) => fields.map((field = {}) => omit(field, keyName));
|
419
|
-
|
420
415
|
function prepend(data, value) {
|
421
416
|
return [...convertToArrayPayload(value), ...convertToArrayPayload(data)];
|
422
417
|
}
|
@@ -446,100 +441,110 @@ var updateAt = (fieldValues, index, value) => {
|
|
446
441
|
const useFieldArray = (props) => {
|
447
442
|
const methods = useFormContext();
|
448
443
|
const { control = methods.control, name, keyName = 'id', shouldUnregister, } = props;
|
449
|
-
const [fields, setFields] = React.useState(
|
444
|
+
const [fields, setFields] = React.useState(control._getFieldArray(name));
|
445
|
+
const ids = React.useRef(control._getFieldArray(name).map(generateId));
|
450
446
|
const _fieldIds = React.useRef(fields);
|
451
447
|
const _name = React.useRef(name);
|
452
448
|
const _actioned = React.useRef(false);
|
453
449
|
_name.current = name;
|
454
450
|
_fieldIds.current = fields;
|
455
451
|
control._names.array.add(name);
|
452
|
+
const callback = React.useCallback(({ values, name: fieldArrayName }) => {
|
453
|
+
if (fieldArrayName === _name.current || !fieldArrayName) {
|
454
|
+
const fieldValues = get(values, _name.current, []);
|
455
|
+
setFields(fieldValues);
|
456
|
+
ids.current = fieldValues.map(generateId);
|
457
|
+
}
|
458
|
+
}, []);
|
456
459
|
useSubscribe({
|
457
|
-
callback
|
458
|
-
if (fieldArrayName === _name.current || !fieldArrayName) {
|
459
|
-
setFields(mapIds(get(values, _name.current), keyName));
|
460
|
-
}
|
461
|
-
},
|
460
|
+
callback,
|
462
461
|
subject: control._subjects.array,
|
463
462
|
});
|
464
|
-
const updateValues = React.useCallback((
|
465
|
-
const updatedFieldArrayValues = omitKeys(updatedFieldArrayValuesWithKey, keyName);
|
463
|
+
const updateValues = React.useCallback((updatedFieldArrayValues) => {
|
466
464
|
_actioned.current = true;
|
467
465
|
set(control._formValues, name, updatedFieldArrayValues);
|
468
|
-
|
469
|
-
}, [control, name, keyName]);
|
466
|
+
}, [control, name]);
|
470
467
|
const append$1 = (value, options) => {
|
471
468
|
const appendValue = convertToArrayPayload(cloneObject(value));
|
472
|
-
const
|
473
|
-
|
474
|
-
|
475
|
-
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);
|
476
474
|
control._updateFieldArray(name, append, {
|
477
475
|
argA: fillEmptyArray(value),
|
478
|
-
},
|
476
|
+
}, updatedFieldArrayValues);
|
479
477
|
};
|
480
478
|
const prepend$1 = (value, options) => {
|
481
|
-
const
|
482
|
-
const
|
479
|
+
const prependValue = convertToArrayPayload(cloneObject(value));
|
480
|
+
const updatedFieldArrayValues = prepend(control._getFieldArray(name), prependValue);
|
483
481
|
control._names.focus = getFocusFieldName(name, 0, options);
|
484
|
-
|
482
|
+
ids.current = prepend(ids.current, prependValue.map(generateId));
|
483
|
+
setFields(updatedFieldArrayValues);
|
484
|
+
updateValues(updatedFieldArrayValues);
|
485
485
|
control._updateFieldArray(name, prepend, {
|
486
486
|
argA: fillEmptyArray(value),
|
487
|
-
},
|
487
|
+
}, updatedFieldArrayValues);
|
488
488
|
};
|
489
489
|
const remove = (index) => {
|
490
|
-
const
|
491
|
-
|
492
|
-
setFields(
|
490
|
+
const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);
|
491
|
+
ids.current = removeArrayAt(ids.current, index);
|
492
|
+
setFields(updatedFieldArrayValues);
|
493
|
+
updateValues(updatedFieldArrayValues);
|
493
494
|
control._updateFieldArray(name, removeArrayAt, {
|
494
495
|
argA: index,
|
495
|
-
},
|
496
|
+
}, updatedFieldArrayValues);
|
496
497
|
};
|
497
498
|
const insert$1 = (index, value, options) => {
|
498
|
-
const
|
499
|
-
const
|
499
|
+
const insertValue = convertToArrayPayload(cloneObject(value));
|
500
|
+
const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);
|
501
|
+
updateValues(updatedFieldArrayValues);
|
500
502
|
control._names.focus = getFocusFieldName(name, index, options);
|
501
|
-
|
503
|
+
ids.current = insert(ids.current, index, insertValue.map(generateId));
|
504
|
+
setFields(updatedFieldArrayValues);
|
502
505
|
control._updateFieldArray(name, insert, {
|
503
506
|
argA: index,
|
504
507
|
argB: fillEmptyArray(value),
|
505
|
-
},
|
508
|
+
}, updatedFieldArrayValues);
|
506
509
|
};
|
507
510
|
const swap = (indexA, indexB) => {
|
508
|
-
const
|
509
|
-
swapArrayAt(
|
510
|
-
|
511
|
-
setFields(
|
511
|
+
const updatedFieldArrayValues = control._getFieldArray(name);
|
512
|
+
swapArrayAt(updatedFieldArrayValues, indexA, indexB);
|
513
|
+
swapArrayAt(ids.current, indexA, indexB);
|
514
|
+
setFields(updatedFieldArrayValues);
|
515
|
+
updateValues(updatedFieldArrayValues);
|
512
516
|
control._updateFieldArray(name, swapArrayAt, {
|
513
517
|
argA: indexA,
|
514
518
|
argB: indexB,
|
515
|
-
},
|
519
|
+
}, updatedFieldArrayValues, false);
|
516
520
|
};
|
517
521
|
const move = (from, to) => {
|
518
|
-
const
|
519
|
-
moveArrayAt(
|
520
|
-
|
521
|
-
setFields(
|
522
|
+
const updatedFieldArrayValues = control._getFieldArray(name);
|
523
|
+
moveArrayAt(updatedFieldArrayValues, from, to);
|
524
|
+
moveArrayAt(ids.current, from, to);
|
525
|
+
setFields(updatedFieldArrayValues);
|
526
|
+
updateValues(updatedFieldArrayValues);
|
522
527
|
control._updateFieldArray(name, moveArrayAt, {
|
523
528
|
argA: from,
|
524
529
|
argB: to,
|
525
|
-
},
|
530
|
+
}, updatedFieldArrayValues, false);
|
526
531
|
};
|
527
532
|
const update = (index, value) => {
|
528
|
-
const
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
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);
|
533
537
|
control._updateFieldArray(name, updateAt, {
|
534
538
|
argA: index,
|
535
539
|
argB: value,
|
536
|
-
},
|
540
|
+
}, updatedFieldArrayValues, true, false, false);
|
537
541
|
};
|
538
542
|
const replace = (value) => {
|
539
|
-
const
|
540
|
-
|
541
|
-
|
542
|
-
|
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);
|
543
548
|
};
|
544
549
|
React.useEffect(() => {
|
545
550
|
control._stateFlags.action = false;
|
@@ -563,25 +568,24 @@ const useFieldArray = (props) => {
|
|
563
568
|
focusFieldBy(control._fields, (key) => key.startsWith(control._names.focus));
|
564
569
|
control._names.focus = '';
|
565
570
|
control._proxyFormState.isValid && control._updateValid();
|
566
|
-
}, [fields, name, control
|
571
|
+
}, [fields, name, control]);
|
567
572
|
React.useEffect(() => {
|
568
573
|
!get(control._formValues, name) && set(control._formValues, name, []);
|
569
574
|
return () => {
|
570
|
-
|
575
|
+
(control._options.shouldUnregister || shouldUnregister) &&
|
571
576
|
control.unregister(name);
|
572
|
-
}
|
573
577
|
};
|
574
578
|
}, [name, control, keyName, shouldUnregister]);
|
575
579
|
return {
|
576
|
-
swap: React.useCallback(swap, [updateValues, name, control
|
577
|
-
move: React.useCallback(move, [updateValues, name, control
|
578
|
-
prepend: React.useCallback(prepend$1, [updateValues, name, control
|
579
|
-
append: React.useCallback(append$1, [updateValues, name, control
|
580
|
-
remove: React.useCallback(remove, [updateValues, name, control
|
581
|
-
insert: React.useCallback(insert$1, [updateValues, name, control
|
582
|
-
update: React.useCallback(update, [updateValues, name, control
|
583
|
-
replace: React.useCallback(replace, [updateValues, name, control
|
584
|
-
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]),
|
585
589
|
};
|
586
590
|
};
|
587
591
|
|
@@ -670,7 +674,7 @@ var isWeb = typeof window !== 'undefined' &&
|
|
670
674
|
typeof window.HTMLElement !== 'undefined' &&
|
671
675
|
typeof document !== 'undefined';
|
672
676
|
|
673
|
-
var live = (ref) => isHTMLElement(ref) &&
|
677
|
+
var live = (ref) => isHTMLElement(ref) && ref.isConnected;
|
674
678
|
|
675
679
|
function baseGet(object, updatePath) {
|
676
680
|
const length = updatePath.slice(0, -1).length;
|
@@ -1136,13 +1140,13 @@ function createFormControl(props = {}) {
|
|
1136
1140
|
}
|
1137
1141
|
return isValid;
|
1138
1142
|
};
|
1139
|
-
const _updateFieldArray = (name, method, args, values = [], shouldSetValues = true, shouldSetFields = true) => {
|
1143
|
+
const _updateFieldArray = (name, method, args, values = [], shouldSetValues = true, shouldSetFields = true, shouldSetError = true) => {
|
1140
1144
|
_stateFlags.action = true;
|
1141
1145
|
if (shouldSetFields && get(_fields, name)) {
|
1142
1146
|
const fieldValues = method(get(_fields, name), args.argA, args.argB);
|
1143
1147
|
shouldSetValues && set(_fields, name, fieldValues);
|
1144
1148
|
}
|
1145
|
-
if (Array.isArray(get(_formState.errors, name))) {
|
1149
|
+
if (shouldSetError && Array.isArray(get(_formState.errors, name))) {
|
1146
1150
|
const errors = method(get(_formState.errors, name), args.argA, args.argB);
|
1147
1151
|
shouldSetValues && set(_formState.errors, name, errors);
|
1148
1152
|
unsetEmptyArray(_formState.errors, name);
|
@@ -1167,17 +1171,17 @@ function createFormControl(props = {}) {
|
|
1167
1171
|
_subjects.state.next({
|
1168
1172
|
errors: _formState.errors,
|
1169
1173
|
}));
|
1170
|
-
const updateValidAndValue = (name, shouldSkipSetValueAs, ref) => {
|
1174
|
+
const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {
|
1171
1175
|
const field = get(_fields, name);
|
1172
1176
|
if (field) {
|
1173
|
-
const defaultValue = get(_formValues, name, get(_defaultValues, name));
|
1177
|
+
const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);
|
1174
1178
|
isUndefined(defaultValue) ||
|
1175
1179
|
(ref && ref.defaultChecked) ||
|
1176
1180
|
shouldSkipSetValueAs
|
1177
1181
|
? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))
|
1178
1182
|
: setFieldValue(name, defaultValue);
|
1183
|
+
_stateFlags.mount && _updateValid();
|
1179
1184
|
}
|
1180
|
-
_stateFlags.mount && _updateValid();
|
1181
1185
|
};
|
1182
1186
|
const updateTouchAndDirty = (name, fieldValue, isCurrentTouched, shouldRender = true) => {
|
1183
1187
|
let isFieldDirty = false;
|
@@ -1318,7 +1322,8 @@ function createFormControl(props = {}) {
|
|
1318
1322
|
if (field) {
|
1319
1323
|
const fieldReference = field._f;
|
1320
1324
|
if (fieldReference) {
|
1321
|
-
|
1325
|
+
!fieldReference.disabled &&
|
1326
|
+
set(_formValues, name, getFieldValueAs(value, fieldReference));
|
1322
1327
|
fieldValue =
|
1323
1328
|
isWeb && isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)
|
1324
1329
|
? ''
|
@@ -1332,7 +1337,8 @@ function createFormControl(props = {}) {
|
|
1332
1337
|
? fieldReference.refs.forEach((checkboxRef) => (checkboxRef.checked = Array.isArray(fieldValue)
|
1333
1338
|
? !!fieldValue.find((data) => data === checkboxRef.value)
|
1334
1339
|
: fieldValue === checkboxRef.value))
|
1335
|
-
:
|
1340
|
+
: fieldReference.refs[0] &&
|
1341
|
+
(fieldReference.refs[0].checked = !!fieldValue);
|
1336
1342
|
}
|
1337
1343
|
else {
|
1338
1344
|
fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));
|
@@ -1539,20 +1545,18 @@ function createFormControl(props = {}) {
|
|
1539
1545
|
};
|
1540
1546
|
const register = (name, options = {}) => {
|
1541
1547
|
let field = get(_fields, name);
|
1548
|
+
const disabledIsDefined = isBoolean(options.disabled);
|
1542
1549
|
set(_fields, name, {
|
1543
1550
|
_f: Object.assign(Object.assign(Object.assign({}, (field && field._f ? field._f : { ref: { name } })), { name, mount: true }), options),
|
1544
1551
|
});
|
1545
1552
|
_names.mount.add(name);
|
1546
|
-
!isUndefined(options.value) &&
|
1547
|
-
!options.disabled &&
|
1548
|
-
set(_formValues, name, get(_formValues, name, options.value));
|
1549
1553
|
field
|
1550
|
-
?
|
1554
|
+
? disabledIsDefined &&
|
1551
1555
|
set(_formValues, name, options.disabled
|
1552
1556
|
? undefined
|
1553
1557
|
: get(_formValues, name, getFieldValue(field._f)))
|
1554
|
-
: updateValidAndValue(name, true);
|
1555
|
-
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
|
1556
1560
|
? {
|
1557
1561
|
required: !!options.required,
|
1558
1562
|
min: getRuleValue(options.min),
|
@@ -1572,16 +1576,21 @@ function createFormControl(props = {}) {
|
|
1572
1576
|
: ref
|
1573
1577
|
: ref;
|
1574
1578
|
const radioOrCheckbox = isRadioOrCheckbox(fieldRef);
|
1575
|
-
|
1576
|
-
|
1577
|
-
|
1579
|
+
const refs = field._f.refs || [];
|
1580
|
+
if (radioOrCheckbox
|
1581
|
+
? refs.find((option) => option === fieldRef)
|
1582
|
+
: fieldRef === field._f.ref) {
|
1578
1583
|
return;
|
1579
1584
|
}
|
1580
1585
|
set(_fields, name, {
|
1581
|
-
_f: radioOrCheckbox
|
1582
|
-
?
|
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 })),
|
1583
1592
|
});
|
1584
|
-
|
1593
|
+
updateValidAndValue(name, false, undefined, fieldRef);
|
1585
1594
|
}
|
1586
1595
|
else {
|
1587
1596
|
field = get(_fields, name, {});
|
@@ -1840,14 +1849,15 @@ function useForm(props = {}) {
|
|
1840
1849
|
_formControl.current = Object.assign(Object.assign({}, createFormControl(props)), { formState });
|
1841
1850
|
}
|
1842
1851
|
const control = _formControl.current.control;
|
1852
|
+
const callback = React.useCallback((value) => {
|
1853
|
+
if (shouldRenderFormState(value, control._proxyFormState, true)) {
|
1854
|
+
control._formState = Object.assign(Object.assign({}, control._formState), value);
|
1855
|
+
updateFormState(Object.assign({}, control._formState));
|
1856
|
+
}
|
1857
|
+
}, [control]);
|
1843
1858
|
useSubscribe({
|
1844
1859
|
subject: control._subjects.state,
|
1845
|
-
callback
|
1846
|
-
if (shouldRenderFormState(value, control._proxyFormState, true)) {
|
1847
|
-
control._formState = Object.assign(Object.assign({}, control._formState), value);
|
1848
|
-
updateFormState(Object.assign({}, control._formState));
|
1849
|
-
}
|
1850
|
-
},
|
1860
|
+
callback,
|
1851
1861
|
});
|
1852
1862
|
React.useEffect(() => {
|
1853
1863
|
if (!control._stateFlags.mount) {
|