diff --git a/app/javascript/controllers/rules_controller.js b/app/javascript/controllers/rules_controller.js index ca34984b..7b3d959a 100644 --- a/app/javascript/controllers/rules_controller.js +++ b/app/javascript/controllers/rules_controller.js @@ -48,13 +48,33 @@ export default class extends Controller { return Date.now(); } + // Updates the prefix visibility of all conditions and condition groups + // This is also called by the rule/conditions_controller when a subcondition is removed updateConditionPrefixes() { - const items = this.conditionsListTarget.querySelectorAll('[data-condition-prefix]'); - items.forEach((el, idx) => { - if (idx === 0) { - el.classList.add('hidden'); - } else { - el.classList.remove('hidden'); + // Update conditions + this.#updatePrefixesForList(this.conditionsListTarget); + + // Update subconditions for each condition group + // We currently only support a single level of subconditions + const groupSubLists = this.conditionsListTarget.querySelectorAll('[data-rule--conditions-target="subConditionsList"]'); + groupSubLists.forEach((subList) => { + this.#updatePrefixesForList(subList); + }); + } + + // Helper to update prefixes for a given list + #updatePrefixesForList(listEl) { + const items = Array.from(listEl.children); + let conditionIdx = 0; + items.forEach((item) => { + const prefixEl = item.querySelector('[data-condition-prefix]'); + if (prefixEl) { + if (conditionIdx === 0) { + prefixEl.classList.add('hidden'); + } else { + prefixEl.classList.remove('hidden'); + } + conditionIdx++; } }); } diff --git a/app/views/rule/conditions/_condition.html.erb b/app/views/rule/conditions/_condition.html.erb index 04cbc755..5eae0fe7 100644 --- a/app/views/rule/conditions/_condition.html.erb +++ b/app/views/rule/conditions/_condition.html.erb @@ -1,18 +1,14 @@ -<%# locals: (form:, show_prefix: true) %> +<%# locals: (form:) %> <% condition = form.object %> <% rule = condition.rule %>
match
<%= form.select :operator, [["all", "and"], ["any", "or"]], { container_class: "w-fit" }, data: { rules_target: "operatorField" } %>of the following conditions
@@ -40,7 +35,7 @@