a11yist/app/javascript/controllers/unsaved_changes_controller.js

35 lines
1 KiB
JavaScript
Raw Normal View History

import { Controller } from "@hotwired/stimulus"
// Connects to data-controller="unsaved-changes"
export default class extends Controller {
2024-10-28 23:06:04 +01:00
originalFormData = null
connect() {
2024-10-28 23:06:04 +01:00
this.originalFormData = this.formState()
window.addEventListener("beforeunload", (event) => this.leavingPage(event))
document.addEventListener('turbo:before-visit', (e) => this.leavingPage(e));
this.element.addEventListener("submit", _ => this.originalFormData = this.formState())
}
2024-10-28 23:06:04 +01:00
formState() {
return JSON.stringify(new FormData(this.element).values().toArray().filter(x => x != ""))
}
leavingPage(event) {
2024-10-28 23:06:04 +01:00
if(this.originalFormData == this.formState()) {
return
}
if (event.type == "turbo:before-visit") {
if (!window.confirm("Es gibt ungespeicherte Änderungen! Wirklich verlassen?")) {
event.preventDefault()
}
} else {
if (!window.confirm("Es gibt ungespeicherte Änderungen! Wirklich verlassen?")) {
event.preventDefault()
}
return event.returnValue;
}
}
}