diff --git a/apps/todo/apps/web/src/lib/components/TaskItem.svelte b/apps/todo/apps/web/src/lib/components/TaskItem.svelte index 03988a10c..4198015aa 100644 --- a/apps/todo/apps/web/src/lib/components/TaskItem.svelte +++ b/apps/todo/apps/web/src/lib/components/TaskItem.svelte @@ -301,8 +301,13 @@ >
- - + + + + + + +
@@ -706,9 +711,11 @@ flex-shrink: 0; display: flex; align-items: center; - padding: 0.25rem; - margin-left: -0.125rem; + justify-content: center; + padding: 0.5rem 0.375rem; + margin-left: -0.25rem; border-radius: 0.25rem; + min-height: 2rem; } .task-item:hover .drag-handle { @@ -730,8 +737,8 @@ } .drag-icon { - width: 1rem; - height: 1rem; + width: 1.25rem; + height: 1.25rem; color: currentColor; } diff --git a/apps/todo/apps/web/src/lib/components/TaskList.svelte b/apps/todo/apps/web/src/lib/components/TaskList.svelte index 739c99e74..026d317c0 100644 --- a/apps/todo/apps/web/src/lib/components/TaskList.svelte +++ b/apps/todo/apps/web/src/lib/components/TaskList.svelte @@ -197,6 +197,10 @@ // Task moved FROM another section TO this section onTaskDrop(movedTaskId, dropTargetDate); } + } else if (wasInThisList) { + // Task reordered within this list - persist the new order + const taskIds = newItems.map((t) => t.id); + tasksStore.reorderTasks(taskIds); } // Update local state and sync lastTaskKey to prevent $effect from reverting diff --git a/apps/todo/apps/web/src/lib/stores/tasks.svelte.ts b/apps/todo/apps/web/src/lib/stores/tasks.svelte.ts index a2a9dcf0f..dc21a6675 100644 --- a/apps/todo/apps/web/src/lib/stores/tasks.svelte.ts +++ b/apps/todo/apps/web/src/lib/stores/tasks.svelte.ts @@ -452,17 +452,19 @@ export const tasksStore = { */ async reorderTasks(taskIds: string[]) { error = null; + const previousTasks = [...tasks]; try { - await tasksApi.reorderTasks(taskIds); - // Update local order + // Optimistic update - set new order values tasks = tasks.map((t) => { const newOrder = taskIds.indexOf(t.id); return newOrder !== -1 ? { ...t, order: newOrder } : t; }); + await tasksApi.reorderTasks(taskIds); } catch (e) { + // Rollback on error + tasks = previousTasks; error = e instanceof Error ? e.message : 'Failed to reorder tasks'; console.error('Failed to reorder tasks:', e); - throw e; } },