Possibili opzioni:
📌 MIGLIORAMENTO: Drag & Drop posizione rami (Branch Tree)
✅ Stato attuale
- Il sistema aggiorna la posizione dei rami con una richiesta
GET
e redirect:/branches/1/updateposition?parent_id=2&position=1&id=5
- Funziona bene in fase di sviluppo e test.
- UX non ottimale: ricarica l’intera pagina, più consumo di banda e tempo.
🎯 Obiettivo futuro
Aggiornare il sistema per:
- Evitare reload pagina.
- Inviare la modifica in background con
POST
. - Risparmiare risorse server/client.
- UX più moderna e reattiva.
🔧 Opzione 1 – fetch()
con POST
asincrono
✅ Frontend (JavaScript)
fetch('/branches/updateposition', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': getCSRFToken()
},
body: JSON.stringify({
id: itemId,
parent_id: parentId,
position: newPosition
})
}).then(response => {
if (response.ok) window.location.reload(); // oppure aggiorna il DOM
});
Helper per CSRF token:
function getCSRFToken() {
return document.querySelector('meta[name="csrf-token"]').getAttribute('content');
}
✅ Backend (Rails)
Controller:
def updateposition
branch = Branch.find(params[:id])
branch.update(parent_id: params[:parent_id], position: params[:position])
respond_to do |format|
format.html { redirect_to branches_path, notice: "Posizione aggiornata" }
format.json { render json: { status: "ok" } }
end
end
Rotta:
post 'branches/updateposition', to: 'branches#updateposition'
🚀 Opzione 2 – Turbo Stream (Hotwire Rails)
Requisiti:
- Hotwire installato (Turbo, Stimulus)
Controller:
format.turbo_stream
Partial: app/views/branches/updateposition.turbo_stream.erb
Form:
<%= form_with url: updateposition_branches_path, method: :post, data: { turbo: true } do |f| %>
...
<% end %>
📅 Quando fare lo switch
- Quando aumentano gli utenti
- Quando serve maggiore fluidità UX
- Quando misuri problemi di performance (CPU, traffico, slow UX)