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.
Files changed (206) hide show
  1. package/README.md +6 -0
  2. package/dist/constants.d.ts +1 -0
  3. package/dist/constants.d.ts.map +1 -0
  4. package/dist/controller.d.ts +1 -0
  5. package/dist/controller.d.ts.map +1 -0
  6. package/dist/index.cjs.js +1 -1
  7. package/dist/index.cjs.js.map +1 -1
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.esm.mjs +69 -61
  11. package/dist/index.esm.mjs.map +1 -1
  12. package/dist/index.umd.js +1 -1
  13. package/dist/index.umd.js.map +1 -1
  14. package/dist/logic/appendErrors.d.ts +1 -0
  15. package/dist/logic/appendErrors.d.ts.map +1 -0
  16. package/dist/logic/createFormControl.d.ts +1 -0
  17. package/dist/logic/createFormControl.d.ts.map +1 -0
  18. package/dist/logic/focusFieldBy.d.ts +1 -0
  19. package/dist/logic/focusFieldBy.d.ts.map +1 -0
  20. package/dist/logic/generateId.d.ts +1 -0
  21. package/dist/logic/generateId.d.ts.map +1 -0
  22. package/dist/logic/generateWatchOutput.d.ts +1 -0
  23. package/dist/logic/generateWatchOutput.d.ts.map +1 -0
  24. package/dist/logic/getCheckboxValue.d.ts +1 -0
  25. package/dist/logic/getCheckboxValue.d.ts.map +1 -0
  26. package/dist/logic/getDirtyFields.d.ts +1 -0
  27. package/dist/logic/getDirtyFields.d.ts.map +1 -0
  28. package/dist/logic/getEventValue.d.ts +1 -0
  29. package/dist/logic/getEventValue.d.ts.map +1 -0
  30. package/dist/logic/getFieldValue.d.ts +1 -0
  31. package/dist/logic/getFieldValue.d.ts.map +1 -0
  32. package/dist/logic/getFieldValueAs.d.ts +1 -0
  33. package/dist/logic/getFieldValueAs.d.ts.map +1 -0
  34. package/dist/logic/getFocusFieldName.d.ts +1 -0
  35. package/dist/logic/getFocusFieldName.d.ts.map +1 -0
  36. package/dist/logic/getNodeParentName.d.ts +1 -0
  37. package/dist/logic/getNodeParentName.d.ts.map +1 -0
  38. package/dist/logic/getProxyFormState.d.ts +1 -0
  39. package/dist/logic/getProxyFormState.d.ts.map +1 -0
  40. package/dist/logic/getRadioValue.d.ts +1 -0
  41. package/dist/logic/getRadioValue.d.ts.map +1 -0
  42. package/dist/logic/getResolverOptions.d.ts +1 -0
  43. package/dist/logic/getResolverOptions.d.ts.map +1 -0
  44. package/dist/logic/getRuleValue.d.ts +1 -0
  45. package/dist/logic/getRuleValue.d.ts.map +1 -0
  46. package/dist/logic/getValidateError.d.ts +1 -0
  47. package/dist/logic/getValidateError.d.ts.map +1 -0
  48. package/dist/logic/getValueAndMessage.d.ts +1 -0
  49. package/dist/logic/getValueAndMessage.d.ts.map +1 -0
  50. package/dist/logic/hasValidation.d.ts +1 -0
  51. package/dist/logic/hasValidation.d.ts.map +1 -0
  52. package/dist/logic/index.d.ts +1 -0
  53. package/dist/logic/index.d.ts.map +1 -0
  54. package/dist/logic/isNameInFieldArray.d.ts +1 -0
  55. package/dist/logic/isNameInFieldArray.d.ts.map +1 -0
  56. package/dist/logic/isWatched.d.ts +1 -0
  57. package/dist/logic/isWatched.d.ts.map +1 -0
  58. package/dist/logic/mapCurrentIds.d.ts +2 -1
  59. package/dist/logic/mapCurrentIds.d.ts.map +1 -0
  60. package/dist/logic/schemaErrorLookup.d.ts +1 -0
  61. package/dist/logic/schemaErrorLookup.d.ts.map +1 -0
  62. package/dist/logic/setCustomValidty.d.ts +1 -0
  63. package/dist/logic/setCustomValidty.d.ts.map +1 -0
  64. package/dist/logic/shouldRenderFormState.d.ts +1 -0
  65. package/dist/logic/shouldRenderFormState.d.ts.map +1 -0
  66. package/dist/logic/shouldSubscribeByName.d.ts +1 -0
  67. package/dist/logic/shouldSubscribeByName.d.ts.map +1 -0
  68. package/dist/logic/skipValidation.d.ts +1 -0
  69. package/dist/logic/skipValidation.d.ts.map +1 -0
  70. package/dist/logic/unsetEmptyArray.d.ts +1 -0
  71. package/dist/logic/unsetEmptyArray.d.ts.map +1 -0
  72. package/dist/logic/validateField.d.ts +1 -0
  73. package/dist/logic/validateField.d.ts.map +1 -0
  74. package/dist/types/controller.d.ts +1 -0
  75. package/dist/types/controller.d.ts.map +1 -0
  76. package/dist/types/errors.d.ts +1 -0
  77. package/dist/types/errors.d.ts.map +1 -0
  78. package/dist/types/events.d.ts +1 -0
  79. package/dist/types/events.d.ts.map +1 -0
  80. package/dist/types/fieldArray.d.ts +2 -1
  81. package/dist/types/fieldArray.d.ts.map +1 -0
  82. package/dist/types/fields.d.ts +1 -0
  83. package/dist/types/fields.d.ts.map +1 -0
  84. package/dist/types/form.d.ts +7 -5
  85. package/dist/types/form.d.ts.map +1 -0
  86. package/dist/types/index.d.ts +2 -0
  87. package/dist/types/index.d.ts.map +1 -0
  88. package/dist/types/path/common.d.ts +316 -0
  89. package/dist/types/path/common.d.ts.map +1 -0
  90. package/dist/types/path/eager.d.ts +82 -0
  91. package/dist/types/path/eager.d.ts.map +1 -0
  92. package/dist/types/path/index.d.ts +4 -0
  93. package/dist/types/path/index.d.ts.map +1 -0
  94. package/dist/types/resolvers.d.ts +1 -0
  95. package/dist/types/resolvers.d.ts.map +1 -0
  96. package/dist/types/utils.d.ts +20 -25
  97. package/dist/types/utils.d.ts.map +1 -0
  98. package/dist/types/validator.d.ts +2 -1
  99. package/dist/types/validator.d.ts.map +1 -0
  100. package/dist/useController.d.ts +1 -0
  101. package/dist/useController.d.ts.map +1 -0
  102. package/dist/useFieldArray.d.ts +1 -0
  103. package/dist/useFieldArray.d.ts.map +1 -0
  104. package/dist/useForm.d.ts +1 -0
  105. package/dist/useForm.d.ts.map +1 -0
  106. package/dist/useFormContext.d.ts +1 -0
  107. package/dist/useFormContext.d.ts.map +1 -0
  108. package/dist/useFormState.d.ts +1 -0
  109. package/dist/useFormState.d.ts.map +1 -0
  110. package/dist/useSubscribe.d.ts +1 -0
  111. package/dist/useSubscribe.d.ts.map +1 -0
  112. package/dist/useWatch.d.ts +1 -0
  113. package/dist/useWatch.d.ts.map +1 -0
  114. package/dist/utils/append.d.ts +1 -0
  115. package/dist/utils/append.d.ts.map +1 -0
  116. package/dist/utils/cloneObject.d.ts +1 -0
  117. package/dist/utils/cloneObject.d.ts.map +1 -0
  118. package/dist/utils/compact.d.ts +1 -0
  119. package/dist/utils/compact.d.ts.map +1 -0
  120. package/dist/utils/convertToArrayPayload.d.ts +1 -0
  121. package/dist/utils/convertToArrayPayload.d.ts.map +1 -0
  122. package/dist/utils/createSubject.d.ts +1 -0
  123. package/dist/utils/createSubject.d.ts.map +1 -0
  124. package/dist/utils/deepEqual.d.ts +1 -0
  125. package/dist/utils/deepEqual.d.ts.map +1 -0
  126. package/dist/utils/deepMerge.d.ts +1 -0
  127. package/dist/utils/deepMerge.d.ts.map +1 -0
  128. package/dist/utils/fillBooleanArray.d.ts +1 -0
  129. package/dist/utils/fillBooleanArray.d.ts.map +1 -0
  130. package/dist/utils/fillEmptyArray.d.ts +1 -0
  131. package/dist/utils/fillEmptyArray.d.ts.map +1 -0
  132. package/dist/utils/get.d.ts +1 -0
  133. package/dist/utils/get.d.ts.map +1 -0
  134. package/dist/utils/getValidationModes.d.ts +1 -0
  135. package/dist/utils/getValidationModes.d.ts.map +1 -0
  136. package/dist/utils/index.d.ts +1 -0
  137. package/dist/utils/index.d.ts.map +1 -0
  138. package/dist/utils/insert.d.ts +1 -0
  139. package/dist/utils/insert.d.ts.map +1 -0
  140. package/dist/utils/isBoolean.d.ts +1 -0
  141. package/dist/utils/isBoolean.d.ts.map +1 -0
  142. package/dist/utils/isCheckBoxInput.d.ts +1 -0
  143. package/dist/utils/isCheckBoxInput.d.ts.map +1 -0
  144. package/dist/utils/isDateObject.d.ts +1 -0
  145. package/dist/utils/isDateObject.d.ts.map +1 -0
  146. package/dist/utils/isEmptyObject.d.ts +1 -0
  147. package/dist/utils/isEmptyObject.d.ts.map +1 -0
  148. package/dist/utils/isFileInput.d.ts +1 -0
  149. package/dist/utils/isFileInput.d.ts.map +1 -0
  150. package/dist/utils/isFunction.d.ts +1 -0
  151. package/dist/utils/isFunction.d.ts.map +1 -0
  152. package/dist/utils/isHTMLElement.d.ts +1 -0
  153. package/dist/utils/isHTMLElement.d.ts.map +1 -0
  154. package/dist/utils/isKey.d.ts +1 -0
  155. package/dist/utils/isKey.d.ts.map +1 -0
  156. package/dist/utils/isMessage.d.ts +1 -0
  157. package/dist/utils/isMessage.d.ts.map +1 -0
  158. package/dist/utils/isMultipleSelect.d.ts +1 -0
  159. package/dist/utils/isMultipleSelect.d.ts.map +1 -0
  160. package/dist/utils/isNullOrUndefined.d.ts +1 -0
  161. package/dist/utils/isNullOrUndefined.d.ts.map +1 -0
  162. package/dist/utils/isObject.d.ts +1 -0
  163. package/dist/utils/isObject.d.ts.map +1 -0
  164. package/dist/utils/isPrimitive.d.ts +1 -0
  165. package/dist/utils/isPrimitive.d.ts.map +1 -0
  166. package/dist/utils/isRadioInput.d.ts +1 -0
  167. package/dist/utils/isRadioInput.d.ts.map +1 -0
  168. package/dist/utils/isRadioOrCheckbox.d.ts +1 -0
  169. package/dist/utils/isRadioOrCheckbox.d.ts.map +1 -0
  170. package/dist/utils/isRegex.d.ts +1 -0
  171. package/dist/utils/isRegex.d.ts.map +1 -0
  172. package/dist/utils/isSelectInput.d.ts +1 -0
  173. package/dist/utils/isSelectInput.d.ts.map +1 -0
  174. package/dist/utils/isString.d.ts +1 -0
  175. package/dist/utils/isString.d.ts.map +1 -0
  176. package/dist/utils/isUndefined.d.ts +1 -0
  177. package/dist/utils/isUndefined.d.ts.map +1 -0
  178. package/dist/utils/isWeb.d.ts +1 -0
  179. package/dist/utils/isWeb.d.ts.map +1 -0
  180. package/dist/utils/live.d.ts +1 -0
  181. package/dist/utils/live.d.ts.map +1 -0
  182. package/dist/utils/move.d.ts +1 -0
  183. package/dist/utils/move.d.ts.map +1 -0
  184. package/dist/utils/objectHasFunction.d.ts +1 -0
  185. package/dist/utils/objectHasFunction.d.ts.map +1 -0
  186. package/dist/utils/omit.d.ts +1 -0
  187. package/dist/utils/omit.d.ts.map +1 -0
  188. package/dist/utils/omitKeys.d.ts +1 -0
  189. package/dist/utils/omitKeys.d.ts.map +1 -0
  190. package/dist/utils/prepend.d.ts +1 -0
  191. package/dist/utils/prepend.d.ts.map +1 -0
  192. package/dist/utils/remove.d.ts +1 -0
  193. package/dist/utils/remove.d.ts.map +1 -0
  194. package/dist/utils/set.d.ts +1 -0
  195. package/dist/utils/set.d.ts.map +1 -0
  196. package/dist/utils/stringToPath.d.ts +1 -0
  197. package/dist/utils/stringToPath.d.ts.map +1 -0
  198. package/dist/utils/swap.d.ts +1 -0
  199. package/dist/utils/swap.d.ts.map +1 -0
  200. package/dist/utils/unset.d.ts +1 -0
  201. package/dist/utils/unset.d.ts.map +1 -0
  202. package/dist/utils/update.d.ts +1 -0
  203. package/dist/utils/update.d.ts.map +1 -0
  204. package/package.json +22 -15
  205. package/CHANGELOG.md +0 -1311
  206. package/dist/logic/mapId.d.ts +0 -3
package/dist/index.d.ts CHANGED
@@ -8,3 +8,4 @@ export * from './useFormContext';
8
8
  export * from './useFormState';
9
9
  export * from './useWatch';
10
10
  export * from './utils';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -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: (value) => shouldSubscribeByName(_name.current, value.name, exact) &&
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: (formState) => {
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
- if (isArrayField
242
+ isArrayField
239
243
  ? _shouldUnregisterField && !control._stateFlags.action
240
- : _shouldUnregisterField) {
241
- control.unregister(name, { keepDefaultValue: true });
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 mapIds = (values = [], keyName) => values.map((value) => (Object.assign(Object.assign({}, (value[keyName] ? {} : { [keyName]: generateId() })), value)));
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 [fields, setFields] = React.useState(mapIds(control._getFieldArray(name), keyName));
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: ({ values, name: fieldArrayName }) => {
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 = omitKeys(updatedFieldArrayValuesWithKey, keyName);
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), _fieldIds, keyName), mapIds(appendValue, keyName));
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 updatedFieldArrayValuesWithKey = prepend(mapCurrentIds(control._getFieldArray(name), _fieldIds, keyName), mapIds(convertToArrayPayload(cloneObject(value)), keyName));
485
- const fieldArrayValues = updateValues(updatedFieldArrayValuesWithKey);
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), _fieldIds, keyName), index);
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 updatedFieldArrayValuesWithKey = insert(mapCurrentIds(control._getFieldArray(name), _fieldIds, keyName), index, mapIds(convertToArrayPayload(cloneObject(value)), keyName));
502
- const fieldArrayValues = updateValues(updatedFieldArrayValuesWithKey);
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), _fieldIds, keyName);
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), _fieldIds, keyName);
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), _fieldIds, keyName);
536
+ const updatedFieldArrayValuesWithKey = mapCurrentIds(control._getFieldArray(name), keyName, _fieldIds);
532
537
  const updatedFieldArrayValues = updateAt(updatedFieldArrayValuesWithKey, index, value);
533
- _fieldIds.current = mapIds(updatedFieldArrayValues, keyName);
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 updatedFieldArrayValuesWithKey = mapIds(convertToArrayPayload(value), keyName);
543
- const fieldArrayValues = updateValues(updatedFieldArrayValuesWithKey);
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
- set(_formValues, name, getFieldValueAs(value, fieldReference));
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
- !options.disabled && updateValidAndValue(name, false, fieldRef);
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: (value) => {
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) {