Improve unsaved-changes controller
Some checks failed
/ Run tests (push) Failing after 16s
/ Run system tests (push) Failing after 15s
/ Build, push and deploy image (push) Has been skipped

This commit is contained in:
david 2024-10-28 23:06:04 +01:00
parent 4f8b18ca25
commit bd36984edf

View file

@ -2,29 +2,25 @@ import { Controller } from "@hotwired/stimulus"
// Connects to data-controller="unsaved-changes" // Connects to data-controller="unsaved-changes"
export default class extends Controller { export default class extends Controller {
changed = false originalFormData = null
connect() { connect() {
window.addEventListener("beforeunload", (event) => { this.originalFormData = this.formState()
this.leavingPage(event);
}); window.addEventListener("beforeunload", (event) => this.leavingPage(event))
document.addEventListener('turbo:before-visit', (event) => { document.addEventListener('turbo:before-visit', (e) => this.leavingPage(e));
this.leavingPage(event); this.element.addEventListener("submit", _ => this.originalFormData = this.formState())
});
this.element.addEventListener("submit", (_) => {
this.changed = false
})
this.element.addEventListener("change", (_) => {
this.changed = true
})
} }
formState() {
return JSON.stringify(new FormData(this.element).values().toArray().filter(x => x != ""))
}
leavingPage(event) { leavingPage(event) {
if(!this.changed) { if(this.originalFormData == this.formState()) {
return return
} }
console.log("leavingPage", this.changed)
if (event.type == "turbo:before-visit") { if (event.type == "turbo:before-visit") {
if (!window.confirm("Es gibt ungespeicherte Änderungen! Wirklich verlassen?")) { if (!window.confirm("Es gibt ungespeicherte Änderungen! Wirklich verlassen?")) {
event.preventDefault() event.preventDefault()