From de9b3e866b5d4c4182045b88d53a985cd74cb036 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Sat, 10 Jun 2023 15:33:06 +0200 Subject: [PATCH] Refactor-rename PortMode to PortType --- .../src/models/core.ts | 6 +++--- .../flowchart/default-activity-template.tsx | 4 ++-- .../modules/flowchart/default-node-handler.ts | 8 ++++---- .../flow/flow-http-request-port-provider.ts | 8 ++++---- .../sequence/http-request-port-provider.ts | 16 +++++++-------- .../switch/flow/flow-switch-port-provider.ts | 4 ++-- .../switch/sequence/switch-port-provider.ts | 16 +++++++-------- .../Elsa.Workflows.Core/Models/Port.cs | 20 ++++++++++++++++++- .../Elsa.Workflows.Core/Models/PortMode.cs | 7 ------- .../Elsa.Workflows.Core/Models/PortType.cs | 17 ++++++++++++++++ .../Services/ActivityDescriber.cs | 4 ++-- .../WorkflowDefinitionActivityProvider.cs | 4 ++-- 12 files changed, 71 insertions(+), 43 deletions(-) delete mode 100644 src/modules/Elsa.Workflows.Core/Models/PortMode.cs create mode 100644 src/modules/Elsa.Workflows.Core/Models/PortType.cs diff --git a/src/designer/designer_packages/elsa-workflows-designer/src/models/core.ts b/src/designer/designer_packages/elsa-workflows-designer/src/models/core.ts index 616a883b6..8c158c04b 100644 --- a/src/designer/designer_packages/elsa-workflows-designer/src/models/core.ts +++ b/src/designer/designer_packages/elsa-workflows-designer/src/models/core.ts @@ -116,13 +116,13 @@ export interface OutputDescriptor extends PropertyDescriptor { export interface Port { name: string; displayName: string; - mode: PortMode; + type: PortType; isBrowsable?: boolean; } -export enum PortMode { +export enum PortType { Embedded = 'Embedded', - Port = 'Port' + Flow = 'Flow' } export interface CompletionCallbackState { diff --git a/src/designer/designer_packages/elsa-workflows-designer/src/modules/flowchart/default-activity-template.tsx b/src/designer/designer_packages/elsa-workflows-designer/src/modules/flowchart/default-activity-template.tsx index ed92baeb3..b39f51ae5 100644 --- a/src/designer/designer_packages/elsa-workflows-designer/src/modules/flowchart/default-activity-template.tsx +++ b/src/designer/designer_packages/elsa-workflows-designer/src/modules/flowchart/default-activity-template.tsx @@ -1,7 +1,7 @@ import {Component, h, Prop, State, Event, EventEmitter, Listen, Element} from "@stencil/core"; import {ActivityIconProducer, ActivityIconRegistry, PortProviderRegistry} from "../../services"; import {Container} from "typedi"; -import {Activity, ActivityDescriptor, ActivityKind, ActivitySelectedArgs, ChildActivitySelectedArgs, EditChildActivityArgs, Port, PortMode} from "../../models"; +import {Activity, ActivityDescriptor, ActivityKind, ActivitySelectedArgs, ChildActivitySelectedArgs, EditChildActivityArgs, Port, PortType} from "../../models"; import descriptorsStore from "../../data/descriptors-store"; import {isNullOrWhitespace} from "../../utils"; import FlowchartTunnel from "./state"; @@ -52,7 +52,7 @@ export class DefaultActivityTemplate { {({nodeMap}) => { const activity: Activity = nodeMap[activityId]; const ports = portProvider.getOutboundPorts({activityDescriptor, activity}); - const embeddedPorts = ports.filter(x => x.mode == PortMode.Embedded && x.isBrowsable !== false); + const embeddedPorts = ports.filter(x => x.type == PortType.Embedded && x.isBrowsable !== false); const canStartWorkflow = activity?.customProperties?.CanStartWorkflow ?? activity?.canStartWorkflow ?? false; const icon = this.icon; const hasIcon = !!icon; diff --git a/src/designer/designer_packages/elsa-workflows-designer/src/modules/flowchart/default-node-handler.ts b/src/designer/designer_packages/elsa-workflows-designer/src/modules/flowchart/default-node-handler.ts index dc07e6699..b9a782a4c 100644 --- a/src/designer/designer_packages/elsa-workflows-designer/src/modules/flowchart/default-node-handler.ts +++ b/src/designer/designer_packages/elsa-workflows-designer/src/modules/flowchart/default-node-handler.ts @@ -3,7 +3,7 @@ import {Node} from "@antv/x6"; import {Container, Service} from "typedi" import {ActivityNodeHandler, UINodeContext, UIPortContext} from "./activity-node-handler"; import {PortProviderContext, PortProviderRegistry} from "../../services"; -import {PortMode} from "../../models"; +import {PortType} from "../../models"; import {v4 as uuid} from 'uuid'; @Service() @@ -34,12 +34,12 @@ export class DefaultNodeHandler implements ActivityNodeHandler { const {activityDescriptor, activity} = context; const provider = this.portProviderRegistry.get(activityDescriptor.typeName); const providerContext: PortProviderContext = {activityDescriptor, activity}; - const inPorts = [{name: 'In', displayName: null, mode: PortMode.Port}]; - let outPorts = provider.getOutboundPorts(providerContext).filter(x => x.mode == PortMode.Port); + const inPorts = [{name: 'In', displayName: null, mode: PortType.Flow}]; + let outPorts = provider.getOutboundPorts(providerContext).filter(x => x.type == PortType.Flow); // In a flowchart, always add a Done port to connect the next node. if (outPorts.length == 0) - outPorts = [{name: 'Done', displayName: 'Done', mode: PortMode.Port}]; + outPorts = [{name: 'Done', displayName: 'Done', type: PortType.Flow}]; if (outPorts.length == 1) outPorts[0].displayName = null; diff --git a/src/designer/designer_packages/elsa-workflows-designer/src/modules/http-request/flow/flow-http-request-port-provider.ts b/src/designer/designer_packages/elsa-workflows-designer/src/modules/http-request/flow/flow-http-request-port-provider.ts index c7ae21aed..aea06572a 100644 --- a/src/designer/designer_packages/elsa-workflows-designer/src/modules/http-request/flow/flow-http-request-port-provider.ts +++ b/src/designer/designer_packages/elsa-workflows-designer/src/modules/http-request/flow/flow-http-request-port-provider.ts @@ -1,6 +1,6 @@ import 'reflect-metadata'; import {Service} from "typedi"; -import {Activity, ActivityInput, InputDescriptor, ObjectExpression, Port, PortMode} from "../../../models"; +import {Activity, ActivityInput, InputDescriptor, ObjectExpression, Port, PortType} from "../../../models"; import {PortProvider, PortProviderContext} from "../../../services"; import {FlowSendHttpRequest} from "./models"; @@ -15,13 +15,13 @@ export class FlowHttpRequestPortProvider implements PortProvider { const expectedStatusCodes = activity.expectedStatusCodes as ActivityInput; - if(!expectedStatusCodes) + if (!expectedStatusCodes) return []; const statusCodesJson = (expectedStatusCodes.expression as ObjectExpression).value; const statusCodes = JSON.parse(statusCodesJson) as Array; - const catchAllPort = {name: 'Unmatched status code', displayName: 'Unmatched status code', mode: PortMode.Port}; - const outcomes = [...statusCodes.map(x => ({name: x.toString(), displayName: x.toString(), mode: PortMode.Port})), catchAllPort]; + const catchAllPort: Port = {name: 'Unmatched status code', displayName: 'Unmatched status code', type: PortType.Flow}; + const outcomes: Port[] = [...statusCodes.map(x => ({name: x.toString(), displayName: x.toString(), type: PortType.Flow})), catchAllPort]; return outcomes; } diff --git a/src/designer/designer_packages/elsa-workflows-designer/src/modules/http-request/sequence/http-request-port-provider.ts b/src/designer/designer_packages/elsa-workflows-designer/src/modules/http-request/sequence/http-request-port-provider.ts index 91ea2a2e4..af26da8f7 100644 --- a/src/designer/designer_packages/elsa-workflows-designer/src/modules/http-request/sequence/http-request-port-provider.ts +++ b/src/designer/designer_packages/elsa-workflows-designer/src/modules/http-request/sequence/http-request-port-provider.ts @@ -1,6 +1,6 @@ import 'reflect-metadata'; import {Service} from "typedi"; -import {Activity, Port, PortMode} from "../../../models"; +import {Activity, Port, PortType} from "../../../models"; import {PortProvider, PortProviderContext} from "../../../services"; import {HttpStatusCodeCase, SendHttpRequest} from "./models"; @@ -10,12 +10,12 @@ export class HttpRequestPortProvider implements PortProvider { getOutboundPorts(context: PortProviderContext): Array { const activity = context.activity as SendHttpRequest; - if(activity == null) + if (activity == null) return []; - const defaultPort = {name: 'unmatchedStatusCode', displayName: 'Unmatched status code', mode: PortMode.Embedded}; // Hide the port from the designer until the editor uI is finished. + const defaultPort: Port = {name: 'unmatchedStatusCode', displayName: 'Unmatched status code', type: PortType.Embedded}; // Hide the port from the designer until the editor uI is finished. const statusCodes = activity.expectedStatusCodes ?? []; - const ports = statusCodes.map(x => ({name: x.statusCode.toString(), displayName: x.statusCode.toString(), mode: PortMode.Embedded})); + const ports: Port[] = statusCodes.map(x => ({name: x.statusCode.toString(), displayName: x.statusCode.toString(), type: PortType.Embedded})); return [...ports, defaultPort]; } @@ -23,7 +23,7 @@ export class HttpRequestPortProvider implements PortProvider { resolvePort(portName: string, context: PortProviderContext): Activity | Array { const activity = context.activity as SendHttpRequest; - if(portName == 'unmatchedStatusCode') + if (portName == 'unmatchedStatusCode') return activity.unmatchedStatusCode; const expectedStatusCodes: Array = activity.expectedStatusCodes ?? []; @@ -32,9 +32,9 @@ export class HttpRequestPortProvider implements PortProvider { } assignPort(portName: string, activity: Activity, context: PortProviderContext) { - const sendHttpRequestActivity = context.activity as SendHttpRequest; + const sendHttpRequestActivity = context.activity as SendHttpRequest; - if(portName == 'unmatchedStatusCode') { + if (portName == 'unmatchedStatusCode') { sendHttpRequestActivity.unmatchedStatusCode = activity; return; } @@ -42,7 +42,7 @@ export class HttpRequestPortProvider implements PortProvider { const statusCodes = sendHttpRequestActivity.expectedStatusCodes ?? []; const matchingStatusCode = statusCodes.find(x => x.statusCode.toString() === portName); - if(!matchingStatusCode) + if (!matchingStatusCode) return; matchingStatusCode.activity = activity; diff --git a/src/designer/designer_packages/elsa-workflows-designer/src/modules/switch/flow/flow-switch-port-provider.ts b/src/designer/designer_packages/elsa-workflows-designer/src/modules/switch/flow/flow-switch-port-provider.ts index ff7a16380..e2503c322 100644 --- a/src/designer/designer_packages/elsa-workflows-designer/src/modules/switch/flow/flow-switch-port-provider.ts +++ b/src/designer/designer_packages/elsa-workflows-designer/src/modules/switch/flow/flow-switch-port-provider.ts @@ -1,6 +1,6 @@ import 'reflect-metadata'; import {Service} from "typedi"; -import {Activity, Port, PortMode} from "../../../models"; +import {Activity, Port, PortType} from "../../../models"; import {FlowSwitchActivity} from "./models"; import {PortProvider, PortProviderContext} from "../../../services"; @@ -14,7 +14,7 @@ export class FlowSwitchPortProvider implements PortProvider { return []; const cases = activity.cases ?? []; - return cases.map(x => ({name: x.label, displayName: x.label, mode: PortMode.Port})); + return cases.map(x => ({name: x.label, displayName: x.label, type: PortType.Flow})); } resolvePort(portName: string, context: PortProviderContext): Activity | Array { diff --git a/src/designer/designer_packages/elsa-workflows-designer/src/modules/switch/sequence/switch-port-provider.ts b/src/designer/designer_packages/elsa-workflows-designer/src/modules/switch/sequence/switch-port-provider.ts index 0f70bd764..c56715e1a 100644 --- a/src/designer/designer_packages/elsa-workflows-designer/src/modules/switch/sequence/switch-port-provider.ts +++ b/src/designer/designer_packages/elsa-workflows-designer/src/modules/switch/sequence/switch-port-provider.ts @@ -1,6 +1,6 @@ import 'reflect-metadata'; import {Service} from "typedi"; -import {Activity, Port, PortMode} from "../../../models"; +import {Activity, Port, PortType} from "../../../models"; import {SwitchActivity, SwitchCase} from "./models"; import {PortProvider, PortProviderContext} from "../../../services"; @@ -10,25 +10,25 @@ export class SwitchPortProvider implements PortProvider { getOutboundPorts(context: PortProviderContext): Array { const activity = context.activity as SwitchActivity; - if(activity == null) + if (activity == null) return []; const cases = activity.cases ?? []; - const ports = cases.map(x => ({name: x.label, displayName: x.label, mode: PortMode.Embedded})); - const defaultPort = {name: 'default', displayName: 'Default', mode: PortMode.Embedded}; + const ports: Port[] = cases.map(x => ({name: x.label, displayName: x.label, type: PortType.Embedded})); + const defaultPort: Port = {name: 'default', displayName: 'Default', type: PortType.Embedded}; return [...ports, defaultPort]; } resolvePort(portName: string, context: PortProviderContext): Activity | Array { const activity = context.activity as SwitchActivity; - if(portName == 'default') + if (portName == 'default') return activity.default; const cases: Array = activity.cases ?? []; const caseItem = cases.find(x => x.label == portName); - if(!caseItem) + if (!caseItem) return null; return caseItem.activity; @@ -37,7 +37,7 @@ export class SwitchPortProvider implements PortProvider { assignPort(portName: string, activity: Activity, context: PortProviderContext) { const switchActivity = context.activity as SwitchActivity; - if(portName == 'default') { + if (portName == 'default') { switchActivity.default = activity; return; } @@ -45,7 +45,7 @@ export class SwitchPortProvider implements PortProvider { const cases: Array = switchActivity.cases ?? []; const caseItem = cases.find(x => x.label == portName); - if(!caseItem) + if (!caseItem) return null; caseItem.activity = activity; diff --git a/src/modules/Elsa.Workflows.Core/Models/Port.cs b/src/modules/Elsa.Workflows.Core/Models/Port.cs index da91d2ae9..86de2d624 100644 --- a/src/modules/Elsa.Workflows.Core/Models/Port.cs +++ b/src/modules/Elsa.Workflows.Core/Models/Port.cs @@ -1,9 +1,27 @@ namespace Elsa.Workflows.Core.Models; +/// +/// Represents a port on an activity. +/// public class Port { + /// + /// Gets or sets the name of the port. + /// public string Name { get; set; } = default!; + + /// + /// Gets or sets the display name of the port. + /// public string? DisplayName { get; set; } - public PortMode Mode { get; set; } + + /// + /// Gets or sets the type of the port. + /// + public PortType Type { get; set; } + + /// + /// Gets or sets the visibility of the port. + /// public bool IsBrowsable { get; set; } = true; } \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Core/Models/PortMode.cs b/src/modules/Elsa.Workflows.Core/Models/PortMode.cs deleted file mode 100644 index db42f90d3..000000000 --- a/src/modules/Elsa.Workflows.Core/Models/PortMode.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Elsa.Workflows.Core.Models; - -public enum PortMode -{ - Embedded, - Port -} \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Core/Models/PortType.cs b/src/modules/Elsa.Workflows.Core/Models/PortType.cs new file mode 100644 index 000000000..a471e912f --- /dev/null +++ b/src/modules/Elsa.Workflows.Core/Models/PortType.cs @@ -0,0 +1,17 @@ +namespace Elsa.Workflows.Core.Models; + +/// +/// The type of a port. +/// +public enum PortType +{ + /// + /// A port that is embedded in the activity. + /// + Embedded, + + /// + /// A flow port. + /// + Flow +} \ No newline at end of file diff --git a/src/modules/Elsa.Workflows.Core/Services/ActivityDescriber.cs b/src/modules/Elsa.Workflows.Core/Services/ActivityDescriber.cs index 0a8746cf6..c61d491d2 100644 --- a/src/modules/Elsa.Workflows.Core/Services/ActivityDescriber.cs +++ b/src/modules/Elsa.Workflows.Core/Services/ActivityDescriber.cs @@ -53,14 +53,14 @@ public class ActivityDescriber : IActivityDescriber { Name = portAttr?.Name ?? prop.Name, DisplayName = portAttr?.DisplayName ?? portAttr?.Name ?? prop.Name, - Mode = PortMode.Embedded, + Type = PortType.Embedded, IsBrowsable = portAttr != null && (portBrowsableAttr == null || portBrowsableAttr.Browsable) }; var flowNodeAttr = activityType.GetCustomAttribute(); var flowPorts = flowNodeAttr?.Outcomes.Select(x => new Port { - Mode = PortMode.Port, + Type = PortType.Flow, Name = x, DisplayName = x }).ToDictionary(x => x.Name) ?? new Dictionary(); diff --git a/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivityProvider.cs b/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivityProvider.cs index 99680baec..bc39bb41e 100644 --- a/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivityProvider.cs +++ b/src/modules/Elsa.Workflows.Management/Activities/WorkflowDefinitionActivity/WorkflowDefinitionActivityProvider.cs @@ -56,7 +56,7 @@ public class WorkflowDefinitionActivityProvider : IActivityProvider Name = outcome, DisplayName = outcome, IsBrowsable = true, - Mode = PortMode.Port + Type = PortType.Flow }).ToList(); var rootPort = new Port @@ -64,7 +64,7 @@ public class WorkflowDefinitionActivityProvider : IActivityProvider Name = nameof(WorkflowDefinitionActivity.Root), DisplayName = "Root", IsBrowsable = false, - Mode = PortMode.Embedded + Type = PortType.Embedded }; ports.Insert(0, rootPort);