diff --git a/app/javascript/controllers/bridge/buttons_controller.js b/app/javascript/controllers/bridge/buttons_controller.js index df57117fa..47d09a158 100644 --- a/app/javascript/controllers/bridge/buttons_controller.js +++ b/app/javascript/controllers/bridge/buttons_controller.js @@ -5,10 +5,16 @@ export default class extends BridgeComponent { static component = "buttons" static targets = [ "button" ] - buttonTargetConnected(element) { + buttonTargetConnected() { this.notifyBridgeOfConnect() } + buttonTargetDisconnected() { + if (!this.#isControllerTearingDown()) { + this.notifyBridgeOfConnect() + } + } + notifyBridgeOfConnect() { const buttons = this.#enabledButtonTargets .map((target, index) => { @@ -30,4 +36,8 @@ export default class extends BridgeComponent { return this.buttonTargets .filter(target => !target.closest("[data-bridge-disabled]")) } + + #isControllerTearingDown() { + return !document.body.contains(this.element) + } } diff --git a/app/javascript/controllers/bridge/form_controller.js b/app/javascript/controllers/bridge/form_controller.js index 3051087e2..e1dba0ec0 100644 --- a/app/javascript/controllers/bridge/form_controller.js +++ b/app/javascript/controllers/bridge/form_controller.js @@ -17,6 +17,7 @@ export default class extends BridgeComponent { disconnect() { super.disconnect() + this.notifyBridgeOfDisonnect() this.submitObserver?.disconnect() } @@ -29,6 +30,10 @@ export default class extends BridgeComponent { }) } + notifyBridgeOfDisonnect() { + this.send("disconnect") + } + observeSubmitTarget() { this.submitObserver = new MutationObserver(() => { this.send(this.submitTarget.disabled ? "submitDisabled" : "submitEnabled") diff --git a/app/javascript/controllers/bridge/overflow_menu_controller.js b/app/javascript/controllers/bridge/overflow_menu_controller.js index dce37bd43..ba2045dc6 100644 --- a/app/javascript/controllers/bridge/overflow_menu_controller.js +++ b/app/javascript/controllers/bridge/overflow_menu_controller.js @@ -9,6 +9,12 @@ export default class extends BridgeComponent { this.notifyBridgeOfConnect() } + itemTargetDisconnected() { + if (!this.#isControllerTearingDown) { + this.notifyBridgeOfConnect() + } + } + notifyBridgeOfConnect() { const items = this.#enabledItemTargets .map((target, index) => { @@ -30,4 +36,8 @@ export default class extends BridgeComponent { return this.itemTargets .filter(target => !target.closest("[data-bridge-disabled]")) } + + #isControllerTearingDown() { + return !document.body.contains(this.element) + } } diff --git a/app/views/cards/container/_closure_buttons.html.erb b/app/views/cards/container/_closure_buttons.html.erb index 3a82ace0a..05e292315 100644 --- a/app/views/cards/container/_closure_buttons.html.erb +++ b/app/views/cards/container/_closure_buttons.html.erb @@ -1,12 +1,13 @@