react-hook-form 7.22.1 → 7.22.5

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 (200) hide show
  1. package/dist/constants.d.ts +1 -0
  2. package/dist/constants.d.ts.map +1 -0
  3. package/dist/controller.d.ts +1 -0
  4. package/dist/controller.d.ts.map +1 -0
  5. package/dist/index.cjs.js +1 -1
  6. package/dist/index.cjs.js.map +1 -1
  7. package/dist/index.d.ts +1 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.esm.mjs +16 -16
  10. package/dist/index.esm.mjs.map +1 -1
  11. package/dist/index.umd.js +1 -1
  12. package/dist/index.umd.js.map +1 -1
  13. package/dist/logic/appendErrors.d.ts +1 -0
  14. package/dist/logic/appendErrors.d.ts.map +1 -0
  15. package/dist/logic/createFormControl.d.ts +1 -0
  16. package/dist/logic/createFormControl.d.ts.map +1 -0
  17. package/dist/logic/focusFieldBy.d.ts +1 -0
  18. package/dist/logic/focusFieldBy.d.ts.map +1 -0
  19. package/dist/logic/generateId.d.ts +1 -0
  20. package/dist/logic/generateId.d.ts.map +1 -0
  21. package/dist/logic/generateWatchOutput.d.ts +1 -0
  22. package/dist/logic/generateWatchOutput.d.ts.map +1 -0
  23. package/dist/logic/getCheckboxValue.d.ts +1 -0
  24. package/dist/logic/getCheckboxValue.d.ts.map +1 -0
  25. package/dist/logic/getDirtyFields.d.ts +1 -0
  26. package/dist/logic/getDirtyFields.d.ts.map +1 -0
  27. package/dist/logic/getEventValue.d.ts +1 -0
  28. package/dist/logic/getEventValue.d.ts.map +1 -0
  29. package/dist/logic/getFieldValue.d.ts +1 -0
  30. package/dist/logic/getFieldValue.d.ts.map +1 -0
  31. package/dist/logic/getFieldValueAs.d.ts +1 -0
  32. package/dist/logic/getFieldValueAs.d.ts.map +1 -0
  33. package/dist/logic/getFocusFieldName.d.ts +1 -0
  34. package/dist/logic/getFocusFieldName.d.ts.map +1 -0
  35. package/dist/logic/getNodeParentName.d.ts +1 -0
  36. package/dist/logic/getNodeParentName.d.ts.map +1 -0
  37. package/dist/logic/getProxyFormState.d.ts +1 -0
  38. package/dist/logic/getProxyFormState.d.ts.map +1 -0
  39. package/dist/logic/getRadioValue.d.ts +1 -0
  40. package/dist/logic/getRadioValue.d.ts.map +1 -0
  41. package/dist/logic/getResolverOptions.d.ts +1 -0
  42. package/dist/logic/getResolverOptions.d.ts.map +1 -0
  43. package/dist/logic/getRuleValue.d.ts +1 -0
  44. package/dist/logic/getRuleValue.d.ts.map +1 -0
  45. package/dist/logic/getValidateError.d.ts +1 -0
  46. package/dist/logic/getValidateError.d.ts.map +1 -0
  47. package/dist/logic/getValueAndMessage.d.ts +1 -0
  48. package/dist/logic/getValueAndMessage.d.ts.map +1 -0
  49. package/dist/logic/hasValidation.d.ts +1 -0
  50. package/dist/logic/hasValidation.d.ts.map +1 -0
  51. package/dist/logic/index.d.ts +1 -0
  52. package/dist/logic/index.d.ts.map +1 -0
  53. package/dist/logic/isNameInFieldArray.d.ts +1 -0
  54. package/dist/logic/isNameInFieldArray.d.ts.map +1 -0
  55. package/dist/logic/isWatched.d.ts +1 -0
  56. package/dist/logic/isWatched.d.ts.map +1 -0
  57. package/dist/logic/mapCurrentIds.d.ts +1 -0
  58. package/dist/logic/mapCurrentIds.d.ts.map +1 -0
  59. package/dist/logic/mapId.d.ts +1 -0
  60. package/dist/logic/mapId.d.ts.map +1 -0
  61. package/dist/logic/schemaErrorLookup.d.ts +1 -0
  62. package/dist/logic/schemaErrorLookup.d.ts.map +1 -0
  63. package/dist/logic/setCustomValidty.d.ts +1 -0
  64. package/dist/logic/setCustomValidty.d.ts.map +1 -0
  65. package/dist/logic/shouldRenderFormState.d.ts +1 -0
  66. package/dist/logic/shouldRenderFormState.d.ts.map +1 -0
  67. package/dist/logic/shouldSubscribeByName.d.ts +1 -0
  68. package/dist/logic/shouldSubscribeByName.d.ts.map +1 -0
  69. package/dist/logic/skipValidation.d.ts +1 -0
  70. package/dist/logic/skipValidation.d.ts.map +1 -0
  71. package/dist/logic/unsetEmptyArray.d.ts +1 -0
  72. package/dist/logic/unsetEmptyArray.d.ts.map +1 -0
  73. package/dist/logic/validateField.d.ts +1 -0
  74. package/dist/logic/validateField.d.ts.map +1 -0
  75. package/dist/types/controller.d.ts +1 -0
  76. package/dist/types/controller.d.ts.map +1 -0
  77. package/dist/types/errors.d.ts +1 -0
  78. package/dist/types/errors.d.ts.map +1 -0
  79. package/dist/types/events.d.ts +1 -0
  80. package/dist/types/events.d.ts.map +1 -0
  81. package/dist/types/fieldArray.d.ts +1 -0
  82. package/dist/types/fieldArray.d.ts.map +1 -0
  83. package/dist/types/fields.d.ts +1 -0
  84. package/dist/types/fields.d.ts.map +1 -0
  85. package/dist/types/form.d.ts +5 -4
  86. package/dist/types/form.d.ts.map +1 -0
  87. package/dist/types/index.d.ts +1 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/resolvers.d.ts +1 -0
  90. package/dist/types/resolvers.d.ts.map +1 -0
  91. package/dist/types/utils.d.ts +1 -0
  92. package/dist/types/utils.d.ts.map +1 -0
  93. package/dist/types/validator.d.ts +1 -0
  94. package/dist/types/validator.d.ts.map +1 -0
  95. package/dist/useController.d.ts +1 -0
  96. package/dist/useController.d.ts.map +1 -0
  97. package/dist/useFieldArray.d.ts +1 -0
  98. package/dist/useFieldArray.d.ts.map +1 -0
  99. package/dist/useForm.d.ts +1 -0
  100. package/dist/useForm.d.ts.map +1 -0
  101. package/dist/useFormContext.d.ts +1 -0
  102. package/dist/useFormContext.d.ts.map +1 -0
  103. package/dist/useFormState.d.ts +1 -0
  104. package/dist/useFormState.d.ts.map +1 -0
  105. package/dist/useSubscribe.d.ts +1 -0
  106. package/dist/useSubscribe.d.ts.map +1 -0
  107. package/dist/useWatch.d.ts +1 -0
  108. package/dist/useWatch.d.ts.map +1 -0
  109. package/dist/utils/append.d.ts +1 -0
  110. package/dist/utils/append.d.ts.map +1 -0
  111. package/dist/utils/cloneObject.d.ts +1 -0
  112. package/dist/utils/cloneObject.d.ts.map +1 -0
  113. package/dist/utils/compact.d.ts +1 -0
  114. package/dist/utils/compact.d.ts.map +1 -0
  115. package/dist/utils/convertToArrayPayload.d.ts +1 -0
  116. package/dist/utils/convertToArrayPayload.d.ts.map +1 -0
  117. package/dist/utils/createSubject.d.ts +1 -0
  118. package/dist/utils/createSubject.d.ts.map +1 -0
  119. package/dist/utils/deepEqual.d.ts +1 -0
  120. package/dist/utils/deepEqual.d.ts.map +1 -0
  121. package/dist/utils/deepMerge.d.ts +1 -0
  122. package/dist/utils/deepMerge.d.ts.map +1 -0
  123. package/dist/utils/fillBooleanArray.d.ts +1 -0
  124. package/dist/utils/fillBooleanArray.d.ts.map +1 -0
  125. package/dist/utils/fillEmptyArray.d.ts +1 -0
  126. package/dist/utils/fillEmptyArray.d.ts.map +1 -0
  127. package/dist/utils/get.d.ts +1 -0
  128. package/dist/utils/get.d.ts.map +1 -0
  129. package/dist/utils/getValidationModes.d.ts +1 -0
  130. package/dist/utils/getValidationModes.d.ts.map +1 -0
  131. package/dist/utils/index.d.ts +1 -0
  132. package/dist/utils/index.d.ts.map +1 -0
  133. package/dist/utils/insert.d.ts +1 -0
  134. package/dist/utils/insert.d.ts.map +1 -0
  135. package/dist/utils/isBoolean.d.ts +1 -0
  136. package/dist/utils/isBoolean.d.ts.map +1 -0
  137. package/dist/utils/isCheckBoxInput.d.ts +1 -0
  138. package/dist/utils/isCheckBoxInput.d.ts.map +1 -0
  139. package/dist/utils/isDateObject.d.ts +1 -0
  140. package/dist/utils/isDateObject.d.ts.map +1 -0
  141. package/dist/utils/isEmptyObject.d.ts +1 -0
  142. package/dist/utils/isEmptyObject.d.ts.map +1 -0
  143. package/dist/utils/isFileInput.d.ts +1 -0
  144. package/dist/utils/isFileInput.d.ts.map +1 -0
  145. package/dist/utils/isFunction.d.ts +1 -0
  146. package/dist/utils/isFunction.d.ts.map +1 -0
  147. package/dist/utils/isHTMLElement.d.ts +1 -0
  148. package/dist/utils/isHTMLElement.d.ts.map +1 -0
  149. package/dist/utils/isKey.d.ts +1 -0
  150. package/dist/utils/isKey.d.ts.map +1 -0
  151. package/dist/utils/isMessage.d.ts +1 -0
  152. package/dist/utils/isMessage.d.ts.map +1 -0
  153. package/dist/utils/isMultipleSelect.d.ts +1 -0
  154. package/dist/utils/isMultipleSelect.d.ts.map +1 -0
  155. package/dist/utils/isNullOrUndefined.d.ts +1 -0
  156. package/dist/utils/isNullOrUndefined.d.ts.map +1 -0
  157. package/dist/utils/isObject.d.ts +1 -0
  158. package/dist/utils/isObject.d.ts.map +1 -0
  159. package/dist/utils/isPrimitive.d.ts +1 -0
  160. package/dist/utils/isPrimitive.d.ts.map +1 -0
  161. package/dist/utils/isRadioInput.d.ts +1 -0
  162. package/dist/utils/isRadioInput.d.ts.map +1 -0
  163. package/dist/utils/isRadioOrCheckbox.d.ts +1 -0
  164. package/dist/utils/isRadioOrCheckbox.d.ts.map +1 -0
  165. package/dist/utils/isRegex.d.ts +1 -0
  166. package/dist/utils/isRegex.d.ts.map +1 -0
  167. package/dist/utils/isSelectInput.d.ts +1 -0
  168. package/dist/utils/isSelectInput.d.ts.map +1 -0
  169. package/dist/utils/isString.d.ts +1 -0
  170. package/dist/utils/isString.d.ts.map +1 -0
  171. package/dist/utils/isUndefined.d.ts +1 -0
  172. package/dist/utils/isUndefined.d.ts.map +1 -0
  173. package/dist/utils/isWeb.d.ts +1 -0
  174. package/dist/utils/isWeb.d.ts.map +1 -0
  175. package/dist/utils/live.d.ts +1 -0
  176. package/dist/utils/live.d.ts.map +1 -0
  177. package/dist/utils/move.d.ts +1 -0
  178. package/dist/utils/move.d.ts.map +1 -0
  179. package/dist/utils/objectHasFunction.d.ts +1 -0
  180. package/dist/utils/objectHasFunction.d.ts.map +1 -0
  181. package/dist/utils/omit.d.ts +1 -0
  182. package/dist/utils/omit.d.ts.map +1 -0
  183. package/dist/utils/omitKeys.d.ts +1 -0
  184. package/dist/utils/omitKeys.d.ts.map +1 -0
  185. package/dist/utils/prepend.d.ts +1 -0
  186. package/dist/utils/prepend.d.ts.map +1 -0
  187. package/dist/utils/remove.d.ts +1 -0
  188. package/dist/utils/remove.d.ts.map +1 -0
  189. package/dist/utils/set.d.ts +1 -0
  190. package/dist/utils/set.d.ts.map +1 -0
  191. package/dist/utils/stringToPath.d.ts +1 -0
  192. package/dist/utils/stringToPath.d.ts.map +1 -0
  193. package/dist/utils/swap.d.ts +1 -0
  194. package/dist/utils/swap.d.ts.map +1 -0
  195. package/dist/utils/unset.d.ts +1 -0
  196. package/dist/utils/unset.d.ts.map +1 -0
  197. package/dist/utils/update.d.ts +1 -0
  198. package/dist/utils/update.d.ts.map +1 -0
  199. package/package.json +18 -14
  200. package/CHANGELOG.md +0 -1311
package/CHANGELOG.md DELETED
@@ -1,1311 +0,0 @@
1
- # Changelog
2
-
3
- ## [7.22.0] - 2021-12-14
4
-
5
- ## Changed
6
-
7
- - Browser native reset API will no longer be invoked when `reset` provided with value
8
-
9
- ```tsx
10
- const onSubmit = (data) => {};
11
-
12
- React.useEffect(() => {
13
- if (formState.isSubmitSuccessful) {
14
- reset({ something: '' });
15
- }
16
- }, [formState, reset]);
17
-
18
- handleSubmit(onSubmit);
19
- ```
20
-
21
- to
22
-
23
- ```tsx
24
- const onSubmit = (data) => {
25
- setSubmittedData(data);
26
- reset(data); // no longer need to have useEffect
27
- };
28
-
29
- handleSubmit(onSubmit);
30
- ```
31
-
32
- ## [7.21.0] - 2021-12-06
33
-
34
- ## Changed
35
-
36
- - `shouldUseNativeValidation` will pass down validation props both at client and server render
37
-
38
- ```tsx
39
- const { register } = useForm()
40
-
41
- <input {...register('name', { required: true })} />
42
-
43
- <input name="name" required /> // both client and server render
44
- ```
45
-
46
- ## [7.20.3] - 2021-11-26
47
-
48
- ## Changed
49
-
50
- - register `onChange` will share same logic with `useController` for non standard event payload
51
-
52
- ```tsx
53
- const { onChange } = register('test');
54
- onChange('stringIsValid'); // this is only valid use case for JS
55
- ```
56
-
57
- - empty node in `formState` will no longer gets unset
58
-
59
- ## [7.20.0] - 2021-11-19
60
-
61
- ## Added
62
-
63
- - new `exact` prop for `useWatch`
64
- - new `exact` prop for `useFormState`
65
-
66
- ```tsx
67
- useWatch({
68
- name: 'test.test',
69
- exact: true,
70
- });
71
-
72
- useFormState({
73
- name: 'test.test',
74
- exact: true,
75
- });
76
- ```
77
-
78
- ## Changed
79
-
80
- - `useWatch` subscription will occurred at `useEffect` instead before `render`
81
-
82
- ## [7.19.0] - 2021-11-05
83
-
84
- ## Added
85
-
86
- - new `resetField` API
87
-
88
- ```tsx
89
- const { resetField } = useForm();
90
-
91
- resetField('test');
92
-
93
- resetField('test', {
94
- keepError: true,
95
- keepDirty: true,
96
- keepTouched: true,
97
- defaultValue: 'test1',
98
- });
99
- ```
100
-
101
- ## [7.18.1] - 2021-11-02
102
-
103
- - revert `FieldPathWithValue`
104
-
105
- ## [7.18.0] - 2021-10-28
106
-
107
- ## Added
108
-
109
- - bring back `FieldPathWithValue`
110
- - schema errors parent object look up
111
-
112
- ```tsx
113
- const validationSchema = object().shape({
114
- questions: array().min(1, 'Array cannot be empty'),
115
- });
116
-
117
- // the above schema will be picked up by field array action
118
- // the logic applies to group error object eg checkboxes
119
- <button
120
- type="button"
121
- onClick={() => {
122
- remove(questionIndex);
123
- }}
124
- >
125
- Remove
126
- </button>;
127
- ```
128
-
129
- ## [7.17.0] - 2021-10-02
130
-
131
- ## Added
132
-
133
- - new type `FieldPathWithValue` to improve generic components type support
134
-
135
- ```tsx
136
- type ExpectedType = { test: string };
137
-
138
- const Generic = <FormValues extends FieldValues>({
139
- name,
140
- control,
141
- }: {
142
- name: FieldPathWithValue<FormValues, ExpectedType>;
143
- control: Control<FormValues>;
144
- }) => {
145
- const {
146
- field: { value, ...fieldProps },
147
- } = useController<FormValues, ExpectedType>({
148
- name,
149
- control,
150
- defaultValue: { test: 'value' },
151
- });
152
-
153
- return <input type="text" value={value.test} {...fieldProps} />;
154
- };
155
- ```
156
-
157
- ## [7.16.1] - 2021-09-27
158
-
159
- ## Changed
160
-
161
- - `formState` subscription no longer subscribed at `useEffect` instead the execution of each hook
162
-
163
- ## [7.16.0] - 2021-09-25
164
-
165
- ## Added
166
-
167
- - `register` allowed pass custom `onChange` and `onBlur`
168
-
169
- ```tsx
170
- <input
171
- type="text"
172
- {...register('test', {
173
- onChange: (e) => {},
174
- onBlur: (e) => {},
175
- })}
176
- />
177
- ```
178
-
179
- ## [7.15.0] - 2021-09-05
180
-
181
- ## Added
182
-
183
- - `useFieldArray` new method `replace()`
184
-
185
- ```tsx
186
- const { control } = useForm({
187
- defaultValues: {
188
- test: [{ value: 'lorem' }, { value: 'ipsum' }],
189
- },
190
- });
191
- const { fields, replace } = useFieldArray({
192
- control,
193
- name: 'test',
194
- });
195
-
196
- const handleFullyReplacement = (): void => {
197
- // remove old and set fully new values
198
- replace([{ value: 'dolor' }, { value: 'sit' }, { value: 'amet' }]);
199
- };
200
- ```
201
-
202
- - Improved to not map types defined with `interface`.
203
-
204
- ```tsx
205
- import { useForm } from 'react-hook-form';
206
-
207
- interface CustomValue {
208
- custom: string;
209
- }
210
-
211
- type FormValues = {
212
- fieldName: CustomValue;
213
- };
214
-
215
- const { formState: errors } = useForm<FormValues>({
216
- defaultValues: { fieldName: { custom: 'value' } },
217
- });
218
- ```
219
-
220
- ## [7.14.0] - 2021-08-27
221
-
222
- ## Added
223
-
224
- - `register` add dependent validation
225
-
226
- ```tsx
227
- const App = () => {
228
- const { register, getValues } = useForm();
229
-
230
- return (
231
- <form>
232
- <input
233
- {...register('firstName', {
234
- validate: (value) => {
235
- return getValues('lastName') === value;
236
- },
237
- })}
238
- />
239
- <input {...register('lastName', { deps: ['firstName'] })} /> // dependant validation
240
- </form>
241
- );
242
- };
243
- ```
244
-
245
- ## [7.13.0] - 2021-08-22
246
-
247
- ## Added
248
-
249
- `Trigger`
250
-
251
- - Trigger will enable object name trigger and field array name trigger
252
-
253
- ```tsx
254
- useFieldArray({ name: 'test' });
255
-
256
- trigger('name'); // will trigger the whole field array to validate
257
- ```
258
-
259
- `register`
260
-
261
- - added a `disabled` prop as an option to toggle input disable attribute
262
- - register will be able to seek input DOM reference through the `ref` callback
263
-
264
- ```tsx
265
- register('test', { disabled: true }) // will set value to undefined and pass disabled down to the input attribute
266
-
267
- <div {...register('test')}>
268
- <input name="test" /> // this input will be registered
269
- </div>
270
- ```
271
-
272
- `useWatch`
273
-
274
- - added `disabled` prop to toggle the state subscription.
275
-
276
- ```tsx
277
- useWatch({ disabled: true }); // you toggle the subscription
278
- ```
279
-
280
- `useFormState`
281
-
282
- - added `disabled` prop to toggle the state subscription.
283
-
284
- ```tsx
285
- useFormState({ disabled: true }); // you toggle the subscription
286
- ```
287
-
288
- `setValue`
289
-
290
- - allow set value for non-registered inputs include nested object and array field.
291
-
292
- ```tsx
293
- <input {...register('test.0.firstName')} />
294
-
295
- setValue('test', [{ firstName: 'bill' }, {firstName: 'kotaro}, {firstName: 'joris'}]) // this will works
296
- ```
297
-
298
- ## [7.12.0] - 2021-07-24
299
-
300
- ## Added
301
-
302
- - new `useForm` config `delayError`
303
-
304
- ```tsx
305
- useForm({
306
- delayError: 500, // delay error appear with 500ms
307
- });
308
- ```
309
-
310
- ## [7.11.0] - 2021-07-13
311
-
312
- ## Added
313
-
314
- - `update` method to update an field array inputs
315
-
316
- ```tsx
317
- const { update } = useFieldArray();
318
-
319
- update(0, data); // update an individual field array node
320
- ```
321
-
322
- ## [7.10.0] - 2021-07-02
323
-
324
- ## Changed
325
-
326
- - `defaultValue` is no longer a required prop for register input with `useFieldArray`
327
-
328
- ## [7.9.0] - 2021-06-19
329
-
330
- ## Added
331
-
332
- - new config at `useForm` to enabled native browser validation
333
-
334
- ```tsx
335
- const { register, handleSubmit } = useForm({
336
- shouldUseNativeValidation: true,
337
- });
338
- ```
339
-
340
- ## [7.8.5] - 2021-06-15
341
-
342
- ### Change
343
-
344
- - `useController` no longer access input `ref` except `focus` event for focus management
345
-
346
- ## [7.8.0] - 2021-06-5
347
-
348
- ### Added
349
-
350
- - `setValue` support `shouldTouch` to update formState touchFields
351
-
352
- ```tsx
353
- setValue('firstName', 'value', { shouldTouch: true });
354
- ```
355
-
356
- - `register` now accept `value` as option
357
-
358
- ```tsx
359
- register('firstName', { value: 'value' });
360
- ```
361
-
362
- ## Changed
363
-
364
- - `isValid` will initialise as `false`
365
-
366
- ## [7.7.1] - 2021-05-30
367
-
368
- ### Fixed
369
-
370
- - `shouldUnregister: false` should not shallow merge or register absent input fields from `defaultValues`
371
-
372
- ## [7.7.0] - 2021-05-29
373
-
374
- ### Added
375
-
376
- - `trigger` support focus with error input
377
-
378
- ```ts
379
- trigger('inputName', { shouldFocus: true });
380
- ```
381
-
382
- ### Changed
383
-
384
- - `handleSubmit` will `throw` error within the onSubmit callback
385
-
386
- ## [7.6.0] - 2021-05-15
387
-
388
- ### Changed
389
-
390
- - `useForm` will `register` missing inputs from `defaultValues`
391
-
392
- ```tsx
393
- const App = () => {
394
- const { register, handleSubmit } = useForm({
395
- defaultValues: {
396
- test: { firstName: 'bill', lastName: 'luo' },
397
- },
398
- });
399
-
400
- const onSubmit = (data) => {
401
- // missing registered input will be included
402
- console.log(data); // { test: { firstName: 'bill', lastName: 'luo' } }
403
- };
404
-
405
- return (
406
- <form onSubmit={handleSubmit(onSubmit)}>
407
- <input {...register('test.firstName')} />
408
- <button />
409
- </form>
410
- );
411
- };
412
- ```
413
-
414
- ## [7.5.0] - 2021-05-09
415
-
416
- ### Changed
417
-
418
- - `isSubmitSuccessful` will return false when `handleSubmit` callback failed with `Error` or `Promise` reject.
419
- - unmounted input will no longer get validated even with `shouldUnregister: false`
420
-
421
- ## [7.4.0] - 2021-05-04
422
-
423
- ### Added
424
-
425
- - new `name` prop for `useFormState` to subscribe to individual inputs.
426
-
427
- ```ts
428
- useFormState({
429
- name: 'inputName', // optional and can be array of inputs' name as well
430
- });
431
- ```
432
-
433
- ## [7.2.2] - 2021-04-21
434
-
435
- ### Changes
436
-
437
- - set `shouldUnregister` to `true` will not shallow merge `defaultValues`
438
-
439
- ## [7.2.0] - 2021-04-19
440
-
441
- ### Changes
442
-
443
- - `shouldUnregister` config to remove input value after unmount
444
-
445
- ```tsx
446
- // Global config (can't be overwrite)
447
- useForm({
448
- shouldUnregister: true // default to false
449
- })
450
-
451
- // Component/Hook level config (can not overwrites global config)
452
- register('test', {
453
- shouldUnregister: true // default to false
454
- })
455
-
456
- <Controller shouldUnregister={true} />
457
-
458
- useController({ shouldUnregister: true })
459
-
460
- useFieldArray({ shouldUnregister: true })
461
- ```
462
-
463
- ## [7.0.6] - 2021-04-12
464
-
465
- ### Changes
466
-
467
- - `register` will retrieve `onChange`'s target value when component'ref is not a valid input element.
468
-
469
- ## [7.0.0-rc.7] - 2021-03-28
470
-
471
- ### Changes
472
-
473
- - change type name from `RefCallbackHandler` to `UseFormRegisterReturn` for register callback's return
474
-
475
- ## [7.0.0-rc.7] - 2021-03-23
476
-
477
- ### Changes
478
-
479
- - `useFieldArray` will produce an empty array `[]` when no field is presented.
480
-
481
- ## [7.0.0-rc.1] - 2021-03-08
482
-
483
- ### Changes
484
-
485
- - `setValue` with field array will `register` all inputs before rendering.
486
-
487
- ## [7.0.0-beta.17] - 2021-03-03
488
-
489
- ### Changes
490
-
491
- - `append`, `prepend` and `insert` will `register` deeply nested inputs at `useFieldArray`.
492
-
493
- ## [7.0.0-beta.15] - 2021-02-27
494
-
495
- ### Changes
496
-
497
- - typescript array index restriction removed.
498
- - `append`, `prepend` and `insert` will `register` inputs during each action at `useFieldArray`.
499
-
500
- ## [7.0.0-beta.11] - 2021-02-20
501
-
502
- ### Changes
503
-
504
- - change `ArrayKey` type to `number | '${number}'`
505
-
506
- ## [7.0.0-beta.10] - 2021-02-19
507
-
508
- ### Changes
509
-
510
- - Change `useController`'s `meta` into `fieldState` and include `formState`, these change will be applied to `Controller` too.
511
-
512
- ```diff
513
- - const { field, meta } = useController({ control });
514
- + const { field, fieldState, formState } = useController({ control });
515
- ```
516
-
517
- ## [7.0.0-beta.9] - 2021-02-19
518
-
519
- ### Changes
520
-
521
- - typescript array index support is changed to `49` instead of `99`
522
-
523
- ## [7.0.0-beta.4] - 2021-02-08
524
-
525
- - **Breaking change:** `valueAs` will be run before the built-in validation and `resolver`
526
-
527
- ```diff
528
- - <input {...register('test', { validate: (data: string) => {}, valueAsNumber: true })} />
529
- + <input {...register('test', { validate: (data: number) => {}, valueAsNumber: true })} />
530
- ```
531
-
532
- ## [7.0.0-beta.1] - 2021-02-08
533
-
534
- ### Changes
535
-
536
- - `useWatch` will no longer required `defaultValue` for field Array
537
-
538
- ## [7.0.0-beta.0] - 2021-02-06
539
-
540
- ### Changes
541
-
542
- - **Breaking change:** shallow merge defaultValues with result (#4074)
543
-
544
- ```ts
545
- useForm({ defaultValues: { test: 'test' } });
546
-
547
- getValues(); // v6 will return {}
548
- getValues(); // v7 will return { test: 'test' }
549
- ```
550
-
551
- ## [v7.0.0-alpha.2] - 2021-02-04
552
-
553
- ### Changes
554
-
555
- - **Breaking change:** `setError`'s `shouldFocus` option has been moved into the third argument.
556
-
557
- ```diff
558
- - setError('test', { type: 'type', message: 'issue', shouldFocus: true })
559
- + setError('test', { type: 'type', message: 'issue' }, { shouldFocus: true })
560
- ```
561
-
562
- - **Breaking change:** type name changes:
563
-
564
- ```diff
565
- - UseFormMethods
566
- + UseFormReturn
567
- - UseFormOptions
568
- + UseFormProps
569
- - UseFieldArrayMethods
570
- + UseFieldArrayReturn
571
- - UseFieldArrayOptions
572
- + UseFieldArrayProps
573
- - UseControllerMethods
574
- + UseControllerReturn
575
- - UseControllerOptions
576
- + UseControllerProps
577
- - ArrayField
578
- + FieldArray
579
- ```
580
-
581
- ### Fixes
582
-
583
- - fix `setValue` with `Controller` and `reset` with `useFieldArray` issues: 4111 & 4108 (#4113)
584
-
585
- ## [v7.0.0-alpha.2] - 2021-02-02
586
-
587
- ### Changes
588
-
589
- - **Breaking change:** `setError`'s `shouldFocus` option has been moved to the third argument.
590
-
591
- ```diff
592
- - setError('test', { type: 'type', message: 'issue', shouldFocus: true })
593
- + setError('test', { type: 'type', message: 'issue' }, { shouldFocus: true })
594
- ```
595
-
596
- ### Fixes
597
-
598
- - fix #4078 issue with watch + mode: onChange
599
-
600
- ### Improvements
601
-
602
- - remove internal deep clone (#4088)
603
- - remove transformToNestObject (#4089)
604
-
605
- ## [v7.0.0-alpha.1] - 2021-02-01
606
-
607
- ### Changes
608
-
609
- - field name reference will be removed with `unregister` (#4010)
610
-
611
- - **Breaking change:** improve field array remove result and no longer remove field array value after unmount
612
-
613
- ```diff
614
- const { remove } = useFieldArray({ name: 'test' })
615
- remove();
616
- getValues(); // V6: result form value {}
617
- getValues(); // V7: result form value { test: [] }
618
- ```
619
-
620
- ### Improvements
621
-
622
- - change internal field names into `Set` (#4015)
623
- - improve `onChange` perf with `resolver (#4017)
624
- - improve field array name look up perf (#4030)
625
-
626
- ## [v7.0.0-alpha.0] - 2021-01-31
627
-
628
- ### Added
629
-
630
- - new custom hook `useFormState` (#3740)
631
-
632
- ```ts
633
- const { isDirty, errors } = useFormState();
634
- ```
635
-
636
- - `watch` support can subscribe to the entire form with a callback
637
-
638
- ```ts
639
- watch((data, { name, type }) => {
640
- console.log('formValue', data);
641
- console.log('name', name);
642
- console.log('type', type);
643
- });
644
- ```
645
-
646
- - `useController` includes new `isValidating` state (#3778)
647
- - `useController` includes new `error` state (#3921)
648
-
649
- ```ts
650
- const {
651
- meta: { error, isValidating },
652
- } = useController({ name: 'test' });
653
- ```
654
-
655
- - new `unregister` second argument (#3964)
656
-
657
- ```ts
658
- unregister('test', { keepDirty: true });
659
- ```
660
-
661
- - Resolver add `field` being validated (#3881)
662
-
663
- ```diff
664
- - resolver: (values: any, context?: object) => Promise<ResolverResult> | ResolverResult
665
- + resolver: (
666
- + values: any,
667
- + context?: object,
668
- + options: {
669
- + criteriaMode?: 'firstError' | 'all',
670
- + names?: string[],
671
- + fields: { [name]: field } // Support nested field
672
- + }
673
- + ) => Promise<ResolverResult> | ResolverResult
674
- ```
675
-
676
- - `useFieldArray` action can focus input by name and index
677
-
678
- ```ts
679
- append(object, config: { shouldDirty: boolean, focusIndex: number, focusName: string })
680
- insert(object, config: { shouldDirty: boolean, focusIndex: number, focusName: string })
681
- prepend(object, config: { shouldDirty: boolean, focusIndex: number, focusName: string })
682
- ```
683
-
684
- ### Changes
685
-
686
- - **Breaking change:** No longer support IE 11 support
687
-
688
- - **Breaking change:** `register` has been changed from register at `ref` to a function which needs to be spread as props.
689
-
690
- ```diff
691
- - <input ref={register, { required: true }} name="test" />
692
- + <input {...register('name', { required: true })} />
693
- + <TextInput {...register('name', { required: true })} />
694
- ```
695
-
696
- - **Breaking change:** `name` with array will only support dot syntax instead of brackets.
697
-
698
- ```
699
- - test[2].test
700
- + test.2.test
701
- ```
702
-
703
- - **Breaking change:** remove `as` prop at `Controller` and fix render prop consistency (#3732)
704
-
705
- ```diff
706
- - <Controller render={props => <input {...props} />} />
707
- + <Controller render={({ field }) => <input {...field} />} />
708
- ```
709
-
710
- - **Breaking change:** remove `errors` alias (#3737)
711
-
712
- ```diff
713
- - const { errors } = useForm();
714
- + const { formState: { errors } } = useForm();
715
- ```
716
-
717
- - **Breaking change:** improved `reset` second argument (#3905)
718
-
719
- ```diff
720
- - reset({}, { isDirty: true })
721
- + reset({}, { keepIsDirty: true })
722
- ```
723
-
724
- - **Breaking change:** change `touched` to `touchedFields` for consistency (#3923)
725
-
726
- ```diff
727
- - const { formState: { touched } } = useForm();
728
- + const { formState: { touchedFields }} = useForm();
729
- ```
730
-
731
- - **Breaking change:** `trigger` will no longer return validation result.
732
-
733
- ```diff
734
- - await trigger('test') // return true or false
735
- + trigger('test') // void
736
- ```
737
-
738
- - remove `isSubmitting` proxy (#4000)
739
-
740
- - input `register` will no longer be removed due to unmount, user will have to manually invoke `unregister`
741
-
742
- ### Improvements
743
-
744
- - `useWatch` internal mechanism improvement (#3754)
745
- - `Controller` and `useController` apply `useFormState` internally and improve performance (#3778)
746
- - `register` type support for input name (#3738)
747
- - `Controller` and `useCOntroller` type support for input name (#3738)
748
- - `useFieldArray` internal logic and data structure improvement (#3858)
749
- - improve `useFieldArray` internal fields update with subscription (#3943)
750
- - improve tests structure (#3916)
751
- - `useWatch` type improvement (#3931)
752
- - improve type support for nested field array with `const` (#3920)
753
- - improve `useFieldArray` internal type structure (#3986)
754
- - `MutationObserver` removed from `useForm`
755
-
756
- ## [6.15.0] - 2021-02-02
757
-
758
- ### Changed
759
-
760
- - radio input default selection will return `null` instead of empty string `''`
761
- - `valueAsNumber` with empty input will return `NaN` instead of `0`
762
-
763
- ## [6.14.0] - 2020-12-31
764
-
765
- ### Changed
766
-
767
- - `setValue` without shouldUnregister:false will no longer deep clone its value instead with shallow clone
768
-
769
- ### Added
770
-
771
- - new formState `isValidating`, this will set to `true` during validation.
772
-
773
- ```ts
774
- const {
775
- formState: { isValidating },
776
- } = useForm();
777
- ```
778
-
779
- ## [6.12.0] - 2020-12-12
780
-
781
- ### Changed
782
-
783
- - When invoking `reset({ value })` value will be shallow clone value object which you have supplied instead of deepClone.
784
-
785
- ```tsx
786
- // ❌ avoid the following with deep nested default values
787
- const defaultValues = { object: { deepNest: { file: new File() } } };
788
- useForm({ defaultValues });
789
- reset(defaultValues); // share the same reference
790
-
791
- // ✅ it's safer with the following, as we only doing shallow clone with defaultValues
792
- useForm({ deepNest: { file: new File() } });
793
- reset({ deepNest: { file: new File() } });
794
- ```
795
-
796
- ### Added
797
-
798
- - New custom hook `useController`: This custom hook is what powers Controller, and shares the same props and methods as Controller. It's useful to create reusable Controlled input, while Controller is the flexible option to drop into your page or form.
799
-
800
- ```tsx
801
- import React from 'react';
802
- import { TextField } from '@material-ui/core';
803
- import { useController } from 'react-hook-form';
804
-
805
- function Input({ control, name }) {
806
- const {
807
- field: { ref, ...inputProps },
808
- meta: { invalid, isTouched, isDirty },
809
- } = useController({
810
- name,
811
- control,
812
- rules: { required: true },
813
- defaultValue: '',
814
- });
815
-
816
- return <TextField {...inputProps} inputRef={ref} />;
817
- }
818
- ```
819
-
820
- ## [6.12.0] - 2020-11-28
821
-
822
- ### Changed
823
-
824
- - `useWatch` will retrieve the latest value from `reset(data)` instead of return `defaultValue`
825
-
826
- ```tsx
827
- useWatch({
828
- name: 'test',
829
- defaultValue: 'data', // this value will only show on the initial render
830
- });
831
- ```
832
-
833
- - TS: name changed from `ValidationRules` to `RegisterOptions` due to valueAs functionality included as `register` function.
834
-
835
- ### Added
836
-
837
- - `register` function with additional options to transform value
838
-
839
- - `valueAsDate`
840
- - `valueAsNumber`
841
- - `setValue`
842
-
843
- ```tsx
844
- register({
845
- valueAsNumber: true,
846
- });
847
-
848
- register({
849
- valueAsNumber: true,
850
- });
851
-
852
- register({
853
- setValueAs: (value) => value,
854
- });
855
- ```
856
-
857
- ### Added
858
-
859
- ## [6.11.0] - 2020-11-07
860
-
861
- ### Changed
862
-
863
- - `defaultValues` is **required** to measure `isDirty`, keep a single source of truth to avoid multiple issues raised around `isDirty`
864
- - when `watch` with `useFieldArray`, `fields` object is no longer required as defaultValue
865
-
866
- ```diff
867
- - watch('fieldArray', fields);
868
- + watch('fieldArray');
869
- ```
870
-
871
- ## [6.10.0] - 2020-10-31
872
-
873
- ### Added
874
-
875
- - `Controller` will have an extra `ref` props to improve DX in terms of focus management.
876
-
877
- ```tsx
878
- <Controller
879
- name="test"
880
- render={(props) => {
881
- return (
882
- <input
883
- value={props.value}
884
- onChange={props.onChange}
885
- ref={props.ref} // you can assign ref now without the use of `onFocus`
886
- />
887
- );
888
- }}
889
- />
890
-
891
- // focus will work correct without the `onFocus` prop
892
- <Controller name="test" as={<input />} />
893
- ```
894
-
895
- ### Changed
896
-
897
- - `resolver` with group error object will no longer need with `trigger` to show and clear error. This minor version made hook form look at parent error node to detect if there is any group error to show and hide.
898
-
899
- ```tsx
900
- const schema = z.object({
901
- items: z.array(z.boolean()).refine((items) => items.some((item) => item)),
902
- });
903
-
904
- {
905
- items.map((flag, index) => (
906
- <input
907
- type="checkbox"
908
- defaultChecked={false}
909
- // onChange={() => trigger("items")} now can be removed
910
- ref={register}
911
- name={`items.${index}`}
912
- />
913
- ));
914
- }
915
- ```
916
-
917
- ## [6.9.0] - 2020-10-3
918
-
919
- ### Changed
920
-
921
- - with shouldUnregister set to false, empty Field Array will default [] as submission result.
922
-
923
- ```tsx
924
- const { handleSubmit } = useForm({
925
- shouldUnregister: false,
926
- });
927
-
928
- useFieldArray({
929
- name: 'test',
930
- });
931
-
932
- handleSubmit((data) => {
933
- // shouldUnregister: false
934
- // result: { data: {test: []} }
935
- // shouldUnregister: true
936
- // result: {}
937
- });
938
- ```
939
-
940
- ## [6.8.4] - 2020-09-22
941
-
942
- ### Changed
943
-
944
- - when input unmounts `touched` and `dirtyFields` will no longer get removed from `formState` (shouldUnregister: true).
945
-
946
- ## [6.8.0] - 2020-09-09
947
-
948
- ### Added
949
-
950
- - new formState `isSubmitSuccessful` to indicate successful submission
951
- - `setError` now support focus on the actual input
952
-
953
- ```typescript jsx
954
- setError('test', { message: 'This is required', shouldFocus: true });
955
- ```
956
-
957
- ### Changed
958
-
959
- - with `shouldUnregister:false` `defaultValues` data will be part of the submission data
960
- - with `shouldUnregister:false` conditional field is going to work with `useFieldArray`
961
- - `setValue` now support `useFieldArray`
962
-
963
- ```diff
964
- - setValue('test', 'data')
965
- + setValue('test', [{ test: '123' }]) // make it work for useFieldArray and target a field array key
966
- ```
967
-
968
- - remove `exact` config at clearErrors
969
-
970
- ```diff
971
- - clearErrors('test', { exact: false })
972
- + clearErrors('test') // does it automatically in the lib
973
- ```
974
-
975
- ## [6.7.0] - 2020-08-30
976
-
977
- ### Added
978
-
979
- - `clearError` have second option argument for clear errors which are exact or key name
980
-
981
- ```ts
982
- register('test.firstName', { required: true });
983
- register('test.lastName', { required: true });
984
- clearErrors('test', { exact: false }); // will clear both errors from test.firstName and test.lastName
985
- clearErrors('test.firstName'); // for clear single input error
986
- ```
987
-
988
- ## [6.6.0] - 2020-08-28
989
-
990
- ### Changed
991
-
992
- - all types from this lib has been exported. **Important:** only documented type: https://react-hook-form.com/ts will avoid breaking change.
993
-
994
- ## [6.5.0] - 2020-08-23
995
-
996
- ### Changed
997
-
998
- - `errors` is also part of `formState` object
999
- - `disabled` input will not be part of the submission data by following the [HTML standard](https://html.spec.whatwg.org/multipage/forms.html#constructing-the-form-data-set)
1000
-
1001
- ## [6.4.0] - 2020-08-15
1002
-
1003
- ### Added
1004
-
1005
- - `Controller`'s `render` prop will pass down `name` prop
1006
- - `handleSubmit` take a second callback for errors callback
1007
- - new mode `onTouched` will only trigger validation after inputs are touched
1008
-
1009
- ### Changed
1010
-
1011
- - `register` no longer compare `ref` difference with React Native
1012
-
1013
- ## [6.3.2] - 2020-08-11
1014
-
1015
- ### Changed
1016
-
1017
- - IE 11 version will be required to install `@babel/runtime-corejs3` as dependency at your own project
1018
-
1019
- ## [6.3.0] - 2020-08-8
1020
-
1021
- ### Changed
1022
-
1023
- - `defaultValue` is become **required** for `useFieldArray` at each input
1024
-
1025
- ## [6.2.0] - 2020-07-30
1026
-
1027
- ### Changed
1028
-
1029
- - revert `getValues` will return default values before inputs registration
1030
-
1031
- ## [6.1.0] - 2020-07-26
1032
-
1033
- ### Changed
1034
-
1035
- - `resolver` supports both async and sync
1036
- - `getValues` will return default values before inputs registration
1037
-
1038
- ## [6.0.7] - 2020-07-17
1039
-
1040
- ### Added
1041
-
1042
- - export `ArrayField` type
1043
-
1044
- ### Changed
1045
-
1046
- - error message will support array of messages for specific type
1047
-
1048
- ```diff
1049
- - export type ValidateResult = Message | boolean | undefined;
1050
- + export type ValidateResult = Message | Message[] | boolean | undefined;
1051
- ```
1052
-
1053
- ## [6.0.3] - 2020-07-10
1054
-
1055
- ### Changed
1056
-
1057
- - Controller `onFocus` works with React Native
1058
- - Controller stop producing `checked` prop by boolean `value`
1059
-
1060
- ## [6.0.2] - 2020-07-8
1061
-
1062
- ### Added
1063
-
1064
- - export `UseFormOptions`, `UseFieldArrayOptions`, `FieldError`, `Field` and `Mode` type
1065
-
1066
- ## [6.0.1] - 2020-07-3
1067
-
1068
- ### Added
1069
-
1070
- - export `ValidationRules` type
1071
-
1072
- ## [6.0.0] - 2020-07-1
1073
-
1074
- ### Added
1075
-
1076
- - config for `shouldUnregister` which allow input to be persist even after unmount
1077
-
1078
- ```typescript
1079
- useForm({
1080
- shouldUnregister: false, // unmount input state will be remained
1081
- });
1082
- ```
1083
-
1084
- - auto focus with useFieldArray
1085
-
1086
- ```ts
1087
- append({}, (autoFocus = true));
1088
- prepend({}, (autoFocus = true));
1089
- insert({}, (autoFocus = true));
1090
- ```
1091
-
1092
- - TS: NestedValue
1093
-
1094
- ```tsx
1095
- import { useForm, NestedValue } from 'react-hook-form';
1096
-
1097
- type FormValues = {
1098
- key1: string;
1099
- key2: number;
1100
- key3: NestedValue<{
1101
- key1: string;
1102
- key2: number;
1103
- }>;
1104
- key4: NestedValue<string[]>;
1105
- };
1106
-
1107
- const { errors } = useForm<FormValues>();
1108
-
1109
- errors?.key1?.message; // no type error
1110
- errors?.key2?.message; // no type error
1111
- errors?.key3?.message; // no type error
1112
- errors?.key4?.message; // no type error
1113
- ```
1114
-
1115
- - `useWatch` (new) subscribe to registered inputs.
1116
-
1117
- ```tsx
1118
- <input name="test" ref={register} />;
1119
-
1120
- function IsolateReRender() {
1121
- const { state } = useWatch({
1122
- name: 'test',
1123
- control,
1124
- defaultValue: 'default',
1125
- });
1126
-
1127
- return <div>{state}</div>;
1128
- }
1129
- ```
1130
-
1131
- - `getValues()` support array of field names
1132
-
1133
- ```typescript jsx
1134
- getValues(['test', 'test1']); // { test: 'test', test1: 'test1' }
1135
- ```
1136
-
1137
- - `useForm({ mode: 'all' })` support all validation
1138
-
1139
- ### Changed
1140
-
1141
- - rename `validationResolver` to `resolver`
1142
- - rename `validationContext` to `context`
1143
- - rename `validateCriteriaMode` to `criteriaMode`
1144
- - rename `triggerValidation` to `trigger`
1145
- - rename `clearError` to `clearErrors`
1146
- - rename `FormContext` to `FormProvider`
1147
- - rename `dirty` to `isDirty`
1148
- - `dirtyFields` change type from `Set` to `Object`
1149
-
1150
- - Controller with render props API, and removed the following props:
1151
- - onChange
1152
- - onChangeName
1153
- - onBlur
1154
- - onBlurName
1155
- - valueName
1156
-
1157
- ```diff
1158
- -<Controller
1159
- - as={CustomInput}
1160
- - valueName="textValue"
1161
- - onChangeName="onTextChange"
1162
- - control={control}
1163
- - name="test"
1164
- -/>
1165
- +<Controller
1166
- + render={({ onChange, onBlur, value }) => (
1167
- + <CustomInput onTextChange={onChange} onBlur={onBlur} textValue={value} />
1168
- + )}
1169
- + control={control}
1170
- + name="test"
1171
- +/>
1172
- ```
1173
-
1174
- - `setError` will focus one error at a time and remove confusing set multiple errors, behavior change.
1175
- - setError will persis an error if it's not part of the form, which requires manual remove with clearError
1176
- - setError error will be removed by validation rules, rules always take over errors
1177
-
1178
- ```diff
1179
- - setError('test', 'test', 'test')
1180
- + setError('test', { type: 'test', message: 'bill'})
1181
- ```
1182
-
1183
- - `setValue` will focus on input at a time
1184
-
1185
- ```diff
1186
- setValue('test', 'value', { shouldValidate: false, shouldDirty: false })
1187
- ```
1188
-
1189
- ### Removed
1190
-
1191
- - remove `validationSchema` and embrace validation `resolver`
1192
- - remove `nest` option for `watch` & `getValues`, so data return from both methods will be in FormValues shape.
1193
-
1194
- ```diff
1195
- -getValues({ nest: true }); // { test: { data: 'test' }}
1196
- -watch({ nest: true }); // { test: { data: 'test' }}
1197
- +getValues(); // { test: { data: 'test' }}
1198
- +watch(); // { test: { data: 'test' }}
1199
- ```
1200
-
1201
- ## [5.0.0] - 2020-03-07
1202
-
1203
- ### Breaking Change
1204
-
1205
- - `Controller`: onChange will only evaluate payload as event like object. eg: react-select will no longer need the extra `onChange` method at `Controller`.
1206
-
1207
- ```diff
1208
- import { TextInput } from 'react-native';
1209
-
1210
- -<Controller
1211
- - as={<TextInput style={{ borderWidth: 2, borderColor: 'black'}} />}
1212
- - name="text"
1213
- - control={args => ({
1214
- - value: args[0].nativeEvent.text,
1215
- - })}
1216
- - onChange={onChange}
1217
- -/>
1218
- +<Controller
1219
- + as={<TextInput style={{ borderWidth: 2, borderColor: 'black'}} />}
1220
- + name="text"
1221
- + control={args => args[0].nativeEvent.text}
1222
- + onChange={onChange}
1223
- +/>
1224
- ```
1225
-
1226
- ## [4.0.0] - 2019-12-24
1227
-
1228
- ### Breaking changes
1229
-
1230
- - improve module **exports**:
1231
-
1232
- ```tsx
1233
- import { useForm } from 'react-hook-form';
1234
- ```
1235
-
1236
- - nested `errors` object and better typescript support
1237
-
1238
- ```tsx
1239
- type form = {
1240
- yourDetail: {
1241
- firstName: string;
1242
- };
1243
- };
1244
-
1245
- errors?.yourDetail?.firstName;
1246
- ```
1247
-
1248
- - triggerValidation argument change from `Object`, `Object[]` to `String`, `String[]`
1249
-
1250
- ```tsx
1251
- triggerValidation('firstName');
1252
- triggerValidation(['firstName', 'lastName']);
1253
- ```
1254
-
1255
- - watch support `{ nest: boolean }`
1256
-
1257
- ```tsx
1258
- watch(); // { 'test.firstName': 'bill' }
1259
- watch({ nest: true }); // { test: { firstName: 'bill' } }
1260
- ```
1261
-
1262
- - improve custom `register`
1263
-
1264
- ```tsx
1265
- register('test', { required: true });
1266
- ```
1267
-
1268
- - setError` support nested object
1269
-
1270
- ```tsx
1271
- setError('yourDetail.firstName', 'test');
1272
- errors.yourDetails.firstName;
1273
- ```
1274
-
1275
- - `handleSubmit` no longer rerun array inputs contains `undefined` or `null`
1276
-
1277
- ### Added
1278
-
1279
- - move `RHFInput` into the main repo and rename it to `Controller`
1280
-
1281
- ```tsx
1282
- <Controller control={control} name="test" />
1283
- ```
1284
-
1285
- ### Removed
1286
-
1287
- - `validationSchemaOption`: hardly anyone want to use validation with abort early, or change the config.
1288
-
1289
- - native validation: hardly anyone used this feature. https://react-hook-form.com/api/#Browserbuiltinvalidation
1290
-
1291
- ## [3.0.0] - 2019-04-21
1292
-
1293
- ### Added
1294
-
1295
- React Hook Form return a new `formState: Object` which contain the following information
1296
-
1297
- - `dirty`: when user interactive any fields
1298
- - `touched`: what are the fields have interacted
1299
- - `isSubmitted`: whether the form have been triggered with submitting
1300
-
1301
- ```tsx
1302
- const {
1303
- formState: { dirty, touched, isSubmitted },
1304
- } = useForm();
1305
- ```
1306
-
1307
- ## [2.0.0] - 2019-03-29
1308
-
1309
- ### Added
1310
-
1311
- - support `ref={register}` instead of only `ref={register()}`