react-hook-form 7.22.2 → 7.23.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/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 +69 -61
- 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/mapCurrentIds.d.ts +2 -1
- package/dist/logic/mapCurrentIds.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 +7 -5
- 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 +1 -0
- 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 +1 -0
- 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 +1 -0
- package/dist/utils/update.d.ts.map +1 -0
- package/package.json +22 -15
- package/CHANGELOG.md +0 -1311
- 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
@@ -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)
|
@@ -235,14 +239,11 @@ function useController(props) {
|
|
235
239
|
updateMounted(name, true);
|
236
240
|
return () => {
|
237
241
|
const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;
|
238
|
-
|
242
|
+
isArrayField
|
239
243
|
? _shouldUnregisterField && !control._stateFlags.action
|
240
|
-
: _shouldUnregisterField
|
241
|
-
|
242
|
-
|
243
|
-
else {
|
244
|
-
updateMounted(name, false);
|
245
|
-
}
|
244
|
+
: _shouldUnregisterField
|
245
|
+
? control.unregister(name)
|
246
|
+
: updateMounted(name, false);
|
246
247
|
};
|
247
248
|
}, [name, control, isArrayField, shouldUnregister]);
|
248
249
|
return {
|
@@ -353,11 +354,6 @@ var isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&
|
|
353
354
|
[..._names.watch].some((watchName) => name.startsWith(watchName) &&
|
354
355
|
/^\.\w+/.test(name.slice(watchName.length))));
|
355
356
|
|
356
|
-
var mapCurrentIds = (values, _fieldIds, keyName) => values.map((value, index) => {
|
357
|
-
const output = _fieldIds.current[index];
|
358
|
-
return Object.assign(Object.assign({}, value), (output ? { [keyName]: output[keyName] } : {}));
|
359
|
-
});
|
360
|
-
|
361
357
|
var generateId = () => {
|
362
358
|
const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;
|
363
359
|
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
@@ -366,7 +362,9 @@ var generateId = () => {
|
|
366
362
|
});
|
367
363
|
};
|
368
364
|
|
369
|
-
var
|
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() })));
|
370
368
|
|
371
369
|
function append(data, value) {
|
372
370
|
return [...convertToArrayPayload(data), ...convertToArrayPayload(value)];
|
@@ -449,31 +447,36 @@ var updateAt = (fieldValues, index, value) => {
|
|
449
447
|
const useFieldArray = (props) => {
|
450
448
|
const methods = useFormContext();
|
451
449
|
const { control = methods.control, name, keyName = 'id', shouldUnregister, } = props;
|
452
|
-
const
|
450
|
+
const _shouldKeepKeyName = React.useRef(get(control._getFieldArray(name)[0], keyName));
|
451
|
+
const [fields, setFields] = React.useState(mapCurrentIds(control._getFieldArray(name), keyName));
|
453
452
|
const _fieldIds = React.useRef(fields);
|
454
453
|
const _name = React.useRef(name);
|
455
454
|
const _actioned = React.useRef(false);
|
456
455
|
_name.current = name;
|
457
456
|
_fieldIds.current = fields;
|
458
457
|
control._names.array.add(name);
|
458
|
+
const callback = React.useCallback(({ values, name: fieldArrayName }) => {
|
459
|
+
if (fieldArrayName === _name.current || !fieldArrayName) {
|
460
|
+
setFields(mapCurrentIds(get(values, _name.current, []), keyName));
|
461
|
+
}
|
462
|
+
}, [keyName]);
|
459
463
|
useSubscribe({
|
460
|
-
callback
|
461
|
-
if (fieldArrayName === _name.current || !fieldArrayName) {
|
462
|
-
setFields(mapIds(get(values, _name.current), keyName));
|
463
|
-
}
|
464
|
-
},
|
464
|
+
callback,
|
465
465
|
subject: control._subjects.array,
|
466
466
|
});
|
467
|
-
const updateValues = React.useCallback((updatedFieldArrayValuesWithKey) => {
|
468
|
-
const updatedFieldArrayValues =
|
467
|
+
const updateValues = React.useCallback((updatedFieldArrayValuesWithKey, hasKey = _shouldKeepKeyName.current) => {
|
468
|
+
const updatedFieldArrayValues = hasKey
|
469
|
+
? updatedFieldArrayValuesWithKey
|
470
|
+
: omitKeys(updatedFieldArrayValuesWithKey, keyName);
|
471
|
+
hasKey && (_shouldKeepKeyName.current = true);
|
469
472
|
_actioned.current = true;
|
470
473
|
set(control._formValues, name, updatedFieldArrayValues);
|
471
474
|
return updatedFieldArrayValues;
|
472
475
|
}, [control, name, keyName]);
|
473
476
|
const append$1 = (value, options) => {
|
474
477
|
const appendValue = convertToArrayPayload(cloneObject(value));
|
475
|
-
const updatedFieldArrayValuesWithKey = append(mapCurrentIds(control._getFieldArray(name),
|
476
|
-
const fieldArrayValues = updateValues(updatedFieldArrayValuesWithKey);
|
478
|
+
const updatedFieldArrayValuesWithKey = append(mapCurrentIds(control._getFieldArray(name), keyName, _fieldIds), mapCurrentIds(appendValue, keyName));
|
479
|
+
const fieldArrayValues = updateValues(updatedFieldArrayValuesWithKey, appendValue[0][keyName]);
|
477
480
|
control._names.focus = getFocusFieldName(name, fieldArrayValues.length - 1, options);
|
478
481
|
setFields(updatedFieldArrayValuesWithKey);
|
479
482
|
control._updateFieldArray(name, append, {
|
@@ -481,8 +484,9 @@ const useFieldArray = (props) => {
|
|
481
484
|
}, fieldArrayValues);
|
482
485
|
};
|
483
486
|
const prepend$1 = (value, options) => {
|
484
|
-
const
|
485
|
-
const
|
487
|
+
const prependValue = convertToArrayPayload(cloneObject(value));
|
488
|
+
const updatedFieldArrayValuesWithKey = prepend(mapCurrentIds(control._getFieldArray(name), keyName, _fieldIds), mapCurrentIds(prependValue, keyName));
|
489
|
+
const fieldArrayValues = updateValues(updatedFieldArrayValuesWithKey, prependValue[0][keyName]);
|
486
490
|
control._names.focus = getFocusFieldName(name, 0, options);
|
487
491
|
setFields(updatedFieldArrayValuesWithKey);
|
488
492
|
control._updateFieldArray(name, prepend, {
|
@@ -490,7 +494,7 @@ const useFieldArray = (props) => {
|
|
490
494
|
}, fieldArrayValues);
|
491
495
|
};
|
492
496
|
const remove = (index) => {
|
493
|
-
const updatedFieldArrayValuesWithKey = removeArrayAt(mapCurrentIds(control._getFieldArray(name),
|
497
|
+
const updatedFieldArrayValuesWithKey = removeArrayAt(mapCurrentIds(control._getFieldArray(name), keyName, _fieldIds), index);
|
494
498
|
const fieldArrayValues = updateValues(updatedFieldArrayValuesWithKey);
|
495
499
|
setFields(updatedFieldArrayValuesWithKey);
|
496
500
|
control._updateFieldArray(name, removeArrayAt, {
|
@@ -498,8 +502,9 @@ const useFieldArray = (props) => {
|
|
498
502
|
}, fieldArrayValues);
|
499
503
|
};
|
500
504
|
const insert$1 = (index, value, options) => {
|
501
|
-
const
|
502
|
-
const
|
505
|
+
const insertValue = convertToArrayPayload(cloneObject(value));
|
506
|
+
const updatedFieldArrayValuesWithKey = insert(mapCurrentIds(control._getFieldArray(name), keyName, _fieldIds), index, mapCurrentIds(insertValue, keyName));
|
507
|
+
const fieldArrayValues = updateValues(updatedFieldArrayValuesWithKey, insertValue[0][keyName]);
|
503
508
|
control._names.focus = getFocusFieldName(name, index, options);
|
504
509
|
setFields(updatedFieldArrayValuesWithKey);
|
505
510
|
control._updateFieldArray(name, insert, {
|
@@ -508,7 +513,7 @@ const useFieldArray = (props) => {
|
|
508
513
|
}, fieldArrayValues);
|
509
514
|
};
|
510
515
|
const swap = (indexA, indexB) => {
|
511
|
-
const updatedFieldArrayValuesWithKey = mapCurrentIds(control._getFieldArray(name),
|
516
|
+
const updatedFieldArrayValuesWithKey = mapCurrentIds(control._getFieldArray(name), keyName, _fieldIds);
|
512
517
|
swapArrayAt(updatedFieldArrayValuesWithKey, indexA, indexB);
|
513
518
|
const fieldArrayValues = updateValues(updatedFieldArrayValuesWithKey);
|
514
519
|
setFields(updatedFieldArrayValuesWithKey);
|
@@ -518,7 +523,7 @@ const useFieldArray = (props) => {
|
|
518
523
|
}, fieldArrayValues, false);
|
519
524
|
};
|
520
525
|
const move = (from, to) => {
|
521
|
-
const updatedFieldArrayValuesWithKey = mapCurrentIds(control._getFieldArray(name),
|
526
|
+
const updatedFieldArrayValuesWithKey = mapCurrentIds(control._getFieldArray(name), keyName, _fieldIds);
|
522
527
|
moveArrayAt(updatedFieldArrayValuesWithKey, from, to);
|
523
528
|
const fieldArrayValues = updateValues(updatedFieldArrayValuesWithKey);
|
524
529
|
setFields(updatedFieldArrayValuesWithKey);
|
@@ -528,21 +533,22 @@ const useFieldArray = (props) => {
|
|
528
533
|
}, fieldArrayValues, false);
|
529
534
|
};
|
530
535
|
const update = (index, value) => {
|
531
|
-
const updatedFieldArrayValuesWithKey = mapCurrentIds(control._getFieldArray(name),
|
536
|
+
const updatedFieldArrayValuesWithKey = mapCurrentIds(control._getFieldArray(name), keyName, _fieldIds);
|
532
537
|
const updatedFieldArrayValues = updateAt(updatedFieldArrayValuesWithKey, index, value);
|
533
|
-
_fieldIds.current =
|
534
|
-
const fieldArrayValues = updateValues(_fieldIds.current);
|
538
|
+
_fieldIds.current = mapCurrentIds(updatedFieldArrayValues, keyName);
|
539
|
+
const fieldArrayValues = updateValues(_fieldIds.current, get(value, keyName));
|
535
540
|
setFields(_fieldIds.current);
|
536
541
|
control._updateFieldArray(name, updateAt, {
|
537
542
|
argA: index,
|
538
543
|
argB: value,
|
539
|
-
}, fieldArrayValues, true, false);
|
544
|
+
}, fieldArrayValues, true, false, false);
|
540
545
|
};
|
541
546
|
const replace = (value) => {
|
542
|
-
const
|
543
|
-
const
|
547
|
+
const updateValue = convertToArrayPayload(value);
|
548
|
+
const updatedFieldArrayValuesWithKey = mapCurrentIds(updateValue, keyName);
|
549
|
+
const fieldArrayValues = updateValues(updatedFieldArrayValuesWithKey, updateValue[0][keyName]);
|
544
550
|
setFields(updatedFieldArrayValuesWithKey);
|
545
|
-
control._updateFieldArray(name, () => updatedFieldArrayValuesWithKey, {}, fieldArrayValues, true, false);
|
551
|
+
control._updateFieldArray(name, () => updatedFieldArrayValuesWithKey, {}, fieldArrayValues, true, false, false);
|
546
552
|
};
|
547
553
|
React.useEffect(() => {
|
548
554
|
control._stateFlags.action = false;
|
@@ -1139,13 +1145,13 @@ function createFormControl(props = {}) {
|
|
1139
1145
|
}
|
1140
1146
|
return isValid;
|
1141
1147
|
};
|
1142
|
-
const _updateFieldArray = (name, method, args, values = [], shouldSetValues = true, shouldSetFields = true) => {
|
1148
|
+
const _updateFieldArray = (name, method, args, values = [], shouldSetValues = true, shouldSetFields = true, shouldSetError = true) => {
|
1143
1149
|
_stateFlags.action = true;
|
1144
1150
|
if (shouldSetFields && get(_fields, name)) {
|
1145
1151
|
const fieldValues = method(get(_fields, name), args.argA, args.argB);
|
1146
1152
|
shouldSetValues && set(_fields, name, fieldValues);
|
1147
1153
|
}
|
1148
|
-
if (Array.isArray(get(_formState.errors, name))) {
|
1154
|
+
if (shouldSetError && Array.isArray(get(_formState.errors, name))) {
|
1149
1155
|
const errors = method(get(_formState.errors, name), args.argA, args.argB);
|
1150
1156
|
shouldSetValues && set(_formState.errors, name, errors);
|
1151
1157
|
unsetEmptyArray(_formState.errors, name);
|
@@ -1179,8 +1185,8 @@ function createFormControl(props = {}) {
|
|
1179
1185
|
shouldSkipSetValueAs
|
1180
1186
|
? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))
|
1181
1187
|
: setFieldValue(name, defaultValue);
|
1188
|
+
_stateFlags.mount && _updateValid();
|
1182
1189
|
}
|
1183
|
-
_stateFlags.mount && _updateValid();
|
1184
1190
|
};
|
1185
1191
|
const updateTouchAndDirty = (name, fieldValue, isCurrentTouched, shouldRender = true) => {
|
1186
1192
|
let isFieldDirty = false;
|
@@ -1321,7 +1327,8 @@ function createFormControl(props = {}) {
|
|
1321
1327
|
if (field) {
|
1322
1328
|
const fieldReference = field._f;
|
1323
1329
|
if (fieldReference) {
|
1324
|
-
|
1330
|
+
!fieldReference.disabled &&
|
1331
|
+
set(_formValues, name, getFieldValueAs(value, fieldReference));
|
1325
1332
|
fieldValue =
|
1326
1333
|
isWeb && isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)
|
1327
1334
|
? ''
|
@@ -1584,7 +1591,7 @@ function createFormControl(props = {}) {
|
|
1584
1591
|
_f: radioOrCheckbox
|
1585
1592
|
? Object.assign(Object.assign({}, field._f), { refs: [...compact(field._f.refs).filter(live), fieldRef], ref: { type: fieldRef.type, name } }) : Object.assign(Object.assign({}, field._f), { ref: fieldRef }),
|
1586
1593
|
});
|
1587
|
-
|
1594
|
+
updateValidAndValue(name, false, fieldRef);
|
1588
1595
|
}
|
1589
1596
|
else {
|
1590
1597
|
field = get(_fields, name, {});
|
@@ -1843,14 +1850,15 @@ function useForm(props = {}) {
|
|
1843
1850
|
_formControl.current = Object.assign(Object.assign({}, createFormControl(props)), { formState });
|
1844
1851
|
}
|
1845
1852
|
const control = _formControl.current.control;
|
1853
|
+
const callback = React.useCallback((value) => {
|
1854
|
+
if (shouldRenderFormState(value, control._proxyFormState, true)) {
|
1855
|
+
control._formState = Object.assign(Object.assign({}, control._formState), value);
|
1856
|
+
updateFormState(Object.assign({}, control._formState));
|
1857
|
+
}
|
1858
|
+
}, [control]);
|
1846
1859
|
useSubscribe({
|
1847
1860
|
subject: control._subjects.state,
|
1848
|
-
callback
|
1849
|
-
if (shouldRenderFormState(value, control._proxyFormState, true)) {
|
1850
|
-
control._formState = Object.assign(Object.assign({}, control._formState), value);
|
1851
|
-
updateFormState(Object.assign({}, control._formState));
|
1852
|
-
}
|
1853
|
-
},
|
1861
|
+
callback,
|
1854
1862
|
});
|
1855
1863
|
React.useEffect(() => {
|
1856
1864
|
if (!control._stateFlags.mount) {
|