Browse Source

Make fluid extensions more flexible.

pull/1086/head
Sebastian 2 years ago
parent
commit
b757268a70
  1. 92
      backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Extensions/EventFluidExtensions.cs
  2. 19
      backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Extensions/EventJintExtension.cs
  3. 4
      backend/src/Squidex/Config/Domain/CommandsServices.cs
  4. 4
      backend/src/Squidex/Config/Domain/SchemasServices.cs

92
backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Extensions/EventFluidExtensions.cs

@ -27,27 +27,33 @@ public sealed class EventFluidExtensions : IFluidExtension
{
options.Filters.AddFilter("contentUrl", ContentUrl);
options.Filters.AddFilter("assetContentUrl", AssetContentUrl);
options.Filters.AddFilter("assetContentAppUrl", AssetContentAppUrl);
options.Filters.AddFilter("assetContentAppUrl", AssetContentUrl);
options.Filters.AddFilter("assetContentSlugUrl", AssetContentSlugUrl);
}
private ValueTask<FluidValue> ContentUrl(FluidValue input, FilterArguments arguments, TemplateContext context)
{
FluidValue TryResolveId(TemplateContext context, DomainId id)
{
if (context.GetValue("event")?.ToObjectValue() is EnrichedContentEvent contentEvent)
{
var url = urlGenerator.ContentUI(contentEvent.AppId, contentEvent.SchemaId, id);
return new StringValue(url);
}
return NilValue.Empty;
}
var value = input.ToObjectValue();
switch (value)
{
case DomainId id:
{
if (context.GetValue("event")?.ToObjectValue() is EnrichedContentEvent contentEvent)
{
var result = urlGenerator.ContentUI(contentEvent.AppId, contentEvent.SchemaId, id);
return new StringValue(result);
}
return TryResolveId(context, id);
break;
}
case string id:
return TryResolveId(context, DomainId.Create(id));
case EnrichedContentEvent contentEvent:
{
@ -62,50 +68,27 @@ public sealed class EventFluidExtensions : IFluidExtension
private ValueTask<FluidValue> AssetContentUrl(FluidValue input, FilterArguments arguments, TemplateContext context)
{
var value = input.ToObjectValue();
switch (value)
FluidValue TryResolveId(TemplateContext context, string id)
{
case DomainId id:
{
if (context.GetValue("event")?.ToObjectValue() is EnrichedAssetEvent assetEvent)
{
var result = urlGenerator.AssetContent(assetEvent.AppId, id.ToString());
if (context.GetValue("event")?.ToObjectValue() is EnrichedEvent enrichedEvent)
{
var result = urlGenerator.AssetContent(enrichedEvent.AppId, id);
return new StringValue(result);
}
break;
}
case EnrichedAssetEvent assetEvent:
{
var result = urlGenerator.AssetContent(assetEvent.AppId, assetEvent.Id.ToString());
return new StringValue(result);
}
return new StringValue(result);
}
return NilValue.Empty;
}
return NilValue.Empty;
}
private ValueTask<FluidValue> AssetContentAppUrl(FluidValue input, FilterArguments arguments, TemplateContext context)
{
var value = input.ToObjectValue();
switch (value)
{
case DomainId id:
{
if (context.GetValue("event")?.ToObjectValue() is EnrichedAssetEvent assetEvent)
{
var result = urlGenerator.AssetContent(assetEvent.AppId, id.ToString());
return TryResolveId(context, id.ToString());
return new StringValue(result);
}
break;
}
case string id:
return TryResolveId(context, id);
case EnrichedAssetEvent assetEvent:
{
@ -120,21 +103,24 @@ public sealed class EventFluidExtensions : IFluidExtension
private ValueTask<FluidValue> AssetContentSlugUrl(FluidValue input, FilterArguments arguments, TemplateContext context)
{
FluidValue TryResolveSlug(TemplateContext context, string slug)
{
if (context.GetValue("event")?.ToObjectValue() is EnrichedEvent enrichedEvent)
{
var result = urlGenerator.AssetContent(enrichedEvent.AppId, slug.Slugify());
return new StringValue(result);
}
return NilValue.Empty;
}
var value = input.ToObjectValue();
switch (value)
{
case string s:
{
if (context.GetValue("event")?.ToObjectValue() is EnrichedAssetEvent assetEvent)
{
var result = urlGenerator.AssetContent(assetEvent.AppId, s.Slugify());
return new StringValue(result);
}
break;
}
return TryResolveSlug(context, s);
case EnrichedAssetEvent assetEvent:
{

19
backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Extensions/EventJintExtension.cs

@ -45,17 +45,17 @@ public sealed class EventJintExtension : IJintExtension, IScriptDescriptor
return JsValue.Null;
}));
context.Engine.SetValue("assetContentUrl", new EventDelegate(() =>
context.Engine.SetValue("assetContentSlugUrl", new EventDelegate(() =>
{
if (context.TryGetValue("event", out var temp) && temp is EnrichedAssetEvent assetEvent)
{
return urlGenerator.AssetContent(assetEvent.AppId, assetEvent.Id.ToString());
return urlGenerator.AssetContent(assetEvent.AppId, assetEvent.FileName.Slugify());
}
return JsValue.Null;
}));
context.Engine.SetValue("assetContentAppUrl", new EventDelegate(() =>
var assetUrl = new EventDelegate(() =>
{
if (context.TryGetValue("event", out var temp) && temp is EnrichedAssetEvent assetEvent)
{
@ -63,17 +63,10 @@ public sealed class EventJintExtension : IJintExtension, IScriptDescriptor
}
return JsValue.Null;
}));
});
context.Engine.SetValue("assetContentSlugUrl", new EventDelegate(() =>
{
if (context.TryGetValue("event", out var temp) && temp is EnrichedAssetEvent assetEvent)
{
return urlGenerator.AssetContent(assetEvent.AppId, assetEvent.FileName.Slugify());
}
return JsValue.Null;
}));
context.Engine.SetValue("assetContentUrl", assetUrl);
context.Engine.SetValue("assetContentAppUrl", assetUrl);
}
public void Describe(AddDescription describe, ScriptScope scope)

4
backend/src/Squidex/Config/Domain/CommandsServices.cs

@ -18,6 +18,7 @@ using Squidex.Domain.Apps.Entities.Invitation;
using Squidex.Domain.Apps.Entities.Rules;
using Squidex.Domain.Apps.Entities.Rules.Indexes;
using Squidex.Domain.Apps.Entities.Rules.UsageTracking;
using Squidex.Domain.Apps.Entities.Schemas;
using Squidex.Domain.Apps.Entities.Schemas.Commands;
using Squidex.Domain.Apps.Entities.Schemas.DomainObject;
using Squidex.Domain.Apps.Entities.Schemas.Indexes;
@ -114,6 +115,9 @@ public static class CommandsServices
services.AddSingletonAs<RuleCommandMiddleware>()
.As<ICommandMiddleware>();
services.AddSingletonAs<MigrateFieldNamesCommandMiddleware>()
.As<ICommandMiddleware>();
services.AddSingletonAs<AggregateCommandMiddleware<AssetFolderCommandBase, AssetFolderDomainObject>>()
.As<ICommandMiddleware>();

4
backend/src/Squidex/Config/Domain/SchemasServices.cs

@ -8,7 +8,6 @@
using Squidex.Domain.Apps.Entities.History;
using Squidex.Domain.Apps.Entities.Schemas;
using Squidex.Domain.Apps.Entities.Search;
using Squidex.Infrastructure.Commands;
namespace Squidex.Config.Domain;
@ -16,9 +15,6 @@ public static class SchemasServices
{
public static void AddSquidexSchemas(this IServiceCollection services)
{
services.AddSingletonAs<MigrateFieldNamesCommandMiddleware>()
.As<ICommandMiddleware>();
services.AddTransientAs<SchemasSearchSource>()
.As<ISearchSource>();

Loading…
Cancel
Save