Update switch-plugin to support ANY activity type

Fixes #1240
This commit is contained in:
Sipke Schoorstra 2021-07-12 14:04:53 +02:00
parent e25170451b
commit 5d74899d74
5 changed files with 24 additions and 9 deletions

View file

@ -1,6 +1,6 @@
{
"name": "@elsa-workflows/elsa-workflows-studio",
"version": "2.1.2",
"version": "2.1.3",
"description": "Elsa Workflow Studio is a collection of web components to manage Elsa workflows stored on an Elsa Workflows server.",
"repository": {
"type": "git",

View file

@ -130,6 +130,7 @@ export class ElsaWorkflowDesigner {
const displayContext: ActivityDesignDisplayContext = {
activityModel: model,
activityDescriptor: descriptor,
activityIcon: <ActivityIcon color={color}/>,
bodyDisplay: bodyDisplay,
displayName: displayName,

View file

@ -28,6 +28,7 @@ export interface ActivityPickedEventArgs {
export interface ActivityDesignDisplayContext {
activityModel: ActivityModel;
activityDescriptor: ActivityDescriptor;
activityIcon: any;
displayName?: string;
bodyDisplay: string;

View file

@ -12,15 +12,28 @@ export class SwitchPlugin implements ElsaPlugin {
onActivityDesignDisplaying(context: ActivityDesignDisplayContext) {
const activityModel = context.activityModel;
const activityDescriptor = context.activityDescriptor;
const propertyDescriptors = activityDescriptor.inputProperties;
const switchCaseProperties = propertyDescriptors.filter(x => x.uiHint == 'switch-case-builder');
if (activityModel.type !== 'Switch')
if (switchCaseProperties.length == 0)
return;
const props = activityModel.properties || [];
let outcomesHash: any = {};
const syntax = 'Switch';
const casesProp = props.find(x => x.name == 'Cases') || { expressions: {'Switch': ''}, syntax: syntax };
const expression: any = casesProp.expressions[syntax] || [];
const cases: Array<SwitchCase> = !!expression['$values'] ? expression['$values'] : Array.isArray(expression) ? expression : parseJson(expression) || [];
context.outcomes = [...cases.map(x => x.name), 'Default'];
for (const propertyDescriptor of switchCaseProperties) {
const props = activityModel.properties || [];
const casesProp = props.find(x => x.name == propertyDescriptor.name) || {expressions: {'Switch': ''}, syntax: syntax};
const expression: any = casesProp.expressions[syntax] || [];
const cases: Array<SwitchCase> = !!expression['$values'] ? expression['$values'] : Array.isArray(expression) ? expression : parseJson(expression) || [];
for(const c of cases)
outcomesHash[c.name] = true;
}
const outcomes = Object.keys(outcomesHash);
context.outcomes = [...outcomes, 'Default'];
}
}

View file

@ -13,7 +13,7 @@
"Redis": "localhost:6379,abortConnect=false",
"MySql": "Server=LAPTOP-B76STK67;Database=Elsa;Uid=myUsername;Pwd=myPassword;",
"SqlServer": "Server=LAPTOP-B76STK67;Database=Elsa;Integrated Security=true;MultipleActiveResultSets=True;Max Pool Size=500;Connection Timeout=3600",
"Sqlite": "Data Source=elsa.sqlite.yes.db;Cache=Shared;",
"Sqlite": "Data Source=elsa.sqlite.db;Cache=Shared;",
"MongoDb": "mongodb://localhost:27017/Elsa",
"PostgreSql": "Server=127.0.0.1;Port=5432;Database=elsa;User Id=postgres;Password=password;"
},