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/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
- stateKey: string;
75
+ > = DeconstructedCogsMethods<TStateSlice> &
76
+ GlobalMetadataMethods<TFieldMetaData> & {
77
+ stateKey: string;
65
78
 
66
- getPluginMetaData: () => TPluginMetaData | undefined;
67
- setPluginMetaData: (data: Partial<TPluginMetaData>) => void;
68
- removePluginMetaData: () => void;
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
- options: TOptions;
75
- pluginName: string;
76
- isInitialMount: boolean;
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
- stateKey: string;
87
-
88
- getPluginMetaData: () => TPluginMetaData | undefined;
89
- setPluginMetaData: (data: Partial<TPluginMetaData>) => void;
90
- removePluginMetaData: () => void;
91
-
92
- getFieldMetaData: (path: string[]) => TFieldMetaData | undefined;
93
- setFieldMetaData: (path: string[], data: Partial<TFieldMetaData>) => void;
94
- removeFieldMetaData: (path: string[]) => void;
95
-
96
- options: TOptions;
97
- hookData?: THookReturn;
98
- previousState?: TStateSlice;
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
- stateKey: string;
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
- getFieldMetaData: (path: string[]) => TFieldMetaData | undefined;
117
- setFieldMetaData: (path: string[], data: Partial<TFieldMetaData>) => void;
118
- removeFieldMetaData: (path: string[]) => void;
119
+ getPluginMetaData: () => TPluginMetaData | undefined;
120
+ setPluginMetaData: (data: Partial<TPluginMetaData>) => void;
121
+ removePluginMetaData: () => void;
119
122
 
120
- update: UpdateTypeDetail;
121
- path?: string[];
122
-
123
- options: TOptions;
124
- hookData?: THookReturn;
123
+ update: UpdateTypeDetail;
124
+ path?: string[];
125
125
 
126
- previousValue?: any;
127
- nextValue?: any;
128
- updateSource?: 'user' | 'plugin' | 'system';
126
+ options: TOptions;
127
+ hookData?: THookReturn;
129
128
 
130
- pluginName: string;
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
- stateKey: string;
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
- getFieldMetaData: (path: string[]) => TFieldMetaData | undefined;
147
- setFieldMetaData: (path: string[], data: Partial<TFieldMetaData>) => void;
148
- removeFieldMetaData: (path: string[]) => void;
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
- options: TOptions;
158
- hookData?: THookReturn;
152
+ options: TOptions;
153
+ hookData?: THookReturn;
159
154
 
160
- formState?: 'pristine' | 'dirty' | 'submitting' | 'submitted';
161
- pluginName: string;
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, formWrapper);
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, formWrapper);
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
- console.log('OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO');
1235
+
1236
1236
  const newItemId = itemId || `${generateId(key)}`;
1237
1237
 
1238
1238
  // BUILD AND ADD the node directly - no need for addItemsToArrayNode