@stimulus-library/controllers
Version:
A library of useful controllers for Stimulus
27 lines (26 loc) • 1.12 kB
JavaScript
import { BaseController } from "@stimulus-library/utilities";
export class RemoteFormController extends BaseController {
get _selector() {
return this.hasSelectorValue ? this.selectorValue : `[data-controller~="${this.identifier}"]`;
}
replace(event) {
const [data, _status, _xhr] = event.detail;
if (data instanceof Node) {
const newElement = data.querySelector(this._selector);
if (newElement == null) {
throw new Error(`expected new form DOM with [data-controller="${this.identifier}"] to be present in returned payload`);
}
const parentNode = this.el.parentNode;
if (parentNode == null) {
throw new Error("expected form to have a DOM parent, could not execute replaceChild");
}
parentNode.replaceChild(newElement, this.el);
this.dispatchEvent(newElement, this.eventName("replace"));
}
else {
console.log("Unknown", data);
}
}
}
RemoteFormController.targets = [];
RemoteFormController.values = { selector: String };