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 +65 -2
- package/mobx-form/mobx-form.d.ts +19 -1
- package/mobx-form/mobx-form.d.ts.map +1 -1
- package/mobx-form/mobx-form.js +27 -11
- package/mobx-form/mobx-form.types.d.ts +1 -1
- package/package.json +1 -1
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
|
+
```
|
package/mobx-form/mobx-form.d.ts
CHANGED
|
@@ -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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"}
|
package/mobx-form/mobx-form.js
CHANGED
|
@@ -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.
|
|
419
|
-
|
|
420
|
-
|
|
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();
|