From 36988cd3e08be743b4d6c92c6e7de0be9ce5f01e Mon Sep 17 00:00:00 2001 From: roymondchen Date: Wed, 20 Sep 2023 19:11:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(data-source):=20=E7=BB=84=E4=BB=B6=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E4=B8=8E=E6=9D=A1=E4=BB=B6=E5=85=B3=E8=81=94=E4=BA=86?= =?UTF-8?q?=E4=B8=8D=E5=90=8C=E6=95=B0=E6=8D=AE=E6=BA=90=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/data-source/src/DataSourceManager.ts | 9 ++++- .../src/createDataSourceManager.ts | 34 +++++++------------ .../editor/src/fields/DataSourceFields.vue | 2 +- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/packages/data-source/src/DataSourceManager.ts b/packages/data-source/src/DataSourceManager.ts index 1f9a44b1..b9662691 100644 --- a/packages/data-source/src/DataSourceManager.ts +++ b/packages/data-source/src/DataSourceManager.ts @@ -163,7 +163,14 @@ class DataSourceManager extends EventEmitter { let result = true; for (const { op, value, range, field } of cond) { const [sourceId, fieldKey] = field; - const fieldValue = this.data[sourceId][fieldKey]; + + const dsData = this.data[sourceId]; + + if (!dsData || !fieldKey) { + break; + } + + const fieldValue = dsData[fieldKey]; if (!compiledCond(op, fieldValue, value, range)) { result = false; break; diff --git a/packages/data-source/src/createDataSourceManager.ts b/packages/data-source/src/createDataSourceManager.ts index a280e8b2..832bab8f 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 } from 'lodash-es'; +import { cloneDeep, union } from 'lodash-es'; import type { AppCore } from '@tmagic/schema'; import { getDepNodeIds, getNodes, replaceChildNode } from '@tmagic/utils'; @@ -48,28 +48,20 @@ export const createDataSourceManager = (app: AppCore) => { } dataSourceManager.on('change', (sourceId: string) => { - const dep = dsl.dataSourceDeps?.[sourceId]; - const condDep = dsl.dataSourceCondDeps?.[sourceId]; + const dep = dsl.dataSourceDeps?.[sourceId] || {}; + const condDep = dsl.dataSourceCondDeps?.[sourceId] || {}; - if (condDep) { - dataSourceManager.emit( - 'update-data', - getNodes(Object.keys(condDep), dsl.items).map((node) => { - const newNode = cloneDeep(node); - newNode.condResult = dataSourceManager.compliedConds(node); - return newNode; - }), - sourceId, - ); - } + const nodeIds = union([...Object.keys(condDep), ...Object.keys(dep)]); - if (dep) { - dataSourceManager.emit( - 'update-data', - getNodes(Object.keys(dep), dsl.items).map((node) => dataSourceManager.compiledNode(node)), - sourceId, - ); - } + dataSourceManager.emit( + 'update-data', + getNodes(nodeIds, dsl.items).map((node) => { + const newNode = cloneDeep(node); + newNode.condResult = dataSourceManager.compliedConds(node); + return dataSourceManager.compiledNode(newNode); + }), + sourceId, + ); }); return dataSourceManager; diff --git a/packages/editor/src/fields/DataSourceFields.vue b/packages/editor/src/fields/DataSourceFields.vue index 1af34a26..c2c0cb19 100644 --- a/packages/editor/src/fields/DataSourceFields.vue +++ b/packages/editor/src/fields/DataSourceFields.vue @@ -175,7 +175,7 @@ const dataSourceFieldsConfig: FormConfig = [ if (model.type === 'number') return 'number'; if (model.type === 'boolean') return 'select'; - return 'string'; + return 'text'; }, options: [ { text: 'true', value: true },