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.
Files changed (46) hide show
  1. package/CHANGELOG.md +85 -5
  2. package/README.md +8 -4
  3. package/dist/components/Form/FormCleanUp.js +3 -3
  4. package/dist/components/Form/FormItem.d.ts +4 -2
  5. package/dist/components/Form/FormItem.js +7 -5
  6. package/dist/components/Form/FormList.d.ts +2 -2
  7. package/dist/components/Form/FormList.js +2 -2
  8. package/dist/hooks/useFormItemControl.d.ts +1 -0
  9. package/dist/hooks/useFormItemControl.js +60 -23
  10. package/dist/hooks/useFormListControl.d.ts +2 -1
  11. package/dist/hooks/useFormListControl.js +60 -10
  12. package/dist/index.cjs.d.ts +1 -0
  13. package/dist/index.d.ts +4 -3
  14. package/dist/index.esm.d.ts +1 -0
  15. package/dist/index.js +4 -2
  16. package/dist/providers/Form.d.ts +4 -2
  17. package/dist/providers/Form.js +98 -28
  18. package/dist/stores/formStore.d.ts +27 -2
  19. package/dist/stores/formStore.js +25 -9
  20. package/dist/test/TestDialog.d.ts +3 -0
  21. package/dist/test/TestDialog.js +21 -0
  22. package/dist/test/TestListener.d.ts +3 -0
  23. package/dist/test/TestListener.js +17 -0
  24. package/dist/test/TestSelect.d.ts +6 -0
  25. package/dist/test/TestSelect.js +24 -0
  26. package/dist/types/index.d.ts +1 -1
  27. package/dist/types/public.d.ts +6 -1
  28. package/dist/utils/obj.util.d.ts +1 -1
  29. package/dist/utils/obj.util.js +16 -5
  30. package/package.json +3 -1
  31. package/src/App.tsx +98 -4
  32. package/src/components/Form/FormCleanUp.tsx +3 -7
  33. package/src/components/Form/FormItem.tsx +56 -31
  34. package/src/components/Form/FormList.tsx +17 -4
  35. package/src/components/Form/InputWrapper.tsx +5 -0
  36. package/src/hooks/useFormItemControl.ts +70 -29
  37. package/src/hooks/useFormListControl.ts +104 -26
  38. package/src/index.ts +27 -13
  39. package/src/providers/Form.tsx +126 -17
  40. package/src/stores/formStore.ts +319 -288
  41. package/src/test/TestDialog.tsx +52 -0
  42. package/src/test/TestListener.tsx +21 -0
  43. package/src/test/TestSelect.tsx +38 -0
  44. package/src/types/index.ts +1 -1
  45. package/src/types/public.ts +7 -1
  46. package/src/utils/obj.util.ts +44 -13
@@ -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
- 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
- },
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
- getFormItemValue(formName, name) {
96
- return get(storeGet().forms?.[formName], name);
97
- },
73
+ getCacheData(formName) {
74
+ return get(storeGet(), `cacheData.${formName}`);
75
+ },
98
76
 
99
- getFormValues(formName) {
100
- return storeGet().forms?.[formName];
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
- clearFormValues(formName) {
104
- return storeSet(
105
- produce<any>((state: any) => {
106
- const oldValues = state.forms;
86
+ clearCacheData(formName) {
87
+ return storeSet(
88
+ produce<any>((state: any) => {
89
+ const oldValues = state.cacheData;
107
90
 
108
- // console.log("Clear form values", formName);
91
+ if (formName) {
92
+ set(oldValues, formName, {});
93
+ } else {
94
+ set(oldValues, "", {});
95
+ }
96
+ }),
97
+ );
98
+ },
109
99
 
110
- unset(oldValues, formName);
100
+ getFormItemValue(formName, name) {
101
+ return get(storeGet().forms?.[formName], name);
102
+ },
111
103
 
112
- // console.log(JSON.parse(JSON.stringify(oldValues)));
113
- }),
114
- );
115
- },
104
+ getFormValues(formName) {
105
+ return storeGet().forms?.[formName];
106
+ },
116
107
 
117
- clearFormInitialValues(formName) {
118
- return storeSet(
119
- produce<any>((state: any) => {
120
- const oldValues = state.initialValues;
108
+ clearFormValues(formName) {
109
+ return storeSet(
110
+ produce<any>((state: any) => {
111
+ const oldValues = state.forms;
121
112
 
122
- // console.log("Clear form initial values", formName);
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
- unset(oldValues, formName);
136
+ clearObjKeyItem(formName, name) {
137
+ return storeSet(
138
+ produce<any>((state: any) => {
139
+ const oldValues = state.forms;
125
140
 
126
- // console.log(JSON.parse(JSON.stringify(oldValues)));
127
- }),
128
- );
129
- },
141
+ // console.log("Clear item value", formName, name);
130
142
 
131
- clearObjKeyItem(formName, name) {
132
- return storeSet(
133
- produce<any>((state: any) => {
134
- const oldValues = state.forms;
143
+ unset(oldValues, `${formName}.${name}`);
135
144
 
136
- // console.log("Clear item value", formName, name);
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
- unset(oldValues, `${formName}.${name}`);
154
+ console.log("Clear item array value", formName, name);
139
155
 
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;
156
+ const arrPath = name.split(".").slice(0, -1).join(".");
148
157
 
149
- console.log("Clear item array value", formName, name);
158
+ const elPath = Number(name.split(".").slice(-1).join(""));
150
159
 
151
- const arrPath = name.split(".").slice(0, -1).join(".");
160
+ const getArrItem = get(oldValues, `${formName}.${arrPath}`);
152
161
 
153
- const elPath = Number(name.split(".").slice(-1).join(""));
162
+ if (isNumber(elPath)) {
163
+ getArrItem.splice(elPath, 1);
164
+ }
154
165
 
155
- const getArrItem = get(oldValues, `${formName}.${arrPath}`);
166
+ // console.log(JSON.parse(JSON.stringify(oldValues)));
167
+ }),
168
+ );
169
+ },
156
170
 
157
- if (isNumber(elPath)) {
158
- getArrItem.splice(elPath, 1);
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
- // 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
- }
184
+ if (!isNil(submitState)) {
185
+ set(oldValues, `${formName}.submitState`, submitState);
182
186
  }
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,
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
- 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
- );
223
+ });
224
+ }),
225
+ );
226
+ },
314
227
 
315
- // console.log("Find item for revoke: ", findListenerIndex, formItemId);
228
+ getInitData(formName, name) {
229
+ return get(storeGet().initialValues, `${formName}.${name}`);
230
+ },
316
231
 
317
- if (findInstanceIndex > -1) {
318
- // const listenersInfo = cloneDeep(instances[findInstanceIndex]);
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
- instances.splice(findInstanceIndex, 1);
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
- // 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
- // );
274
+ if (!isNil(setFieldValue)) {
275
+ storeListeners[findListenerIndex].setFieldValue = setFieldValue;
331
276
  }
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]);
277
+
278
+ if (!isNil(setFieldValues)) {
279
+ storeListeners[findListenerIndex].setFieldValues = setFieldValues;
280
+ }
281
+
282
+ if (!isNil(getFieldValue)) {
283
+ storeListeners[findListenerIndex].getFieldValue = getFieldValue;
351
284
  }
352
- console.log("Submit history: ", formName);
353
- }),
354
- );
355
- },
356
- }),
357
- );
358
-
359
- export const useFormListeners = create<any>((storeSet: any, storeGet: any) => ({
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
- export const useFormCleanUp = create<any>((storeSet: any) => ({
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;