mobx-react-hook-form 5.0.0 → 5.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # [mobx-react-hook-form](https://github.com/js2me/mobx-react-hook-form)
2
2
 
3
- Simple [react-hook-form](https://react-hook-form.com/) wrapper for [MobX](https://mobx.js.org/).
3
+ Simple [react-hook-form](https://react-hook-form.com/) wrapper for [MobX](https://mobx.js.org/).
4
4
 
5
- ## Usage
5
+ ## Usage
6
6
 
7
7
  ```tsx
8
8
  import { reaction } from "mobx";
@@ -36,3 +36,66 @@ const YourView = observer(() => {
36
36
  })
37
37
 
38
38
  ```
39
+
40
+ ## API
41
+
42
+ This library uses [`createFormControl`](https://react-hook-form.com/docs/createFormControl).
43
+ So API is almost identical with result of `createFormControl` function call.
44
+
45
+ Differences:
46
+
47
+ - `reset` method renamed to `resetForm`
48
+
49
+ ## Additional API
50
+
51
+ ### `changeField(name, value, opts)`
52
+
53
+ The same as [`setValue`](https://react-hook-form.com/docs/useform/setvalue), but will trigger validation if form was submitted
54
+ It should work the same as `field.onChange` from `react-hook-form`'s Controller
55
+
56
+ Example:
57
+
58
+ ```tsx
59
+ // Update a single field
60
+ changeField("name", "value");
61
+
62
+ /** form submitted **/
63
+
64
+ changeField("name", "value"); // will call setValue('name', 'value', { shouldValidate: true })
65
+ ```
66
+
67
+ ### `submit()`
68
+
69
+ This method is needed to pass into `<form />` as `onSubmit` prop, or you can call this method if you want to submit form
70
+
71
+ Example:
72
+
73
+ ```tsx
74
+ const form = new Form();
75
+
76
+ const Component = () => {
77
+ return (
78
+ <form onSubmit={form.submit} onReset={form.reset}>
79
+ ...
80
+ </form>
81
+ );
82
+ };
83
+ ```
84
+
85
+ ### `reset()`
86
+
87
+ This method is needed to pass into `<form />` as `onReset` prop, or you can call this method if you want to reset form
88
+
89
+ Example:
90
+
91
+ ```tsx
92
+ const form = new Form();
93
+
94
+ const Component = () => {
95
+ return (
96
+ <form onSubmit={form.submit} onReset={form.reset}>
97
+ ...
98
+ </form>
99
+ );
100
+ };
101
+ ```
@@ -258,6 +258,25 @@ export declare class Form<TFieldValues extends FieldValues = FieldValues, TConte
258
258
  originalForm: ReturnType<typeof createFormControl<TFieldValues, TContext, TTransformedValues>>;
259
259
  private _observableStruct;
260
260
  constructor(config: FormParams<TFieldValues, TContext, TTransformedValues>);
261
+ /**
262
+ * The same as setValue, but will trigger validation if form was submitted
263
+ * It should work the same as field.onChange from react-hook-form's Controller
264
+ *
265
+ * @param name - the path name to the form field value.
266
+ * @param value - field value
267
+ * @param options - should validate or update form state
268
+ *
269
+ * @example
270
+ * ```tsx
271
+ * // Update a single field
272
+ * changeField('name', 'value');
273
+ *
274
+ * ** form submitted **
275
+ *
276
+ * changeField('name', 'value'); // will call setValue('name', 'value', { shouldValidate: true })
277
+ * ```
278
+ */
279
+ changeField: UseFormSetValue<TFieldValues>;
261
280
  /**
262
281
  * Method to manually submit form.
263
282
  * Used to attach this method to <form /> element
@@ -277,7 +296,6 @@ export declare class Form<TFieldValues extends FieldValues = FieldValues, TConte
277
296
  */
278
297
  reset(e?: BaseSyntheticEvent): void;
279
298
  private updateFormState;
280
- protected lastRafId: number | undefined;
281
299
  protected lastTimeoutId: number | undefined;
282
300
  private stopScheduledFormStateUpdate;
283
301
  private scheduleUpdateFormState;
@@ -1 +1 @@
1
- {"version":3,"file":"mobx-form.d.ts","sourceRoot":"","sources":["../../src/mobx-form/mobx-form.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mobx-form.d.ts","sourceRoot":"","sources":["../../src/mobx-form/mobx-form.ts"],"names":[],"mappings":"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"}
@@ -354,6 +354,30 @@ export class Form {
354
354
  this.data = null;
355
355
  });
356
356
  }
357
+ /**
358
+ * The same as setValue, but will trigger validation if form was submitted
359
+ * It should work the same as field.onChange from react-hook-form's Controller
360
+ *
361
+ * @param name - the path name to the form field value.
362
+ * @param value - field value
363
+ * @param options - should validate or update form state
364
+ *
365
+ * @example
366
+ * ```tsx
367
+ * // Update a single field
368
+ * changeField('name', 'value');
369
+ *
370
+ * ** form submitted **
371
+ *
372
+ * changeField('name', 'value'); // will call setValue('name', 'value', { shouldValidate: true })
373
+ * ```
374
+ */
375
+ changeField = (name, value, opts) => {
376
+ this.setValue(name, value, {
377
+ ...opts,
378
+ shouldValidate: opts?.shouldValidate ?? this.isSubmitted,
379
+ });
380
+ };
357
381
  /**
358
382
  * Method to manually submit form.
359
383
  * Used to attach this method to <form /> element
@@ -400,13 +424,8 @@ export class Form {
400
424
  values,
401
425
  });
402
426
  }
403
- lastRafId;
404
427
  lastTimeoutId;
405
428
  stopScheduledFormStateUpdate = () => {
406
- if (this.lastRafId !== undefined) {
407
- cancelAnimationFrame(this.lastRafId);
408
- this.lastRafId = undefined;
409
- }
410
429
  if (this.lastTimeoutId !== undefined) {
411
430
  clearTimeout(this.lastTimeoutId);
412
431
  this.lastTimeoutId = undefined;
@@ -415,12 +434,9 @@ export class Form {
415
434
  scheduleUpdateFormState = (rawFormState) => {
416
435
  this.stopScheduledFormStateUpdate();
417
436
  this.lastTimeoutId = setTimeout(() => {
418
- this.lastRafId = requestAnimationFrame(() => {
419
- this.updateFormState(rawFormState);
420
- this.lastTimeoutId = undefined;
421
- this.lastRafId = undefined;
422
- });
423
- }, this.config.lazyUpdatesTimer ?? 50);
437
+ this.updateFormState(rawFormState);
438
+ this.lastTimeoutId = undefined;
439
+ }, this.config.lazyUpdatesTimer ?? 0);
424
440
  };
425
441
  destroy() {
426
442
  this.abortController.abort();
@@ -36,7 +36,7 @@ export interface FormParams<TFieldValues extends FieldValues = FieldValues, TCon
36
36
  lazyUpdates?: boolean;
37
37
  /**
38
38
  * lazy mobx form state updates timer in ms
39
- * @defaults `50`
39
+ * @defaults `0`
40
40
  */
41
41
  lazyUpdatesTimer?: number;
42
42
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobx-react-hook-form",
3
- "version": "5.0.0",
3
+ "version": "5.1.1",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "keywords": [],