cogsbox-state 0.5.473 → 0.5.475-canary.0
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 +59 -29
- package/dist/CogsState.d.ts +26 -17
- package/dist/CogsState.d.ts.map +1 -1
- package/dist/CogsState.jsx +455 -452
- package/dist/CogsState.jsx.map +1 -1
- package/dist/Components.d.ts.map +1 -1
- package/dist/Components.jsx +250 -223
- package/dist/Components.jsx.map +1 -1
- package/dist/PluginRunner.d.ts.map +1 -1
- package/dist/PluginRunner.jsx +73 -64
- package/dist/PluginRunner.jsx.map +1 -1
- package/dist/index.js +17 -16
- package/dist/pluginStore.d.ts +56 -18
- package/dist/pluginStore.d.ts.map +1 -1
- package/dist/pluginStore.js.map +1 -1
- package/dist/plugins.d.ts +95 -980
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +48 -36
- package/dist/plugins.js.map +1 -1
- package/dist/store.js +168 -169
- package/dist/store.js.map +1 -1
- package/package.json +4 -3
- package/src/CogsState.tsx +233 -551
- package/src/Components.tsx +69 -41
- package/src/PluginRunner.tsx +28 -15
- package/src/pluginStore.ts +37 -20
- package/src/plugins.ts +93 -131
- package/src/store.ts +1 -1
package/src/plugins.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import type React from 'react';
|
|
3
3
|
import { StateObject, UpdateTypeDetail } from './CogsState';
|
|
4
4
|
import { getGlobalStore } from './store';
|
|
5
|
+
import { ClientActivityEvent } from './pluginStore';
|
|
5
6
|
|
|
6
7
|
type Prettify<T> = { [K in keyof T]: T[K] } & {};
|
|
7
8
|
|
|
@@ -53,28 +54,36 @@ export function toDeconstructedMethods(stateHandler: StateObject<any>) {
|
|
|
53
54
|
},
|
|
54
55
|
};
|
|
55
56
|
}
|
|
57
|
+
type ScopedMetadataMethods<TFieldMetaData> = {
|
|
58
|
+
getFieldMetaData: () => TFieldMetaData | undefined;
|
|
59
|
+
setFieldMetaData: (data: Partial<TFieldMetaData>) => void;
|
|
60
|
+
removeFieldMetaData: () => void;
|
|
61
|
+
};
|
|
56
62
|
|
|
63
|
+
// These are the existing global methods that still require a path.
|
|
64
|
+
type GlobalMetadataMethods<TFieldMetaData> = {
|
|
65
|
+
getFieldMetaData: (path: string[]) => TFieldMetaData | undefined;
|
|
66
|
+
setFieldMetaData: (path: string[], data: Partial<TFieldMetaData>) => void;
|
|
67
|
+
removeFieldMetaData: (path: string[]) => void;
|
|
68
|
+
};
|
|
57
69
|
// Simplified: All params use the same TFieldMetaData type
|
|
58
70
|
export type UseHookParams<
|
|
59
71
|
TOptions,
|
|
60
72
|
TPluginMetaData,
|
|
61
73
|
TFieldMetaData,
|
|
62
74
|
TStateSlice = any,
|
|
63
|
-
> = DeconstructedCogsMethods<TStateSlice> &
|
|
64
|
-
|
|
75
|
+
> = DeconstructedCogsMethods<TStateSlice> &
|
|
76
|
+
GlobalMetadataMethods<TFieldMetaData> & {
|
|
77
|
+
stateKey: string;
|
|
65
78
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
getFieldMetaData: (path: string[]) => TFieldMetaData | undefined;
|
|
71
|
-
setFieldMetaData: (path: string[], data: Partial<TFieldMetaData>) => void;
|
|
72
|
-
removeFieldMetaData: (path: string[]) => void;
|
|
79
|
+
getPluginMetaData: () => TPluginMetaData | undefined;
|
|
80
|
+
setPluginMetaData: (data: Partial<TPluginMetaData>) => void;
|
|
81
|
+
removePluginMetaData: () => void;
|
|
73
82
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
};
|
|
83
|
+
options: TOptions;
|
|
84
|
+
pluginName: string;
|
|
85
|
+
isInitialMount: boolean;
|
|
86
|
+
};
|
|
78
87
|
|
|
79
88
|
export type TransformStateParams<
|
|
80
89
|
TOptions,
|
|
@@ -82,23 +91,20 @@ export type TransformStateParams<
|
|
|
82
91
|
TPluginMetaData,
|
|
83
92
|
TFieldMetaData,
|
|
84
93
|
TStateSlice = any,
|
|
85
|
-
> = DeconstructedCogsMethods<TStateSlice> &
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
isInitialTransform: boolean;
|
|
100
|
-
pluginName: string;
|
|
101
|
-
};
|
|
94
|
+
> = DeconstructedCogsMethods<TStateSlice> &
|
|
95
|
+
GlobalMetadataMethods<TFieldMetaData> & {
|
|
96
|
+
stateKey: string;
|
|
97
|
+
|
|
98
|
+
getPluginMetaData: () => TPluginMetaData | undefined;
|
|
99
|
+
setPluginMetaData: (data: Partial<TPluginMetaData>) => void;
|
|
100
|
+
removePluginMetaData: () => void;
|
|
101
|
+
|
|
102
|
+
options: TOptions;
|
|
103
|
+
hookData?: THookReturn;
|
|
104
|
+
previousState?: TStateSlice;
|
|
105
|
+
isInitialTransform: boolean;
|
|
106
|
+
pluginName: string;
|
|
107
|
+
};
|
|
102
108
|
|
|
103
109
|
export type OnUpdateParams<
|
|
104
110
|
TOptions,
|
|
@@ -106,60 +112,49 @@ export type OnUpdateParams<
|
|
|
106
112
|
TPluginMetaData,
|
|
107
113
|
TFieldMetaData,
|
|
108
114
|
TStateSlice = any,
|
|
109
|
-
> = DeconstructedCogsMethods<TStateSlice> &
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
getPluginMetaData: () => TPluginMetaData | undefined;
|
|
113
|
-
setPluginMetaData: (data: Partial<TPluginMetaData>) => void;
|
|
114
|
-
removePluginMetaData: () => void;
|
|
115
|
+
> = DeconstructedCogsMethods<TStateSlice> &
|
|
116
|
+
ScopedMetadataMethods<TFieldMetaData> & {
|
|
117
|
+
stateKey: string;
|
|
115
118
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
+
getPluginMetaData: () => TPluginMetaData | undefined;
|
|
120
|
+
setPluginMetaData: (data: Partial<TPluginMetaData>) => void;
|
|
121
|
+
removePluginMetaData: () => void;
|
|
119
122
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
options: TOptions;
|
|
124
|
-
hookData?: THookReturn;
|
|
123
|
+
update: UpdateTypeDetail;
|
|
124
|
+
path?: string[];
|
|
125
125
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
updateSource?: 'user' | 'plugin' | 'system';
|
|
126
|
+
options: TOptions;
|
|
127
|
+
hookData?: THookReturn;
|
|
129
128
|
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
previousValue?: any;
|
|
130
|
+
nextValue?: any;
|
|
131
|
+
updateSource?: 'user' | 'plugin' | 'system';
|
|
132
132
|
|
|
133
|
+
pluginName: string;
|
|
134
|
+
};
|
|
133
135
|
export type OnFormUpdateParams<
|
|
134
136
|
TOptions,
|
|
135
137
|
THookReturn,
|
|
136
138
|
TPluginMetaData,
|
|
137
139
|
TFieldMetaData,
|
|
138
140
|
TStateSlice = any,
|
|
139
|
-
> = DeconstructedCogsMethods<TStateSlice> &
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
getPluginMetaData: () => TPluginMetaData | undefined;
|
|
143
|
-
setPluginMetaData: (data: Partial<TPluginMetaData>) => void;
|
|
144
|
-
removePluginMetaData: () => void;
|
|
141
|
+
> = DeconstructedCogsMethods<TStateSlice> &
|
|
142
|
+
ScopedMetadataMethods<TFieldMetaData> & {
|
|
143
|
+
stateKey: string;
|
|
145
144
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
145
|
+
getPluginMetaData: () => TPluginMetaData | undefined;
|
|
146
|
+
setPluginMetaData: (data: Partial<TPluginMetaData>) => void;
|
|
147
|
+
removePluginMetaData: () => void;
|
|
149
148
|
|
|
150
|
-
path: string[];
|
|
151
|
-
event: {
|
|
152
|
-
type: 'focus' | 'blur' | 'input';
|
|
153
|
-
value?: any;
|
|
154
149
|
path: string[];
|
|
155
|
-
|
|
150
|
+
event: ClientActivityEvent; // Update this to use the full event type
|
|
156
151
|
|
|
157
|
-
|
|
158
|
-
|
|
152
|
+
options: TOptions;
|
|
153
|
+
hookData?: THookReturn;
|
|
159
154
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
};
|
|
155
|
+
formState?: 'pristine' | 'dirty' | 'submitting' | 'submitted';
|
|
156
|
+
pluginName: string;
|
|
157
|
+
};
|
|
163
158
|
|
|
164
159
|
export type FormWrapperParams<
|
|
165
160
|
TOptions,
|
|
@@ -167,7 +162,7 @@ export type FormWrapperParams<
|
|
|
167
162
|
TPluginMetaData,
|
|
168
163
|
TFieldMetaData,
|
|
169
164
|
TStateSlice = any,
|
|
170
|
-
> = {
|
|
165
|
+
> = ScopedMetadataMethods<TFieldMetaData> & {
|
|
171
166
|
element: React.ReactNode;
|
|
172
167
|
path: string[];
|
|
173
168
|
stateKey: string;
|
|
@@ -188,10 +183,6 @@ export type FormWrapperParams<
|
|
|
188
183
|
setPluginMetaData: (data: Partial<TPluginMetaData>) => void;
|
|
189
184
|
removePluginMetaData: () => void;
|
|
190
185
|
|
|
191
|
-
getFieldMetaData: (path: string[]) => TFieldMetaData | undefined;
|
|
192
|
-
setFieldMetaData: (path: string[], data: Partial<TFieldMetaData>) => void;
|
|
193
|
-
removeFieldMetaData: (path: string[]) => void;
|
|
194
|
-
|
|
195
186
|
pluginName: string;
|
|
196
187
|
};
|
|
197
188
|
|
|
@@ -250,21 +241,6 @@ export type CogsPlugin<
|
|
|
250
241
|
) => React.ReactNode;
|
|
251
242
|
};
|
|
252
243
|
|
|
253
|
-
// Extract plugin options helper
|
|
254
|
-
export type ExtractPluginOptions<
|
|
255
|
-
TPlugins extends readonly CogsPlugin<any, any, any, any, any>[],
|
|
256
|
-
> = {
|
|
257
|
-
[P in TPlugins[number] as P['name']]?: P extends CogsPlugin<
|
|
258
|
-
any,
|
|
259
|
-
infer O,
|
|
260
|
-
any,
|
|
261
|
-
any,
|
|
262
|
-
any
|
|
263
|
-
>
|
|
264
|
-
? O
|
|
265
|
-
: never;
|
|
266
|
-
};
|
|
267
|
-
|
|
268
244
|
// Metadata helpers
|
|
269
245
|
export function createMetadataContext<TPluginMetaData, TFieldMetaData>(
|
|
270
246
|
stateKey: string,
|
|
@@ -303,6 +279,29 @@ export function createMetadataContext<TPluginMetaData, TFieldMetaData>(
|
|
|
303
279
|
};
|
|
304
280
|
}
|
|
305
281
|
|
|
282
|
+
export function createScopedMetadataContext<TPluginMetaData, TFieldMetaData>(
|
|
283
|
+
stateKey: string,
|
|
284
|
+
pluginName: string,
|
|
285
|
+
path: string[]
|
|
286
|
+
) {
|
|
287
|
+
const globalContext = createMetadataContext<TPluginMetaData, TFieldMetaData>(
|
|
288
|
+
stateKey,
|
|
289
|
+
pluginName
|
|
290
|
+
);
|
|
291
|
+
|
|
292
|
+
return {
|
|
293
|
+
// Return the global methods for plugin metadata
|
|
294
|
+
...globalContext,
|
|
295
|
+
// Override the field methods with new, path-scoped versions
|
|
296
|
+
getFieldMetaData: (): TFieldMetaData | undefined =>
|
|
297
|
+
globalContext.getFieldMetaData(path),
|
|
298
|
+
|
|
299
|
+
setFieldMetaData: (data: Partial<TFieldMetaData>) =>
|
|
300
|
+
globalContext.setFieldMetaData(path, data),
|
|
301
|
+
|
|
302
|
+
removeFieldMetaData: () => globalContext.removeFieldMetaData(path),
|
|
303
|
+
};
|
|
304
|
+
}
|
|
306
305
|
type ZodObjOutput<T extends z.ZodObject<any>> = {
|
|
307
306
|
[K in keyof T['shape']]: z.output<T['shape'][K]>;
|
|
308
307
|
};
|
|
@@ -347,15 +346,6 @@ export function createPluginContext<
|
|
|
347
346
|
>
|
|
348
347
|
) => void;
|
|
349
348
|
|
|
350
|
-
type FormWrapperFn<THookReturn> = (
|
|
351
|
-
params: FormWrapperParams<
|
|
352
|
-
Options,
|
|
353
|
-
THookReturn,
|
|
354
|
-
PluginMetaData,
|
|
355
|
-
FieldMetaData
|
|
356
|
-
>
|
|
357
|
-
) => React.ReactNode;
|
|
358
|
-
|
|
359
349
|
type Plugin<THookReturn> = Prettify<
|
|
360
350
|
CogsPlugin<TName, Options, THookReturn, PluginMetaData, FieldMetaData>
|
|
361
351
|
>;
|
|
@@ -366,8 +356,7 @@ export function createPluginContext<
|
|
|
366
356
|
) => THookReturn,
|
|
367
357
|
transformFn?: TransformFn<THookReturn>,
|
|
368
358
|
updateHandler?: UpdateFn<THookReturn>,
|
|
369
|
-
formUpdateHandler?: FormUpdateFn<THookReturn
|
|
370
|
-
formWrapper?: FormWrapperFn<THookReturn>
|
|
359
|
+
formUpdateHandler?: FormUpdateFn<THookReturn>
|
|
371
360
|
): Plugin<THookReturn> => {
|
|
372
361
|
return {
|
|
373
362
|
name,
|
|
@@ -375,7 +364,6 @@ export function createPluginContext<
|
|
|
375
364
|
transformState: transformFn as any,
|
|
376
365
|
onUpdate: updateHandler as any,
|
|
377
366
|
onFormUpdate: formUpdateHandler as any,
|
|
378
|
-
formWrapper: formWrapper as any,
|
|
379
367
|
};
|
|
380
368
|
};
|
|
381
369
|
|
|
@@ -418,19 +406,6 @@ export function createPluginContext<
|
|
|
418
406
|
onFormUpdate(
|
|
419
407
|
fn: FormUpdateFn<THookReturn>
|
|
420
408
|
): BuildRet<THookReturn, HasTransform, HasUpdate, true, HasWrapper>;
|
|
421
|
-
}) &
|
|
422
|
-
(HasWrapper extends true
|
|
423
|
-
? {}
|
|
424
|
-
: {
|
|
425
|
-
formWrapper(
|
|
426
|
-
fn: FormWrapperFn<THookReturn>
|
|
427
|
-
): BuildRet<
|
|
428
|
-
THookReturn,
|
|
429
|
-
HasTransform,
|
|
430
|
-
HasUpdate,
|
|
431
|
-
HasFormUpdate,
|
|
432
|
-
true
|
|
433
|
-
>;
|
|
434
409
|
});
|
|
435
410
|
|
|
436
411
|
function createBuilder<
|
|
@@ -445,8 +420,7 @@ export function createPluginContext<
|
|
|
445
420
|
) => THookReturn,
|
|
446
421
|
transformFn?: TransformFn<THookReturn>,
|
|
447
422
|
updateHandler?: UpdateFn<THookReturn>,
|
|
448
|
-
formUpdateHandler?: FormUpdateFn<THookReturn
|
|
449
|
-
formWrapper?: FormWrapperFn<THookReturn>
|
|
423
|
+
formUpdateHandler?: FormUpdateFn<THookReturn>
|
|
450
424
|
): BuildRet<
|
|
451
425
|
THookReturn,
|
|
452
426
|
HasTransform,
|
|
@@ -458,8 +432,7 @@ export function createPluginContext<
|
|
|
458
432
|
hookFn,
|
|
459
433
|
transformFn,
|
|
460
434
|
updateHandler,
|
|
461
|
-
formUpdateHandler
|
|
462
|
-
formWrapper
|
|
435
|
+
formUpdateHandler
|
|
463
436
|
);
|
|
464
437
|
|
|
465
438
|
const methods = {} as Partial<
|
|
@@ -480,7 +453,7 @@ export function createPluginContext<
|
|
|
480
453
|
HasUpdate,
|
|
481
454
|
HasFormUpdate,
|
|
482
455
|
HasWrapper
|
|
483
|
-
>(hookFn, fn, updateHandler, formUpdateHandler
|
|
456
|
+
>(hookFn, fn, updateHandler, formUpdateHandler);
|
|
484
457
|
}
|
|
485
458
|
if (!updateHandler) {
|
|
486
459
|
(methods as any).onUpdate = (fn: UpdateFn<THookReturn>) =>
|
|
@@ -490,7 +463,7 @@ export function createPluginContext<
|
|
|
490
463
|
true,
|
|
491
464
|
HasFormUpdate,
|
|
492
465
|
HasWrapper
|
|
493
|
-
>(hookFn, transformFn, fn, formUpdateHandler
|
|
466
|
+
>(hookFn, transformFn, fn, formUpdateHandler);
|
|
494
467
|
}
|
|
495
468
|
if (!formUpdateHandler) {
|
|
496
469
|
(methods as any).onFormUpdate = (fn: FormUpdateFn<THookReturn>) =>
|
|
@@ -498,20 +471,9 @@ export function createPluginContext<
|
|
|
498
471
|
hookFn,
|
|
499
472
|
transformFn,
|
|
500
473
|
updateHandler,
|
|
501
|
-
fn
|
|
502
|
-
formWrapper
|
|
474
|
+
fn
|
|
503
475
|
);
|
|
504
476
|
}
|
|
505
|
-
if (!formWrapper) {
|
|
506
|
-
(methods as any).formWrapper = (fn: FormWrapperFn<THookReturn>) =>
|
|
507
|
-
createBuilder<
|
|
508
|
-
THookReturn,
|
|
509
|
-
HasTransform,
|
|
510
|
-
HasUpdate,
|
|
511
|
-
HasFormUpdate,
|
|
512
|
-
true
|
|
513
|
-
>(hookFn, transformFn, updateHandler, formUpdateHandler, fn);
|
|
514
|
-
}
|
|
515
477
|
|
|
516
478
|
return Object.assign(plugin, methods) as BuildRet<
|
|
517
479
|
THookReturn,
|
package/src/store.ts
CHANGED
|
@@ -1232,7 +1232,7 @@ export const getGlobalStore = create<CogsGlobalState>((set, get) => ({
|
|
|
1232
1232
|
`Array not found at path: ${[key, ...arrayPath].join('.')}`
|
|
1233
1233
|
);
|
|
1234
1234
|
}
|
|
1235
|
-
|
|
1235
|
+
|
|
1236
1236
|
const newItemId = itemId || `${generateId(key)}`;
|
|
1237
1237
|
|
|
1238
1238
|
// BUILD AND ADD the node directly - no need for addItemsToArrayNode
|