diff --git a/app/webpacker/controllers/bulk_form_controller.js b/app/webpacker/controllers/bulk_form_controller.js index 14680ff4bd..ab93978584 100644 --- a/app/webpacker/controllers/bulk_form_controller.js +++ b/app/webpacker/controllers/bulk_form_controller.js @@ -88,6 +88,14 @@ export default class BulkFormController extends Controller { this.disableElements.forEach((element) => { element.classList.toggle("disabled-section", disable); + + // Also disable any form elements + let forms = element.tagName == "FORM" ? [element] : element.querySelectorAll("form"); + + forms && + forms.forEach((form) => + Array.from(form.elements).forEach((formElement) => (formElement.disabled = disable)) + ); }); } diff --git a/spec/javascripts/stimulus/bulk_form_controller_test.js b/spec/javascripts/stimulus/bulk_form_controller_test.js index d50dabbaf4..d558e4b37a 100644 --- a/spec/javascripts/stimulus/bulk_form_controller_test.js +++ b/spec/javascripts/stimulus/bulk_form_controller_test.js @@ -28,8 +28,8 @@ describe("BulkFormController", () => { beforeEach(() => { document.body.innerHTML = ` -
-
+
+
@@ -45,7 +45,9 @@ describe("BulkFormController", () => { `; const disable1 = document.getElementById("disable1"); + const disable1_element = document.getElementById("disable1_element"); const disable2 = document.getElementById("disable2"); + const disable2_element = document.getElementById("disable2_element"); const actions = document.getElementById("actions"); const changed_summary = document.getElementById("changed_summary"); const input1a = document.getElementById("input1a"); @@ -112,7 +114,9 @@ describe("BulkFormController", () => { expect(actions.classList).not.toContain('hidden'); expect(changed_summary.textContent).toBe('changed_summary, {"count":1}'); expect(disable1.classList).toContain('disabled-section'); + expect(disable1_element.disabled).toBe(true); expect(disable2.classList).toContain('disabled-section'); + expect(disable2_element.disabled).toBe(true); // Record 1: Second field changed input1b.value = 'updated1b'; @@ -145,7 +149,9 @@ describe("BulkFormController", () => { expect(actions.classList).not.toContain('hidden'); expect(changed_summary.textContent).toBe('changed_summary, {"count":1}'); expect(disable1.classList).toContain('disabled-section'); + expect(disable1_element.disabled).toBe(true); expect(disable2.classList).toContain('disabled-section'); + expect(disable2_element.disabled).toBe(true); // Record 2: Change back to original value input2.value = 'initial2'; @@ -154,7 +160,9 @@ describe("BulkFormController", () => { expect(actions.classList).toContain('hidden'); expect(changed_summary.textContent).toBe('changed_summary, {"count":0}'); expect(disable1.classList).not.toContain('disabled-section'); + expect(disable1_element.disabled).toBe(false); expect(disable2.classList).not.toContain('disabled-section'); + expect(disable2_element.disabled).toBe(false); }); }); });