react-form-manage 1.0.6-beta.2 → 1.0.6-beta.3
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/CHANGELOG.md +7 -0
- package/dist/components/Form/FormItem.d.ts +2 -1
- package/dist/hooks/useFormItemControl.d.ts +2 -1
- package/dist/hooks/useFormItemControl.js +25 -10
- package/dist/index.d.ts +2 -2
- package/dist/providers/Form.d.ts +3 -2
- package/dist/providers/Form.js +21 -4
- package/dist/stores/formStore.d.ts +12 -9
- package/dist/stores/formStore.js +1 -1
- package/dist/types/public.d.ts +37 -9
- package/package.json +1 -1
- package/src/App.tsx +74 -3
- package/src/components/Form/FormItem.tsx +2 -1
- package/src/hooks/useFormItemControl.ts +39 -10
- package/src/index.ts +2 -0
- package/src/providers/Form.tsx +48 -10
- package/src/stores/formStore.ts +286 -284
- package/src/types/public.ts +37 -9
package/src/stores/formStore.ts
CHANGED
|
@@ -6,15 +6,15 @@ import { getAllNoneObjStringPath } from "../utils/obj.util";
|
|
|
6
6
|
|
|
7
7
|
export interface FormInstance {
|
|
8
8
|
formName: string;
|
|
9
|
-
resetFields?: any;
|
|
10
|
-
submit?: any;
|
|
11
|
-
submitAsync?: any
|
|
12
|
-
setFieldValue?: any;
|
|
13
|
-
setFieldValues?: any;
|
|
14
|
-
getFieldValue
|
|
15
|
-
getFieldValues?: any
|
|
16
|
-
getFieldErrors
|
|
17
|
-
setFieldFocus
|
|
9
|
+
resetFields: (values?: any) => void;
|
|
10
|
+
submit: (values?: any) => void;
|
|
11
|
+
submitAsync: (values?: any) => Promise<any>;
|
|
12
|
+
setFieldValue: (name: string, value: any, options?: any) => void;
|
|
13
|
+
setFieldValues: (values: Record<string, any>, options?: any) => void;
|
|
14
|
+
getFieldValue: (name: string) => any;
|
|
15
|
+
getFieldValues: (names?: string[]) => Array<{ name: string; value: any }>;
|
|
16
|
+
getFieldErrors: () => Record<string, any>;
|
|
17
|
+
setFieldFocus: (name: string) => void;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
interface ListenerItem {
|
|
@@ -48,311 +48,313 @@ interface FormStoreState {
|
|
|
48
48
|
// methods (loose typed for incremental migration)
|
|
49
49
|
[key: string]: any;
|
|
50
50
|
}
|
|
51
|
-
export const useFormStore = create<FormStoreState>(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
51
|
+
export const useFormStore = create<FormStoreState>(
|
|
52
|
+
(storeSet: any, storeGet: any) => ({
|
|
53
|
+
forms: {},
|
|
54
|
+
initialValues: {},
|
|
55
|
+
formStates: {},
|
|
56
|
+
cacheData: {},
|
|
57
|
+
formInstances: [],
|
|
58
|
+
submitHistory: {},
|
|
59
|
+
setData(formName, name, value) {
|
|
60
|
+
return storeSet(
|
|
61
|
+
produce<any>((state: any) => {
|
|
62
|
+
const oldValues = state.forms;
|
|
63
|
+
set(oldValues, `${formName}.${name}`, value);
|
|
64
|
+
}),
|
|
65
|
+
);
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
getCacheData(formName) {
|
|
69
|
+
return get(storeGet(), `cacheData.${formName}`);
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
setCacheData(formName, name, value) {
|
|
73
|
+
return storeSet(
|
|
74
|
+
produce<any>((state: any) => {
|
|
75
|
+
const oldValues = state.cacheData;
|
|
76
|
+
set(oldValues, `${formName}.${name}`, value);
|
|
77
|
+
}),
|
|
78
|
+
);
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
clearCacheData(formName) {
|
|
82
|
+
return storeSet(
|
|
83
|
+
produce<any>((state: any) => {
|
|
84
|
+
const oldValues = state.cacheData;
|
|
85
|
+
|
|
86
|
+
if (formName) {
|
|
87
|
+
set(oldValues, formName, {});
|
|
88
|
+
} else {
|
|
89
|
+
set(oldValues, "", {});
|
|
90
|
+
}
|
|
91
|
+
}),
|
|
92
|
+
);
|
|
93
|
+
},
|
|
66
94
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
95
|
+
getFormItemValue(formName, name) {
|
|
96
|
+
return get(storeGet().forms?.[formName], name);
|
|
97
|
+
},
|
|
70
98
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const oldValues = state.cacheData;
|
|
75
|
-
set(oldValues, `${formName}.${name}`, value);
|
|
76
|
-
}),
|
|
77
|
-
);
|
|
78
|
-
},
|
|
99
|
+
getFormValues(formName) {
|
|
100
|
+
return storeGet().forms?.[formName];
|
|
101
|
+
},
|
|
79
102
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
103
|
+
clearFormValues(formName) {
|
|
104
|
+
return storeSet(
|
|
105
|
+
produce<any>((state: any) => {
|
|
106
|
+
const oldValues = state.forms;
|
|
84
107
|
|
|
85
|
-
|
|
86
|
-
set(oldValues, formName, {});
|
|
87
|
-
} else {
|
|
88
|
-
set(oldValues, "", {});
|
|
89
|
-
}
|
|
90
|
-
}),
|
|
91
|
-
);
|
|
92
|
-
},
|
|
108
|
+
// console.log("Clear form values", formName);
|
|
93
109
|
|
|
94
|
-
|
|
95
|
-
return get(storeGet().forms?.[formName], name);
|
|
96
|
-
},
|
|
110
|
+
unset(oldValues, formName);
|
|
97
111
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
112
|
+
// console.log(JSON.parse(JSON.stringify(oldValues)));
|
|
113
|
+
}),
|
|
114
|
+
);
|
|
115
|
+
},
|
|
101
116
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
117
|
+
clearFormInitialValues(formName) {
|
|
118
|
+
return storeSet(
|
|
119
|
+
produce<any>((state: any) => {
|
|
120
|
+
const oldValues = state.initialValues;
|
|
106
121
|
|
|
107
|
-
|
|
122
|
+
// console.log("Clear form initial values", formName);
|
|
108
123
|
|
|
109
|
-
|
|
124
|
+
unset(oldValues, formName);
|
|
110
125
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
126
|
+
// console.log(JSON.parse(JSON.stringify(oldValues)));
|
|
127
|
+
}),
|
|
128
|
+
);
|
|
129
|
+
},
|
|
115
130
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
131
|
+
clearObjKeyItem(formName, name) {
|
|
132
|
+
return storeSet(
|
|
133
|
+
produce<any>((state: any) => {
|
|
134
|
+
const oldValues = state.forms;
|
|
120
135
|
|
|
121
|
-
|
|
136
|
+
// console.log("Clear item value", formName, name);
|
|
122
137
|
|
|
123
|
-
|
|
138
|
+
unset(oldValues, `${formName}.${name}`);
|
|
124
139
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
140
|
+
// console.log(JSON.parse(JSON.stringify(oldValues)));
|
|
141
|
+
}),
|
|
142
|
+
);
|
|
143
|
+
},
|
|
144
|
+
clearArrItem(formName, name) {
|
|
145
|
+
return storeSet(
|
|
146
|
+
produce<any>((state: any) => {
|
|
147
|
+
const oldValues = state.forms;
|
|
129
148
|
|
|
130
|
-
|
|
131
|
-
return storeSet(
|
|
132
|
-
produce<any>((state: any) => {
|
|
133
|
-
const oldValues = state.forms;
|
|
149
|
+
console.log("Clear item array value", formName, name);
|
|
134
150
|
|
|
135
|
-
|
|
151
|
+
const arrPath = name.split(".").slice(0, -1).join(".");
|
|
136
152
|
|
|
137
|
-
|
|
153
|
+
const elPath = Number(name.split(".").slice(-1).join(""));
|
|
138
154
|
|
|
139
|
-
|
|
140
|
-
}),
|
|
141
|
-
);
|
|
142
|
-
},
|
|
143
|
-
clearArrItem(formName, name) {
|
|
144
|
-
return storeSet(
|
|
145
|
-
produce<any>((state: any) => {
|
|
146
|
-
const oldValues = state.forms;
|
|
147
|
-
|
|
148
|
-
console.log("Clear item array value", formName, name);
|
|
149
|
-
|
|
150
|
-
const arrPath = name.split(".").slice(0, -1).join(".");
|
|
151
|
-
|
|
152
|
-
const elPath = Number(name.split(".").slice(-1).join(""));
|
|
153
|
-
|
|
154
|
-
const getArrItem = get(oldValues, `${formName}.${arrPath}`);
|
|
155
|
-
|
|
156
|
-
if (isNumber(elPath)) {
|
|
157
|
-
getArrItem.splice(elPath, 1);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// console.log(JSON.parse(JSON.stringify(oldValues)));
|
|
161
|
-
}),
|
|
162
|
-
);
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
setFormState({ formName, isInitied, submitState }) {
|
|
166
|
-
return storeSet(
|
|
167
|
-
produce<any>((state: any) => {
|
|
168
|
-
const oldValues = state.formStates;
|
|
169
|
-
const getFormState = get(storeGet().formStates, formName);
|
|
170
|
-
|
|
171
|
-
if (isNil(getFormState)) {
|
|
172
|
-
set(oldValues, formName, { isInitied, submitState });
|
|
173
|
-
} else {
|
|
174
|
-
if (!isNil(isInitied)) {
|
|
175
|
-
set(oldValues, `${formName}.isInitied`, isInitied);
|
|
176
|
-
}
|
|
155
|
+
const getArrItem = get(oldValues, `${formName}.${arrPath}`);
|
|
177
156
|
|
|
178
|
-
if (
|
|
179
|
-
|
|
157
|
+
if (isNumber(elPath)) {
|
|
158
|
+
getArrItem.splice(elPath, 1);
|
|
180
159
|
}
|
|
181
|
-
}
|
|
182
|
-
}),
|
|
183
|
-
);
|
|
184
|
-
},
|
|
185
|
-
|
|
186
|
-
clearFormState(formName) {
|
|
187
|
-
return storeSet(
|
|
188
|
-
produce<any>((state: any) => {
|
|
189
|
-
const oldValues = state.formStates;
|
|
190
|
-
|
|
191
|
-
// console.log("Clear form state", formName);
|
|
192
|
-
|
|
193
|
-
unset(oldValues, formName);
|
|
194
|
-
|
|
195
|
-
// console.log(JSON.parse(JSON.stringify(oldValues)));
|
|
196
|
-
}),
|
|
197
|
-
);
|
|
198
|
-
},
|
|
199
|
-
|
|
200
|
-
getFormState(formName) {
|
|
201
|
-
return get(storeGet(), `formStates.${formName}`);
|
|
202
|
-
},
|
|
203
|
-
|
|
204
|
-
setFormInitData(formName, initValues) {
|
|
205
|
-
return storeSet(
|
|
206
|
-
produce<any>((state: any) => {
|
|
207
|
-
const oldValues = state.initialValues;
|
|
208
|
-
const listInitPath = getAllNoneObjStringPath(initValues);
|
|
209
|
-
|
|
210
|
-
// console.log({ listInitPath, initValues });
|
|
211
160
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
161
|
+
// console.log(JSON.parse(JSON.stringify(oldValues)));
|
|
162
|
+
}),
|
|
163
|
+
);
|
|
164
|
+
},
|
|
165
|
+
|
|
166
|
+
setFormState({ formName, isInitied, submitState }) {
|
|
167
|
+
return storeSet(
|
|
168
|
+
produce<any>((state: any) => {
|
|
169
|
+
const oldValues = state.formStates;
|
|
170
|
+
const getFormState = get(storeGet().formStates, formName);
|
|
171
|
+
|
|
172
|
+
if (isNil(getFormState)) {
|
|
173
|
+
set(oldValues, formName, { isInitied, submitState });
|
|
174
|
+
} else {
|
|
175
|
+
if (!isNil(isInitied)) {
|
|
176
|
+
set(oldValues, `${formName}.isInitied`, isInitied);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (!isNil(submitState)) {
|
|
180
|
+
set(oldValues, `${formName}.submitState`, submitState);
|
|
181
|
+
}
|
|
216
182
|
}
|
|
217
|
-
})
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
183
|
+
}),
|
|
184
|
+
);
|
|
185
|
+
},
|
|
186
|
+
|
|
187
|
+
clearFormState(formName) {
|
|
188
|
+
return storeSet(
|
|
189
|
+
produce<any>((state: any) => {
|
|
190
|
+
const oldValues = state.formStates;
|
|
191
|
+
|
|
192
|
+
// console.log("Clear form state", formName);
|
|
193
|
+
|
|
194
|
+
unset(oldValues, formName);
|
|
195
|
+
|
|
196
|
+
// console.log(JSON.parse(JSON.stringify(oldValues)));
|
|
197
|
+
}),
|
|
198
|
+
);
|
|
199
|
+
},
|
|
200
|
+
|
|
201
|
+
getFormState(formName) {
|
|
202
|
+
return get(storeGet(), `formStates.${formName}`);
|
|
203
|
+
},
|
|
204
|
+
|
|
205
|
+
setFormInitData(formName, initValues) {
|
|
206
|
+
return storeSet(
|
|
207
|
+
produce<any>((state: any) => {
|
|
208
|
+
const oldValues = state.initialValues;
|
|
209
|
+
const listInitPath = getAllNoneObjStringPath(initValues);
|
|
210
|
+
|
|
211
|
+
// console.log({ listInitPath, initValues });
|
|
212
|
+
|
|
213
|
+
listInitPath.forEach((k) => {
|
|
214
|
+
if (get(initValues, k)) {
|
|
215
|
+
// console.log("init form data values: ", k, get(initValues, k));
|
|
216
|
+
set(oldValues, `${formName}.${k}`, get(initValues, k));
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}),
|
|
220
|
+
);
|
|
221
|
+
},
|
|
222
|
+
|
|
223
|
+
getInitData(formName, name) {
|
|
224
|
+
return get(storeGet().initialValues, `${formName}.${name}`);
|
|
225
|
+
},
|
|
226
|
+
|
|
227
|
+
setInitData(formName, name, value) {
|
|
228
|
+
return storeSet(
|
|
229
|
+
produce<any>((state: any) => {
|
|
230
|
+
const oldValues = state.initialValues;
|
|
231
|
+
console.log("Inner init: ", `${formName}.${name}`, value);
|
|
232
|
+
set(oldValues, `${formName}.${name}`, value);
|
|
233
|
+
}),
|
|
234
|
+
);
|
|
235
|
+
},
|
|
236
|
+
|
|
237
|
+
setFormInstance({
|
|
238
|
+
formName,
|
|
239
|
+
resetFields,
|
|
240
|
+
submit,
|
|
241
|
+
submitAsync,
|
|
242
|
+
setFieldValue,
|
|
243
|
+
setFieldValues,
|
|
244
|
+
getFieldValue,
|
|
245
|
+
getFieldValues,
|
|
246
|
+
getFieldErrors,
|
|
247
|
+
setFieldFocus,
|
|
247
248
|
}) {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
249
|
+
return storeSet(
|
|
250
|
+
produce<any>((state: any) => {
|
|
251
|
+
const storeListeners = state.formInstances;
|
|
252
|
+
const findListenerIndex = storeListeners.findIndex(
|
|
253
|
+
(l) => l.formName === formName,
|
|
254
|
+
);
|
|
255
|
+
if (findListenerIndex > -1) {
|
|
256
|
+
if (!isNil(resetFields)) {
|
|
257
|
+
storeListeners[findListenerIndex].resetFields = resetFields;
|
|
258
|
+
}
|
|
259
|
+
if (!isNil(submit)) {
|
|
260
|
+
storeListeners[findListenerIndex].submit = submit;
|
|
261
|
+
}
|
|
262
|
+
if (!isNil(setFieldFocus)) {
|
|
263
|
+
storeListeners[findListenerIndex].setFieldFocus = setFieldFocus;
|
|
264
|
+
}
|
|
265
|
+
if (!isNil(submitAsync)) {
|
|
266
|
+
storeListeners[findListenerIndex].submitAsync = submitAsync;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
if (!isNil(setFieldValue)) {
|
|
270
|
+
storeListeners[findListenerIndex].setFieldValue = setFieldValue;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (!isNil(setFieldValues)) {
|
|
274
|
+
storeListeners[findListenerIndex].setFieldValues = setFieldValues;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
if (!isNil(getFieldValue)) {
|
|
278
|
+
storeListeners[findListenerIndex].getFieldValue = getFieldValue;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
if (!isNil(getFieldValues)) {
|
|
282
|
+
storeListeners[findListenerIndex].getFieldValues = getFieldValues;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
if (!isNil(getFieldErrors)) {
|
|
286
|
+
storeListeners[findListenerIndex].getFieldErrors = getFieldErrors;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return;
|
|
266
290
|
}
|
|
291
|
+
storeListeners.push({
|
|
292
|
+
formName,
|
|
293
|
+
resetFields,
|
|
294
|
+
submit,
|
|
295
|
+
submitAsync,
|
|
296
|
+
setFieldValue,
|
|
297
|
+
setFieldValues,
|
|
298
|
+
getFieldValue,
|
|
299
|
+
getFieldValues,
|
|
300
|
+
getFieldErrors,
|
|
301
|
+
setFieldFocus,
|
|
302
|
+
});
|
|
303
|
+
}),
|
|
304
|
+
);
|
|
305
|
+
},
|
|
306
|
+
revokeFormInstance({ formName }) {
|
|
307
|
+
return storeSet(
|
|
308
|
+
produce<any>((state: any) => {
|
|
309
|
+
const instances = state.formInstances;
|
|
310
|
+
|
|
311
|
+
const findInstanceIndex = instances.findIndex(
|
|
312
|
+
(l) => l.formName == formName,
|
|
313
|
+
);
|
|
267
314
|
|
|
268
|
-
|
|
269
|
-
storeListeners[findListenerIndex].setFieldValue = setFieldValue;
|
|
270
|
-
}
|
|
315
|
+
// console.log("Find item for revoke: ", findListenerIndex, formItemId);
|
|
271
316
|
|
|
272
|
-
if (
|
|
273
|
-
|
|
274
|
-
}
|
|
317
|
+
if (findInstanceIndex > -1) {
|
|
318
|
+
// const listenersInfo = cloneDeep(instances[findInstanceIndex]);
|
|
275
319
|
|
|
276
|
-
|
|
277
|
-
storeListeners[findListenerIndex].getFieldValue = getFieldValue;
|
|
278
|
-
}
|
|
320
|
+
instances.splice(findInstanceIndex, 1);
|
|
279
321
|
|
|
280
|
-
|
|
281
|
-
|
|
322
|
+
// onAfterRevoke(
|
|
323
|
+
// listenersInfo,
|
|
324
|
+
// instances.filter(
|
|
325
|
+
// (l) =>
|
|
326
|
+
// l.name === listenersInfo.name &&
|
|
327
|
+
// l.formName === listenersInfo.formName &&
|
|
328
|
+
// l.formItemId !== listenersInfo.formItemId
|
|
329
|
+
// )
|
|
330
|
+
// );
|
|
282
331
|
}
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
332
|
+
}),
|
|
333
|
+
);
|
|
334
|
+
},
|
|
335
|
+
|
|
336
|
+
getCurrentSubmit(formName) {
|
|
337
|
+
return last(get(storeGet().submitHistory, formName)) || null;
|
|
338
|
+
},
|
|
339
|
+
getSubmitHistory(formName) {
|
|
340
|
+
return get(storeGet().submitHistory, formName);
|
|
341
|
+
},
|
|
342
|
+
setSubmitHistory(formName, submitData) {
|
|
343
|
+
return storeSet(
|
|
344
|
+
produce<any>((state: any) => {
|
|
345
|
+
const oldValues = get(state.submitHistory, formName);
|
|
346
|
+
if (oldValues) {
|
|
347
|
+
oldValues.push(submitData);
|
|
348
|
+
oldValues.splice(0, oldValues.length - 3);
|
|
349
|
+
} else {
|
|
350
|
+
set(state.submitHistory, formName, [submitData]);
|
|
286
351
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
submit,
|
|
294
|
-
submitAsync,
|
|
295
|
-
setFieldValue,
|
|
296
|
-
setFieldValues,
|
|
297
|
-
getFieldValue,
|
|
298
|
-
getFieldValues,
|
|
299
|
-
getFieldErrors,
|
|
300
|
-
setFieldFocus,
|
|
301
|
-
});
|
|
302
|
-
}),
|
|
303
|
-
);
|
|
304
|
-
},
|
|
305
|
-
revokeFormInstance({ formName }) {
|
|
306
|
-
return storeSet(
|
|
307
|
-
produce<any>((state: any) => {
|
|
308
|
-
const instances = state.formInstances;
|
|
309
|
-
|
|
310
|
-
const findInstanceIndex = instances.findIndex(
|
|
311
|
-
(l) => l.formName == formName,
|
|
312
|
-
);
|
|
313
|
-
|
|
314
|
-
// console.log("Find item for revoke: ", findListenerIndex, formItemId);
|
|
315
|
-
|
|
316
|
-
if (findInstanceIndex > -1) {
|
|
317
|
-
// const listenersInfo = cloneDeep(instances[findInstanceIndex]);
|
|
318
|
-
|
|
319
|
-
instances.splice(findInstanceIndex, 1);
|
|
320
|
-
|
|
321
|
-
// onAfterRevoke(
|
|
322
|
-
// listenersInfo,
|
|
323
|
-
// instances.filter(
|
|
324
|
-
// (l) =>
|
|
325
|
-
// l.name === listenersInfo.name &&
|
|
326
|
-
// l.formName === listenersInfo.formName &&
|
|
327
|
-
// l.formItemId !== listenersInfo.formItemId
|
|
328
|
-
// )
|
|
329
|
-
// );
|
|
330
|
-
}
|
|
331
|
-
}),
|
|
332
|
-
);
|
|
333
|
-
},
|
|
334
|
-
|
|
335
|
-
getCurrentSubmit(formName) {
|
|
336
|
-
return last(get(storeGet().submitHistory, formName)) || null;
|
|
337
|
-
},
|
|
338
|
-
getSubmitHistory(formName) {
|
|
339
|
-
return get(storeGet().submitHistory, formName);
|
|
340
|
-
},
|
|
341
|
-
setSubmitHistory(formName, submitData) {
|
|
342
|
-
return storeSet(
|
|
343
|
-
produce<any>((state: any) => {
|
|
344
|
-
const oldValues = get(state.submitHistory, formName);
|
|
345
|
-
if (oldValues) {
|
|
346
|
-
oldValues.push(submitData);
|
|
347
|
-
oldValues.splice(0, oldValues.length - 3);
|
|
348
|
-
} else {
|
|
349
|
-
set(state.submitHistory, formName, [submitData]);
|
|
350
|
-
}
|
|
351
|
-
console.log("Submit history: ", formName);
|
|
352
|
-
}),
|
|
353
|
-
);
|
|
354
|
-
},
|
|
355
|
-
}));
|
|
352
|
+
console.log("Submit history: ", formName);
|
|
353
|
+
}),
|
|
354
|
+
);
|
|
355
|
+
},
|
|
356
|
+
}),
|
|
357
|
+
);
|
|
356
358
|
|
|
357
359
|
export const useFormListeners = create<any>((storeSet: any, storeGet: any) => ({
|
|
358
360
|
listeners: [],
|
package/src/types/public.ts
CHANGED
|
@@ -1,15 +1,43 @@
|
|
|
1
1
|
export type FormValues<T = any> = T;
|
|
2
2
|
|
|
3
|
+
export interface ValidationRule<T = any, TValues = any> {
|
|
4
|
+
name?: string;
|
|
5
|
+
message: string;
|
|
6
|
+
handler?: (value: T, formValues: TValues) => boolean | Promise<boolean>;
|
|
7
|
+
required?: boolean;
|
|
8
|
+
min?: number;
|
|
9
|
+
max?: number;
|
|
10
|
+
minLength?: number;
|
|
11
|
+
maxLength?: number;
|
|
12
|
+
isPassword?: boolean;
|
|
13
|
+
isUsername?: boolean;
|
|
14
|
+
isPhoneNumber?: boolean;
|
|
15
|
+
isStringNumber?: boolean;
|
|
16
|
+
isPositiveStringNumber?: boolean;
|
|
17
|
+
isPositiveIntegerStringNumber?: boolean;
|
|
18
|
+
isEmail?: boolean;
|
|
19
|
+
isVietnameseName?: boolean;
|
|
20
|
+
isNoSpaceStringAndNumber?: boolean;
|
|
21
|
+
isStringAndNumber?: boolean;
|
|
22
|
+
isNoSpaceOnlyAlphabetStringAndNumber?: boolean;
|
|
23
|
+
isOnlyAlphabetStringAndNumber?: boolean;
|
|
24
|
+
isNoSpaceAlphabetString?: boolean;
|
|
25
|
+
pattern?: RegExp;
|
|
26
|
+
}
|
|
27
|
+
|
|
3
28
|
export interface PublicFormInstance<T = any> {
|
|
4
29
|
formName: string;
|
|
5
|
-
resetFields
|
|
6
|
-
submit
|
|
7
|
-
submitAsync
|
|
8
|
-
setFieldValue
|
|
9
|
-
setFieldValues
|
|
10
|
-
getFieldValue
|
|
11
|
-
getFieldValues
|
|
12
|
-
|
|
30
|
+
resetFields: (values?: Partial<T>) => void;
|
|
31
|
+
submit: (values?: T) => void;
|
|
32
|
+
submitAsync: (values?: T) => Promise<any>;
|
|
33
|
+
setFieldValue: (name: keyof T & string, value: any, options?: any) => void;
|
|
34
|
+
setFieldValues: (values: Partial<T>, options?: any) => void;
|
|
35
|
+
getFieldValue: (name: keyof T & string) => any;
|
|
36
|
+
getFieldValues: (
|
|
37
|
+
names?: Array<keyof T & string>,
|
|
38
|
+
) => Array<{ name: string; value: any }>;
|
|
39
|
+
getFieldErrors: () => Record<string, any>;
|
|
40
|
+
setFieldFocus: (name: keyof T & string) => void;
|
|
13
41
|
}
|
|
14
42
|
|
|
15
43
|
export interface UseFormItemProps<T = any> {
|
|
@@ -18,7 +46,7 @@ export interface UseFormItemProps<T = any> {
|
|
|
18
46
|
name?: keyof T & string;
|
|
19
47
|
initialValue?: any;
|
|
20
48
|
formItemId?: string;
|
|
21
|
-
rules?: any[];
|
|
49
|
+
rules?: ValidationRule<any, T>[];
|
|
22
50
|
}
|
|
23
51
|
|
|
24
52
|
export interface UseFormItemReturn<T = any> {
|