diff --git a/src/modules/Elsa.Workflows.Core/Activities/Complete.cs b/src/modules/Elsa.Workflows.Core/Activities/Complete.cs index 5a9c5d084..d72e6275e 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/Complete.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/Complete.cs @@ -1,4 +1,3 @@ -using System.ComponentModel; using System.Runtime.CompilerServices; using System.Text.Json.Serialization; using Elsa.Expressions.Models; @@ -24,13 +23,13 @@ public class Complete : Activity /// public Complete(IEnumerable outcomes, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) - : this(new Input>(outcomes.ToList()), source, line) + : this(new Input(outcomes.ToList()), source, line) { } /// public Complete(Func> outcomes, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) - : this(new Input>(outcomes), source, line) + : this(new Input(outcomes), source, line) { } @@ -41,7 +40,7 @@ public class Complete : Activity } /// - public Complete(Input> outcomes, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(source, line) + public Complete(Input outcomes, [CallerFilePath] string? source = default, [CallerLineNumber] int? line = default) : this(source, line) { Outcomes = outcomes; } @@ -54,14 +53,39 @@ public class Complete : Activity UIHint = InputUIHints.OutcomePicker, DefaultSyntax = "Json" )] - public Input> Outcomes { get; set; } = new(new List()); + public Input Outcomes { get; set; } = default!; /// protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) { - var outcomes = Outcomes.Get(context).ToArray(); + var outcomesValue = Outcomes.TryGet(context); + var outcomes = InterpretOutcomes(outcomesValue).ToArray(); + await context.SendSignalAsync(new CompleteCompositeSignal(new Outcomes(outcomes))); // Don't complete this activity, as it will be completed by the composite activity. } + + private static IEnumerable InterpretOutcomes(object? outcomesValue) + { + switch (outcomesValue) + { + case string singleOutcome: + yield return singleOutcome; + break; + case IEnumerable outcomeStrings: + foreach (var outcome in outcomeStrings) + yield return outcome; + break; + case IEnumerable outcomeObjects: + { + foreach (var outcome in outcomeObjects) + yield return outcome.ToString()!; + break; + } + default: + yield return "Done"; + break; + } + } } \ No newline at end of file