diff --git a/app/javascript/controllers/bridge/buttons_controller.js b/app/javascript/controllers/bridge/buttons_controller.js index 47d09a158..3e3aa4a60 100644 --- a/app/javascript/controllers/bridge/buttons_controller.js +++ b/app/javascript/controllers/bridge/buttons_controller.js @@ -5,6 +5,26 @@ export default class extends BridgeComponent { static component = "buttons" static targets = [ "button" ] + connect() { + super.connect() + + if (!this.beforeUnloadHandler) { + this.beforeUnloadHandler = this.handleBeforeUnload.bind(this) + } + + window.addEventListener("beforeunload", this.beforeUnloadHandler) + } + + disconnect() { + super.disconnect() + + if (this.beforeUnloadHandler) { + window.removeEventListener("beforeunload", this.beforeUnloadHandler) + } + + this.notifyBridgeOfDisconnect() + } + buttonTargetConnected() { this.notifyBridgeOfConnect() } @@ -27,6 +47,14 @@ export default class extends BridgeComponent { }) } + notifyBridgeOfDisconnect() { + this.send("disconnect") + } + + handleBeforeUnload() { + this.notifyBridgeOfDisconnect() + } + #clickButton(message) { const selectedIndex = message.data.selectedIndex this.#enabledButtonTargets[selectedIndex].click() diff --git a/app/javascript/controllers/bridge/form_controller.js b/app/javascript/controllers/bridge/form_controller.js index a3c780e62..4ebb3022c 100644 --- a/app/javascript/controllers/bridge/form_controller.js +++ b/app/javascript/controllers/bridge/form_controller.js @@ -6,13 +6,31 @@ export default class extends BridgeComponent { static targets = [ "submit", "cancel" ] static values = { submitTitle: String } + connect() { + super.connect() + + if (!this.beforeUnloadHandler) { + this.beforeUnloadHandler = this.handleBeforeUnload.bind(this) + } + + window.addEventListener("beforeunload", this.beforeUnloadHandler) + } + + disconnect() { + super.disconnect() + + if (this.beforeUnloadHandler) { + window.removeEventListener("beforeunload", this.beforeUnloadHandler) + } + } + submitTargetConnected() { this.notifyBridgeOfConnect() this.#observeSubmitTarget() } submitTargetDisconnected() { - this.notifyBridgeOfDisonnect() + this.notifyBridgeOfDisconnect() this.submitObserver?.disconnect() } @@ -37,7 +55,7 @@ export default class extends BridgeComponent { } } - notifyBridgeOfDisonnect() { + notifyBridgeOfDisconnect() { this.send("disconnect") } @@ -49,6 +67,10 @@ export default class extends BridgeComponent { this.send("submitEnd") } + handleBeforeUnload() { + this.notifyBridgeOfDisconnect() + } + #observeSubmitTarget() { this.submitObserver = new MutationObserver(() => { this.send(this.submitTarget.disabled ? "submitDisabled" : "submitEnabled") diff --git a/app/views/cards/container/_closure.html.erb b/app/views/cards/container/_closure.html.erb index 1afbaaaac..6da99c7ee 100644 --- a/app/views/cards/container/_closure.html.erb +++ b/app/views/cards/container/_closure.html.erb @@ -5,6 +5,7 @@ <%= button_to card_closure_path(card), method: :delete, class: "btn btn--plain borderless fill-transparent" do %> Undo <% end %> + <%= bridged_button_to_board(card.board) %> <% else %>