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