From 4aae2706940d189d60035e34f8e85a8af0e4de8d Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 10 Dec 2025 19:59:38 +0100 Subject: [PATCH] feat(tasks): move tasks between projects with drag and drop (#1945) Drag and drop tasks between projects from list and kanban views, with cross-project move handling and success notification. With visual drop-target highlighting when hovering a project during a drag. --- .../components/home/ProjectsNavigation.vue | 1 - .../home/ProjectsNavigationItem.vue | 74 +++- .../project/views/ProjectKanban.vue | 35 +- .../components/project/views/ProjectList.vue | 62 ++-- .../components/tasks/partials/KanbanCard.vue | 2 + .../tasks/partials/SingleTaskInProject.vue | 5 +- .../src/composables/useTaskDragToProject.ts | 112 ++++++ frontend/src/i18n/lang/en.json | 1 + frontend/src/stores/tasks.ts | 7 + .../tests/e2e/task/drag-to-project.spec.ts | 333 ++++++++++++++++++ frontend/tests/factories/saved_filter.ts | 20 ++ 11 files changed, 620 insertions(+), 32 deletions(-) create mode 100644 frontend/src/composables/useTaskDragToProject.ts create mode 100644 frontend/tests/e2e/task/drag-to-project.spec.ts create mode 100644 frontend/tests/factories/saved_filter.ts diff --git a/frontend/src/components/home/ProjectsNavigation.vue b/frontend/src/components/home/ProjectsNavigation.vue index 347f2f13f..813ad5d20 100644 --- a/frontend/src/components/home/ProjectsNavigation.vue +++ b/frontend/src/components/home/ProjectsNavigation.vue @@ -73,7 +73,6 @@ const projectUpdating = ref<{ [id: IProject['id']]: boolean }>({}) async function saveProjectPosition(e: SortableEvent) { drag.value = false - if (!e.newIndex && e.newIndex !== 0) return const projectsActive = availableProjects.value diff --git a/frontend/src/components/home/ProjectsNavigationItem.vue b/frontend/src/components/home/ProjectsNavigationItem.vue index e634054ea..532425688 100644 --- a/frontend/src/components/home/ProjectsNavigationItem.vue +++ b/frontend/src/components/home/ProjectsNavigationItem.vue @@ -1,7 +1,11 @@