diff --git a/extensions/Squidex.Extensions/Actions/Algolia/AlgoliaAction.cs b/extensions/Squidex.Extensions/Actions/Algolia/AlgoliaAction.cs index 99436019c..c50d2fc3b 100644 --- a/extensions/Squidex.Extensions/Actions/Algolia/AlgoliaAction.cs +++ b/extensions/Squidex.Extensions/Actions/Algolia/AlgoliaAction.cs @@ -36,5 +36,10 @@ namespace Squidex.Extensions.Actions.Algolia [DataType(DataType.Text)] [Formattable] public string IndexName { get; set; } + + [Display(Name = "Document", Description = "The optional custom document.")] + [DataType(DataType.MultilineText)] + [Formattable] + public string Document { get; set; } } } diff --git a/extensions/Squidex.Extensions/Actions/Algolia/AlgoliaActionHandler.cs b/extensions/Squidex.Extensions/Actions/Algolia/AlgoliaActionHandler.cs index 65f3b0e88..854c2024c 100644 --- a/extensions/Squidex.Extensions/Actions/Algolia/AlgoliaActionHandler.cs +++ b/extensions/Squidex.Extensions/Actions/Algolia/AlgoliaActionHandler.cs @@ -56,9 +56,28 @@ namespace Squidex.Extensions.Actions.Algolia { ruleDescription = $"Add entry to Algolia index: {action.IndexName}"; - var json = ToJson(contentEvent); - - ruleJob.Content = JObject.Parse(json); + JObject json; + try + { + string jsonString; + + if (!string.IsNullOrEmpty(action.Document)) + { + jsonString = Format(action.Document, @event)?.Trim(); + } + else + { + jsonString = ToJson(contentEvent); + } + + json = JObject.Parse(jsonString); + } + catch + { + json = new JObject(new JProperty("error", "Invalid JSON")); + } + + ruleJob.Content = json; ruleJob.Content["objectID"] = contentId; } diff --git a/extensions/Squidex.Extensions/Actions/Webhook/WebhookAction.cs b/extensions/Squidex.Extensions/Actions/Webhook/WebhookAction.cs index 4c129531e..522d12625 100644 --- a/extensions/Squidex.Extensions/Actions/Webhook/WebhookAction.cs +++ b/extensions/Squidex.Extensions/Actions/Webhook/WebhookAction.cs @@ -29,5 +29,10 @@ namespace Squidex.Extensions.Actions.Webhook [Display(Name = "Shared Secret", Description = "The shared secret that is used to calculate the signature.")] [DataType(DataType.Text)] public string SharedSecret { get; set; } + + [Display(Name = "Payload", Description = "The optional custom request payload.")] + [DataType(DataType.MultilineText)] + [Formattable] + public string Payload { get; set; } } } diff --git a/extensions/Squidex.Extensions/Actions/Webhook/WebhookActionHandler.cs b/extensions/Squidex.Extensions/Actions/Webhook/WebhookActionHandler.cs index 27edcb508..d5e55991d 100644 --- a/extensions/Squidex.Extensions/Actions/Webhook/WebhookActionHandler.cs +++ b/extensions/Squidex.Extensions/Actions/Webhook/WebhookActionHandler.cs @@ -31,7 +31,17 @@ namespace Squidex.Extensions.Actions.Webhook protected override (string Description, WebhookJob Data) CreateJob(EnrichedEvent @event, WebhookAction action) { - var requestBody = ToEnvelopeJson(@event); + string requestBody; + + if (!string.IsNullOrEmpty(action.Payload)) + { + requestBody = Format(action.Payload, @event); + } + else + { + requestBody = ToEnvelopeJson(@event); + } + var requestUrl = Format(action.Url, @event); var ruleDescription = $"Send event to webhook '{requestUrl}'"; diff --git a/src/Squidex/app/theme/_common.scss b/src/Squidex/app/theme/_common.scss index e706e81c1..3a47bf2f4 100644 --- a/src/Squidex/app/theme/_common.scss +++ b/src/Squidex/app/theme/_common.scss @@ -114,6 +114,10 @@ body { } } +.dropdown-item { + cursor: pointer; +} + // // Landing page with loading spinner. //