forked from fixin.me/fixin.me
Replace render_turbo_stream cancel handlers with form#cancel Stimulus action
Add cancel() method to form_controller that handles all close cases: - tabular forms (<tr>): removes inner form, re-enables link, shows hidden row - measurements create form: removes self, enables trigger link, shows no-items Data attributes already present on controller elements (data-form, data-link, data-hidden-row) drive the behaviour. Two extra attributes on the create form (data-cancel-enable, data-cancel-show) cover the non-tabular case. Delete now-unused _form_close and _edit_form_close partial templates. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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: <tr> wraps a separate <form>)
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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'} %>
|
||||
</td>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<%= turbo_stream.close_form row %>
|
||||
<%= turbo_stream.update :flashes %>
|
||||
@@ -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'} %>
|
||||
</td>
|
||||
<% end %>
|
||||
</tbody>
|
||||
|
||||
@@ -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| %>
|
||||
|
||||
<table class="items-table center">
|
||||
<tbody id="readouts">
|
||||
@@ -34,6 +36,6 @@
|
||||
<div class="flex reverse">
|
||||
<%= 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'} %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<%= turbo_stream.update :flashes %>
|
||||
<%= turbo_stream.remove :measurement_form %>
|
||||
<%= turbo_stream.show :no_items -%>
|
||||
<%= turbo_stream.enable :new_measurement_link -%>
|
||||
@@ -18,7 +18,7 @@
|
||||
<td class="flex">
|
||||
<%= 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'} %>
|
||||
</td>
|
||||
<td></td>
|
||||
<% end %>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<%= turbo_stream.close_form row %>
|
||||
<%= turbo_stream.update :flashes %>
|
||||
@@ -16,7 +16,7 @@
|
||||
<td class="flex">
|
||||
<%= 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'} %>
|
||||
</td>
|
||||
<td></td>
|
||||
<% end %>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<%= turbo_stream.close_form row %>
|
||||
<%= turbo_stream.update :flashes %>
|
||||
Reference in New Issue
Block a user