Compare commits

...

1 Commits

Author SHA1 Message Date
887d669f80 Remove duplicate disable/enable logic and fetch() calls
readoutUnitChanged was manually setting disabled/aria-disabled/tabindex
attributes — duplicating Turbo.StreamElement.prototype.disableElement/
enableElement which already exists for this purpose. Replace with calls
to those methods.

Also replace fetch() in setDefaultUnit and drop with form.requestSubmit()
so Turbo handles CSRF, stream responses and lifecycle natively.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 13:08:21 +00:00

View File

@@ -82,40 +82,34 @@ window.detailsObserver = new MutationObserver((mutations) => {
function readoutUnitChanged(select) { function readoutUnitChanged(select) {
var button = select.closest('tr').querySelector('.set-default-unit'); var button = select.closest('tr').querySelector('.set-default-unit');
if (select.value && select.value !== select.dataset.defaultUnitId) { if (select.value && select.value !== select.dataset.defaultUnitId) {
button.removeAttribute('disabled'); Turbo.StreamElement.prototype.enableElement(button);
button.removeAttribute('aria-disabled');
button.removeAttribute('tabindex');
} else { } else {
button.setAttribute('disabled', 'disabled'); Turbo.StreamElement.prototype.disableElement(button);
button.setAttribute('aria-disabled', 'true');
button.setAttribute('tabindex', '-1');
} }
} }
window.readoutUnitChanged = readoutUnitChanged window.readoutUnitChanged = readoutUnitChanged
function setDefaultUnit(button) { function setDefaultUnit(button) {
var select = button.closest('tr').querySelector('select[data-default-unit-id]'); var select = button.closest('tr').querySelector('select[data-default-unit-id]');
var params = new URLSearchParams(); var form = document.createElement('form');
params.append('quantity[default_unit_id]', select.value); form.action = button.dataset.path;
form.method = 'post';
fetch(button.dataset.path, { form.dataset.turboStream = 'true';
body: params, var methodInput = document.createElement('input');
headers: { methodInput.type = 'hidden'; methodInput.name = '_method'; methodInput.value = 'patch';
'Accept': 'text/vnd.turbo-stream.html', var unitInput = document.createElement('input');
'X-CSRF-Token': document.head.querySelector('meta[name=csrf-token]').content, unitInput.type = 'hidden'; unitInput.name = 'quantity[default_unit_id]'; unitInput.value = select.value;
'X-Requested-With': 'XMLHttpRequest' form.appendChild(methodInput);
}, form.appendChild(unitInput);
method: 'PATCH' form.addEventListener('turbo:submit-end', function(event) {
}) if (event.detail.success) {
.then(response => {
if (response.ok) {
select.dataset.defaultUnitId = select.value; select.dataset.defaultUnitId = select.value;
readoutUnitChanged(select); readoutUnitChanged(select);
} }
return response.text(); form.remove();
}) });
.then(html => Turbo.renderStreamMessage(html)) document.body.appendChild(form);
.catch(err => console.error('setDefaultUnit failed:', err)); form.requestSubmit();
} }
window.setDefaultUnit = setDefaultUnit window.setDefaultUnit = setDefaultUnit
@@ -288,22 +282,17 @@ window.dragEnd = dragEnd
function drop(event) { function drop(event) {
event.preventDefault() event.preventDefault()
var idParam = event.currentTarget.getAttribute("data-drop-id-param")
var params = new URLSearchParams()
var id_param = event.currentTarget.getAttribute("data-drop-id-param")
var id = event.currentTarget.getAttribute("data-drop-id").split("_").pop() var id = event.currentTarget.getAttribute("data-drop-id").split("_").pop()
params.append(id_param, id) var form = document.createElement('form');
form.action = event.dataTransfer.getData("text/plain");
fetch(event.dataTransfer.getData("text/plain"), { form.method = 'post';
body: params, form.dataset.turboStream = 'true';
headers: { var input = document.createElement('input');
"Accept": "text/vnd.turbo-stream.html", input.type = 'hidden'; input.name = idParam; input.value = id;
"X-CSRF-Token": document.head.querySelector("meta[name=csrf-token]").content, form.appendChild(input);
"X-Requested-With": "XMLHttpRequest" form.addEventListener('turbo:submit-end', function() { form.remove(); });
}, document.body.appendChild(form);
method: "POST" form.requestSubmit();
})
.then(response => response.text())
.then(html => Turbo.renderStreamMessage(html))
} }
window.drop = drop window.drop = drop