diff --git a/packages/core/src/App.ts b/packages/core/src/App.ts index 8458c5e6..56afc707 100644 --- a/packages/core/src/App.ts +++ b/packages/core/src/App.ts @@ -59,6 +59,7 @@ export interface AppOptionsConfig { request?: RequestFunction; DataSourceObservedData?: ObservedDataClass; dataSourceManagerInitialData?: DataSourceManagerData; + nodeStoreInitialData?: () => any; errorHandler?: ErrorHandler; } @@ -85,6 +86,7 @@ class App extends EventEmitter { public transformStyle: (style: Record) => Record; public eventHelper?: EventHelper; public errorHandler?: ErrorHandler; + public nodeStoreInitialData?: () => any; private flexible?: Flexible; @@ -103,6 +105,7 @@ class App extends EventEmitter { this.codeDsl = options.config?.codeBlocks; options.platform && (this.platform = options.platform); options.jsEngine && (this.jsEngine = options.jsEngine); + options.nodeStoreInitialData && (this.nodeStoreInitialData = options.nodeStoreInitialData); if (options.pageFragmentContainerType) { const pageFragmentContainerType = Array.isArray(options.pageFragmentContainerType) @@ -336,6 +339,8 @@ class App extends EventEmitter { this.dataSourceManager = undefined; this.codeDsl = undefined; this.components.clear(); + + this.nodeStoreInitialData = undefined; } } diff --git a/packages/core/src/Node.ts b/packages/core/src/Node.ts index 0e2307b4..bf41ae84 100644 --- a/packages/core/src/Node.ts +++ b/packages/core/src/Node.ts @@ -53,7 +53,7 @@ class Node extends EventEmitter { public page?: Page; public parent?: Node; public app: TMagicApp; - public store = new Store(); + public store; public eventKeys = new Map(); private eventQueue: EventCache[] = []; @@ -61,6 +61,7 @@ class Node extends EventEmitter { constructor(options: NodeOptions) { super(); + this.store = new Store({ initialData: options.app.nodeStoreInitialData?.() || {} }); this.page = options.page; this.parent = options.parent; this.app = options.app; diff --git a/packages/core/src/Store.ts b/packages/core/src/Store.ts index 82a3396b..86ed5e48 100644 --- a/packages/core/src/Store.ts +++ b/packages/core/src/Store.ts @@ -1,5 +1,9 @@ export default class Store { - private data: Record = {}; + private data: any; + + constructor({ initialData = {} }: { initialData?: any } = {}) { + this.data = initialData; + } public set(key: string, value: any) { this.data[key] = value;