diff --git a/app/javascript/controllers/bridge/form_controller.js b/app/javascript/controllers/bridge/form_controller.js index e1dba0ec0..dcd056330 100644 --- a/app/javascript/controllers/bridge/form_controller.js +++ b/app/javascript/controllers/bridge/form_controller.js @@ -3,31 +3,38 @@ import { BridgeElement } from "@hotwired/hotwire-native-bridge" export default class extends BridgeComponent { static component = "form" - static targets = [ "submit" ] + static targets = [ "submit", "cancel" ] static values = { submitTitle: String } - connect() { - super.connect() - - if (this.hasSubmitTarget) { - this.notifyBridgeOfConnect() - this.observeSubmitTarget() - } + submitTargetConnected() { + this.notifyBridgeOfConnect() + this.observeSubmitTarget() } - disconnect() { - super.disconnect() + submitTargetDisconnected() { this.notifyBridgeOfDisonnect() this.submitObserver?.disconnect() } notifyBridgeOfConnect() { - const element = new BridgeElement(this.submitTarget) - const submitButton = { title: element.title } + const submitElement = new BridgeElement(this.submitTarget) + const cancelElement = this.hasCancelTarget ? new BridgeElement(this.cancelTarget) : null - this.send("connect", { submitButton }, () => { - this.submitTarget.click() - }) + const submitButton = { title: submitElement.title } + const cancelButton = cancelElement ? { title: cancelElement.title } : null + + this.send("connect", { submitButton, cancelButton }, message => this.receive(message)) + } + + receive(message) { + switch (message.event) { + case "submit": + this.submitTarget.click() + break + case "cancel": + this.cancelTarget.click() + break + } } notifyBridgeOfDisonnect() { diff --git a/app/views/cards/_container.html.erb b/app/views/cards/_container.html.erb index d66996f96..e000fa986 100644 --- a/app/views/cards/_container.html.erb +++ b/app/views/cards/_container.html.erb @@ -1,4 +1,4 @@ -
+
<% cache card do %>
<%= render "cards/container/gild", card: card if card.published? && !card.closed? %> diff --git a/app/views/cards/container/_save_button.html.erb b/app/views/cards/container/_save_button.html.erb index d83e9cfce..6ac416aa3 100644 --- a/app/views/cards/container/_save_button.html.erb +++ b/app/views/cards/container/_save_button.html.erb @@ -1,4 +1,4 @@ -
+
<%= button_tag type: :submit, form: dom_id(card, :edit_form), class: "btn borderless", title: "Save changes (#{ hotkey_label(["ctrl", "enter"]) })", data: { controller: "hotkey", bridge__form_target: "submit", action: "keydown.ctrl+enter@document->hotkey#click keydown.meta+enter@document->hotkey#click" } do %> diff --git a/app/views/cards/edit.html.erb b/app/views/cards/edit.html.erb index 21a35d09f..a7efd21fe 100644 --- a/app/views/cards/edit.html.erb +++ b/app/views/cards/edit.html.erb @@ -22,6 +22,7 @@ <%= general_prompts(@card.board) %> <% end %> - <%= link_to "Close editor and discard changes", @card, data: { form_target: "cancel" }, hidden: true %> + <%= link_to "Close editor and discard changes", @card, + data: { form_target: "cancel", bridge__form_target: "cancel", bridge_title: "Cancel" }, hidden: true %> <% end %> <% end %>