From 3e6b22f4cb8df58e72a2fe2f1ab0bcb0aba631bb Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Tue, 14 Jun 2022 21:09:19 +0200 Subject: [PATCH] Incremental work --- .../activities/flowchart/activity-walker.ts | 24 ++++++++++++++++--- .../flowchart/flowchart-port-provider.ts | 16 ------------- .../activities/flowchart/flowchart.tsx | 3 --- .../flowchart/port-provider-registry.ts | 5 ---- 4 files changed, 21 insertions(+), 27 deletions(-) delete mode 100644 src/designer/elsa-workflows-designer/src/components/activities/flowchart/flowchart-port-provider.ts diff --git a/src/designer/elsa-workflows-designer/src/components/activities/flowchart/activity-walker.ts b/src/designer/elsa-workflows-designer/src/components/activities/flowchart/activity-walker.ts index c7701ee55..9aa0af2ec 100644 --- a/src/designer/elsa-workflows-designer/src/components/activities/flowchart/activity-walker.ts +++ b/src/designer/elsa-workflows-designer/src/components/activities/flowchart/activity-walker.ts @@ -1,4 +1,5 @@ import 'reflect-metadata'; +import {camelCase} from 'lodash'; import {Container} from "typedi" import {Activity, ActivityDescriptor} from "../../../models"; import {PortProviderRegistry} from "./port-provider-registry"; @@ -50,12 +51,12 @@ function walkRecursive(node: ActivityNode, activity: Activity, collectedActiviti collectedNodes.add(childNode); } - if(childNode !== node) { + if (childNode !== node) { childNode.parents.push(node); node.children.push(childNode); collectedActivities.add(port.activity); + walkRecursive(childNode, port.activity, collectedActivities, collectedNodes, descriptors); } - walkRecursive(childNode, port.activity, collectedActivities, collectedNodes, descriptors); } } @@ -64,5 +65,22 @@ function getPorts(node: ActivityNode, activity: Activity, descriptors: Array x.activityType == activity.typeName); const ports = portProvider.getOutboundPorts({activity, activityDescriptor}); - return ports.map(x => ({ port: x.name, activity })); + let activityPorts: Array = []; + + for (const port of ports) { + const propName = camelCase(port.name); + const value = activity[propName]; + + if (!value) + continue; + + if (Array.isArray(value)) { + const activities = value as Array; + activityPorts = [...activityPorts, ...activities.map(x => ({port: port.name, activity: x}))]; + } else { + activityPorts.push({port: port.name, activity: value}); + } + } + + return activityPorts; } diff --git a/src/designer/elsa-workflows-designer/src/components/activities/flowchart/flowchart-port-provider.ts b/src/designer/elsa-workflows-designer/src/components/activities/flowchart/flowchart-port-provider.ts deleted file mode 100644 index e9a46f478..000000000 --- a/src/designer/elsa-workflows-designer/src/components/activities/flowchart/flowchart-port-provider.ts +++ /dev/null @@ -1,16 +0,0 @@ -import 'reflect-metadata'; -import {Service} from "typedi" -import {Port} from "../../../models"; -import {PortProvider, PortProviderContext} from "./port-provider"; - -@Service() -export class FlowchartPortProvider implements PortProvider { - getInboundPorts(context: PortProviderContext): Array { - return []; - } - - getOutboundPorts(context: PortProviderContext): Array { - return []; - } - -} diff --git a/src/designer/elsa-workflows-designer/src/components/activities/flowchart/flowchart.tsx b/src/designer/elsa-workflows-designer/src/components/activities/flowchart/flowchart.tsx index 42bf8cbf0..3bebf9b44 100644 --- a/src/designer/elsa-workflows-designer/src/components/activities/flowchart/flowchart.tsx +++ b/src/designer/elsa-workflows-designer/src/components/activities/flowchart/flowchart.tsx @@ -199,9 +199,6 @@ export class FlowchartComponent implements ContainerActivityComponent { const activities = flowchart.activities; const connections = flowchart.connections; - // Clear inbound port for start activity. - const startActivity = activities.find(x => x.id === flowchart.start); - let edges: Array = []; // Create an X6 node for each activity. diff --git a/src/designer/elsa-workflows-designer/src/components/activities/flowchart/port-provider-registry.ts b/src/designer/elsa-workflows-designer/src/components/activities/flowchart/port-provider-registry.ts index ec8fde090..5d89b015d 100644 --- a/src/designer/elsa-workflows-designer/src/components/activities/flowchart/port-provider-registry.ts +++ b/src/designer/elsa-workflows-designer/src/components/activities/flowchart/port-provider-registry.ts @@ -2,7 +2,6 @@ import 'reflect-metadata'; import {Container, Service} from "typedi"; import {PortProvider} from "./port-provider"; import {DefaultPortProvider} from "./default-port-provider"; -import {FlowchartPortProvider} from "./flowchart-port-provider"; export type PortProviderFactory = () => PortProvider; @@ -11,10 +10,6 @@ export class PortProviderRegistry { private map: Map = new Map(); private defaultProviderFactory: PortProviderFactory = () => Container.get(DefaultPortProvider); - constructor() { - this.add('Elsa.Flowchart', () => Container.get(FlowchartPortProvider)); - } - public add(activityType: string, defaultProviderFactory: PortProviderFactory) { this.map.set(activityType, defaultProviderFactory); }