diff --git a/frontend/pages/my-tasks.vue b/frontend/pages/my-tasks.vue index 1b9e851..fef4fcb 100644 --- a/frontend/pages/my-tasks.vue +++ b/frontend/pages/my-tasks.vue @@ -175,6 +175,44 @@ watch(selectedProjectId, () => { selectedGroupId.value = null }, { flush: 'sync' }) +// Drag & drop +const dragOverStatusId = ref(null) +const dragCounter = ref(0) + +function onDragEnter(id: number) { + dragCounter.value++ + dragOverStatusId.value = id +} + +function onDragLeave() { + dragCounter.value-- + if (dragCounter.value === 0) { + dragOverStatusId.value = null + } +} + +function onDrop(event: DragEvent) { + dragCounter.value = 0 + dragOverStatusId.value = null + return Number(event.dataTransfer!.getData('text/plain')) +} + +async function onDropStatus(event: DragEvent, status: TaskStatus) { + const taskId = onDrop(event) + const task = tasks.value.find(t => t.id === taskId) + if (!task || task.status?.id === status.id) return + task.status = status + await taskService.update(taskId, { status: `/api/task_statuses/${status.id}` }) +} + +async function onDropBacklog(event: DragEvent) { + const taskId = onDrop(event) + const task = tasks.value.find(t => t.id === taskId) + if (!task || !task.status) return + task.status = null + await taskService.update(taskId, { status: null }) +} + // Modal function openTaskEdit(task: Task) { selectedTask.value = task @@ -222,42 +260,54 @@ onMounted(() => { :options="projectOptions" label="Projet" :empty-option-label="$t('myTasks.allProjects')" - min-width="w-48" + min-width="!w-40" + text-field="text-sm" + text-value="text-sm" /> @@ -266,7 +316,12 @@ onMounted(() => {
{{ $t('myTasks.backlog') }} ({{ backlogTasks.length }}) @@ -285,7 +340,12 @@ onMounted(() => {