export class EditPage extends HTMLElement {
connectedCallback() {
setTimeout(() => {
const form = this.querySelector("form");
if (form && typeof window.FormLoad === "function") {
window.FormLoad(form);
}
this._setupDelete();
}, 0);
}
_setupDelete() {
const form = this.querySelector("form");
if (!form) {
return;
}
const deleteEndpoint = form.getAttribute("data-delete-endpoint");
if (!deleteEndpoint) {
return;
}
const dialog = this.querySelector("[data-role='edit-delete-dialog']");
const deleteButton = this.querySelector("[data-role='edit-delete']");
const confirmButton = this.querySelector("[data-role='edit-delete-confirm']");
const cancelButton = this.querySelector("[data-role='edit-delete-cancel']");
if (!dialog || !deleteButton || !confirmButton || !cancelButton) {
return;
}
deleteButton.addEventListener("click", (event) => {
event.preventDefault();
if (typeof dialog.showModal === "function") {
dialog.showModal();
}
});
const closeDialog = (event) => {
if (event) {
event.preventDefault();
}
if (dialog.open) {
dialog.close();
}
};
cancelButton.addEventListener("click", closeDialog);
dialog.addEventListener("cancel", closeDialog);
confirmButton.addEventListener("click", async (event) => {
event.preventDefault();
closeDialog();
const formData = new FormData(form);
const payload = {
csrf_token: formData.get("csrf_token") || "",
last_edited: formData.get("last_edited") || "",
};
const response = await fetch(deleteEndpoint, {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify(payload),
});
if (!response.ok) {
return;
}
const data = await response.json().catch(() => null);
const redirect = data?.redirect || "/";
window.location.assign(redirect);
});
}
}