diff --git a/app/javascript/controllers/auto_save_controller.js b/app/javascript/controllers/auto_save_controller.js
index 0323ab9adc..589ff5c84a 100644
--- a/app/javascript/controllers/auto_save_controller.js
+++ b/app/javascript/controllers/auto_save_controller.js
@@ -5,6 +5,7 @@ const AUTOSAVE_INTERVAL = 3000
export default class extends Controller {
#timer
+ #savePromise
// Lifecycle
@@ -17,6 +18,8 @@ export default class extends Controller {
async submit() {
if (this.#dirty) {
await this.#save()
+ } else if (this.#savePromise) {
+ await this.#savePromise
}
}
@@ -34,7 +37,12 @@ export default class extends Controller {
async #save() {
this.#resetTimer()
- await submitForm(this.element)
+ this.#savePromise = submitForm(this.element)
+ try {
+ await this.#savePromise
+ } finally {
+ this.#savePromise = null
+ }
}
#resetTimer() {
diff --git a/app/javascript/controllers/clicker_controller.js b/app/javascript/controllers/clicker_controller.js
index 6d35719425..91d1223870 100644
--- a/app/javascript/controllers/clicker_controller.js
+++ b/app/javascript/controllers/clicker_controller.js
@@ -3,8 +3,13 @@ import { nextFrame } from "helpers/timing_helpers";
export default class extends Controller {
static targets = [ "clickable" ]
+ static outlets = [ "auto-save" ]
async click() {
+ if (this.hasAutoSaveOutlet) {
+ await this.autoSaveOutlet.submit()
+ }
+
await nextFrame()
this.#clickable.click()
}
diff --git a/app/views/cards/container/footer/_create.html.erb b/app/views/cards/container/footer/_create.html.erb
index 4e5a83e205..9df6a7ff11 100644
--- a/app/views/cards/container/footer/_create.html.erb
+++ b/app/views/cards/container/footer/_create.html.erb
@@ -3,13 +3,15 @@
<%= button_to card_publish_path(card), name: "creation_type", value: "add", class: "btn",
title: "Create card (#{ hotkey_label(["ctrl", "enter"]) })",
form: { data: { controller: "form bridge--form" } },
- data: { form_target: "submit", bridge__form_target: "submit", controller: "clicker", action: "keydown.ctrl+enter@document->clicker#click keydown.meta+enter@document->clicker#click" } do %>
+ data: { form_target: "submit", bridge__form_target: "submit", controller: "clicker", clicker_auto_save_outlet: "#card_form",
+ action: "keydown.ctrl+enter@document->clicker#click keydown.meta+enter@document->clicker#click" } do %>
Create card
<% end %>
<%= button_to card_publish_path(card), method: :post, class: "btn btn--reversed", name: "creation_type", value: "add_another",
title: "Create and add another (#{ hotkey_label(["ctrl", "shift", "enter"]) })", form: { data: { controller: "form" } },
- data: { form_target: "submit", controller: "clicker", action: "keydown.ctrl+shift+enter@document->clicker#click keydown.meta+shift+enter@document->clicker#click" } do %>
+ data: { form_target: "submit", controller: "clicker", clicker_auto_save_outlet: "#card_form",
+ action: "keydown.ctrl+shift+enter@document->clicker#click keydown.meta+shift+enter@document->clicker#click" } do %>
Create and add another
<% end %>