Add "workflow_definition_id" liquid filter

This commit is contained in:
Sipke Schoorstra 2021-04-26 13:28:20 +02:00
parent 672ab5663a
commit 10d77b7365
2 changed files with 40 additions and 1 deletions

View file

@ -18,7 +18,8 @@ namespace Elsa.Scripting.Liquid.Extensions
.AddScoped<ILiquidTemplateManager, LiquidTemplateManager>()
.AddSingleton<LiquidParser>()
.AddLiquidFilter<JsonFilter>("json")
.AddLiquidFilter<Base64Filter>("base64");
.AddLiquidFilter<Base64Filter>("base64")
.AddLiquidFilter<WorkflowDefinitionIdFilter>("workflow_definition_id");
}
public static IServiceCollection AddLiquidFilter<T>(this IServiceCollection services, string name) where T : class, ILiquidFilter

View file

@ -0,0 +1,38 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using Elsa.Scripting.Liquid.Services;
using Elsa.Services;
using Elsa.Services.Models;
using Fluid;
using Fluid.Values;
namespace Elsa.Scripting.Liquid.Filters
{
public class WorkflowDefinitionIdFilter : ILiquidFilter
{
private readonly IWorkflowRegistry _workflowRegistry;
public WorkflowDefinitionIdFilter(IWorkflowRegistry workflowRegistry) => _workflowRegistry = workflowRegistry;
public async ValueTask<FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, TemplateContext context)
{
if (input.Type != FluidValues.String)
throw new NotSupportedException("Unrecognized FluidValue");
var queryType = arguments.Values.FirstOrDefault()?.ToStringValue() ?? "name";
var queryValue = input.ToStringValue().ToLowerInvariant();
Func<IWorkflowBlueprint, bool> predicate = queryType switch
{
"name" => x => string.Equals(x.Name, queryValue, StringComparison.OrdinalIgnoreCase),
"tag" => x => string.Equals(x.Tag, queryValue, StringComparison.OrdinalIgnoreCase),
_ => throw new ArgumentOutOfRangeException()
};
var workflowBlueprint = await _workflowRegistry.FindAsync(predicate);
var workflowDefinitionId = workflowBlueprint?.Id;
return new StringValue(workflowDefinitionId);
}
}
}