From 8aba06ac3851134887ca1c256c527e6eff8fe732 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Thu, 19 Sep 2024 19:51:48 +0800 Subject: [PATCH] =?UTF-8?q?fix(data-source):=20=E7=BC=96=E8=BE=91=E5=99=A8?= =?UTF-8?q?=E4=B8=AD=E8=BF=AD=E4=BB=A3=E5=99=A8=E5=AE=B9=E5=99=A8=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=AE=B9=E5=99=A8=E6=B7=BB=E5=8A=A0=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=B9=B6=E5=85=B3=E8=81=94=E6=95=B0=E6=8D=AE=E6=BA=90=E5=90=8E?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E7=BC=96=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/data-source/src/DataSourceManager.ts | 6 ++-- packages/data-source/src/depsCache.ts | 28 ++++++++++++++++--- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/packages/data-source/src/DataSourceManager.ts b/packages/data-source/src/DataSourceManager.ts index 44ec650a..96e4abdf 100644 --- a/packages/data-source/src/DataSourceManager.ts +++ b/packages/data-source/src/DataSourceManager.ts @@ -246,9 +246,11 @@ class DataSourceManager extends EventEmitter { const ds = this.get(dsId); if (!ds) return nodes; + const inEditor = this.app.platform === 'editor'; + const ctxData = createIteratorContentData(itemData, ds.id, keys, this.data); - const { deps = {}, condDeps = {} } = getDeps(ds.schema, nodes); + const { deps = {}, condDeps = {} } = getDeps(ds.schema, nodes, inEditor); if (!Object.keys(deps).length && !Object.keys(condDeps).length) { return nodes; @@ -261,7 +263,7 @@ class DataSourceManager extends EventEmitter { item, deps, condDeps, - inEditor: this.app.platform === 'editor', + inEditor, ctxData, }), ); diff --git a/packages/data-source/src/depsCache.ts b/packages/data-source/src/depsCache.ts index dda86ac6..d11444a0 100644 --- a/packages/data-source/src/depsCache.ts +++ b/packages/data-source/src/depsCache.ts @@ -1,10 +1,30 @@ -import type { DataSourceSchema, MNode } from '@tmagic/core'; -import { DSL_NODE_KEY_COPY_PREFIX, isDataSourceCondTarget, isDataSourceTarget, Target, Watcher } from '@tmagic/core'; +import type { DataSourceSchema, Id, MNode } from '@tmagic/core'; +import { + DSL_NODE_KEY_COPY_PREFIX, + isDataSourceCondTarget, + isDataSourceTarget, + Target, + traverseNode, + Watcher, +} from '@tmagic/core'; const cache = new Map(); -export const getDeps = (ds: DataSourceSchema, nodes: MNode[]) => { - const cacheKey = `${ds.id}:${nodes.map((node) => node.id).join(':')}`; +export const getDeps = (ds: DataSourceSchema, nodes: MNode[], inEditor: boolean) => { + let cacheKey: string; + + if (inEditor) { + const ids: Id[] = []; + nodes.forEach((node) => { + traverseNode(node, (node) => { + ids.push(node.id); + }); + }); + + cacheKey = `${ds.id}:${ids.join(':')}`; + } else { + cacheKey = `${ds.id}:${nodes.map((node) => node.id).join(':')}`; + } if (cache.has(cacheKey)) { return cache.get(cacheKey);