mobx-react-hook-form 2.0.16 → 2.0.17
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/mobx-form/mobx-form.d.ts +12 -9
- package/mobx-form/mobx-form.d.ts.map +1 -1
- package/mobx-form/mobx-form.js +58 -55
- package/package.json +4 -5
package/mobx-form/mobx-form.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { DeepPartial, FormState, SubmitErrorHandler, SubmitHandler, UseFormProps,
|
|
1
|
+
import { DeepPartial, FormState, SubmitErrorHandler, SubmitHandler, UseFormProps, UseFormReturn } from 'react-hook-form';
|
|
2
2
|
import type { AnyObject, Maybe } from 'yummies/utils/types';
|
|
3
|
-
import { MobxFormParams } from './mobx-form.types';
|
|
3
|
+
import { ConnectedMobxForm, MobxFormParams } from './mobx-form.types';
|
|
4
4
|
export declare class MobxForm<TFieldValues extends AnyObject, TContext = any, TFieldOutputValues extends AnyObject = TFieldValues> {
|
|
5
5
|
private config;
|
|
6
6
|
protected abortController: AbortController;
|
|
@@ -9,11 +9,13 @@ export declare class MobxForm<TFieldValues extends AnyObject, TContext = any, TF
|
|
|
9
9
|
* Needed to connect real react-hook-form to this mobx wrapper
|
|
10
10
|
*/
|
|
11
11
|
params: UseFormProps<TFieldValues, TContext>;
|
|
12
|
+
protected handleSubmit(...args: Parameters<SubmitHandler<TFieldOutputValues>>): void | Promise<void>;
|
|
13
|
+
protected handleSubmitFailed(...args: Parameters<SubmitErrorHandler<TFieldValues>>): void | Promise<void>;
|
|
12
14
|
protected handleReset(): void;
|
|
13
15
|
/**
|
|
14
16
|
* Original react-hook-form form
|
|
15
17
|
*/
|
|
16
|
-
|
|
18
|
+
form: Maybe<UseFormReturn<TFieldValues, TContext, TFieldOutputValues>>;
|
|
17
19
|
/**
|
|
18
20
|
* form state received from form.formState
|
|
19
21
|
*/
|
|
@@ -22,13 +24,8 @@ export declare class MobxForm<TFieldValues extends AnyObject, TContext = any, TF
|
|
|
22
24
|
* Raw data received from form.getValues()
|
|
23
25
|
*/
|
|
24
26
|
data: Maybe<DeepPartial<TFieldValues>>;
|
|
25
|
-
onSubmit: (event?: any) => Promise<void>;
|
|
26
27
|
protected isConnected: boolean;
|
|
27
28
|
constructor(config: MobxFormParams<TFieldValues, TContext, TFieldOutputValues>);
|
|
28
|
-
protected handleSubmit(...args: Parameters<SubmitHandler<TFieldOutputValues>>): void | Promise<void>;
|
|
29
|
-
protected handleSubmitFailed(...args: Parameters<SubmitErrorHandler<TFieldValues>>): void | Promise<void>;
|
|
30
|
-
protected syncForm(formState: Partial<FormState<TFieldValues>>, data?: DeepPartial<TFieldValues> | TFieldValues): void;
|
|
31
|
-
onReset: () => void;
|
|
32
29
|
/**
|
|
33
30
|
* Allows to modify real react-hook-form useForm() payload
|
|
34
31
|
*/
|
|
@@ -37,7 +34,13 @@ export declare class MobxForm<TFieldValues extends AnyObject, TContext = any, TF
|
|
|
37
34
|
* Allows to modify real react-hook-form useForm() payload
|
|
38
35
|
*/
|
|
39
36
|
updateParams(params: Partial<UseFormProps<TFieldValues, TContext>>): void;
|
|
40
|
-
|
|
37
|
+
protected syncForm(formResult: UseFormReturn<TFieldValues, TContext, TFieldOutputValues>, data?: DeepPartial<TFieldValues>): void;
|
|
38
|
+
/**
|
|
39
|
+
* Needed to connect real react-hook-form to this mobx wrapper
|
|
40
|
+
*
|
|
41
|
+
* This is used in useMobxForm
|
|
42
|
+
*/
|
|
43
|
+
protected connect(formResult: UseFormReturn<TFieldValues, TContext, TFieldOutputValues>): ConnectedMobxForm<TFieldValues, TContext, TFieldOutputValues>;
|
|
41
44
|
/**
|
|
42
45
|
* @deprecated use destroy();
|
|
43
46
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobx-form.d.ts","sourceRoot":"","sources":["../../src/mobx-form/mobx-form.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mobx-form.d.ts","sourceRoot":"","sources":["../../src/mobx-form/mobx-form.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,aAAa,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtE,qBAAa,QAAQ,CACnB,YAAY,SAAS,SAAS,EAC9B,QAAQ,GAAG,GAAG,EACd,kBAAkB,SAAS,SAAS,GAAG,YAAY;IAiDjD,OAAO,CAAC,MAAM;IA/ChB,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAE3C;;;OAGG;IACH,MAAM,EAAE,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAE7C,SAAS,CAAC,YAAY,CAEpB,GAAG,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,GACrD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvB,SAAS,CAAC,kBAAkB,CAE1B,GAAG,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,GACpD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvB,SAAS,CAAC,WAAW;IAKrB;;OAEG;IACH,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEvE;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IAE/B;;OAEG;IACH,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;IAEvC,SAAS,CAAC,WAAW,UAAS;gBAGpB,MAAM,EAAE,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC;IAwD5E;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC;IAItD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAIlE,SAAS,CAAC,QAAQ,CAChB,UAAU,EAAE,aAAa,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC,EACrE,IAAI,GAAE,WAAW,CAAC,YAAY,CAAiC;IAOjE;;;;OAIG;IACH,SAAS,CAAC,OAAO,CACf,UAAU,EAAE,aAAa,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC,GACpE,iBAAiB,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,CAAC;IA4ChE;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
|
package/mobx-form/mobx-form.js
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
import { LinkedAbortController } from 'linked-abort-controller';
|
|
2
|
-
import { action, makeObservable, observable, reaction
|
|
3
|
-
import { createFormControl, } from 'react-hook-form';
|
|
4
|
-
const dependsOn = {
|
|
5
|
-
isDirty: true,
|
|
6
|
-
isLoading: true,
|
|
7
|
-
isValidating: true,
|
|
8
|
-
isValid: true,
|
|
9
|
-
dirtyFields: true,
|
|
10
|
-
touchedFields: true,
|
|
11
|
-
validatingFields: true,
|
|
12
|
-
errors: true,
|
|
13
|
-
};
|
|
2
|
+
import { action, makeObservable, observable, reaction } from 'mobx';
|
|
14
3
|
export class MobxForm {
|
|
15
4
|
config;
|
|
16
5
|
abortController;
|
|
@@ -19,6 +8,18 @@ export class MobxForm {
|
|
|
19
8
|
* Needed to connect real react-hook-form to this mobx wrapper
|
|
20
9
|
*/
|
|
21
10
|
params;
|
|
11
|
+
handleSubmit(
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
13
|
+
...args) {
|
|
14
|
+
this.config.onSubmit?.(...args);
|
|
15
|
+
// used to override
|
|
16
|
+
}
|
|
17
|
+
handleSubmitFailed(
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
19
|
+
...args) {
|
|
20
|
+
this.config.onSubmitFailed?.(...args);
|
|
21
|
+
// used to override
|
|
22
|
+
}
|
|
22
23
|
handleReset() {
|
|
23
24
|
this.config.onReset?.();
|
|
24
25
|
// used to override
|
|
@@ -26,7 +27,7 @@ export class MobxForm {
|
|
|
26
27
|
/**
|
|
27
28
|
* Original react-hook-form form
|
|
28
29
|
*/
|
|
29
|
-
|
|
30
|
+
form;
|
|
30
31
|
/**
|
|
31
32
|
* form state received from form.formState
|
|
32
33
|
*/
|
|
@@ -35,7 +36,6 @@ export class MobxForm {
|
|
|
35
36
|
* Raw data received from form.getValues()
|
|
36
37
|
*/
|
|
37
38
|
data;
|
|
38
|
-
onSubmit;
|
|
39
39
|
isConnected = false;
|
|
40
40
|
constructor(config) {
|
|
41
41
|
this.config = config;
|
|
@@ -46,7 +46,7 @@ export class MobxForm {
|
|
|
46
46
|
config.disposer.add(() => this.dispose());
|
|
47
47
|
}
|
|
48
48
|
this.abortController.signal.addEventListener('abort', () => {
|
|
49
|
-
this.
|
|
49
|
+
this.form = null;
|
|
50
50
|
this.data = null;
|
|
51
51
|
});
|
|
52
52
|
this.state = {
|
|
@@ -69,22 +69,9 @@ export class MobxForm {
|
|
|
69
69
|
observable.deep(this, 'state');
|
|
70
70
|
observable.deep(this, 'data');
|
|
71
71
|
observable.ref(this, 'params');
|
|
72
|
-
observable.ref(this, 'instance');
|
|
73
72
|
action.bound(this, 'setParams');
|
|
73
|
+
action.bound(this, 'updateParams');
|
|
74
74
|
action.bound(this, 'syncForm');
|
|
75
|
-
this.instance = createFormControl(config);
|
|
76
|
-
this.onSubmit = this.instance?.handleSubmit(this.handleSubmit.bind(this), this.handleSubmitFailed.bind(this));
|
|
77
|
-
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* Subscribes
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*/
|
|
84
|
-
this.instance.subscribe({
|
|
85
|
-
formState: dependsOn,
|
|
86
|
-
callback: (formState) => this.syncForm(formState, formState.values),
|
|
87
|
-
});
|
|
88
75
|
makeObservable(this);
|
|
89
76
|
if (config.getParams) {
|
|
90
77
|
reaction(config.getParams, (params) => {
|
|
@@ -94,29 +81,6 @@ export class MobxForm {
|
|
|
94
81
|
});
|
|
95
82
|
}
|
|
96
83
|
}
|
|
97
|
-
handleSubmit(
|
|
98
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
99
|
-
...args) {
|
|
100
|
-
this.config.onSubmit?.(...args);
|
|
101
|
-
// used to override
|
|
102
|
-
}
|
|
103
|
-
handleSubmitFailed(
|
|
104
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
105
|
-
...args) {
|
|
106
|
-
this.config.onSubmitFailed?.(...args);
|
|
107
|
-
// used to override
|
|
108
|
-
}
|
|
109
|
-
syncForm(formState, data) {
|
|
110
|
-
runInAction(() => {
|
|
111
|
-
Object.assign(this.state, formState);
|
|
112
|
-
if (this.data) {
|
|
113
|
-
this.data = data;
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
onReset = () => {
|
|
118
|
-
this.config.onReset?.();
|
|
119
|
-
};
|
|
120
84
|
/**
|
|
121
85
|
* Allows to modify real react-hook-form useForm() payload
|
|
122
86
|
*/
|
|
@@ -129,13 +93,52 @@ export class MobxForm {
|
|
|
129
93
|
updateParams(params) {
|
|
130
94
|
this.setParams({ ...this.params, ...params });
|
|
131
95
|
}
|
|
132
|
-
|
|
133
|
-
this.
|
|
96
|
+
syncForm(formResult, data = formResult.getValues()) {
|
|
97
|
+
this.form = formResult;
|
|
98
|
+
this.state = formResult.formState;
|
|
99
|
+
this.data = data;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Needed to connect real react-hook-form to this mobx wrapper
|
|
103
|
+
*
|
|
104
|
+
* This is used in useMobxForm
|
|
105
|
+
*/
|
|
106
|
+
connect(formResult) {
|
|
107
|
+
if (!this.isConnected) {
|
|
108
|
+
this.isConnected = true;
|
|
109
|
+
this.syncForm(formResult);
|
|
110
|
+
const formWatchSubscription = formResult.watch((values) => {
|
|
111
|
+
this.syncForm(formResult, values);
|
|
112
|
+
});
|
|
113
|
+
this.abortController.signal.addEventListener('abort', formWatchSubscription.unsubscribe);
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
...formResult,
|
|
117
|
+
onReset: () => this.handleReset(),
|
|
118
|
+
onSubmit: formResult.handleSubmit(
|
|
119
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
120
|
+
// @ts-expect-error
|
|
121
|
+
(...args) => this.handleSubmit(...args), (...args) => this.handleSubmitFailed(...args)),
|
|
122
|
+
handleSubmit: (onValid, onInvalid) => {
|
|
123
|
+
return formResult.handleSubmit(
|
|
124
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
125
|
+
// @ts-expect-error
|
|
126
|
+
async (...args) => {
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
128
|
+
// @ts-expect-error
|
|
129
|
+
await this.handleSubmit(...args);
|
|
130
|
+
await onValid(...args);
|
|
131
|
+
}, async (...args) => {
|
|
132
|
+
await this.handleSubmitFailed(...args);
|
|
133
|
+
await onInvalid?.(...args);
|
|
134
|
+
});
|
|
135
|
+
},
|
|
136
|
+
};
|
|
134
137
|
}
|
|
135
138
|
/**
|
|
136
139
|
* @deprecated use destroy();
|
|
137
140
|
*/
|
|
138
141
|
dispose() {
|
|
139
|
-
this.
|
|
142
|
+
this.abortController.abort();
|
|
140
143
|
}
|
|
141
144
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mobx-react-hook-form",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.17",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "js2me",
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
"peerDependencies": {
|
|
9
9
|
"mobx": "^6.12.4",
|
|
10
10
|
"mobx-react-lite": "^4.0.7",
|
|
11
|
-
"react": "^18.3.1"
|
|
11
|
+
"react": "^18.3.1",
|
|
12
|
+
"react-hook-form": "^7.53.0"
|
|
12
13
|
},
|
|
13
14
|
"dependencies": {
|
|
14
|
-
"react-hook-form": "^7.55.0-next.3",
|
|
15
15
|
"disposer-util": "^1.0.11",
|
|
16
16
|
"linked-abort-controller": "^1.0.1",
|
|
17
17
|
"lodash-es": "^4.17.21",
|
|
@@ -20,10 +20,9 @@
|
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@types/lodash-es": "4.17.12",
|
|
22
22
|
"eslint": "8.57.0",
|
|
23
|
-
"js2me-eslint-config": "1.0.
|
|
23
|
+
"js2me-eslint-config": "1.0.4",
|
|
24
24
|
"js2me-exports-post-build-script": "2.0.10",
|
|
25
25
|
"rimraf": "6.0.1",
|
|
26
|
-
"prettier": "3.3.3",
|
|
27
26
|
"typescript": "5.6.2"
|
|
28
27
|
},
|
|
29
28
|
"exports": {
|