Incremental work

This commit is contained in:
Sipke Schoorstra 2022-06-14 21:09:19 +02:00
parent 4ac74864cd
commit 3e6b22f4cb
4 changed files with 21 additions and 27 deletions

View file

@ -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<Act
const portProvider = portProviderRegistry.get(activity.typeName);
const activityDescriptor = descriptors.find(x => x.activityType == activity.typeName);
const ports = portProvider.getOutboundPorts({activity, activityDescriptor});
return ports.map(x => ({ port: x.name, activity }));
let activityPorts: Array<ActivityPort> = [];
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<Activity>;
activityPorts = [...activityPorts, ...activities.map(x => ({port: port.name, activity: x}))];
} else {
activityPorts.push({port: port.name, activity: value});
}
}
return activityPorts;
}

View file

@ -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<Port> {
return [];
}
getOutboundPorts(context: PortProviderContext): Array<Port> {
return [];
}
}

View file

@ -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<Edge.Metadata> = [];
// Create an X6 node for each activity.

View file

@ -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<string, PortProviderFactory> = new Map<string, PortProviderFactory>();
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);
}