react-hook-form 7.26.1 → 8.0.0-alpha.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.
Files changed (118) hide show
  1. package/dist/__typetests__/__fixtures__/index.d.ts +2 -0
  2. package/dist/__typetests__/__fixtures__/index.d.ts.map +1 -0
  3. package/dist/__typetests__/__fixtures__/type.d.ts +12 -0
  4. package/dist/__typetests__/__fixtures__/type.d.ts.map +1 -0
  5. package/dist/__typetests__/types/__fixtures__/index.d.ts +4 -0
  6. package/dist/__typetests__/types/__fixtures__/index.d.ts.map +1 -0
  7. package/dist/__typetests__/types/__fixtures__/pathString.d.ts +4 -0
  8. package/dist/__typetests__/types/__fixtures__/pathString.d.ts.map +1 -0
  9. package/dist/__typetests__/types/__fixtures__/traversable.d.ts +14 -0
  10. package/dist/__typetests__/types/__fixtures__/traversable.d.ts.map +1 -0
  11. package/dist/__typetests__/types/__fixtures__/tuple.d.ts +15 -0
  12. package/dist/__typetests__/types/__fixtures__/tuple.d.ts.map +1 -0
  13. package/dist/__typetests__/types/form.test-d.d.ts +2 -0
  14. package/dist/__typetests__/types/form.test-d.d.ts.map +1 -0
  15. package/dist/__typetests__/types/path/auto.test-d.d.ts +2 -0
  16. package/dist/__typetests__/types/path/auto.test-d.d.ts.map +1 -0
  17. package/dist/__typetests__/types/path/internal/autoCompletePath.test-d.d.ts +2 -0
  18. package/dist/__typetests__/types/path/internal/autoCompletePath.test-d.d.ts.map +1 -0
  19. package/dist/__typetests__/types/path/internal/hasPath.test-d.d.ts +2 -0
  20. package/dist/__typetests__/types/path/internal/hasPath.test-d.d.ts.map +1 -0
  21. package/dist/__typetests__/types/path/internal/keys.test-d.d.ts +2 -0
  22. package/dist/__typetests__/types/path/internal/keys.test-d.d.ts.map +1 -0
  23. package/dist/__typetests__/types/path/internal/pathGetValue.test-d.d.ts +2 -0
  24. package/dist/__typetests__/types/path/internal/pathGetValue.test-d.d.ts.map +1 -0
  25. package/dist/__typetests__/types/path/internal/pathSetValue.test-d.d.ts +2 -0
  26. package/dist/__typetests__/types/path/internal/pathSetValue.test-d.d.ts.map +1 -0
  27. package/dist/__typetests__/types/path/internal/pathTuple.test-d.d.ts +2 -0
  28. package/dist/__typetests__/types/path/internal/pathTuple.test-d.d.ts.map +1 -0
  29. package/dist/__typetests__/types/path/internal/utils.test-d.d.ts +2 -0
  30. package/dist/__typetests__/types/path/internal/utils.test-d.d.ts.map +1 -0
  31. package/dist/__typetests__/types/path/lazy.test-d.d.ts +2 -0
  32. package/dist/__typetests__/types/path/lazy.test-d.d.ts.map +1 -0
  33. package/dist/__typetests__/types/path/value.test-d.d.ts +2 -0
  34. package/dist/__typetests__/types/path/value.test-d.d.ts.map +1 -0
  35. package/dist/__typetests__/types/util.test-d.d.ts +2 -0
  36. package/dist/__typetests__/types/util.test-d.d.ts.map +1 -0
  37. package/dist/__typetests__/utils/join.test-d.d.ts +2 -0
  38. package/dist/__typetests__/utils/join.test-d.d.ts.map +1 -0
  39. package/dist/__typetests__/utils/of.test-d.d.ts +2 -0
  40. package/dist/__typetests__/utils/of.test-d.d.ts.map +1 -0
  41. package/dist/controller.d.ts +1 -1
  42. package/dist/controller.d.ts.map +1 -1
  43. package/dist/index.cjs.js +1 -1
  44. package/dist/index.cjs.js.map +1 -1
  45. package/dist/index.esm.mjs +47 -33
  46. package/dist/index.esm.mjs.map +1 -1
  47. package/dist/index.umd.js +1 -1
  48. package/dist/index.umd.js.map +1 -1
  49. package/dist/logic/createFormControl.d.ts +1 -1
  50. package/dist/logic/createFormControl.d.ts.map +1 -1
  51. package/dist/logic/getResolverOptions.d.ts +2 -2
  52. package/dist/logic/hasValidation.d.ts +1 -1
  53. package/dist/types/controller.d.ts +8 -8
  54. package/dist/types/controller.d.ts.map +1 -1
  55. package/dist/types/errors.d.ts +8 -2
  56. package/dist/types/errors.d.ts.map +1 -1
  57. package/dist/types/fieldArray.d.ts +12 -13
  58. package/dist/types/fieldArray.d.ts.map +1 -1
  59. package/dist/types/form.d.ts +44 -50
  60. package/dist/types/form.d.ts.map +1 -1
  61. package/dist/types/path/auto.d.ts +76 -0
  62. package/dist/types/path/auto.d.ts.map +1 -0
  63. package/dist/types/path/branded.d.ts +61 -0
  64. package/dist/types/path/branded.d.ts.map +1 -0
  65. package/dist/types/path/index.d.ts +7 -3
  66. package/dist/types/path/index.d.ts.map +1 -1
  67. package/dist/types/path/internal/autoCompletePath.d.ts +173 -0
  68. package/dist/types/path/internal/autoCompletePath.d.ts.map +1 -0
  69. package/dist/types/path/internal/hasPath.d.ts +56 -0
  70. package/dist/types/path/internal/hasPath.d.ts.map +1 -0
  71. package/dist/types/path/internal/keys.d.ts +103 -0
  72. package/dist/types/path/internal/keys.d.ts.map +1 -0
  73. package/dist/types/path/internal/pathGetValue.d.ts +76 -0
  74. package/dist/types/path/internal/pathGetValue.d.ts.map +1 -0
  75. package/dist/types/path/internal/pathSetValue.d.ts +96 -0
  76. package/dist/types/path/internal/pathSetValue.d.ts.map +1 -0
  77. package/dist/types/path/internal/pathTuple.d.ts +73 -0
  78. package/dist/types/path/internal/pathTuple.d.ts.map +1 -0
  79. package/dist/types/path/internal/utils.d.ts +84 -0
  80. package/dist/types/path/internal/utils.d.ts.map +1 -0
  81. package/dist/types/path/lazy.d.ts +62 -0
  82. package/dist/types/path/lazy.d.ts.map +1 -0
  83. package/dist/types/path/pathString.d.ts +6 -0
  84. package/dist/types/path/pathString.d.ts.map +1 -0
  85. package/dist/types/path/value.d.ts +49 -0
  86. package/dist/types/path/value.d.ts.map +1 -0
  87. package/dist/types/resolvers.d.ts +3 -3
  88. package/dist/types/resolvers.d.ts.map +1 -1
  89. package/dist/types/utils.d.ts +15 -7
  90. package/dist/types/utils.d.ts.map +1 -1
  91. package/dist/types/validator.d.ts +2 -2
  92. package/dist/types/validator.d.ts.map +1 -1
  93. package/dist/useController.d.ts +2 -2
  94. package/dist/useController.d.ts.map +1 -1
  95. package/dist/useFieldArray.d.ts +2 -2
  96. package/dist/useFieldArray.d.ts.map +1 -1
  97. package/dist/useForm.d.ts +1 -1
  98. package/dist/useForm.d.ts.map +1 -1
  99. package/dist/useFormContext.d.ts +2 -2
  100. package/dist/useFormContext.d.ts.map +1 -1
  101. package/dist/useFormState.d.ts +2 -2
  102. package/dist/useFormState.d.ts.map +1 -1
  103. package/dist/useWatch.d.ts +9 -23
  104. package/dist/useWatch.d.ts.map +1 -1
  105. package/dist/utils/index.d.ts +3 -1
  106. package/dist/utils/index.d.ts.map +1 -1
  107. package/dist/utils/join.d.ts +16 -0
  108. package/dist/utils/join.d.ts.map +1 -0
  109. package/dist/utils/of.d.ts +13 -0
  110. package/dist/utils/of.d.ts.map +1 -0
  111. package/dist/utils/unset.d.ts.map +1 -1
  112. package/package.json +15 -15
  113. package/dist/types/path/common.d.ts +0 -316
  114. package/dist/types/path/common.d.ts.map +0 -1
  115. package/dist/types/path/eager.d.ts +0 -82
  116. package/dist/types/path/eager.d.ts.map +0 -1
  117. package/dist/utils/omitKeys.d.ts +0 -3
  118. package/dist/utils/omitKeys.d.ts.map +0 -1
@@ -281,11 +281,8 @@ var objectHasFunction = (data) => {
281
281
  *
282
282
  * @example
283
283
  * ```tsx
284
- * const { watch } = useForm();
285
- * const values = useWatch({
286
- * name: "fieldName"
287
- * control,
288
- * })
284
+ * // can skip passing down the control into useWatch if the form is wrapped with the FormProvider
285
+ * const values = useWatch()
289
286
  * ```
290
287
  */
291
288
  function useWatch(props) {
@@ -357,7 +354,7 @@ function useController(props) {
357
354
  control,
358
355
  name,
359
356
  });
360
- const _registerProps = React.useRef(control.register(name, Object.assign(Object.assign({}, props.rules), { value })));
357
+ const _registerProps = React.useRef(control.register(name, Object.assign(Object.assign({}, props.rules), { value: value })));
361
358
  React.useEffect(() => {
362
359
  const updateMounted = (name, value) => {
363
360
  const field = get(control._fields, name);
@@ -377,7 +374,7 @@ function useController(props) {
377
374
  }, [name, control, isArrayField, shouldUnregister]);
378
375
  return {
379
376
  field: {
380
- name,
377
+ name: name,
381
378
  value,
382
379
  onChange: React.useCallback((event) => {
383
380
  _registerProps.current.onChange({
@@ -460,6 +457,37 @@ const Controller = (props) => props.render(useController(props));
460
457
  var appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria
461
458
  ? Object.assign(Object.assign({}, errors[name]), { types: Object.assign(Object.assign({}, (errors[name] && errors[name].types ? errors[name].types : {})), { [type]: message || true }) }) : {};
462
459
 
460
+ /**
461
+ * Function for joining two paths / path strings to a {@link TypedFieldPath}.
462
+ * @param path - base path
463
+ * @param childPath - the path which should be appended to the base path
464
+ * @example
465
+ * ```
466
+ * type Baz = { baz: string }
467
+ * type FooBarBaz = { foo: { bar: Baz }}
468
+ *
469
+ * const path: TypedFieldPath<FooBarBaz, Baz> = of('foo.bar')
470
+ * const joinedPath: TypedFieldPath<FooBar, string> = join(path, 'baz')
471
+ * ```
472
+ */
473
+ function join(path, childPath) {
474
+ return `${path}.${childPath}`;
475
+ }
476
+
477
+ /**
478
+ * Function for creating a {@link TypedFieldPath} from a path string.
479
+ * @param path - path string
480
+ * @example
481
+ * ```
482
+ * type FooBar = { foo: { bar: string }}
483
+ *
484
+ * const path: TypedFieldPath<FooBar, string> = of('foo.bar')
485
+ * ```
486
+ */
487
+ function of(path) {
488
+ return path;
489
+ }
490
+
463
491
  var isKey = (value) => /^\w*$/.test(value);
464
492
 
465
493
  var stringToPath = (input) => compact(input.replace(/["|']|\]/g, '').split(/\.|\[/));
@@ -643,7 +671,7 @@ var updateAt = (fieldValues, index, value) => {
643
671
  */
644
672
  function useFieldArray(props) {
645
673
  const methods = useFormContext();
646
- const { control = methods.control, name, keyName = 'id', shouldUnregister, } = props;
674
+ const { control = methods.control, name, shouldUnregister } = props;
647
675
  const [fields, setFields] = React.useState(control._getFieldArray(name));
648
676
  const ids = React.useRef(control._getFieldArray(name).map(generateId));
649
677
  const _fieldIds = React.useRef(fields);
@@ -778,7 +806,7 @@ function useFieldArray(props) {
778
806
  (control._options.shouldUnregister || shouldUnregister) &&
779
807
  control.unregister(name);
780
808
  };
781
- }, [name, control, keyName, shouldUnregister]);
809
+ }, [name, control, shouldUnregister]);
782
810
  return {
783
811
  swap: React.useCallback(swap, [updateValues, name, control]),
784
812
  move: React.useCallback(move, [updateValues, name, control]),
@@ -788,7 +816,7 @@ function useFieldArray(props) {
788
816
  insert: React.useCallback(insert$1, [updateValues, name, control]),
789
817
  update: React.useCallback(update, [updateValues, name, control]),
790
818
  replace: React.useCallback(replace, [updateValues, name, control]),
791
- fields: React.useMemo(() => fields.map((field, index) => (Object.assign(Object.assign({}, field), { [keyName]: ids.current[index] || generateId() }))), [fields, keyName]),
819
+ fields: React.useMemo(() => fields.map((field, index) => (Object.assign(Object.assign({}, field), { id: ids.current[index] || generateId() }))), [fields]),
792
820
  };
793
821
  }
794
822
 
@@ -909,7 +937,9 @@ function unset(object, path) {
909
937
  if (currentPathsLength === index &&
910
938
  ((isObject(objectRef) && isEmptyObject(objectRef)) ||
911
939
  (Array.isArray(objectRef) &&
912
- !objectRef.filter((data) => (isObject(data) && !isEmptyObject(data)) || isBoolean(data)).length))) {
940
+ !objectRef.filter((data) => (isObject(data) && !isEmptyObject(data)) ||
941
+ isBoolean(data) ||
942
+ (Array.isArray(data) && data.length)).length))) {
913
943
  previousObjRef ? delete previousObjRef[item] : delete object[item];
914
944
  }
915
945
  previousObjRef = objectRef;
@@ -1758,7 +1788,7 @@ function createFormControl(props = {}) {
1758
1788
  }
1759
1789
  _subjects.watch.next({});
1760
1790
  _subjects.state.next(Object.assign(Object.assign({}, _formState), (!options.keepDirty ? {} : { isDirty: _getDirty() })));
1761
- !options.keepIsValid && _updateValid();
1791
+ _proxyFormState.isValid && _updateValid();
1762
1792
  };
1763
1793
  const register = (name, options = {}) => {
1764
1794
  let field = get(_fields, name);
@@ -1905,22 +1935,6 @@ function createFormControl(props = {}) {
1905
1935
  _defaultValues = updatedValues;
1906
1936
  }
1907
1937
  if (!keepStateOptions.keepValues) {
1908
- if (isWeb && isUndefined(formValues)) {
1909
- for (const name of _names.mount) {
1910
- const field = get(_fields, name);
1911
- if (field && field._f) {
1912
- const fieldReference = Array.isArray(field._f.refs)
1913
- ? field._f.refs[0]
1914
- : field._f.ref;
1915
- try {
1916
- isHTMLElement(fieldReference) &&
1917
- fieldReference.closest('form').reset();
1918
- break;
1919
- }
1920
- catch (_a) { }
1921
- }
1922
- }
1923
- }
1924
1938
  _formValues = props.shouldUnregister
1925
1939
  ? keepStateOptions.keepDefaultValues
1926
1940
  ? cloneObject(_defaultValues)
@@ -1942,8 +1956,7 @@ function createFormControl(props = {}) {
1942
1956
  watchAll: false,
1943
1957
  focus: '',
1944
1958
  };
1945
- _stateFlags.mount =
1946
- !_proxyFormState.isValid || !!keepStateOptions.keepIsValid;
1959
+ _stateFlags.mount = !_proxyFormState.isValid;
1947
1960
  _stateFlags.watch = !!props.shouldUnregister;
1948
1961
  _subjects.state.next({
1949
1962
  submitCount: keepStateOptions.keepSubmitCount
@@ -1972,9 +1985,10 @@ function createFormControl(props = {}) {
1972
1985
  isSubmitSuccessful: false,
1973
1986
  });
1974
1987
  };
1975
- const setFocus = (name) => {
1988
+ const setFocus = (name, options = {}) => {
1976
1989
  const field = get(_fields, name)._f;
1977
- (field.ref.focus ? field.ref : field.refs[0]).focus();
1990
+ const fieldRef = field.refs ? field.refs[0] : field.ref;
1991
+ options.shouldSelect ? fieldRef.select() : fieldRef.focus();
1978
1992
  };
1979
1993
  return {
1980
1994
  control: {
@@ -2115,5 +2129,5 @@ function useForm(props = {}) {
2115
2129
  return _formControl.current;
2116
2130
  }
2117
2131
 
2118
- export { Controller, FormProvider, appendErrors, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };
2132
+ export { Controller, FormProvider, appendErrors, get, join, of, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };
2119
2133
  //# sourceMappingURL=index.esm.mjs.map