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("contentUrl", ContentUrl);
options.Filters.AddFilter("assetContentUrl", AssetContentUrl); options.Filters.AddFilter("assetContentUrl", AssetContentUrl);
options.Filters.AddFilter("assetContentAppUrl", AssetContentAppUrl); options.Filters.AddFilter("assetContentAppUrl", AssetContentUrl);
options.Filters.AddFilter("assetContentSlugUrl", AssetContentSlugUrl); options.Filters.AddFilter("assetContentSlugUrl", AssetContentSlugUrl);
} }
private ValueTask<FluidValue> ContentUrl(FluidValue input, FilterArguments arguments, TemplateContext context) 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(); var value = input.ToObjectValue();
switch (value) switch (value)
{ {
case DomainId id: case DomainId id:
{ return TryResolveId(context, id);
if (context.GetValue("event")?.ToObjectValue() is EnrichedContentEvent contentEvent)
{
var result = urlGenerator.ContentUI(contentEvent.AppId, contentEvent.SchemaId, id);
return new StringValue(result);
}
break; case string id:
} return TryResolveId(context, DomainId.Create(id));
case EnrichedContentEvent contentEvent: case EnrichedContentEvent contentEvent:
{ {
@ -62,50 +68,27 @@ public sealed class EventFluidExtensions : IFluidExtension
private ValueTask<FluidValue> AssetContentUrl(FluidValue input, FilterArguments arguments, TemplateContext context) private ValueTask<FluidValue> AssetContentUrl(FluidValue input, FilterArguments arguments, TemplateContext context)
{ {
var value = input.ToObjectValue(); FluidValue TryResolveId(TemplateContext context, string id)
switch (value)
{ {
case DomainId id: if (context.GetValue("event")?.ToObjectValue() is EnrichedEvent enrichedEvent)
{ {
if (context.GetValue("event")?.ToObjectValue() is EnrichedAssetEvent assetEvent) var result = urlGenerator.AssetContent(enrichedEvent.AppId, id);
{
var result = urlGenerator.AssetContent(assetEvent.AppId, id.ToString());
return new StringValue(result); return new StringValue(result);
} }
break;
}
case EnrichedAssetEvent assetEvent:
{
var result = urlGenerator.AssetContent(assetEvent.AppId, assetEvent.Id.ToString());
return new StringValue(result); return NilValue.Empty;
}
} }
return NilValue.Empty;
}
private ValueTask<FluidValue> AssetContentAppUrl(FluidValue input, FilterArguments arguments, TemplateContext context)
{
var value = input.ToObjectValue(); var value = input.ToObjectValue();
switch (value) switch (value)
{ {
case DomainId id: case DomainId id:
{ return TryResolveId(context, id.ToString());
if (context.GetValue("event")?.ToObjectValue() is EnrichedAssetEvent assetEvent)
{
var result = urlGenerator.AssetContent(assetEvent.AppId, id.ToString());
return new StringValue(result); case string id:
} return TryResolveId(context, id);
break;
}
case EnrichedAssetEvent assetEvent: case EnrichedAssetEvent assetEvent:
{ {
@ -120,21 +103,24 @@ public sealed class EventFluidExtensions : IFluidExtension
private ValueTask<FluidValue> AssetContentSlugUrl(FluidValue input, FilterArguments arguments, TemplateContext context) 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(); var value = input.ToObjectValue();
switch (value) switch (value)
{ {
case string s: case string s:
{ return TryResolveSlug(context, s);
if (context.GetValue("event")?.ToObjectValue() is EnrichedAssetEvent assetEvent)
{
var result = urlGenerator.AssetContent(assetEvent.AppId, s.Slugify());
return new StringValue(result);
}
break;
}
case EnrichedAssetEvent assetEvent: 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; 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) 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; return JsValue.Null;
})); }));
context.Engine.SetValue("assetContentAppUrl", new EventDelegate(() => var assetUrl = new EventDelegate(() =>
{ {
if (context.TryGetValue("event", out var temp) && temp is EnrichedAssetEvent assetEvent) if (context.TryGetValue("event", out var temp) && temp is EnrichedAssetEvent assetEvent)
{ {
@ -63,17 +63,10 @@ public sealed class EventJintExtension : IJintExtension, IScriptDescriptor
} }
return JsValue.Null; return JsValue.Null;
})); });
context.Engine.SetValue("assetContentSlugUrl", new EventDelegate(() => context.Engine.SetValue("assetContentUrl", assetUrl);
{ context.Engine.SetValue("assetContentAppUrl", assetUrl);
if (context.TryGetValue("event", out var temp) && temp is EnrichedAssetEvent assetEvent)
{
return urlGenerator.AssetContent(assetEvent.AppId, assetEvent.FileName.Slugify());
}
return JsValue.Null;
}));
} }
public void Describe(AddDescription describe, ScriptScope scope) 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;
using Squidex.Domain.Apps.Entities.Rules.Indexes; using Squidex.Domain.Apps.Entities.Rules.Indexes;
using Squidex.Domain.Apps.Entities.Rules.UsageTracking; 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.Commands;
using Squidex.Domain.Apps.Entities.Schemas.DomainObject; using Squidex.Domain.Apps.Entities.Schemas.DomainObject;
using Squidex.Domain.Apps.Entities.Schemas.Indexes; using Squidex.Domain.Apps.Entities.Schemas.Indexes;
@ -114,6 +115,9 @@ public static class CommandsServices
services.AddSingletonAs<RuleCommandMiddleware>() services.AddSingletonAs<RuleCommandMiddleware>()
.As<ICommandMiddleware>(); .As<ICommandMiddleware>();
services.AddSingletonAs<MigrateFieldNamesCommandMiddleware>()
.As<ICommandMiddleware>();
services.AddSingletonAs<AggregateCommandMiddleware<AssetFolderCommandBase, AssetFolderDomainObject>>() services.AddSingletonAs<AggregateCommandMiddleware<AssetFolderCommandBase, AssetFolderDomainObject>>()
.As<ICommandMiddleware>(); .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.History;
using Squidex.Domain.Apps.Entities.Schemas; using Squidex.Domain.Apps.Entities.Schemas;
using Squidex.Domain.Apps.Entities.Search; using Squidex.Domain.Apps.Entities.Search;
using Squidex.Infrastructure.Commands;
namespace Squidex.Config.Domain; namespace Squidex.Config.Domain;
@ -16,9 +15,6 @@ public static class SchemasServices
{ {
public static void AddSquidexSchemas(this IServiceCollection services) public static void AddSquidexSchemas(this IServiceCollection services)
{ {
services.AddSingletonAs<MigrateFieldNamesCommandMiddleware>()
.As<ICommandMiddleware>();
services.AddTransientAs<SchemasSearchSource>() services.AddTransientAs<SchemasSearchSource>()
.As<ISearchSource>(); .As<ISearchSource>();

Loading…
Cancel
Save