36 lines
No EOL
1.1 KiB
JavaScript
36 lines
No EOL
1.1 KiB
JavaScript
import { Controller } from "@hotwired/stimulus"
|
|
|
|
// Connects to data-controller="unsaved-changes"
|
|
export default class extends Controller {
|
|
originalFormData = null
|
|
|
|
connect() {
|
|
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())
|
|
}
|
|
|
|
formState() {
|
|
return JSON.stringify(Array.from(new FormData(this.element).entries())
|
|
.filter(x => x[1] != ""))
|
|
}
|
|
|
|
leavingPage(event) {
|
|
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;
|
|
}
|
|
}
|
|
} |