From 0d0c5ff9e0c3276fa28e39736ff15c48bed031b0 Mon Sep 17 00:00:00 2001 From: Junyi Date: Fri, 7 Apr 2023 15:08:25 +0700 Subject: [PATCH] feat(plugin-workflow): add array mapping support in processor (#1662) --- packages/core/evaluators/src/server/index.ts | 2 +- packages/core/evaluators/src/utils/index.ts | 2 +- packages/plugins/workflow/src/server/Processor.ts | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/core/evaluators/src/server/index.ts b/packages/core/evaluators/src/server/index.ts index 563114b41..2debc0948 100644 --- a/packages/core/evaluators/src/server/index.ts +++ b/packages/core/evaluators/src/server/index.ts @@ -6,7 +6,7 @@ import formulajs from "../utils/formulajs"; -export { Evaluator } from '../utils'; +export { Evaluator, evaluate, appendArrayColumn } from '../utils'; export const evaluators = new Registry(); diff --git a/packages/core/evaluators/src/utils/index.ts b/packages/core/evaluators/src/utils/index.ts index de20ff22a..ee26e6a87 100644 --- a/packages/core/evaluators/src/utils/index.ts +++ b/packages/core/evaluators/src/utils/index.ts @@ -6,7 +6,7 @@ export type Scope = { [key: string]: any }; export type Evaluator = (expression: string, scope?: Scope) => any; -function appendArrayColumn(scope, key) { +export function appendArrayColumn(scope, key) { const paths = key.split('.'); let data = scope; for (let p = 0; p < paths.length && data != null; p++) { diff --git a/packages/plugins/workflow/src/server/Processor.ts b/packages/plugins/workflow/src/server/Processor.ts index 00cad8d68..6315e6709 100644 --- a/packages/plugins/workflow/src/server/Processor.ts +++ b/packages/plugins/workflow/src/server/Processor.ts @@ -2,6 +2,7 @@ import { Transaction, Transactionable } from 'sequelize'; import parse from 'json-templates'; import { Model } from "@nocobase/database"; +import { appendArrayColumn } from '@nocobase/evaluators'; import Plugin from '.'; import ExecutionModel from './models/Execution'; @@ -296,6 +297,11 @@ export default class Processor { } public getParsedValue(value, node?) { - return parse(value)(this.getScope(node)); + const template = parse(value); + const scope = this.getScope(node); + template.parameters.forEach(({ key }) => { + appendArrayColumn(scope, key); + }); + return template(scope); } }