Register only necessary elements

This should be more efficient.

Best viewed with whitespace ignored.
This commit is contained in:
David Cook
2026-03-17 16:43:29 +11:00
parent 827ba1990d
commit 2004934399
2 changed files with 13 additions and 7 deletions

View File

@@ -44,12 +44,17 @@ export default class BulkFormController extends Controller {
}
// Register any new elements (may be called by another controller after dynamically adding fields)
registerElements() {
const registeredElements = Object.values(this.recordElements).flat();
// Select only elements that haven't been registered yet
const newElements = Array.from(this.form.elements).filter(
(n) => !registeredElements.includes(n),
);
// May be called with array of elements to register, otherwise finds all un-registered elements.
registerElements(eventOrElements = null) {
let newElements;
if (Array.isArray(eventOrElements)) {
newElements = eventOrElements;
} else {
const registeredElements = Object.values(this.recordElements).flat();
// Select only elements that haven't been registered yet
newElements = Array.from(this.form.elements).filter((n) => !registeredElements.includes(n));
}
this.#registerElements(newElements);
}

View File

@@ -45,7 +45,8 @@ export default class VariantController extends Controller {
// Register with bulk products form to listen for changes. Used when dynamically appending variants.
if (this.hasBulkFormOutlet) {
this.bulkFormOutlet.registerElements();
const formElements = this.element.querySelectorAll("input, select, textarea, button");
this.bulkFormOutlet.registerElements(formElements);
}
}