From 882d222800c532dd70f343f1b5b13c994d02551c Mon Sep 17 00:00:00 2001 From: roymondchen Date: Mon, 1 Jul 2024 21:31:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(data-source):=20=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E5=99=A8=E5=AE=B9=E5=99=A8=E5=86=85=E5=AE=B9=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=9D=A1=E4=BB=B6=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/data-source/src/DataSourceManager.ts | 2 +- packages/data-source/src/utils.ts | 42 +++++++++++++++---- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/packages/data-source/src/DataSourceManager.ts b/packages/data-source/src/DataSourceManager.ts index 9e3a8ab6..0420e40e 100644 --- a/packages/data-source/src/DataSourceManager.ts +++ b/packages/data-source/src/DataSourceManager.ts @@ -222,7 +222,7 @@ class DataSourceManager extends EventEmitter { const [dsId, ...keys] = dataSourceField; const ds = this.get(dsId); if (!ds) return items; - return compliedIteratorItems(itemData, items, dsId, keys); + return compliedIteratorItems(itemData, items, dsId, keys, this.app.platform !== 'editor'); } public destroy() { diff --git a/packages/data-source/src/utils.ts b/packages/data-source/src/utils.ts index 0c5f5e22..3111fed2 100644 --- a/packages/data-source/src/utils.ts +++ b/packages/data-source/src/utils.ts @@ -177,11 +177,18 @@ export const compiledNodeField = (value: any, data: DataSourceManagerData) => { return value; }; -export const compliedIteratorItems = (itemData: any, items: MNode[], dsId: string, keys: string[] = []) => { +export const compliedIteratorItems = ( + itemData: any, + items: MNode[], + dsId: string, + keys: string[] = [], + inEditor = false, +) => { const watcher = new Watcher(); watcher.addTarget( new Target({ id: dsId, + type: 'data-source', isTarget: (key: string | number, value: any) => { if (`${key}`.startsWith(DSL_NODE_KEY_COPY_PREFIX)) { return false; @@ -192,23 +199,44 @@ export const compliedIteratorItems = (itemData: any, items: MNode[], dsId: strin }), ); + watcher.addTarget( + new Target({ + id: dsId, + type: 'cond', + isTarget: (key, value) => { + // 使用data-source-field-select value: 'key' 可以配置出来 + if (!Array.isArray(value) || value[0] !== dsId || !`${key}`.startsWith('displayConds')) return false; + return true; + }, + }), + ); + watcher.collect(items, {}, true); - const { deps } = watcher.getTarget(dsId); - if (!Object.keys(deps).length) { + const { deps } = watcher.getTarget(dsId, 'data-source'); + const { deps: condDeps } = watcher.getTarget(dsId, 'cond'); + + if (!Object.keys(deps).length && !Object.keys(condDeps).length) { return items; } return items.map((item) => { + const ctxData = createIteratorContentData(itemData, dsId, keys); + + if (condDeps[item.id]?.keys.length) { + item.condResult = compliedConditions(item, ctxData); + } + if (!deps[item.id]?.keys.length) { return item; } + if (!inEditor) { + item.condResult = compliedConditions(item, itemData); + } + return compiledNode( - (value: any) => { - const ctxData = createIteratorContentData(itemData, dsId, keys); - return compiledNodeField(value, ctxData); - }, + (value: any) => compiledNodeField(value, ctxData), cloneDeep(item), { [dsId]: deps,