diff --git a/src/core/Elsa.Core/Activities/ControlFlow/Switch/SwitchCaseBuilder.cs b/src/core/Elsa.Core/Activities/ControlFlow/Switch/SwitchCaseBuilder.cs index 237dd2caa..b5ab70c59 100644 --- a/src/core/Elsa.Core/Activities/ControlFlow/Switch/SwitchCaseBuilder.cs +++ b/src/core/Elsa.Core/Activities/ControlFlow/Switch/SwitchCaseBuilder.cs @@ -15,11 +15,24 @@ namespace Elsa.Activities.ControlFlow Cases.Add(new SwitchCaseDescriptor(name, condition, builder => branch(builder.When(name)))); return this; } + + public SwitchCaseBuilder Add(Func> condition, Action branch) + { + var caseLabel = GetNextCaseLabel(); + Cases.Add(new SwitchCaseDescriptor(caseLabel, condition, builder => branch(builder.When(caseLabel)))); + return this; + } public SwitchCaseBuilder Add(string name, Func condition, Action branch) => Add(name, context => new ValueTask(condition(context)), branch); public SwitchCaseBuilder Add(string name, Func> condition, Action branch) => Add(name, _ => condition(), branch); public SwitchCaseBuilder Add(string name, Func condition, Action branch) => Add(name, _ => condition(), branch); public SwitchCaseBuilder Add(string name, bool condition, Action branch) => Add(name, _ => condition, branch); + public SwitchCaseBuilder Add(Func condition, Action branch) => Add(GetNextCaseLabel(), context => new ValueTask(condition(context)), branch); + public SwitchCaseBuilder Add(Func> condition, Action branch) => Add(GetNextCaseLabel(), _ => condition(), branch); + public SwitchCaseBuilder Add(Func condition, Action branch) => Add(GetNextCaseLabel(), _ => condition(), branch); + public SwitchCaseBuilder Add(bool condition, Action branch) => Add(GetNextCaseLabel(), _ => condition, branch); + + private string GetNextCaseLabel() => $"Case {Cases.Count + 1}"; } public record SwitchCaseDescriptor(string Name, Func> Condition, Action OutcomeBuilder); diff --git a/src/samples/console/Elsa.Samples.SwitchConsole/GrayscaleWorkflow.cs b/src/samples/console/Elsa.Samples.SwitchConsole/GrayscaleWorkflow.cs index de1c5a5fd..e7a6f89bb 100644 --- a/src/samples/console/Elsa.Samples.SwitchConsole/GrayscaleWorkflow.cs +++ b/src/samples/console/Elsa.Samples.SwitchConsole/GrayscaleWorkflow.cs @@ -21,16 +21,16 @@ namespace Elsa.Samples.SwitchConsole .WriteLine("--Grayscale Calculator--").WithName("Start") .WriteLine("Enter a number between 0 and 100.") .ReadLine() - .Switch( cases => - { - cases.Add("Black", context => GetNumber(context) >= 0 && GetNumber(context) < 20, @case => @case.WriteLine("That number is black")); - cases.Add("Dark Gray", context => GetNumber(context) >= 20 && GetNumber(context) < 50, @case => @case.WriteLine("That number is dark gray")); - cases.Add("Light Gray", context => GetNumber(context) >= 50 && GetNumber(context) < 70, @case => @case.WriteLine("That number is light gray")); - cases.Add("Gray", context => GetNumber(context) >= 20 && GetNumber(context) < 70, @case => @case.WriteLine("That number is gray")); - cases.Add("White", context => GetNumber(context) >= 70 && GetNumber(context) <= 100, @case => @case.WriteLine("That number is white")); - cases.Add("Invalid", context => GetNumber(context) < 0 || GetNumber(context) > 100, @case => @case.WriteLine("That number is invalid")); - }) - .WriteLine("Goodbye"); + .Switch(cases => + { + cases.Add(context => GetNumber(context) >= 0 && GetNumber(context) < 20, @case => @case.WriteLine("That number is black")); + cases.Add(context => GetNumber(context) >= 20 && GetNumber(context) < 50, @case => @case.WriteLine("That number is dark gray")); + cases.Add(context => GetNumber(context) >= 50 && GetNumber(context) < 70, @case => @case.WriteLine("That number is light gray")); + cases.Add(context => GetNumber(context) >= 20 && GetNumber(context) < 70, @case => @case.WriteLine("That number is gray")); + cases.Add(context => GetNumber(context) >= 70 && GetNumber(context) <= 100, @case => @case.WriteLine("That number is white")); + cases.Add(context => GetNumber(context) < 0 || GetNumber(context) > 100, @case => @case.WriteLine("That number is invalid")); + }) + .WriteLine("Thanks for playing!"); } private static int GetNumber(ActivityExecutionContext context) => context.GetInput();