mobx-react-hook-form 5.1.0 → 5.1.2

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,69 @@ 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
+ Also you can pass `undefined` as value to remove value
55
+ It should work the same as `field.onChange` from `react-hook-form`'s Controller
56
+
57
+ Example:
58
+
59
+ ```tsx
60
+ // Update a single field
61
+ changeField("name", "value");
62
+
63
+ /** form submitted **/
64
+
65
+ changeField("name", "value"); // will call setValue('name', 'value', { shouldValidate: true })
66
+
67
+ changeField("name", undefined); // removes value
68
+ ```
69
+
70
+ ### `submit()`
71
+
72
+ This method is needed to pass into `<form />` as `onSubmit` prop, or you can call this method if you want to submit form
73
+
74
+ Example:
75
+
76
+ ```tsx
77
+ const form = new Form();
78
+
79
+ const Component = () => {
80
+ return (
81
+ <form onSubmit={form.submit} onReset={form.reset}>
82
+ ...
83
+ </form>
84
+ );
85
+ };
86
+ ```
87
+
88
+ ### `reset()`
89
+
90
+ This method is needed to pass into `<form />` as `onReset` prop, or you can call this method if you want to reset form
91
+
92
+ Example:
93
+
94
+ ```tsx
95
+ const form = new Form();
96
+
97
+ const Component = () => {
98
+ return (
99
+ <form onSubmit={form.submit} onReset={form.reset}>
100
+ ...
101
+ </form>
102
+ );
103
+ };
104
+ ```
@@ -1,5 +1,5 @@
1
1
  import { BaseSyntheticEvent } from 'react';
2
- import { Control, createFormControl, DeepMap, DeepPartial, DefaultValues, FieldErrors, FieldValues, FormState, UseFormClearErrors, UseFormRegister, UseFormReset, UseFormResetField, UseFormSetError, UseFormSetFocus, UseFormSetValue, UseFormTrigger, UseFormUnregister } from 'react-hook-form';
2
+ import { Control, createFormControl, DeepMap, DeepPartial, DefaultValues, FieldErrors, FieldPath, FieldPathValue, FieldValues, FormState, SetValueConfig, UseFormClearErrors, UseFormRegister, UseFormReset, UseFormResetField, UseFormSetError, UseFormSetFocus, UseFormSetValue, UseFormTrigger, UseFormUnregister } from 'react-hook-form';
3
3
  import { FormParams } from './mobx-form.types.js';
4
4
  type FormFullState<TFieldValues extends FieldValues> = FormState<TFieldValues> & {
5
5
  values: TFieldValues;
@@ -261,8 +261,22 @@ export declare class Form<TFieldValues extends FieldValues = FieldValues, TConte
261
261
  /**
262
262
  * The same as setValue, but will trigger validation if form was submitted
263
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
+ * ```
264
278
  */
265
- changeField: UseFormSetValue<TFieldValues>;
279
+ changeField: <TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(name: TFieldName, value: FieldPathValue<TFieldValues, TFieldName> | undefined, options?: SetValueConfig) => void;
266
280
  /**
267
281
  * Method to manually submit form.
268
282
  * Used to attach this method to <form /> element
@@ -282,7 +296,6 @@ export declare class Form<TFieldValues extends FieldValues = FieldValues, TConte
282
296
  */
283
297
  reset(e?: BaseSyntheticEvent): void;
284
298
  private updateFormState;
285
- protected lastRafId: number | undefined;
286
299
  protected lastTimeoutId: number | undefined;
287
300
  private stopScheduledFormStateUpdate;
288
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":"AASA,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,aAAa,EACb,WAAW,EACX,SAAS,EACT,cAAc,EACd,WAAW,EACX,SAAS,EAGT,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,KAAK,aAAa,CAAC,YAAY,SAAS,WAAW,IACjD,SAAS,CAAC,YAAY,CAAC,GAAG;IACxB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEJ,qBAAa,IAAI,CACf,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,QAAQ,GAAG,GAAG,EACd,kBAAkB,GAAG,YAAY,CACjC,YAAW,aAAa,CAAC,YAAY,CAAC;IAqRpC,OAAO,CAAC,MAAM;IAnRhB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAS;IACzB,SAAS,EAAE,OAAO,CAAS;IAC3B,WAAW,EAAE,OAAO,CAAS;IAC7B,kBAAkB,EAAE,OAAO,CAAS;IACpC,YAAY,EAAE,OAAO,CAAS;IAC9B,YAAY,EAAE,OAAO,CAAS;IAC9B,OAAO,EAAE,OAAO,CAAS;IACzB,QAAQ,EAAE,OAAO,CAAS;IAC1B,WAAW,EAAE,MAAM,CAAK;IACxB;;;OAGG;IACH,aAAa,EAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;IACtD,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5E,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9E,gBAAgB,EAAE,OAAO,CACvB,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CACtD,CAAC;IACF,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IAClC,OAAO,EAAE,OAAO,CAAS;IAEzB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAExC;;;;;;;;;;;;;;;OAeG;IACH,WAAW,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAE9C;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IAEtC;;;;;;;;;;;;;;OAcG;IACH,UAAU,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAE5C;;;;;;;;;;;;;;;;;OAiBG;IACH,UAAU,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAE5C;;;;;;OAMG;IACH,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,QAAQ,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAExC;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,QAAQ,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,SAAS,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC;IAEtC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAE3C;;OAEG;IACH,YAAY,EAAE,UAAU,CACtB,OAAO,iBAAiB,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CACrE,CAAC;IAEF,OAAO,CAAC,iBAAiB,CAKvB;gBAGQ,MAAM,EAAE,UAAU,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC;IAkHxE;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,GACT,UAAU,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,EAEpE,MAAM,UAAU,EAChB,OAAO,cAAc,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,SAAS,EAC3D,UAAU,cAAc,UAMxB;IAEF;;;;;;;OAOG;IACH,MAAM,CAAC,CAAC,CAAC,EAAE,kBAAkB;IAe7B;;;;;;;OAOG;IACH,KAAK,CAAC,CAAC,CAAC,EAAE,kBAAkB;IAK5B,OAAO,CAAC,eAAe;IAwBvB,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5C,OAAO,CAAC,4BAA4B,CAKlC;IAEF,OAAO,CAAC,uBAAuB,CAQ7B;IAEF,OAAO,IAAI,IAAI;CAIhB;AAED;;GAEG;AACH,qBAAa,QAAQ,CACnB,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,QAAQ,GAAG,GAAG,EACd,kBAAkB,GAAG,YAAY,CACjC,SAAQ,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC;CAAG"}
@@ -357,11 +357,25 @@ export class Form {
357
357
  /**
358
358
  * The same as setValue, but will trigger validation if form was submitted
359
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
+ * ```
360
374
  */
361
- changeField = (name, value, opts) => {
375
+ changeField = (name, value, options) => {
362
376
  this.setValue(name, value, {
363
- ...opts,
364
- shouldValidate: opts?.shouldValidate ?? this.isSubmitted,
377
+ ...options,
378
+ shouldValidate: options?.shouldValidate ?? this.isSubmitted,
365
379
  });
366
380
  };
367
381
  /**
@@ -410,13 +424,8 @@ export class Form {
410
424
  values,
411
425
  });
412
426
  }
413
- lastRafId;
414
427
  lastTimeoutId;
415
428
  stopScheduledFormStateUpdate = () => {
416
- if (this.lastRafId !== undefined) {
417
- cancelAnimationFrame(this.lastRafId);
418
- this.lastRafId = undefined;
419
- }
420
429
  if (this.lastTimeoutId !== undefined) {
421
430
  clearTimeout(this.lastTimeoutId);
422
431
  this.lastTimeoutId = undefined;
@@ -425,11 +434,8 @@ export class Form {
425
434
  scheduleUpdateFormState = (rawFormState) => {
426
435
  this.stopScheduledFormStateUpdate();
427
436
  this.lastTimeoutId = setTimeout(() => {
428
- this.lastRafId = requestAnimationFrame(() => {
429
- this.updateFormState(rawFormState);
430
- this.lastTimeoutId = undefined;
431
- this.lastRafId = undefined;
432
- });
437
+ this.updateFormState(rawFormState);
438
+ this.lastTimeoutId = undefined;
433
439
  }, this.config.lazyUpdatesTimer ?? 0);
434
440
  };
435
441
  destroy() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobx-react-hook-form",
3
- "version": "5.1.0",
3
+ "version": "5.1.2",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "keywords": [],