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; } } }