From b757268a7028b6747dba539fcb608c578e36c25c Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 11 Apr 2024 18:55:42 +0200 Subject: [PATCH] Make fluid extensions more flexible. --- .../Extensions/EventFluidExtensions.cs | 92 ++++++++----------- .../Extensions/EventJintExtension.cs | 19 ++-- .../Squidex/Config/Domain/CommandsServices.cs | 4 + .../Squidex/Config/Domain/SchemasServices.cs | 4 - 4 files changed, 49 insertions(+), 70 deletions(-) diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Extensions/EventFluidExtensions.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Extensions/EventFluidExtensions.cs index 421b7e95b..0d4195e1e 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Extensions/EventFluidExtensions.cs +++ b/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 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 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 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 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: { diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Extensions/EventJintExtension.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Extensions/EventJintExtension.cs index 205991915..e1a5a2919 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Extensions/EventJintExtension.cs +++ b/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) diff --git a/backend/src/Squidex/Config/Domain/CommandsServices.cs b/backend/src/Squidex/Config/Domain/CommandsServices.cs index 8b92ebf66..e0c3ace16 100644 --- a/backend/src/Squidex/Config/Domain/CommandsServices.cs +++ b/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() .As(); + services.AddSingletonAs() + .As(); + services.AddSingletonAs>() .As(); diff --git a/backend/src/Squidex/Config/Domain/SchemasServices.cs b/backend/src/Squidex/Config/Domain/SchemasServices.cs index 0571f90ae..4f0065461 100644 --- a/backend/src/Squidex/Config/Domain/SchemasServices.cs +++ b/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() - .As(); - services.AddTransientAs() .As();