forked from fixin.me/fixin.me
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>
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user