diff --git a/packages/data-source/src/DataSourceManager.ts b/packages/data-source/src/DataSourceManager.ts index 48c2363e..32fbe103 100644 --- a/packages/data-source/src/DataSourceManager.ts +++ b/packages/data-source/src/DataSourceManager.ts @@ -162,9 +162,16 @@ class DataSourceManager extends EventEmitter { }); } - public compiledNode(node: MNode, sourceId?: Id) { - if (node.condResult === false) return node; - if (node.visible === false) return node; + public compiledNode({ items, ...node }: MNode, sourceId?: Id, deep = false) { + const newNode = cloneDeep(node); + + if (items) { + newNode.items = + Array.isArray(items) && deep ? items.map((item) => this.compiledNode(item, sourceId, deep)) : items; + } + + if (node.condResult === false) return newNode; + if (node.visible === false) return newNode; return compiledNode( (value: any) => { @@ -201,7 +208,7 @@ class DataSourceManager extends EventEmitter { return value; }, - cloneDeep(node), + newNode, this.app.dsl?.dataSourceDeps || {}, sourceId, ); @@ -229,7 +236,7 @@ class DataSourceManager extends EventEmitter { return compiledNode( (value: string) => template(value)(createIteratorContentData(itemData, dsId, fields)), - cloneDeep(item), + item, { [dsId]: { [item.id]: { diff --git a/packages/data-source/src/createDataSourceManager.ts b/packages/data-source/src/createDataSourceManager.ts index c4d763de..f3aab67b 100644 --- a/packages/data-source/src/createDataSourceManager.ts +++ b/packages/data-source/src/createDataSourceManager.ts @@ -15,7 +15,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { cloneDeep, union } from 'lodash-es'; +import { union } from 'lodash-es'; import type { AppCore } from '@tmagic/schema'; import { getDepNodeIds, getNodes } from '@tmagic/utils'; @@ -62,9 +62,11 @@ export const createDataSourceManager = (app: AppCore, useMock?: boolean, initial dataSourceManager.emit( 'update-data', getNodes(nodeIds, dsl.items).map((node) => { - const newNode = cloneDeep(node); - newNode.condResult = dataSourceManager.compliedConds(newNode); - return dataSourceManager.compiledNode(newNode); + if (app.platform !== 'editor') { + node.condResult = dataSourceManager.compliedConds(node); + } + + return dataSourceManager.compiledNode(node); }), sourceId, changeEvent, diff --git a/runtime/react/playground/main.tsx b/runtime/react/playground/main.tsx index 5eece53f..ebd207fe 100644 --- a/runtime/react/playground/main.tsx +++ b/runtime/react/playground/main.tsx @@ -114,7 +114,7 @@ const operations = { }, update({ config, root }: UpdateData) { - replaceChildNode(app.dataSourceManager?.compiledNode(config) || config, root.items); + replaceChildNode(app.dataSourceManager?.compiledNode(config, undefined, true) || config, root.items); updateConfig(cloneDeep(root)); }, diff --git a/runtime/vue2/playground/App.vue b/runtime/vue2/playground/App.vue index 979171d4..efb84b12 100644 --- a/runtime/vue2/playground/App.vue +++ b/runtime/vue2/playground/App.vue @@ -88,7 +88,7 @@ export default defineComponent({ update({ config, parentId }: UpdateData) { if (!root.value || !app) throw new Error('error'); - const newNode = app.dataSourceManager?.compiledNode(config) || config; + const newNode = app.dataSourceManager?.compiledNode(config, undefined, true) || config; replaceChildNode(reactive(newNode), [root.value], parentId); const nodeInstance = app.page?.getNode(config.id); diff --git a/runtime/vue3/playground/App.vue b/runtime/vue3/playground/App.vue index 00817717..8f2a4638 100644 --- a/runtime/vue3/playground/App.vue +++ b/runtime/vue3/playground/App.vue @@ -85,7 +85,7 @@ window.magic?.onRuntimeReady({ update({ config, parentId }: UpdateData) { if (!root.value || !app) throw new Error('error'); - const newNode = app.dataSourceManager?.compiledNode(config) || config; + const newNode = app.dataSourceManager?.compiledNode(config, undefined, true) || config; replaceChildNode(reactive(newNode), [root.value], parentId); const nodeInstance = app.page?.getNode(config.id);