@@ -270,7 +270,8 @@ function renderBoard() {
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ status: 'Done' }),
|
||||
});
|
||||
loadTasks();
|
||||
initDragAndDrop();
|
||||
loadTasks();
|
||||
});
|
||||
|
||||
cardsEl.appendChild(cardEl);
|
||||
@@ -328,11 +329,13 @@ function initTasksPage() {
|
||||
});
|
||||
|
||||
e.target.reset();
|
||||
loadTasks();
|
||||
initDragAndDrop();
|
||||
loadTasks();
|
||||
});
|
||||
|
||||
initTaskFilters();
|
||||
populateAgentDropdown();
|
||||
initDragAndDrop();
|
||||
loadTasks();
|
||||
}
|
||||
|
||||
@@ -1375,3 +1378,69 @@ function renderGiteaActivity() {
|
||||
</div>
|
||||
`).join('');
|
||||
}
|
||||
|
||||
// ============ DRAG AND DROP ============
|
||||
let draggedTask = null;
|
||||
|
||||
function initDragAndDrop() {
|
||||
const board = document.getElementById('board');
|
||||
if (!board) return;
|
||||
|
||||
// Add drag listeners to columns
|
||||
document.querySelectorAll('.column').forEach(column => {
|
||||
column.addEventListener('dragover', handleDragOver);
|
||||
column.addEventListener('drop', handleDrop);
|
||||
column.addEventListener('dragleave', handleDragLeave);
|
||||
});
|
||||
}
|
||||
|
||||
function handleDragOver(e) {
|
||||
e.preventDefault();
|
||||
e.currentTarget.classList.add('drag-over');
|
||||
}
|
||||
|
||||
function handleDragLeave(e) {
|
||||
e.currentTarget.classList.remove('drag-over');
|
||||
}
|
||||
|
||||
async function handleDrop(e) {
|
||||
e.preventDefault();
|
||||
const column = e.currentTarget;
|
||||
column.classList.remove('drag-over');
|
||||
|
||||
if (!draggedTask) return;
|
||||
|
||||
const newStatus = column.dataset.status;
|
||||
if (newStatus === draggedTask.status) return;
|
||||
|
||||
// Update task status via API
|
||||
try {
|
||||
await fetch(`/api/tasks/${draggedTask.id}`, {
|
||||
method: 'PATCH',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ status: newStatus })
|
||||
});
|
||||
|
||||
// Reload tasks
|
||||
await initDragAndDrop();
|
||||
loadTasks();
|
||||
} catch (err) {
|
||||
console.error('Failed to update task:', err);
|
||||
}
|
||||
|
||||
draggedTask = null;
|
||||
}
|
||||
|
||||
function makeTaskCardDraggable(cardEl, task) {
|
||||
cardEl.draggable = true;
|
||||
|
||||
cardEl.addEventListener('dragstart', (e) => {
|
||||
draggedTask = task;
|
||||
cardEl.classList.add('dragging');
|
||||
e.dataTransfer.effectAllowed = 'move';
|
||||
});
|
||||
|
||||
cardEl.addEventListener('dragend', () => {
|
||||
cardEl.classList.remove('dragging');
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user