From 336e55a2302c71bffff16d3f2f34ca21232e1859 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 29 Jun 2023 14:51:00 +0200 Subject: [PATCH] Add FlowSwitch resolver to API client --- .../Elsa.Api.Client/Activities/FlowSwitch.cs | 19 +++++++++++++++++++ .../FlowSwitchTypeResolver.cs | 17 +++++++++++++++++ ...peResolver.cs => FlowchartTypeResolver.cs} | 2 +- .../Converters/ActivityJsonConverter.cs | 2 +- .../Expressions/ObjectExpression.cs | 2 +- .../DependencyInjectionExtensions.cs | 3 ++- src/clients/Elsa.Api.Client/Models/Case.cs | 10 ++++++++++ .../ActivityDescriptors/Models/Port.cs | 2 +- 8 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 src/clients/Elsa.Api.Client/Activities/FlowSwitch.cs create mode 100644 src/clients/Elsa.Api.Client/ActivityProviders/FlowSwitchTypeResolver.cs rename src/clients/Elsa.Api.Client/ActivityProviders/{FlowchartActivityTypeResolver.cs => FlowchartTypeResolver.cs} (87%) create mode 100644 src/clients/Elsa.Api.Client/Models/Case.cs diff --git a/src/clients/Elsa.Api.Client/Activities/FlowSwitch.cs b/src/clients/Elsa.Api.Client/Activities/FlowSwitch.cs new file mode 100644 index 000000000..587a5df5f --- /dev/null +++ b/src/clients/Elsa.Api.Client/Activities/FlowSwitch.cs @@ -0,0 +1,19 @@ +using Elsa.Api.Client.Extensions; +using Elsa.Api.Client.Models; + +namespace Elsa.Api.Client.Activities; + +/// +/// Represents a flow switch activity. +/// +public class FlowSwitch : Activity +{ + /// + /// Gets or sets the cases. + /// + public ICollection? Cases + { + get => this.TryGetValue>("cases"); + set => this["cases"] = value!; + } +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/ActivityProviders/FlowSwitchTypeResolver.cs b/src/clients/Elsa.Api.Client/ActivityProviders/FlowSwitchTypeResolver.cs new file mode 100644 index 000000000..862360662 --- /dev/null +++ b/src/clients/Elsa.Api.Client/ActivityProviders/FlowSwitchTypeResolver.cs @@ -0,0 +1,17 @@ +using Elsa.Api.Client.Abstractions; +using Elsa.Api.Client.Activities; +using Elsa.Api.Client.Contracts; + +namespace Elsa.Api.Client.ActivityProviders; + +/// +/// Constructs a activity. +/// +public class FlowSwitchTypeResolver : ActivityTypeResolverBase +{ + /// + protected override bool GetSupportsType(ActivityTypeResolverContext context) => context.ActivityTypeName == "Elsa.FlowSwitch"; + + /// + protected override Type ResolveType(ActivityTypeResolverContext context) => typeof(FlowSwitch); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/ActivityProviders/FlowchartActivityTypeResolver.cs b/src/clients/Elsa.Api.Client/ActivityProviders/FlowchartTypeResolver.cs similarity index 87% rename from src/clients/Elsa.Api.Client/ActivityProviders/FlowchartActivityTypeResolver.cs rename to src/clients/Elsa.Api.Client/ActivityProviders/FlowchartTypeResolver.cs index 776a75195..5fffbeba9 100644 --- a/src/clients/Elsa.Api.Client/ActivityProviders/FlowchartActivityTypeResolver.cs +++ b/src/clients/Elsa.Api.Client/ActivityProviders/FlowchartTypeResolver.cs @@ -7,7 +7,7 @@ namespace Elsa.Api.Client.ActivityProviders; /// /// Constructs a activity. /// -public class FlowchartActivityTypeResolver : ActivityTypeResolverBase +public class FlowchartTypeResolver : ActivityTypeResolverBase { /// protected override bool GetSupportsType(ActivityTypeResolverContext context) => context.ActivityTypeName == "Elsa.Flowchart"; diff --git a/src/clients/Elsa.Api.Client/Converters/ActivityJsonConverter.cs b/src/clients/Elsa.Api.Client/Converters/ActivityJsonConverter.cs index 6a1bd0ae0..e9c4cfa60 100644 --- a/src/clients/Elsa.Api.Client/Converters/ActivityJsonConverter.cs +++ b/src/clients/Elsa.Api.Client/Converters/ActivityJsonConverter.cs @@ -27,7 +27,7 @@ public class ActivityJsonConverter : JsonConverter var activityRoot = doc.RootElement; var activityTypeName = activityRoot.GetProperty("type").GetString()!; var activityType = _activityTypeService.ResolveType(activityTypeName); - var newOptions = new JsonSerializerOptions(); + var newOptions = new JsonSerializerOptions(options); var activity = (Activity)JsonSerializer.Deserialize(activityRoot.GetRawText(), activityType, newOptions)!; return activity; diff --git a/src/clients/Elsa.Api.Client/Expressions/ObjectExpression.cs b/src/clients/Elsa.Api.Client/Expressions/ObjectExpression.cs index c508c3595..782e53254 100644 --- a/src/clients/Elsa.Api.Client/Expressions/ObjectExpression.cs +++ b/src/clients/Elsa.Api.Client/Expressions/ObjectExpression.cs @@ -32,5 +32,5 @@ public class ObjectExpression : IExpression /// /// Returns the string representation of the expression. /// - public override string ToString() => Value?.ToString() ?? ""; + public override string ToString() => Value ?? ""; } \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs b/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs index 02fe8d2e8..32bb283b6 100644 --- a/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs +++ b/src/clients/Elsa.Api.Client/Extensions/DependencyInjectionExtensions.cs @@ -43,7 +43,8 @@ public static class DependencyInjectionExtensions { services.AddSingleton(); services.AddActivityTypeResolver(); - services.AddActivityTypeResolver(); + services.AddActivityTypeResolver(); + services.AddActivityTypeResolver(); return services; } diff --git a/src/clients/Elsa.Api.Client/Models/Case.cs b/src/clients/Elsa.Api.Client/Models/Case.cs new file mode 100644 index 000000000..8c144f160 --- /dev/null +++ b/src/clients/Elsa.Api.Client/Models/Case.cs @@ -0,0 +1,10 @@ +using Elsa.Api.Client.Contracts; +using Elsa.Api.Client.Expressions; + +namespace Elsa.Api.Client.Models; + +public class Case +{ + public string Label { get; set; } = default!; + public IExpression Condition { get; set; } = new JavaScriptExpression(""); +} \ No newline at end of file diff --git a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/Port.cs b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/Port.cs index 953df1d2d..c668e0e0b 100644 --- a/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/Port.cs +++ b/src/clients/Elsa.Api.Client/Resources/ActivityDescriptors/Models/Port.cs @@ -23,5 +23,5 @@ public class Port /// /// Gets or sets the visibility of the port. /// - public bool IsBrowsable { get; set; } = true; + public bool? IsBrowsable { get; set; } = true; } \ No newline at end of file