diff --git a/app/javascript/controllers/form_controller.js b/app/javascript/controllers/form_controller.js index 2f92cf5..8c74875 100644 --- a/app/javascript/controllers/form_controller.js +++ b/app/javascript/controllers/form_controller.js @@ -22,4 +22,30 @@ export default class extends Controller { event.preventDefault() } } + + cancel(event) { + event.preventDefault() + const el = this.element + + // Move focus to next open form if this one had focus + const focused = document.activeElement + if (!focused || focused === document.body || el.contains(focused)) { + const next = el.parentElement?.querySelector(`#${el.id} ~ tr:has([autofocus])`) + ?? el.parentElement?.querySelector("tr:has([autofocus])") + next?.querySelector("[autofocus]")?.focus() + } + + // Remove associated inner form element (tabular: wraps a separate
) + document.getElementById(el.dataset.form)?.remove() + + // Re-enable trigger link + const enableId = el.dataset.link ?? el.dataset.cancelEnable + if (enableId) Turbo.StreamElement.prototype.enableElement(document.getElementById(enableId)) + + // Show hidden row (tabular forms) or no-items placeholder (create form) + document.getElementById(el.dataset.hiddenRow)?.removeAttribute("style") + document.getElementById(el.dataset.cancelShow)?.style.removeProperty("display") + + el.remove() + } } diff --git a/app/views/measurements/_edit_form.html.erb b/app/views/measurements/_edit_form.html.erb index a4770f0..bcae266 100644 --- a/app/views/measurements/_edit_form.html.erb +++ b/app/views/measurements/_edit_form.html.erb @@ -19,7 +19,7 @@ <%= form.button %> <%= image_link_to t(:cancel), "close-outline", measurements_path, class: 'dangerous', name: :cancel, - onclick: render_turbo_stream('edit_form_close', {row: row}) %> + data: {action: 'click->form#cancel'} %> <% end %> <% end %> diff --git a/app/views/measurements/_edit_form_close.html.erb b/app/views/measurements/_edit_form_close.html.erb deleted file mode 100644 index e79ea3c..0000000 --- a/app/views/measurements/_edit_form_close.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -<%= turbo_stream.close_form row %> -<%= turbo_stream.update :flashes %> diff --git a/app/views/measurements/_edit_panel.html.erb b/app/views/measurements/_edit_panel.html.erb index dd08eb9..15fa85c 100644 --- a/app/views/measurements/_edit_panel.html.erb +++ b/app/views/measurements/_edit_panel.html.erb @@ -26,7 +26,7 @@ <%= form.button %> <%= image_link_to t(:cancel), "close-outline", measurements_path, class: 'dangerous', name: :cancel, - onclick: render_turbo_stream('edit_form_close', {row: row}) %> + data: {action: 'click->form#cancel'} %> <% end %> diff --git a/app/views/measurements/_form.html.erb b/app/views/measurements/_form.html.erb index 732c5ca..e347527 100644 --- a/app/views/measurements/_form.html.erb +++ b/app/views/measurements/_form.html.erb @@ -1,6 +1,8 @@ <%= tabular_form_with model: Measurement.new, id: :measurement_form, class: 'topside-area flex vertical center', - html: {data: {controller: 'form', action: 'keydown->form#processKey'}} do |form| %> + html: {data: {controller: 'form', action: 'keydown->form#processKey', + cancel_enable: 'new_measurement_link', + cancel_show: 'no_items'}} do |form| %> @@ -34,6 +36,6 @@
<%= form.button id: :create_measurement_button, disabled: true -%> <%= image_link_to t(:cancel), "close-outline", measurements_path, name: :cancel, - class: 'dangerous', onclick: render_turbo_stream('form_close') %> + class: 'dangerous', data: {action: 'click->form#cancel'} %>
<% end %> diff --git a/app/views/measurements/_form_close.html.erb b/app/views/measurements/_form_close.html.erb deleted file mode 100644 index 78511d4..0000000 --- a/app/views/measurements/_form_close.html.erb +++ /dev/null @@ -1,4 +0,0 @@ -<%= turbo_stream.update :flashes %> -<%= turbo_stream.remove :measurement_form %> -<%= turbo_stream.show :no_items -%> -<%= turbo_stream.enable :new_measurement_link -%> diff --git a/app/views/quantities/_form.html.erb b/app/views/quantities/_form.html.erb index 684cfd4..7ecc653 100644 --- a/app/views/quantities/_form.html.erb +++ b/app/views/quantities/_form.html.erb @@ -18,7 +18,7 @@ <% end %> diff --git a/app/views/quantities/_form_close.html.erb b/app/views/quantities/_form_close.html.erb deleted file mode 100644 index e79ea3c..0000000 --- a/app/views/quantities/_form_close.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -<%= turbo_stream.close_form row %> -<%= turbo_stream.update :flashes %> diff --git a/app/views/units/_form.html.erb b/app/views/units/_form.html.erb index 15485c6..4f2d179 100644 --- a/app/views/units/_form.html.erb +++ b/app/views/units/_form.html.erb @@ -16,7 +16,7 @@ <% end %> diff --git a/app/views/units/_form_close.html.erb b/app/views/units/_form_close.html.erb deleted file mode 100644 index e79ea3c..0000000 --- a/app/views/units/_form_close.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -<%= turbo_stream.close_form row %> -<%= turbo_stream.update :flashes %>
<%= form.button %> <%= image_link_to t(:cancel), "close-outline", quantities_path, class: 'dangerous', - name: :cancel, onclick: render_turbo_stream('form_close', {row: row}) %> + name: :cancel, data: {action: 'click->form#cancel'} %> <%= form.button %> <%= image_link_to t(:cancel), "close-outline", units_path, class: 'dangerous', - name: :cancel, onclick: render_turbo_stream('form_close', {row: row}) %> + name: :cancel, data: {action: 'click->form#cancel'} %>