cogsbox-state 0.5.3 → 0.5.5
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/dist/CogsState.d.ts +25 -21
- package/dist/CogsState.jsx +491 -442
- package/dist/CogsState.jsx.map +1 -1
- package/dist/Functions.jsx +175 -0
- package/dist/Functions.jsx.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +17 -20
- package/dist/index.js.map +1 -1
- package/dist/store.d.ts +4 -0
- package/dist/store.js.map +1 -1
- package/package.json +6 -4
- package/dist/examples/index.d.ts +0 -1
- package/dist/updaterFunctions.jsx +0 -177
- package/dist/updaterFunctions.jsx.map +0 -1
- /package/dist/{updaterFunctions.d.ts → Functions.d.ts} +0 -0
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,25 +1,22 @@
|
|
|
1
|
-
import { $cogsSignal as r, $cogsSignalStore as s, addStateOptions as
|
|
2
|
-
import {
|
|
3
|
-
import { deleteNestedProperty as p, getArrayLengthDifferences as d, getArrayLengthDifferencesArray as u, getDifferences as y, getDifferencesArray as S, getNestedValue as l, isArray as A, isDeepEqual as D, isFunction as m, isObject as C, transformStateFunc as x, updateNestedProperty as F } from "./utility.js";
|
|
1
|
+
import { $cogsSignal as r, $cogsSignalStore as s, addStateOptions as a, createCogsState as n, useCogsStateFn as o } from "./CogsState.jsx";
|
|
2
|
+
import { deleteNestedProperty as i, getArrayLengthDifferences as f, getArrayLengthDifferencesArray as c, getDifferences as d, getDifferencesArray as p, getNestedValue as y, isArray as S, isDeepEqual as u, isFunction as l, isObject as A, transformStateFunc as D, updateNestedProperty as m } from "./utility.js";
|
|
4
3
|
export {
|
|
5
4
|
r as $cogsSignal,
|
|
6
5
|
s as $cogsSignalStore,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
i as useCogsConfig,
|
|
23
|
-
g as useCogsStateFn
|
|
6
|
+
a as addStateOptions,
|
|
7
|
+
n as createCogsState,
|
|
8
|
+
i as deleteNestedProperty,
|
|
9
|
+
f as getArrayLengthDifferences,
|
|
10
|
+
c as getArrayLengthDifferencesArray,
|
|
11
|
+
d as getDifferences,
|
|
12
|
+
p as getDifferencesArray,
|
|
13
|
+
y as getNestedValue,
|
|
14
|
+
S as isArray,
|
|
15
|
+
u as isDeepEqual,
|
|
16
|
+
l as isFunction,
|
|
17
|
+
A as isObject,
|
|
18
|
+
D as transformStateFunc,
|
|
19
|
+
m as updateNestedProperty,
|
|
20
|
+
o as useCogsStateFn
|
|
24
21
|
};
|
|
25
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
package/dist/store.d.ts
CHANGED
|
@@ -67,11 +67,15 @@ export type CogsGlobalState = {
|
|
|
67
67
|
instanceId: string;
|
|
68
68
|
parentId: string;
|
|
69
69
|
position: number;
|
|
70
|
+
effect?: string;
|
|
71
|
+
map?: string;
|
|
70
72
|
}>>;
|
|
71
73
|
addSignalElement: (signalId: string, elementInfo: {
|
|
72
74
|
instanceId: string;
|
|
73
75
|
parentId: string;
|
|
74
76
|
position: number;
|
|
77
|
+
effect?: string;
|
|
78
|
+
map?: string;
|
|
75
79
|
}) => void;
|
|
76
80
|
removeSignalElement: (signalId: string, instanceId: string) => void;
|
|
77
81
|
reRenderTriggerPrevValue: Record<string, any>;
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sources":["../src/store.ts"],"sourcesContent":["import { create } from \"zustand\";\r\nimport type {\r\n OptionsType,\r\n StateKeys,\r\n SyncActionsType,\r\n SyncInfo,\r\n UpdateTypeDetail,\r\n} from \"./CogsState.js\";\r\n\r\ntype StateUpdater<StateValue> =\r\n | StateValue\r\n | ((prevValue: StateValue) => StateValue);\r\n\r\nexport type FreshValuesObject = {\r\n pathsToValues?: string[];\r\n prevValue?: any;\r\n newValue?: any;\r\n timeStamp: number;\r\n};\r\n\r\ntype SyncLogType = {\r\n timeStamp: number;\r\n};\r\ntype StateValue = any;\r\n\r\nexport type CogsGlobalState = {\r\n updaterState: { [key: string]: any };\r\n initialStateOptions: { [key: string]: OptionsType };\r\n cogsStateStore: { [key: string]: StateValue };\r\n isLoadingGlobal: { [key: string]: boolean };\r\n\r\n initialStateGlobal: { [key: string]: StateValue };\r\n validationErrors: Map<string, string[]>;\r\n\r\n serverState: { [key: string]: StateValue };\r\n serverSyncActions: { [key: string]: SyncActionsType<any> };\r\n\r\n serverSyncLog: { [key: string]: SyncLogType[] };\r\n serverSideOrNot: { [key: string]: boolean };\r\n setServerSyncLog: (key: string, newValue: SyncLogType) => void;\r\n\r\n setServerSideOrNot: (key: string, value: boolean) => void;\r\n getServerSideOrNot: (key: string) => boolean | undefined;\r\n setServerState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n value: StateValue,\r\n ) => void;\r\n\r\n getThisLocalUpdate: (key: string) => UpdateTypeDetail[] | undefined;\r\n setServerSyncActions: (key: string, value: SyncActionsType<any>) => void;\r\n addValidationError: (path: string, message: string) => void;\r\n getValidationErrors: (path: string) => string[];\r\n updateInitialStateGlobal: (key: string, newState: StateValue) => void;\r\n getInitialOptions: (key: string) => OptionsType | undefined;\r\n getUpdaterState: (key: string) => StateUpdater<StateValue>;\r\n setUpdaterState: (key: string, newUpdater: any) => void;\r\n getKeyState: <StateKey extends StateKeys>(key: StateKey) => StateValue;\r\n getNestedState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n path: string[],\r\n ) => StateValue;\r\n setState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n value: StateUpdater<StateValue>,\r\n ) => void;\r\n setInitialStates: (initialState: StateValue) => void;\r\n stateLog: { [key: string]: UpdateTypeDetail[] };\r\n setStateLog: (\r\n key: string,\r\n updater: (prevUpdates: UpdateTypeDetail[]) => UpdateTypeDetail[],\r\n ) => void;\r\n setIsLoadingGlobal: (key: string, value: boolean) => void;\r\n\r\n setInitialStateOptions: (key: string, value: OptionsType) => void;\r\n removeValidationError: (path: string) => void;\r\n signalDomElements: Map<\r\n string,\r\n Set<{ instanceId: string; parentId: string; position: number }>\r\n >;\r\n addSignalElement: (\r\n signalId: string,\r\n elementInfo: { instanceId: string; parentId: string; position: number },\r\n ) => void;\r\n removeSignalElement: (signalId: string, instanceId: string) => void;\r\n reRenderTriggerPrevValue: Record<string, any>;\r\n\r\n reactiveDeps: Record<\r\n string,\r\n {\r\n deps: any[];\r\n updaters: Set<() => void>;\r\n depsFunction: ((state: any) => any[] | true) | null;\r\n }\r\n >;\r\n setReactiveDeps: (\r\n key: string,\r\n record: {\r\n deps: any[];\r\n updaters: Set<() => void>;\r\n depsFunction: ((state: any) => any[] | true) | null;\r\n },\r\n ) => void;\r\n deleteReactiveDeps: (key: string) => void;\r\n subscribe: (listener: () => void) => () => void;\r\n\r\n stateComponents: Map<\r\n string,\r\n {\r\n components: Map<\r\n string,\r\n {\r\n forceUpdate: () => void;\r\n paths: Set<string>;\r\n deps?: any[];\r\n depsFunction?: (state: any) => any[] | true;\r\n }\r\n >;\r\n }\r\n >;\r\n syncInfoStore: Map<string, SyncInfo>;\r\n setSyncInfo: (key: string, syncInfo: SyncInfo) => void;\r\n getSyncInfo: (key: string) => SyncInfo | null;\r\n};\r\n\r\nexport const getGlobalStore = create<CogsGlobalState>((set, get) => ({\r\n stateComponents: new Map(),\r\n subscribe: (listener: () => void) => {\r\n // zustand's subscribe returns an unsubscribe function\r\n return get().subscribe(listener);\r\n },\r\n\r\n reactiveDeps: {},\r\n setReactiveDeps: (key, record) =>\r\n set((state) => ({\r\n ...state,\r\n reactiveDeps: {\r\n ...state.reactiveDeps,\r\n [key]: record,\r\n },\r\n })),\r\n deleteReactiveDeps: (key) =>\r\n set((state) => {\r\n const { [key]: _, ...rest } = state.reactiveDeps;\r\n return {\r\n ...state,\r\n reactiveDeps: rest,\r\n };\r\n }),\r\n\r\n reRenderTriggerPrevValue: {},\r\n signalDomElements: new Map(),\r\n addSignalElement: (\r\n signalId: string,\r\n elementInfo: { instanceId: string; parentId: string; position: number },\r\n ) => {\r\n console.log(\"Adding signal element\", signalId, elementInfo);\r\n const current = get().signalDomElements;\r\n if (!current.has(signalId)) {\r\n current.set(signalId, new Set());\r\n }\r\n current.get(signalId)!.add(elementInfo);\r\n console.log(\"After adding\", current.get(signalId));\r\n set({ signalDomElements: new Map(current) }); // Create new reference to trigger update\r\n },\r\n removeSignalElement: (signalId: string, instanceId: string) => {\r\n console.log(\"Removing signal element\", signalId, instanceId);\r\n const current = get().signalDomElements;\r\n const elements = current.get(signalId);\r\n if (elements) {\r\n elements.forEach((el) => {\r\n if (el.instanceId === instanceId) {\r\n elements.delete(el);\r\n }\r\n });\r\n }\r\n set({ signalDomElements: new Map(current) });\r\n },\r\n initialStateOptions: {},\r\n updaterState: {},\r\n stateTimeline: {},\r\n cogsStateStore: {},\r\n stateLog: {},\r\n isLoadingGlobal: {},\r\n\r\n initialStateGlobal: {},\r\n validationErrors: new Map(),\r\n\r\n serverState: {},\r\n\r\n serverSyncActions: {},\r\n\r\n serverSyncLog: {},\r\n serverSideOrNot: {},\r\n setServerSyncLog: (key, newValue) => {\r\n set((state) => ({\r\n serverSyncLog: {\r\n ...state.serverSyncLog,\r\n [key]: [...(state.serverSyncLog[key] ?? []), newValue],\r\n },\r\n }));\r\n },\r\n setServerSideOrNot: (key, value) => {\r\n set((state) => ({\r\n serverSideOrNot: {\r\n ...state.serverSideOrNot,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n getServerSideOrNot: (key) => {\r\n return get().serverSideOrNot[key];\r\n },\r\n\r\n getThisLocalUpdate: (key: string) => {\r\n return get().stateLog[key];\r\n },\r\n setServerState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n value: StateValue,\r\n ) => {\r\n set((prev) => ({\r\n serverState: {\r\n ...prev.serverState,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n\r\n setStateLog: (\r\n key: string,\r\n updater: (prevUpdates: UpdateTypeDetail[]) => UpdateTypeDetail[],\r\n ) => {\r\n set((prev) => {\r\n const currentUpdates = prev.stateLog[key] ?? [];\r\n const newUpdates = updater(currentUpdates);\r\n return {\r\n stateLog: {\r\n ...prev.stateLog,\r\n [key]: newUpdates,\r\n },\r\n };\r\n });\r\n },\r\n setIsLoadingGlobal: (key: string, value: boolean) => {\r\n set((prev) => ({\r\n isLoadingGlobal: {\r\n ...prev.isLoadingGlobal,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n setServerSyncActions: (key: string, value: SyncActionsType<any>) => {\r\n set((prev) => ({\r\n serverSyncActions: {\r\n ...prev.serverSyncActions,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n addValidationError: (path, message) => {\r\n set((prev) => {\r\n const updatedErrors = new Map(prev.validationErrors);\r\n\r\n const existingMessages = updatedErrors.get(path) || [];\r\n updatedErrors.set(path, [...existingMessages, message]);\r\n return { validationErrors: updatedErrors };\r\n });\r\n },\r\n removeValidationError: (path) => {\r\n set((prev) => {\r\n const updatedErrors = new Map(prev.validationErrors);\r\n console.log(\"updatedErrors\", updatedErrors);\r\n let doSomething = false;\r\n const pathArray = path.split(\".\");\r\n Array.from(updatedErrors.keys()).forEach((key) => {\r\n const keyArray = key.split(\".\");\r\n if (keyArray.length >= pathArray.length) {\r\n let match = true;\r\n for (let i = 0; i < pathArray.length; i++) {\r\n if (keyArray[i] !== pathArray[i]) {\r\n match = false;\r\n break;\r\n }\r\n }\r\n\r\n if (match) {\r\n doSomething = true;\r\n updatedErrors.delete(key);\r\n }\r\n }\r\n });\r\n\r\n return doSomething ? { validationErrors: updatedErrors } : prev;\r\n });\r\n },\r\n getValidationErrors: (path: string) => {\r\n const errors: string[] = [];\r\n const valErrors = get().validationErrors;\r\n const pathArray = path.split(\".\");\r\n\r\n // Helper to check if an index matches either a wildcard or is in an array of indices\r\n const isIndexMatch = (pathSegment: string, keySegment: string) => {\r\n if (pathSegment === \"[*]\") return true;\r\n if (Array.isArray(pathSegment)) {\r\n return pathSegment.includes(parseInt(keySegment));\r\n }\r\n return pathSegment === keySegment;\r\n };\r\n\r\n Array.from(valErrors.keys()).forEach((key) => {\r\n const keyArray = key.split(\".\");\r\n if (keyArray.length >= pathArray.length) {\r\n let match = true;\r\n for (let i = 0; i < pathArray.length; i++) {\r\n const pathSegment = pathArray[i];\r\n const keySegment = keyArray[i]!;\r\n\r\n // If current path segment is a number or [*], we need special handling\r\n if (pathSegment === \"[*]\" || Array.isArray(pathSegment)) {\r\n // Key segment should be a number if we're using [*] or array indices\r\n const keyIndex = parseInt(keySegment);\r\n if (isNaN(keyIndex)) {\r\n match = false;\r\n break;\r\n }\r\n\r\n if (!isIndexMatch(pathSegment, keySegment)) {\r\n match = false;\r\n break;\r\n }\r\n } else if (pathSegment !== keySegment) {\r\n match = false;\r\n break;\r\n }\r\n }\r\n\r\n if (match) {\r\n const errorMessages = valErrors.get(key);\r\n if (errorMessages) {\r\n errors.push(...errorMessages);\r\n }\r\n }\r\n }\r\n });\r\n\r\n return errors;\r\n },\r\n getInitialOptions: (key) => {\r\n return get().initialStateOptions[key];\r\n },\r\n getNestedState: (key: string, path: string[]) => {\r\n const rootState = get().cogsStateStore[key];\r\n\r\n const getValueWithAsterisk = (obj: any, pathArray: string[]): any => {\r\n if (pathArray.length === 0) return obj;\r\n\r\n const currentPath = pathArray[0];\r\n const remainingPath = pathArray.slice(1);\r\n\r\n if (currentPath === \"[*]\") {\r\n if (!Array.isArray(obj)) {\r\n console.warn(\"Asterisk notation used on non-array value\");\r\n return undefined;\r\n }\r\n\r\n if (remainingPath.length === 0) return obj;\r\n\r\n // Get result for each array item\r\n const results = obj.map((item) =>\r\n getValueWithAsterisk(item, remainingPath),\r\n );\r\n\r\n // If the next path segment exists and returns arrays, flatten them\r\n if (Array.isArray(results[0])) {\r\n return results.flat();\r\n }\r\n\r\n return results;\r\n }\r\n\r\n const value = obj[currentPath as keyof typeof obj];\r\n if (value === undefined) return undefined;\r\n\r\n return getValueWithAsterisk(value, remainingPath);\r\n };\r\n\r\n // This will still get the value but we need to make it reactive only to specific paths\r\n return getValueWithAsterisk(rootState, path);\r\n },\r\n setInitialStateOptions: (key, value) => {\r\n set((prev) => ({\r\n initialStateOptions: {\r\n ...prev.initialStateOptions,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n updateInitialStateGlobal: (key, newState) => {\r\n set((prev) => ({\r\n initialStateGlobal: {\r\n ...prev.initialStateGlobal,\r\n [key]: newState,\r\n },\r\n }));\r\n },\r\n getUpdaterState: (key) => {\r\n return get().updaterState[key];\r\n },\r\n setUpdaterState: (key, newUpdater) => {\r\n const current = get().updaterState;\r\n\r\n if (!key || !newUpdater) return;\r\n\r\n set({ updaterState: { ...(current ?? {}), [key]: newUpdater } });\r\n },\r\n getKeyState: <StateKey extends StateKeys>(key: StateKey) => {\r\n return get().cogsStateStore[key];\r\n },\r\n\r\n setState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n value: StateValue,\r\n ) => {\r\n set((prev) => {\r\n return {\r\n cogsStateStore: {\r\n ...prev.cogsStateStore,\r\n [key]:\r\n typeof value === \"function\"\r\n ? value(prev.cogsStateStore[key])\r\n : value,\r\n },\r\n };\r\n });\r\n },\r\n setInitialStates: <StateKey extends StateKeys>(\r\n initialState: StateValue,\r\n ) => {\r\n set((prev) => ({\r\n cogsStateStore: {\r\n ...prev.cogsStateStore,\r\n ...initialState,\r\n },\r\n }));\r\n },\r\n syncInfoStore: new Map<string, SyncInfo>(),\r\n setSyncInfo: (key: string, syncInfo: SyncInfo) =>\r\n set((state) => {\r\n const newMap = new Map(state.syncInfoStore);\r\n newMap.set(key, syncInfo);\r\n return { ...state, syncInfoStore: newMap };\r\n }),\r\n getSyncInfo: (key: string) => get().syncInfoStore.get(key) || null,\r\n}));\r\n"],"names":["getGlobalStore","create","set","get","listener","key","record","state","_","rest","signalId","elementInfo","current","instanceId","elements","el","newValue","value","prev","updater","currentUpdates","newUpdates","path","message","updatedErrors","existingMessages","doSomething","pathArray","keyArray","match","i","errors","valErrors","isIndexMatch","pathSegment","keySegment","keyIndex","errorMessages","rootState","getValueWithAsterisk","obj","currentPath","remainingPath","results","item","newState","newUpdater","initialState","syncInfo","newMap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sources":["../src/store.ts"],"sourcesContent":["import { create } from \"zustand\";\r\nimport type {\r\n OptionsType,\r\n StateKeys,\r\n SyncActionsType,\r\n SyncInfo,\r\n UpdateTypeDetail,\r\n} from \"./CogsState.js\";\r\n\r\ntype StateUpdater<StateValue> =\r\n | StateValue\r\n | ((prevValue: StateValue) => StateValue);\r\n\r\nexport type FreshValuesObject = {\r\n pathsToValues?: string[];\r\n prevValue?: any;\r\n newValue?: any;\r\n timeStamp: number;\r\n};\r\n\r\ntype SyncLogType = {\r\n timeStamp: number;\r\n};\r\ntype StateValue = any;\r\n\r\nexport type CogsGlobalState = {\r\n updaterState: { [key: string]: any };\r\n initialStateOptions: { [key: string]: OptionsType };\r\n cogsStateStore: { [key: string]: StateValue };\r\n isLoadingGlobal: { [key: string]: boolean };\r\n\r\n initialStateGlobal: { [key: string]: StateValue };\r\n validationErrors: Map<string, string[]>;\r\n\r\n serverState: { [key: string]: StateValue };\r\n serverSyncActions: { [key: string]: SyncActionsType<any> };\r\n\r\n serverSyncLog: { [key: string]: SyncLogType[] };\r\n serverSideOrNot: { [key: string]: boolean };\r\n setServerSyncLog: (key: string, newValue: SyncLogType) => void;\r\n\r\n setServerSideOrNot: (key: string, value: boolean) => void;\r\n getServerSideOrNot: (key: string) => boolean | undefined;\r\n setServerState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n value: StateValue,\r\n ) => void;\r\n\r\n getThisLocalUpdate: (key: string) => UpdateTypeDetail[] | undefined;\r\n setServerSyncActions: (key: string, value: SyncActionsType<any>) => void;\r\n addValidationError: (path: string, message: string) => void;\r\n getValidationErrors: (path: string) => string[];\r\n updateInitialStateGlobal: (key: string, newState: StateValue) => void;\r\n getInitialOptions: (key: string) => OptionsType | undefined;\r\n getUpdaterState: (key: string) => StateUpdater<StateValue>;\r\n setUpdaterState: (key: string, newUpdater: any) => void;\r\n getKeyState: <StateKey extends StateKeys>(key: StateKey) => StateValue;\r\n getNestedState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n path: string[],\r\n ) => StateValue;\r\n setState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n value: StateUpdater<StateValue>,\r\n ) => void;\r\n setInitialStates: (initialState: StateValue) => void;\r\n stateLog: { [key: string]: UpdateTypeDetail[] };\r\n setStateLog: (\r\n key: string,\r\n updater: (prevUpdates: UpdateTypeDetail[]) => UpdateTypeDetail[],\r\n ) => void;\r\n setIsLoadingGlobal: (key: string, value: boolean) => void;\r\n\r\n setInitialStateOptions: (key: string, value: OptionsType) => void;\r\n removeValidationError: (path: string) => void;\r\n signalDomElements: Map<\r\n string,\r\n Set<{\r\n instanceId: string;\r\n parentId: string;\r\n position: number;\r\n effect?: string;\r\n map?: string;\r\n }>\r\n >;\r\n addSignalElement: (\r\n signalId: string,\r\n elementInfo: {\r\n instanceId: string;\r\n parentId: string;\r\n position: number;\r\n effect?: string;\r\n map?: string;\r\n },\r\n ) => void;\r\n removeSignalElement: (signalId: string, instanceId: string) => void;\r\n reRenderTriggerPrevValue: Record<string, any>;\r\n\r\n reactiveDeps: Record<\r\n string,\r\n {\r\n deps: any[];\r\n updaters: Set<() => void>;\r\n depsFunction: ((state: any) => any[] | true) | null;\r\n }\r\n >;\r\n setReactiveDeps: (\r\n key: string,\r\n record: {\r\n deps: any[];\r\n updaters: Set<() => void>;\r\n depsFunction: ((state: any) => any[] | true) | null;\r\n },\r\n ) => void;\r\n deleteReactiveDeps: (key: string) => void;\r\n subscribe: (listener: () => void) => () => void;\r\n\r\n stateComponents: Map<\r\n string,\r\n {\r\n components: Map<\r\n string,\r\n {\r\n forceUpdate: () => void;\r\n paths: Set<string>;\r\n deps?: any[];\r\n depsFunction?: (state: any) => any[] | true;\r\n }\r\n >;\r\n }\r\n >;\r\n syncInfoStore: Map<string, SyncInfo>;\r\n setSyncInfo: (key: string, syncInfo: SyncInfo) => void;\r\n getSyncInfo: (key: string) => SyncInfo | null;\r\n};\r\n\r\nexport const getGlobalStore = create<CogsGlobalState>((set, get) => ({\r\n stateComponents: new Map(),\r\n subscribe: (listener: () => void) => {\r\n // zustand's subscribe returns an unsubscribe function\r\n return get().subscribe(listener);\r\n },\r\n\r\n reactiveDeps: {},\r\n setReactiveDeps: (key, record) =>\r\n set((state) => ({\r\n ...state,\r\n reactiveDeps: {\r\n ...state.reactiveDeps,\r\n [key]: record,\r\n },\r\n })),\r\n deleteReactiveDeps: (key) =>\r\n set((state) => {\r\n const { [key]: _, ...rest } = state.reactiveDeps;\r\n return {\r\n ...state,\r\n reactiveDeps: rest,\r\n };\r\n }),\r\n\r\n reRenderTriggerPrevValue: {},\r\n signalDomElements: new Map(),\r\n addSignalElement: (\r\n signalId: string,\r\n elementInfo: { instanceId: string; parentId: string; position: number },\r\n ) => {\r\n console.log(\"Adding signal element\", signalId, elementInfo);\r\n const current = get().signalDomElements;\r\n if (!current.has(signalId)) {\r\n current.set(signalId, new Set());\r\n }\r\n current.get(signalId)!.add(elementInfo);\r\n console.log(\"After adding\", current.get(signalId));\r\n set({ signalDomElements: new Map(current) }); // Create new reference to trigger update\r\n },\r\n removeSignalElement: (signalId: string, instanceId: string) => {\r\n console.log(\"Removing signal element\", signalId, instanceId);\r\n const current = get().signalDomElements;\r\n const elements = current.get(signalId);\r\n if (elements) {\r\n elements.forEach((el) => {\r\n if (el.instanceId === instanceId) {\r\n elements.delete(el);\r\n }\r\n });\r\n }\r\n set({ signalDomElements: new Map(current) });\r\n },\r\n initialStateOptions: {},\r\n updaterState: {},\r\n stateTimeline: {},\r\n cogsStateStore: {},\r\n stateLog: {},\r\n isLoadingGlobal: {},\r\n\r\n initialStateGlobal: {},\r\n validationErrors: new Map(),\r\n\r\n serverState: {},\r\n\r\n serverSyncActions: {},\r\n\r\n serverSyncLog: {},\r\n serverSideOrNot: {},\r\n setServerSyncLog: (key, newValue) => {\r\n set((state) => ({\r\n serverSyncLog: {\r\n ...state.serverSyncLog,\r\n [key]: [...(state.serverSyncLog[key] ?? []), newValue],\r\n },\r\n }));\r\n },\r\n setServerSideOrNot: (key, value) => {\r\n set((state) => ({\r\n serverSideOrNot: {\r\n ...state.serverSideOrNot,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n getServerSideOrNot: (key) => {\r\n return get().serverSideOrNot[key];\r\n },\r\n\r\n getThisLocalUpdate: (key: string) => {\r\n return get().stateLog[key];\r\n },\r\n setServerState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n value: StateValue,\r\n ) => {\r\n set((prev) => ({\r\n serverState: {\r\n ...prev.serverState,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n\r\n setStateLog: (\r\n key: string,\r\n updater: (prevUpdates: UpdateTypeDetail[]) => UpdateTypeDetail[],\r\n ) => {\r\n set((prev) => {\r\n const currentUpdates = prev.stateLog[key] ?? [];\r\n const newUpdates = updater(currentUpdates);\r\n return {\r\n stateLog: {\r\n ...prev.stateLog,\r\n [key]: newUpdates,\r\n },\r\n };\r\n });\r\n },\r\n setIsLoadingGlobal: (key: string, value: boolean) => {\r\n set((prev) => ({\r\n isLoadingGlobal: {\r\n ...prev.isLoadingGlobal,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n setServerSyncActions: (key: string, value: SyncActionsType<any>) => {\r\n set((prev) => ({\r\n serverSyncActions: {\r\n ...prev.serverSyncActions,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n addValidationError: (path, message) => {\r\n set((prev) => {\r\n const updatedErrors = new Map(prev.validationErrors);\r\n\r\n const existingMessages = updatedErrors.get(path) || [];\r\n updatedErrors.set(path, [...existingMessages, message]);\r\n return { validationErrors: updatedErrors };\r\n });\r\n },\r\n removeValidationError: (path) => {\r\n set((prev) => {\r\n const updatedErrors = new Map(prev.validationErrors);\r\n console.log(\"updatedErrors\", updatedErrors);\r\n let doSomething = false;\r\n const pathArray = path.split(\".\");\r\n Array.from(updatedErrors.keys()).forEach((key) => {\r\n const keyArray = key.split(\".\");\r\n if (keyArray.length >= pathArray.length) {\r\n let match = true;\r\n for (let i = 0; i < pathArray.length; i++) {\r\n if (keyArray[i] !== pathArray[i]) {\r\n match = false;\r\n break;\r\n }\r\n }\r\n\r\n if (match) {\r\n doSomething = true;\r\n updatedErrors.delete(key);\r\n }\r\n }\r\n });\r\n\r\n return doSomething ? { validationErrors: updatedErrors } : prev;\r\n });\r\n },\r\n getValidationErrors: (path: string) => {\r\n const errors: string[] = [];\r\n const valErrors = get().validationErrors;\r\n const pathArray = path.split(\".\");\r\n\r\n // Helper to check if an index matches either a wildcard or is in an array of indices\r\n const isIndexMatch = (pathSegment: string, keySegment: string) => {\r\n if (pathSegment === \"[*]\") return true;\r\n if (Array.isArray(pathSegment)) {\r\n return pathSegment.includes(parseInt(keySegment));\r\n }\r\n return pathSegment === keySegment;\r\n };\r\n\r\n Array.from(valErrors.keys()).forEach((key) => {\r\n const keyArray = key.split(\".\");\r\n if (keyArray.length >= pathArray.length) {\r\n let match = true;\r\n for (let i = 0; i < pathArray.length; i++) {\r\n const pathSegment = pathArray[i];\r\n const keySegment = keyArray[i]!;\r\n\r\n // If current path segment is a number or [*], we need special handling\r\n if (pathSegment === \"[*]\" || Array.isArray(pathSegment)) {\r\n // Key segment should be a number if we're using [*] or array indices\r\n const keyIndex = parseInt(keySegment);\r\n if (isNaN(keyIndex)) {\r\n match = false;\r\n break;\r\n }\r\n\r\n if (!isIndexMatch(pathSegment, keySegment)) {\r\n match = false;\r\n break;\r\n }\r\n } else if (pathSegment !== keySegment) {\r\n match = false;\r\n break;\r\n }\r\n }\r\n\r\n if (match) {\r\n const errorMessages = valErrors.get(key);\r\n if (errorMessages) {\r\n errors.push(...errorMessages);\r\n }\r\n }\r\n }\r\n });\r\n\r\n return errors;\r\n },\r\n getInitialOptions: (key) => {\r\n return get().initialStateOptions[key];\r\n },\r\n getNestedState: (key: string, path: string[]) => {\r\n const rootState = get().cogsStateStore[key];\r\n\r\n const getValueWithAsterisk = (obj: any, pathArray: string[]): any => {\r\n if (pathArray.length === 0) return obj;\r\n\r\n const currentPath = pathArray[0];\r\n const remainingPath = pathArray.slice(1);\r\n\r\n if (currentPath === \"[*]\") {\r\n if (!Array.isArray(obj)) {\r\n console.warn(\"Asterisk notation used on non-array value\");\r\n return undefined;\r\n }\r\n\r\n if (remainingPath.length === 0) return obj;\r\n\r\n // Get result for each array item\r\n const results = obj.map((item) =>\r\n getValueWithAsterisk(item, remainingPath),\r\n );\r\n\r\n // If the next path segment exists and returns arrays, flatten them\r\n if (Array.isArray(results[0])) {\r\n return results.flat();\r\n }\r\n\r\n return results;\r\n }\r\n\r\n const value = obj[currentPath as keyof typeof obj];\r\n if (value === undefined) return undefined;\r\n\r\n return getValueWithAsterisk(value, remainingPath);\r\n };\r\n\r\n // This will still get the value but we need to make it reactive only to specific paths\r\n return getValueWithAsterisk(rootState, path);\r\n },\r\n setInitialStateOptions: (key, value) => {\r\n set((prev) => ({\r\n initialStateOptions: {\r\n ...prev.initialStateOptions,\r\n [key]: value,\r\n },\r\n }));\r\n },\r\n updateInitialStateGlobal: (key, newState) => {\r\n set((prev) => ({\r\n initialStateGlobal: {\r\n ...prev.initialStateGlobal,\r\n [key]: newState,\r\n },\r\n }));\r\n },\r\n getUpdaterState: (key) => {\r\n return get().updaterState[key];\r\n },\r\n setUpdaterState: (key, newUpdater) => {\r\n const current = get().updaterState;\r\n\r\n if (!key || !newUpdater) return;\r\n\r\n set({ updaterState: { ...(current ?? {}), [key]: newUpdater } });\r\n },\r\n getKeyState: <StateKey extends StateKeys>(key: StateKey) => {\r\n return get().cogsStateStore[key];\r\n },\r\n\r\n setState: <StateKey extends StateKeys>(\r\n key: StateKey,\r\n value: StateValue,\r\n ) => {\r\n set((prev) => {\r\n return {\r\n cogsStateStore: {\r\n ...prev.cogsStateStore,\r\n [key]:\r\n typeof value === \"function\"\r\n ? value(prev.cogsStateStore[key])\r\n : value,\r\n },\r\n };\r\n });\r\n },\r\n setInitialStates: <StateKey extends StateKeys>(\r\n initialState: StateValue,\r\n ) => {\r\n set((prev) => ({\r\n cogsStateStore: {\r\n ...prev.cogsStateStore,\r\n ...initialState,\r\n },\r\n }));\r\n },\r\n syncInfoStore: new Map<string, SyncInfo>(),\r\n setSyncInfo: (key: string, syncInfo: SyncInfo) =>\r\n set((state) => {\r\n const newMap = new Map(state.syncInfoStore);\r\n newMap.set(key, syncInfo);\r\n return { ...state, syncInfoStore: newMap };\r\n }),\r\n getSyncInfo: (key: string) => get().syncInfoStore.get(key) || null,\r\n}));\r\n"],"names":["getGlobalStore","create","set","get","listener","key","record","state","_","rest","signalId","elementInfo","current","instanceId","elements","el","newValue","value","prev","updater","currentUpdates","newUpdates","path","message","updatedErrors","existingMessages","doSomething","pathArray","keyArray","match","i","errors","valErrors","isIndexMatch","pathSegment","keySegment","keyIndex","errorMessages","rootState","getValueWithAsterisk","obj","currentPath","remainingPath","results","item","newState","newUpdater","initialState","syncInfo","newMap"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cogsbox-state",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.5",
|
|
4
4
|
"description": "React state management library with form controls and server sync",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -18,12 +18,13 @@
|
|
|
18
18
|
],
|
|
19
19
|
"repository": "github:cogsbox/cogsbox-state",
|
|
20
20
|
"scripts": {
|
|
21
|
-
"build": "vite build",
|
|
21
|
+
"build": "vite build && rimraf dist/examples",
|
|
22
22
|
"lint": "eslint src --ext ts,tsx",
|
|
23
23
|
"format": "prettier --write \"src/**/*.{ts,tsx}\"",
|
|
24
24
|
"dev": "vite src/examples"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
+
"react-syntax-highlighter": "^15.6.1",
|
|
27
28
|
"rollup-preserve-directives": "^1.1.3",
|
|
28
29
|
"uuid": "^9.0.1",
|
|
29
30
|
"zod": "^3.22.4",
|
|
@@ -32,13 +33,13 @@
|
|
|
32
33
|
"peerDependencies": {
|
|
33
34
|
"@types/react": "^18.0.0",
|
|
34
35
|
"react": "^18.2.0",
|
|
35
|
-
"react-dom": "^18.2.0"
|
|
36
|
-
"@trpc/next": "^10.0.0"
|
|
36
|
+
"react-dom": "^18.2.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^20.11.0",
|
|
40
40
|
"@types/react": "^18.2.0",
|
|
41
41
|
"@types/react-dom": "^18.2.0",
|
|
42
|
+
"@types/react-syntax-highlighter": "^15.5.13",
|
|
42
43
|
"@types/uuid": "^9.0.7",
|
|
43
44
|
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
|
44
45
|
"@typescript-eslint/parser": "^6.21.0",
|
|
@@ -47,6 +48,7 @@
|
|
|
47
48
|
"eslint-plugin-react": "^7.33.2",
|
|
48
49
|
"eslint-plugin-react-hooks": "^4.6.0",
|
|
49
50
|
"prettier": "^3.4.0",
|
|
51
|
+
"rimraf": "^6.0.1",
|
|
50
52
|
"typescript": "^5.3.0",
|
|
51
53
|
"vite": "^5.0.0",
|
|
52
54
|
"vite-plugin-dts": "^3.7.0"
|
package/dist/examples/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { j as S } from "./node_modules/react/jsx-runtime.jsx";
|
|
2
|
-
import { isFunction as F, getNestedValue as N, updateNestedProperty as j } from "./utility.js";
|
|
3
|
-
import v, { r as f } from "./node_modules/react/index.js";
|
|
4
|
-
import { getGlobalStore as g } from "./store.js";
|
|
5
|
-
function $(s, t, e, n) {
|
|
6
|
-
s(
|
|
7
|
-
(o) => {
|
|
8
|
-
if (F(t)) {
|
|
9
|
-
const r = t(N(o, e));
|
|
10
|
-
let u = j(e, o, r);
|
|
11
|
-
return typeof u == "string" && (u = u.trim()), u;
|
|
12
|
-
} else {
|
|
13
|
-
let r = !e || e.length == 0 ? t : j(e, o, t);
|
|
14
|
-
return typeof r == "string" && (r = r.trim()), r;
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
e,
|
|
18
|
-
{ updateType: "update" },
|
|
19
|
-
n
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
function P(s, t, e, n, o) {
|
|
23
|
-
const r = g.getState().getNestedState(n, e);
|
|
24
|
-
s(
|
|
25
|
-
(u) => {
|
|
26
|
-
let c = !e || e.length == 0 ? u : N(u, [...e]), i = [...c];
|
|
27
|
-
return i.splice(
|
|
28
|
-
Number(o) == 0 ? o : c.length,
|
|
29
|
-
0,
|
|
30
|
-
F(t) ? t(c) : t
|
|
31
|
-
), e.length == 0 ? i : j([...e], u, i);
|
|
32
|
-
},
|
|
33
|
-
[
|
|
34
|
-
...e,
|
|
35
|
-
(r.length - 1).toString()
|
|
36
|
-
],
|
|
37
|
-
{
|
|
38
|
-
updateType: "insert"
|
|
39
|
-
}
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
function U(s, t, e, n) {
|
|
43
|
-
const o = g.getState().getNestedState(e, t);
|
|
44
|
-
s(
|
|
45
|
-
(r) => {
|
|
46
|
-
const u = N(r, [...t]);
|
|
47
|
-
if (n < 0 || n >= u?.length)
|
|
48
|
-
throw new Error(`Index ${n} does not exist in the array.`);
|
|
49
|
-
const c = n || Number(n) == 0 ? n : u.length - 1, i = [
|
|
50
|
-
...u.slice(0, c),
|
|
51
|
-
...u.slice(c + 1)
|
|
52
|
-
];
|
|
53
|
-
return console.log(n), t.length == 0 ? i : j([...t], r, i);
|
|
54
|
-
},
|
|
55
|
-
[
|
|
56
|
-
...t,
|
|
57
|
-
n || n === 0 ? n?.toString() : (o.length - 1).toString()
|
|
58
|
-
],
|
|
59
|
-
{ updateType: "cut" }
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
const b = (s, t, e = (n, o) => JSON.stringify(n) === JSON.stringify(o)) => {
|
|
63
|
-
const [n, o] = f.useState(
|
|
64
|
-
() => t(g.getState(), s)
|
|
65
|
-
), r = f.useRef(n);
|
|
66
|
-
return f.useEffect(() => {
|
|
67
|
-
const u = g.subscribe((c) => {
|
|
68
|
-
const i = t(c, s);
|
|
69
|
-
e(r.current, i) || (r.current = i, o(i));
|
|
70
|
-
});
|
|
71
|
-
return () => u();
|
|
72
|
-
}, [s]), n;
|
|
73
|
-
}, y = (s, t, e) => {
|
|
74
|
-
const n = s + "." + (t.length > 0 ? [t.join(".")] : []) + (e && e.length > 0 ? "." + e : "");
|
|
75
|
-
return e?.length === 0 ? [] : b(
|
|
76
|
-
n,
|
|
77
|
-
(o, r) => o.getValidationErrors(r) || []
|
|
78
|
-
);
|
|
79
|
-
}, C = (s, t) => {
|
|
80
|
-
const e = `${s}:${t.join(".")}`;
|
|
81
|
-
return b(
|
|
82
|
-
e,
|
|
83
|
-
(n, o) => n.getSyncInfo(o)
|
|
84
|
-
);
|
|
85
|
-
}, G = (s, t) => b(
|
|
86
|
-
`${s}:${t.join(".")}`,
|
|
87
|
-
(e, n) => e.getNestedState(s, t)
|
|
88
|
-
), D = ({
|
|
89
|
-
setState: s,
|
|
90
|
-
validationKey: t,
|
|
91
|
-
path: e,
|
|
92
|
-
child: n,
|
|
93
|
-
formOpts: o,
|
|
94
|
-
stateKey: r
|
|
95
|
-
}) => {
|
|
96
|
-
const { getInitialOptions: u, getValidationErrors: c, removeValidationError: i } = g.getState();
|
|
97
|
-
y(t, e), g.getState().serverSyncActions[r], g.getState().serverState[r];
|
|
98
|
-
const l = G(r, e), [m, d] = f.useState(
|
|
99
|
-
g.getState().getNestedState(r, e)
|
|
100
|
-
);
|
|
101
|
-
f.useEffect(() => {
|
|
102
|
-
d(l);
|
|
103
|
-
}, [r, e.join("."), l]);
|
|
104
|
-
const a = f.useRef();
|
|
105
|
-
let T = (E, I) => {
|
|
106
|
-
d(E), a.current && clearTimeout(a.current), a.current = setTimeout(() => {
|
|
107
|
-
$(s, E, e, t);
|
|
108
|
-
}, o?.debounceTime ?? 300);
|
|
109
|
-
};
|
|
110
|
-
f.useEffect(() => () => {
|
|
111
|
-
a.current && clearTimeout(a.current);
|
|
112
|
-
}, []);
|
|
113
|
-
const V = C(r, e), w = V ? {
|
|
114
|
-
...V,
|
|
115
|
-
date: new Date(V.timeStamp)
|
|
116
|
-
} : null, R = n({
|
|
117
|
-
get: () => m || g.getState().getNestedState(r, e),
|
|
118
|
-
set: T,
|
|
119
|
-
syncStatus: w,
|
|
120
|
-
path: e,
|
|
121
|
-
validationErrors: () => c(t + "." + e.join(".")),
|
|
122
|
-
// Add default input props
|
|
123
|
-
inputProps: {
|
|
124
|
-
value: m || g.getState().getNestedState(r, e) || "",
|
|
125
|
-
onChange: (E) => T(E.target.value)
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
return /* @__PURE__ */ S.jsx(S.Fragment, { children: /* @__PURE__ */ S.jsx(
|
|
129
|
-
A,
|
|
130
|
-
{
|
|
131
|
-
formOpts: o,
|
|
132
|
-
path: e,
|
|
133
|
-
validationKey: t,
|
|
134
|
-
stateKey: r,
|
|
135
|
-
children: R
|
|
136
|
-
}
|
|
137
|
-
) });
|
|
138
|
-
};
|
|
139
|
-
function A({
|
|
140
|
-
formOpts: s,
|
|
141
|
-
path: t,
|
|
142
|
-
validationKey: e,
|
|
143
|
-
stateKey: n,
|
|
144
|
-
children: o,
|
|
145
|
-
validIndices: r
|
|
146
|
-
}) {
|
|
147
|
-
const { getInitialOptions: u, getValidationErrors: c } = g.getState(), i = y(
|
|
148
|
-
e,
|
|
149
|
-
t,
|
|
150
|
-
r
|
|
151
|
-
), l = [];
|
|
152
|
-
if (i) {
|
|
153
|
-
const a = i.join(", ");
|
|
154
|
-
l.includes(a) || l.push(a);
|
|
155
|
-
}
|
|
156
|
-
let m = l?.length > 0 ? l?.join(", ") : "";
|
|
157
|
-
const d = u(n);
|
|
158
|
-
return /* @__PURE__ */ S.jsx(S.Fragment, { children: d?.formElements?.validation && !s?.validation?.disable ? d.formElements.validation({
|
|
159
|
-
children: /* @__PURE__ */ S.jsx(v.Fragment, { children: o }, t.toString()),
|
|
160
|
-
active: m != "",
|
|
161
|
-
message: s?.validation?.message ? s?.validation?.message : s?.validation?.message == "" ? "" : m,
|
|
162
|
-
path: t,
|
|
163
|
-
...s?.key && { key: s?.key }
|
|
164
|
-
}) : /* @__PURE__ */ S.jsx(v.Fragment, { children: o }, t.toString()) });
|
|
165
|
-
}
|
|
166
|
-
export {
|
|
167
|
-
D as FormControlComponent,
|
|
168
|
-
A as ValidationWrapper,
|
|
169
|
-
U as cutFunc,
|
|
170
|
-
P as pushFunc,
|
|
171
|
-
$ as updateFn,
|
|
172
|
-
G as useGetKeyState,
|
|
173
|
-
C as useGetSyncInfo,
|
|
174
|
-
y as useGetValidationErrors,
|
|
175
|
-
b as useStoreSubscription
|
|
176
|
-
};
|
|
177
|
-
//# sourceMappingURL=updaterFunctions.jsx.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"updaterFunctions.jsx","sources":["../src/updaterFunctions.tsx"],"sourcesContent":["import type {\r\n EffectiveSetState,\r\n FormElementParmas,\r\n FormOptsType,\r\n UpdateArg,\r\n UpdateOpts,\r\n} from \"./CogsState\";\r\n\r\nimport { getNestedValue, isFunction, updateNestedProperty } from \"./utility\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport React from \"react\";\r\nimport { getGlobalStore } from \"./store\";\r\n\r\nexport function updateFn<U>(\r\n setState: EffectiveSetState<U>,\r\n payload: UpdateArg<U>,\r\n path: string[],\r\n validationKey?: string,\r\n): void {\r\n setState(\r\n (prevState) => {\r\n if (isFunction<U>(payload)) {\r\n const nestedValue = payload(getNestedValue(prevState, path));\r\n let value = updateNestedProperty(path, prevState, nestedValue);\r\n if (typeof value == \"string\") {\r\n value = value.trim();\r\n }\r\n return value;\r\n } else {\r\n let value =\r\n !path || path.length == 0\r\n ? payload\r\n : updateNestedProperty(path, prevState, payload);\r\n if (typeof value == \"string\") {\r\n value = value.trim();\r\n }\r\n return value;\r\n }\r\n },\r\n path,\r\n { updateType: \"update\" },\r\n validationKey,\r\n );\r\n}\r\n\r\nexport function pushFunc<U>(\r\n setState: EffectiveSetState<U>,\r\n payload: UpdateArg<U>,\r\n path: string[],\r\n stateKey: string,\r\n index?: number,\r\n): void {\r\n const array = getGlobalStore\r\n .getState()\r\n .getNestedState(stateKey, path) as U[];\r\n setState(\r\n (prevState) => {\r\n let arrayToUpdate =\r\n !path || path.length == 0\r\n ? prevState\r\n : getNestedValue(prevState, [...path]);\r\n let returnedArray = [...arrayToUpdate];\r\n\r\n returnedArray.splice(\r\n index || Number(index) == 0 ? index : arrayToUpdate.length,\r\n 0,\r\n isFunction<U>(payload)\r\n ? payload(index == -1 ? undefined : arrayToUpdate)\r\n : payload,\r\n );\r\n const value =\r\n path.length == 0\r\n ? returnedArray\r\n : updateNestedProperty([...path], prevState, returnedArray);\r\n\r\n return value as U;\r\n },\r\n [\r\n ...path,\r\n index || index === 0\r\n ? index?.toString()\r\n : (array!.length - 1).toString(),\r\n ],\r\n {\r\n updateType: \"insert\",\r\n },\r\n );\r\n}\r\n\r\nexport function cutFunc<U>(\r\n setState: EffectiveSetState<U>,\r\n path: string[],\r\n stateKey: string,\r\n index: number,\r\n): void {\r\n const array = getGlobalStore\r\n .getState()\r\n .getNestedState(stateKey, path) as U[];\r\n setState(\r\n (prevState) => {\r\n const arrayToUpdate = getNestedValue(prevState, [...path]);\r\n if (index < 0 || index >= arrayToUpdate?.length) {\r\n throw new Error(`Index ${index} does not exist in the array.`);\r\n }\r\n const indexToCut =\r\n index || Number(index) == 0 ? index : arrayToUpdate.length - 1;\r\n\r\n const updatedArray = [\r\n ...arrayToUpdate.slice(0, indexToCut),\r\n ...arrayToUpdate.slice(indexToCut + 1),\r\n ] as U;\r\n\r\n console.log(index);\r\n return path.length == 0\r\n ? updatedArray\r\n : updateNestedProperty([...path], prevState, updatedArray);\r\n },\r\n [\r\n ...path,\r\n index || index === 0\r\n ? index?.toString()\r\n : (array!.length - 1).toString(),\r\n ],\r\n { updateType: \"cut\" },\r\n );\r\n}\r\n\r\nexport const useStoreSubscription = <T,>(\r\n fullPath: string,\r\n selector: (\r\n store: ReturnType<typeof getGlobalStore.getState>,\r\n path: string,\r\n ) => T,\r\n compare: (a: T, b: T) => boolean = (a, b) =>\r\n JSON.stringify(a) === JSON.stringify(b),\r\n) => {\r\n const [value, setValue] = useState<T>(() =>\r\n selector(getGlobalStore.getState(), fullPath),\r\n );\r\n const previousValueRef = useRef<T>(value);\r\n\r\n useEffect(() => {\r\n const unsubscribe = getGlobalStore.subscribe((store) => {\r\n const newValue = selector(store, fullPath);\r\n if (!compare(previousValueRef.current, newValue)) {\r\n previousValueRef.current = newValue;\r\n setValue(newValue);\r\n }\r\n });\r\n\r\n return () => unsubscribe();\r\n }, [fullPath]);\r\n\r\n return value;\r\n};\r\nexport const useGetValidationErrors = (\r\n validationKey: string,\r\n path: string[],\r\n validIndices?: number[],\r\n) => {\r\n // Construct the full path the same way as ValidationWrapper\r\n const fullPath =\r\n validationKey +\r\n \".\" +\r\n (path.length > 0 ? [path.join(\".\")] : []) +\r\n (validIndices && validIndices.length > 0 ? \".\" + validIndices : \"\");\r\n\r\n // Skip subscription if we have empty indices\r\n if (validIndices?.length === 0) {\r\n return [];\r\n }\r\n\r\n return useStoreSubscription(\r\n fullPath,\r\n (store, path) => store.getValidationErrors(path) || [],\r\n );\r\n};\r\n\r\nexport const useGetSyncInfo = (key: string, path: string[]) => {\r\n const syncKey = `${key}:${path.join(\".\")}`;\r\n return useStoreSubscription(syncKey, (store, path) =>\r\n store.getSyncInfo(path),\r\n );\r\n};\r\nexport const useGetKeyState = (key: string, path: string[]) => {\r\n return useStoreSubscription(`${key}:${path.join(\".\")}`, (store, fullPath) =>\r\n store.getNestedState(key, path),\r\n );\r\n};\r\ninterface FormControlComponentProps<TStateObject> {\r\n setState: EffectiveSetState<TStateObject>;\r\n validationKey: string;\r\n path: string[];\r\n child: (obj: FormElementParmas<TStateObject>) => JSX.Element;\r\n formOpts?: FormOptsType;\r\n stateKey: string;\r\n}\r\nexport const FormControlComponent = <TStateObject,>({\r\n setState,\r\n validationKey,\r\n path,\r\n child,\r\n formOpts,\r\n stateKey,\r\n}: FormControlComponentProps<TStateObject>) => {\r\n const { getInitialOptions, getValidationErrors, removeValidationError } =\r\n getGlobalStore.getState();\r\n const validationErrors = useGetValidationErrors(validationKey, path);\r\n const serverSyncActions =\r\n getGlobalStore.getState().serverSyncActions[stateKey!];\r\n const serverState = getGlobalStore.getState().serverState[stateKey!];\r\n\r\n const stateValue = useGetKeyState(stateKey, path);\r\n const [inputValue, setInputValue] = useState<any>(\r\n getGlobalStore.getState().getNestedState(stateKey, path),\r\n );\r\n\r\n useEffect(() => {\r\n setInputValue(stateValue);\r\n }, [stateKey, path.join(\".\"), stateValue]);\r\n\r\n const timeoutRef = useRef<NodeJS.Timeout>();\r\n\r\n let updater = (payload: UpdateArg<TStateObject>, opts?: UpdateOpts) => {\r\n setInputValue(payload);\r\n\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n }\r\n\r\n timeoutRef.current = setTimeout(() => {\r\n updateFn(setState, payload, path, validationKey);\r\n }, formOpts?.debounceTime ?? 300);\r\n };\r\n\r\n // Clear timeout on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (timeoutRef.current) {\r\n clearTimeout(timeoutRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n const rawSyncStatus = useGetSyncInfo(stateKey, path);\r\n const syncStatus = rawSyncStatus\r\n ? {\r\n ...rawSyncStatus,\r\n date: new Date(rawSyncStatus.timeStamp),\r\n }\r\n : null;\r\n const childElement = child({\r\n get: () =>\r\n inputValue ||\r\n getGlobalStore.getState().getNestedState(stateKey, path),\r\n set: updater,\r\n syncStatus,\r\n path: path,\r\n validationErrors: () =>\r\n getValidationErrors(validationKey + \".\" + path.join(\".\")),\r\n\r\n // Add default input props\r\n inputProps: {\r\n value:\r\n inputValue ||\r\n getGlobalStore.getState().getNestedState(stateKey, path) ||\r\n \"\",\r\n onChange: (e: any) => updater(e.target.value),\r\n },\r\n });\r\n\r\n return (\r\n <>\r\n <ValidationWrapper\r\n {...{\r\n formOpts,\r\n path,\r\n validationKey,\r\n stateKey,\r\n }}\r\n >\r\n {childElement}\r\n </ValidationWrapper>\r\n </>\r\n );\r\n};\r\n\r\nexport function ValidationWrapper({\r\n formOpts,\r\n path,\r\n validationKey,\r\n stateKey,\r\n children,\r\n validIndices,\r\n}: {\r\n formOpts?: FormOptsType;\r\n path: string[];\r\n validationKey: string;\r\n stateKey?: string;\r\n children: React.ReactNode;\r\n validIndices?: number[];\r\n}) {\r\n const { getInitialOptions, getValidationErrors } =\r\n getGlobalStore.getState();\r\n const validationErrors = useGetValidationErrors(\r\n validationKey,\r\n path,\r\n validIndices,\r\n );\r\n const thesMessages: string[] = [];\r\n\r\n if (validationErrors) {\r\n const newMessage = validationErrors!.join(\", \");\r\n if (!thesMessages.includes(newMessage)) {\r\n thesMessages.push(newMessage);\r\n }\r\n }\r\n let fullMessageString =\r\n thesMessages?.length > 0 ? thesMessages?.join(\", \") : \"\";\r\n\r\n const thisStateOpts = getInitialOptions(stateKey!);\r\n\r\n return (\r\n <>\r\n {thisStateOpts?.formElements?.validation &&\r\n !formOpts?.validation?.disable ? (\r\n thisStateOpts.formElements!.validation!({\r\n children: (\r\n <React.Fragment key={path.toString()}>\r\n {children}\r\n </React.Fragment>\r\n ),\r\n active: fullMessageString != \"\" ? true : false,\r\n message: formOpts?.validation?.message\r\n ? formOpts?.validation?.message\r\n : formOpts?.validation?.message == \"\"\r\n ? \"\"\r\n : fullMessageString,\r\n path,\r\n\r\n ...(formOpts?.key && { key: formOpts?.key }),\r\n })\r\n ) : (\r\n <React.Fragment key={path.toString()}>\r\n {children}\r\n </React.Fragment>\r\n )}\r\n </>\r\n );\r\n}\r\n"],"names":["updateFn","setState","payload","path","validationKey","prevState","isFunction","nestedValue","getNestedValue","value","updateNestedProperty","pushFunc","stateKey","index","array","getGlobalStore","arrayToUpdate","returnedArray","cutFunc","indexToCut","updatedArray","useStoreSubscription","fullPath","selector","compare","a","b","setValue","useState","previousValueRef","useRef","useEffect","unsubscribe","store","newValue","useGetValidationErrors","validIndices","useGetSyncInfo","key","syncKey","useGetKeyState","FormControlComponent","child","formOpts","getInitialOptions","getValidationErrors","removeValidationError","stateValue","inputValue","setInputValue","timeoutRef","updater","opts","rawSyncStatus","syncStatus","childElement","e","jsx","Fragment","ValidationWrapper","children","validationErrors","thesMessages","newMessage","fullMessageString","thisStateOpts","React"],"mappings":"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"}
|
|
File without changes
|