react-form-manage 1.0.8-beta.2 → 1.0.8-beta.21
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 +85 -5
- package/README.md +8 -4
- package/dist/components/Form/FormCleanUp.js +3 -3
- package/dist/components/Form/FormItem.d.ts +4 -2
- package/dist/components/Form/FormItem.js +7 -5
- package/dist/components/Form/FormList.d.ts +2 -2
- package/dist/components/Form/FormList.js +2 -2
- package/dist/hooks/useFormItemControl.d.ts +1 -0
- package/dist/hooks/useFormItemControl.js +60 -23
- package/dist/hooks/useFormListControl.d.ts +2 -1
- package/dist/hooks/useFormListControl.js +60 -10
- package/dist/index.cjs.d.ts +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.esm.d.ts +1 -0
- package/dist/index.js +4 -2
- package/dist/providers/Form.d.ts +4 -2
- package/dist/providers/Form.js +98 -28
- package/dist/stores/formStore.d.ts +27 -2
- package/dist/stores/formStore.js +25 -9
- package/dist/test/TestDialog.d.ts +3 -0
- package/dist/test/TestDialog.js +21 -0
- package/dist/test/TestListener.d.ts +3 -0
- package/dist/test/TestListener.js +17 -0
- package/dist/test/TestSelect.d.ts +6 -0
- package/dist/test/TestSelect.js +24 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/public.d.ts +6 -1
- package/dist/utils/obj.util.d.ts +1 -1
- package/dist/utils/obj.util.js +16 -5
- package/package.json +3 -1
- package/src/App.tsx +98 -4
- package/src/components/Form/FormCleanUp.tsx +3 -7
- package/src/components/Form/FormItem.tsx +56 -31
- package/src/components/Form/FormList.tsx +17 -4
- package/src/components/Form/InputWrapper.tsx +5 -0
- package/src/hooks/useFormItemControl.ts +70 -29
- package/src/hooks/useFormListControl.ts +104 -26
- package/src/index.ts +27 -13
- package/src/providers/Form.tsx +126 -17
- package/src/stores/formStore.ts +319 -288
- package/src/test/TestDialog.tsx +52 -0
- package/src/test/TestListener.tsx +21 -0
- package/src/test/TestSelect.tsx +38 -0
- package/src/types/index.ts +1 -1
- package/src/types/public.ts +7 -1
- package/src/utils/obj.util.ts +44 -13
package/src/stores/formStore.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { cloneDeep, get, isNil, isNumber, last, set, unset } from "lodash";
|
|
|
3
3
|
import { v4 } from "uuid";
|
|
4
4
|
import { create } from "zustand";
|
|
5
5
|
import { getAllNoneObjStringPath } from "../utils/obj.util";
|
|
6
|
-
|
|
6
|
+
type ListenerFormItemType = "normal" | "array";
|
|
7
7
|
export interface FormInstance {
|
|
8
8
|
formName: string;
|
|
9
9
|
resetFields: (values?: any) => void;
|
|
@@ -17,20 +17,23 @@ export interface FormInstance {
|
|
|
17
17
|
setFieldFocus: (name: string) => void;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
interface ListenerItem {
|
|
20
|
+
export interface ListenerItem {
|
|
21
21
|
name?: string;
|
|
22
22
|
formName?: string;
|
|
23
23
|
isTouched?: boolean;
|
|
24
24
|
isDirty?: boolean;
|
|
25
25
|
formItemId?: string;
|
|
26
26
|
internalErrors?: any;
|
|
27
|
+
onArrayChange?: any;
|
|
27
28
|
onChange?: any;
|
|
28
29
|
onReset?: any;
|
|
29
30
|
onFocus?: any;
|
|
30
31
|
emitFocus?: any;
|
|
32
|
+
isInitied?: boolean;
|
|
33
|
+
type?: ListenerFormItemType;
|
|
31
34
|
}
|
|
32
35
|
|
|
33
|
-
interface CleanUpItem {
|
|
36
|
+
export interface CleanUpItem {
|
|
34
37
|
name?: string;
|
|
35
38
|
type?: string;
|
|
36
39
|
key: string;
|
|
@@ -45,318 +48,320 @@ interface FormStoreState {
|
|
|
45
48
|
cacheData: Record<string, any>;
|
|
46
49
|
formInstances: FormInstance[];
|
|
47
50
|
submitHistory: Record<string, any[]>;
|
|
51
|
+
listeners: ListenerItem[];
|
|
52
|
+
cleanUpStack: CleanUpItem[];
|
|
48
53
|
// methods (loose typed for incremental migration)
|
|
49
54
|
[key: string]: any;
|
|
50
55
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
},
|
|
56
|
+
// Form Store Slice
|
|
57
|
+
const createFormStoreSlice = (storeSet: any, storeGet: any, api: any) => ({
|
|
58
|
+
forms: {},
|
|
59
|
+
initialValues: {},
|
|
60
|
+
formStates: {},
|
|
61
|
+
cacheData: {},
|
|
62
|
+
formInstances: [],
|
|
63
|
+
submitHistory: {},
|
|
64
|
+
setData(formName, name, value) {
|
|
65
|
+
return storeSet(
|
|
66
|
+
produce<any>((state: any) => {
|
|
67
|
+
const oldValues = state.forms;
|
|
68
|
+
set(oldValues, `${formName}.${name}`, value);
|
|
69
|
+
}),
|
|
70
|
+
);
|
|
71
|
+
},
|
|
94
72
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
73
|
+
getCacheData(formName) {
|
|
74
|
+
return get(storeGet(), `cacheData.${formName}`);
|
|
75
|
+
},
|
|
98
76
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
77
|
+
setCacheData(formName, name, value) {
|
|
78
|
+
return storeSet(
|
|
79
|
+
produce<any>((state: any) => {
|
|
80
|
+
const oldValues = state.cacheData;
|
|
81
|
+
set(oldValues, `${formName}.${name}`, value);
|
|
82
|
+
}),
|
|
83
|
+
);
|
|
84
|
+
},
|
|
102
85
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
86
|
+
clearCacheData(formName) {
|
|
87
|
+
return storeSet(
|
|
88
|
+
produce<any>((state: any) => {
|
|
89
|
+
const oldValues = state.cacheData;
|
|
107
90
|
|
|
108
|
-
|
|
91
|
+
if (formName) {
|
|
92
|
+
set(oldValues, formName, {});
|
|
93
|
+
} else {
|
|
94
|
+
set(oldValues, "", {});
|
|
95
|
+
}
|
|
96
|
+
}),
|
|
97
|
+
);
|
|
98
|
+
},
|
|
109
99
|
|
|
110
|
-
|
|
100
|
+
getFormItemValue(formName, name) {
|
|
101
|
+
return get(storeGet().forms?.[formName], name);
|
|
102
|
+
},
|
|
111
103
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
},
|
|
104
|
+
getFormValues(formName) {
|
|
105
|
+
return storeGet().forms?.[formName];
|
|
106
|
+
},
|
|
116
107
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
108
|
+
clearFormValues(formName) {
|
|
109
|
+
return storeSet(
|
|
110
|
+
produce<any>((state: any) => {
|
|
111
|
+
const oldValues = state.forms;
|
|
121
112
|
|
|
122
|
-
|
|
113
|
+
// console.log("Clear form values", formName);
|
|
114
|
+
|
|
115
|
+
unset(oldValues, formName);
|
|
116
|
+
|
|
117
|
+
// console.log(JSON.parse(JSON.stringify(oldValues)));
|
|
118
|
+
}),
|
|
119
|
+
);
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
clearFormInitialValues(formName) {
|
|
123
|
+
return storeSet(
|
|
124
|
+
produce<any>((state: any) => {
|
|
125
|
+
const oldValues = state.initialValues;
|
|
126
|
+
|
|
127
|
+
// console.log("Clear form initial values", formName);
|
|
128
|
+
|
|
129
|
+
unset(oldValues, formName);
|
|
130
|
+
|
|
131
|
+
// console.log(JSON.parse(JSON.stringify(oldValues)));
|
|
132
|
+
}),
|
|
133
|
+
);
|
|
134
|
+
},
|
|
123
135
|
|
|
124
|
-
|
|
136
|
+
clearObjKeyItem(formName, name) {
|
|
137
|
+
return storeSet(
|
|
138
|
+
produce<any>((state: any) => {
|
|
139
|
+
const oldValues = state.forms;
|
|
125
140
|
|
|
126
|
-
|
|
127
|
-
}),
|
|
128
|
-
);
|
|
129
|
-
},
|
|
141
|
+
// console.log("Clear item value", formName, name);
|
|
130
142
|
|
|
131
|
-
|
|
132
|
-
return storeSet(
|
|
133
|
-
produce<any>((state: any) => {
|
|
134
|
-
const oldValues = state.forms;
|
|
143
|
+
unset(oldValues, `${formName}.${name}`);
|
|
135
144
|
|
|
136
|
-
|
|
145
|
+
// console.log(JSON.parse(JSON.stringify(oldValues)));
|
|
146
|
+
}),
|
|
147
|
+
);
|
|
148
|
+
},
|
|
149
|
+
clearArrItem(formName, name) {
|
|
150
|
+
return storeSet(
|
|
151
|
+
produce<any>((state: any) => {
|
|
152
|
+
const oldValues = state.forms;
|
|
137
153
|
|
|
138
|
-
|
|
154
|
+
console.log("Clear item array value", formName, name);
|
|
139
155
|
|
|
140
|
-
|
|
141
|
-
}),
|
|
142
|
-
);
|
|
143
|
-
},
|
|
144
|
-
clearArrItem(formName, name) {
|
|
145
|
-
return storeSet(
|
|
146
|
-
produce<any>((state: any) => {
|
|
147
|
-
const oldValues = state.forms;
|
|
156
|
+
const arrPath = name.split(".").slice(0, -1).join(".");
|
|
148
157
|
|
|
149
|
-
|
|
158
|
+
const elPath = Number(name.split(".").slice(-1).join(""));
|
|
150
159
|
|
|
151
|
-
|
|
160
|
+
const getArrItem = get(oldValues, `${formName}.${arrPath}`);
|
|
152
161
|
|
|
153
|
-
|
|
162
|
+
if (isNumber(elPath)) {
|
|
163
|
+
getArrItem.splice(elPath, 1);
|
|
164
|
+
}
|
|
154
165
|
|
|
155
|
-
|
|
166
|
+
// console.log(JSON.parse(JSON.stringify(oldValues)));
|
|
167
|
+
}),
|
|
168
|
+
);
|
|
169
|
+
},
|
|
156
170
|
|
|
157
|
-
|
|
158
|
-
|
|
171
|
+
setFormState({ formName, isInitied, submitState }) {
|
|
172
|
+
return storeSet(
|
|
173
|
+
produce<any>((state: any) => {
|
|
174
|
+
const oldValues = state.formStates;
|
|
175
|
+
const getFormState = get(storeGet().formStates, formName);
|
|
176
|
+
|
|
177
|
+
if (isNil(getFormState)) {
|
|
178
|
+
set(oldValues, formName, { isInitied, submitState });
|
|
179
|
+
} else {
|
|
180
|
+
if (!isNil(isInitied)) {
|
|
181
|
+
set(oldValues, `${formName}.isInitied`, isInitied);
|
|
159
182
|
}
|
|
160
183
|
|
|
161
|
-
|
|
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
|
-
}
|
|
184
|
+
if (!isNil(submitState)) {
|
|
185
|
+
set(oldValues, `${formName}.submitState`, submitState);
|
|
182
186
|
}
|
|
183
|
-
}
|
|
184
|
-
)
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
)
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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,
|
|
248
|
-
}) {
|
|
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;
|
|
187
|
+
}
|
|
188
|
+
}),
|
|
189
|
+
);
|
|
190
|
+
},
|
|
191
|
+
|
|
192
|
+
clearFormState(formName) {
|
|
193
|
+
return storeSet(
|
|
194
|
+
produce<any>((state: any) => {
|
|
195
|
+
const oldValues = state.formStates;
|
|
196
|
+
|
|
197
|
+
// console.log("Clear form state", formName);
|
|
198
|
+
|
|
199
|
+
unset(oldValues, formName);
|
|
200
|
+
|
|
201
|
+
// console.log(JSON.parse(JSON.stringify(oldValues)));
|
|
202
|
+
}),
|
|
203
|
+
);
|
|
204
|
+
},
|
|
205
|
+
|
|
206
|
+
getFormState(formName) {
|
|
207
|
+
return get(storeGet(), `formStates.${formName}`);
|
|
208
|
+
},
|
|
209
|
+
|
|
210
|
+
setFormInitData(formName, initValues) {
|
|
211
|
+
return storeSet(
|
|
212
|
+
produce<any>((state: any) => {
|
|
213
|
+
const oldValues = state.initialValues;
|
|
214
|
+
const listInitPath = getAllNoneObjStringPath(initValues);
|
|
215
|
+
|
|
216
|
+
// console.log({ listInitPath, initValues });
|
|
217
|
+
|
|
218
|
+
listInitPath.forEach((k) => {
|
|
219
|
+
if (get(initValues, k)) {
|
|
220
|
+
// console.log("init form data values: ", k, get(initValues, k));
|
|
221
|
+
set(oldValues, `${formName}.${k}`, get(initValues, k));
|
|
290
222
|
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
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
|
-
);
|
|
223
|
+
});
|
|
224
|
+
}),
|
|
225
|
+
);
|
|
226
|
+
},
|
|
314
227
|
|
|
315
|
-
|
|
228
|
+
getInitData(formName, name) {
|
|
229
|
+
return get(storeGet().initialValues, `${formName}.${name}`);
|
|
230
|
+
},
|
|
316
231
|
|
|
317
|
-
|
|
318
|
-
|
|
232
|
+
setInitData(formName, name, value) {
|
|
233
|
+
return storeSet(
|
|
234
|
+
produce<any>((state: any) => {
|
|
235
|
+
const oldValues = state.initialValues;
|
|
236
|
+
console.log("Inner init: ", `${formName}.${name}`, value);
|
|
237
|
+
set(oldValues, `${formName}.${name}`, value);
|
|
238
|
+
}),
|
|
239
|
+
);
|
|
240
|
+
},
|
|
319
241
|
|
|
320
|
-
|
|
242
|
+
setFormInstance({
|
|
243
|
+
formName,
|
|
244
|
+
resetFields,
|
|
245
|
+
submit,
|
|
246
|
+
submitAsync,
|
|
247
|
+
setFieldValue,
|
|
248
|
+
setFieldValues,
|
|
249
|
+
getFieldValue,
|
|
250
|
+
getFieldValues,
|
|
251
|
+
getFieldErrors,
|
|
252
|
+
setFieldFocus,
|
|
253
|
+
}) {
|
|
254
|
+
return storeSet(
|
|
255
|
+
produce<any>((state: any) => {
|
|
256
|
+
const storeListeners = state.formInstances;
|
|
257
|
+
const findListenerIndex = storeListeners.findIndex(
|
|
258
|
+
(l) => l.formName === formName,
|
|
259
|
+
);
|
|
260
|
+
if (findListenerIndex > -1) {
|
|
261
|
+
if (!isNil(resetFields)) {
|
|
262
|
+
storeListeners[findListenerIndex].resetFields = resetFields;
|
|
263
|
+
}
|
|
264
|
+
if (!isNil(submit)) {
|
|
265
|
+
storeListeners[findListenerIndex].submit = submit;
|
|
266
|
+
}
|
|
267
|
+
if (!isNil(setFieldFocus)) {
|
|
268
|
+
storeListeners[findListenerIndex].setFieldFocus = setFieldFocus;
|
|
269
|
+
}
|
|
270
|
+
if (!isNil(submitAsync)) {
|
|
271
|
+
storeListeners[findListenerIndex].submitAsync = submitAsync;
|
|
272
|
+
}
|
|
321
273
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
// instances.filter(
|
|
325
|
-
// (l) =>
|
|
326
|
-
// l.name === listenersInfo.name &&
|
|
327
|
-
// l.formName === listenersInfo.formName &&
|
|
328
|
-
// l.formItemId !== listenersInfo.formItemId
|
|
329
|
-
// )
|
|
330
|
-
// );
|
|
274
|
+
if (!isNil(setFieldValue)) {
|
|
275
|
+
storeListeners[findListenerIndex].setFieldValue = setFieldValue;
|
|
331
276
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
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]);
|
|
277
|
+
|
|
278
|
+
if (!isNil(setFieldValues)) {
|
|
279
|
+
storeListeners[findListenerIndex].setFieldValues = setFieldValues;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (!isNil(getFieldValue)) {
|
|
283
|
+
storeListeners[findListenerIndex].getFieldValue = getFieldValue;
|
|
351
284
|
}
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
)
|
|
358
|
-
|
|
359
|
-
|
|
285
|
+
|
|
286
|
+
if (!isNil(getFieldValues)) {
|
|
287
|
+
storeListeners[findListenerIndex].getFieldValues = getFieldValues;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (!isNil(getFieldErrors)) {
|
|
291
|
+
storeListeners[findListenerIndex].getFieldErrors = getFieldErrors;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
storeListeners.push({
|
|
297
|
+
formName,
|
|
298
|
+
resetFields,
|
|
299
|
+
submit,
|
|
300
|
+
submitAsync,
|
|
301
|
+
setFieldValue,
|
|
302
|
+
setFieldValues,
|
|
303
|
+
getFieldValue,
|
|
304
|
+
getFieldValues,
|
|
305
|
+
getFieldErrors,
|
|
306
|
+
setFieldFocus,
|
|
307
|
+
});
|
|
308
|
+
}),
|
|
309
|
+
);
|
|
310
|
+
},
|
|
311
|
+
revokeFormInstance({ formName }) {
|
|
312
|
+
return storeSet(
|
|
313
|
+
produce<any>((state: any) => {
|
|
314
|
+
const instances = state.formInstances;
|
|
315
|
+
|
|
316
|
+
const findInstanceIndex = instances.findIndex(
|
|
317
|
+
(l) => l.formName == formName,
|
|
318
|
+
);
|
|
319
|
+
|
|
320
|
+
// console.log("Find item for revoke: ", findListenerIndex, formItemId);
|
|
321
|
+
|
|
322
|
+
if (findInstanceIndex > -1) {
|
|
323
|
+
// const listenersInfo = cloneDeep(instances[findInstanceIndex]);
|
|
324
|
+
|
|
325
|
+
instances.splice(findInstanceIndex, 1);
|
|
326
|
+
|
|
327
|
+
// onAfterRevoke(
|
|
328
|
+
// listenersInfo,
|
|
329
|
+
// instances.filter(
|
|
330
|
+
// (l) =>
|
|
331
|
+
// l.name === listenersInfo.name &&
|
|
332
|
+
// l.formName === listenersInfo.formName &&
|
|
333
|
+
// l.formItemId !== listenersInfo.formItemId
|
|
334
|
+
// )
|
|
335
|
+
// );
|
|
336
|
+
}
|
|
337
|
+
}),
|
|
338
|
+
);
|
|
339
|
+
},
|
|
340
|
+
|
|
341
|
+
getCurrentSubmit(formName) {
|
|
342
|
+
return last(get(storeGet().submitHistory, formName)) || null;
|
|
343
|
+
},
|
|
344
|
+
getSubmitHistory(formName) {
|
|
345
|
+
return get(storeGet().submitHistory, formName);
|
|
346
|
+
},
|
|
347
|
+
setSubmitHistory(formName, submitData) {
|
|
348
|
+
return storeSet(
|
|
349
|
+
produce<any>((state: any) => {
|
|
350
|
+
const oldValues = get(state.submitHistory, formName);
|
|
351
|
+
if (oldValues) {
|
|
352
|
+
oldValues.push(submitData);
|
|
353
|
+
oldValues.splice(0, oldValues.length - 3);
|
|
354
|
+
} else {
|
|
355
|
+
set(state.submitHistory, formName, [submitData]);
|
|
356
|
+
}
|
|
357
|
+
console.log("Submit history: ", formName);
|
|
358
|
+
}),
|
|
359
|
+
);
|
|
360
|
+
},
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
// Listeners Slice
|
|
364
|
+
const createListenersSlice = (storeSet: any, storeGet: any, api: any) => ({
|
|
360
365
|
listeners: [],
|
|
361
366
|
getListener(formItemId) {
|
|
362
367
|
return storeGet().listeners.find((l) => l.formItemId === formItemId);
|
|
@@ -375,7 +380,10 @@ export const useFormListeners = create<any>((storeSet: any, storeGet: any) => ({
|
|
|
375
380
|
internalErrors,
|
|
376
381
|
onFocus,
|
|
377
382
|
emitFocus,
|
|
378
|
-
|
|
383
|
+
isInitied,
|
|
384
|
+
type,
|
|
385
|
+
onArrayChange,
|
|
386
|
+
}: Partial<ListenerItem> & { formItemId: string }) {
|
|
379
387
|
return storeSet(
|
|
380
388
|
produce<any>((state: any) => {
|
|
381
389
|
const storeListeners = state.listeners;
|
|
@@ -412,17 +420,28 @@ export const useFormListeners = create<any>((storeSet: any, storeGet: any) => ({
|
|
|
412
420
|
storeListeners[findListenerIndex].emitFocus = emitFocus;
|
|
413
421
|
}
|
|
414
422
|
|
|
423
|
+
if (!isNil(isInitied)) {
|
|
424
|
+
storeListeners[findListenerIndex].isInitied = isInitied;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
if (!isNil(onArrayChange)) {
|
|
428
|
+
storeListeners[findListenerIndex].onArrayChange = onArrayChange;
|
|
429
|
+
}
|
|
430
|
+
|
|
415
431
|
return;
|
|
416
432
|
}
|
|
417
433
|
storeListeners.push({
|
|
418
434
|
name,
|
|
419
435
|
formName,
|
|
420
|
-
isTouched,
|
|
421
|
-
isDirty,
|
|
436
|
+
isTouched: Boolean(isTouched),
|
|
437
|
+
isDirty: Boolean(isDirty),
|
|
422
438
|
formItemId,
|
|
423
439
|
internalErrors,
|
|
424
440
|
onChange,
|
|
425
441
|
onReset,
|
|
442
|
+
isInitied: Boolean(isInitied),
|
|
443
|
+
type: type || "normal",
|
|
444
|
+
onArrayChange,
|
|
426
445
|
});
|
|
427
446
|
}),
|
|
428
447
|
);
|
|
@@ -456,9 +475,10 @@ export const useFormListeners = create<any>((storeSet: any, storeGet: any) => ({
|
|
|
456
475
|
}),
|
|
457
476
|
);
|
|
458
477
|
},
|
|
459
|
-
})
|
|
478
|
+
});
|
|
460
479
|
|
|
461
|
-
|
|
480
|
+
// CleanUp Slice
|
|
481
|
+
const createCleanUpSlice = (storeSet: any, storeGet: any, api: any) => ({
|
|
462
482
|
cleanUpStack: [],
|
|
463
483
|
setCleanUpStack({ name, type, itemKey, formName }) {
|
|
464
484
|
return storeSet(
|
|
@@ -476,4 +496,15 @@ export const useFormCleanUp = create<any>((storeSet: any) => ({
|
|
|
476
496
|
}),
|
|
477
497
|
);
|
|
478
498
|
},
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
// Combined Store
|
|
502
|
+
export const useFormStore = create<FormStoreState>((...a) => ({
|
|
503
|
+
...createFormStoreSlice(...a),
|
|
504
|
+
...createListenersSlice(...a),
|
|
505
|
+
...createCleanUpSlice(...a),
|
|
479
506
|
}));
|
|
507
|
+
|
|
508
|
+
// Deprecated exports - use useFormStore instead
|
|
509
|
+
export const useFormListeners = useFormStore;
|
|
510
|
+
export const useFormCleanUp = useFormStore;
|