Add "workflow_definition_id" liquid filter
This commit is contained in:
parent
672ab5663a
commit
10d77b7365
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue