From c195f842c8f63349043d6629b4de7065c183df5c Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Sat, 23 May 2026 10:54:58 +0200 Subject: [PATCH 1/2] feat(rule-editor): extended JsonLogic ops + bespoke action forms (closes #877) Visual condition leaf gains the remaining ops jwadhams/json-logic-php supports: var, cat, +, -, *, /, %, substr, merge, map, filter, reduce, all, none, some, if, missing. The picker now groups them (comparison / arithmetic / string / array / control-flow / negation) and renders the right input slots per op-kind (binary, unary, ternary, if, array-op, merge, var-only). JSON slots get a textarea with parse error feedback; literal slots keep the same coerce()-on-input path. Per-action-type forms replace the JSON-textarea fallback for all 15 canonical rule action types. Each form lives at src/views/Rule/actionForms/Form.vue and round-trips its slice of `configuration[]` via update:value. RuleActionConfig wires them through ACTION_FORM_MAP; the JSON-textarea fallback stays for any future action type without a bespoke form. Two outliers (`mapping` writes to configuration.mapping bare id; `javascript` writes to configuration.javascript bare string) are special-cased. Also fixes the malformed `` line in appinfo/info.xml (collateral from #895's canonicalize sweep) so eslint can parse the project again. --- appinfo/info.xml | 2 +- src/views/Rule/RuleActionConfig.vue | 275 +++++------- src/views/Rule/RuleConditionLeaf.vue | 407 +++++++++++++++--- .../Rule/actionForms/AuthenticationForm.vue | 91 ++++ src/views/Rule/actionForms/DownloadForm.vue | 57 +++ src/views/Rule/actionForms/ErrorForm.vue | 76 ++++ .../actionForms/ExtendExternalInputForm.vue | 103 +++++ .../Rule/actionForms/ExtendInputForm.vue | 115 +++++ src/views/Rule/actionForms/FetchFileForm.vue | 182 ++++++++ .../Rule/actionForms/FilepartUploadForm.vue | 65 +++ .../Rule/actionForms/FilepartsCreateForm.vue | 90 ++++ src/views/Rule/actionForms/JavascriptForm.vue | 49 +++ src/views/Rule/actionForms/LockingForm.vue | 74 ++++ src/views/Rule/actionForms/MappingForm.vue | 64 +++ src/views/Rule/actionForms/SaveObjectForm.vue | 90 ++++ .../Rule/actionForms/SynchronizationForm.vue | 119 +++++ src/views/Rule/actionForms/UploadForm.vue | 62 +++ src/views/Rule/actionForms/WriteFileForm.vue | 59 +++ src/views/Rule/actionForms/shared.js | 80 ++++ 19 files changed, 1822 insertions(+), 238 deletions(-) create mode 100644 src/views/Rule/actionForms/AuthenticationForm.vue create mode 100644 src/views/Rule/actionForms/DownloadForm.vue create mode 100644 src/views/Rule/actionForms/ErrorForm.vue create mode 100644 src/views/Rule/actionForms/ExtendExternalInputForm.vue create mode 100644 src/views/Rule/actionForms/ExtendInputForm.vue create mode 100644 src/views/Rule/actionForms/FetchFileForm.vue create mode 100644 src/views/Rule/actionForms/FilepartUploadForm.vue create mode 100644 src/views/Rule/actionForms/FilepartsCreateForm.vue create mode 100644 src/views/Rule/actionForms/JavascriptForm.vue create mode 100644 src/views/Rule/actionForms/LockingForm.vue create mode 100644 src/views/Rule/actionForms/MappingForm.vue create mode 100644 src/views/Rule/actionForms/SaveObjectForm.vue create mode 100644 src/views/Rule/actionForms/SynchronizationForm.vue create mode 100644 src/views/Rule/actionForms/UploadForm.vue create mode 100644 src/views/Rule/actionForms/WriteFileForm.vue create mode 100644 src/views/Rule/actionForms/shared.js diff --git a/appinfo/info.xml b/appinfo/info.xml index 24a084875..a4a8df760 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -35,7 +35,7 @@ The OpenConnector Nextcloud app provides a ESB-framework to work together in an - + diff --git a/src/views/Rule/RuleActionConfig.vue b/src/views/Rule/RuleActionConfig.vue index 234ff8b78..6a5e10b98 100644 --- a/src/views/Rule/RuleActionConfig.vue +++ b/src/views/Rule/RuleActionConfig.vue @@ -2,24 +2,21 @@