From dfa81b040550ab9a628a1a00efc5ce95a5992df1 Mon Sep 17 00:00:00 2001 From: Brad Groux Date: Sun, 1 Feb 2026 15:25:19 -0600 Subject: [PATCH] fix: add Move confirm button to bulk actions (two-step flow) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously the 'Move to...' dropdown fired immediately on selection with no confirm step. Now it's a two-step flow: pick target status from dropdown, then click 'Move' button to confirm — consistent with Archive and Delete. Fixes task_20260201_NqmOuf --- web/src/components/board/BulkActionsBar.tsx | 32 +++++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/web/src/components/board/BulkActionsBar.tsx b/web/src/components/board/BulkActionsBar.tsx index 8e0a05d3..90929944 100644 --- a/web/src/components/board/BulkActionsBar.tsx +++ b/web/src/components/board/BulkActionsBar.tsx @@ -64,6 +64,7 @@ export function BulkActionsBar({ tasks }: BulkActionsBarProps) { const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); const [isProcessing, setIsProcessing] = useState(false); + const [moveTarget, setMoveTarget] = useState(null); // Group task IDs by status const taskIdsByStatus = useMemo(() => { @@ -109,13 +110,17 @@ export function BulkActionsBar({ tasks }: BulkActionsBarProps) { return someSelected && !allSelectedInGroup; }; - const handleMoveToStatus = async (status: TaskStatus) => { + const handleMoveToStatus = async () => { + if (!moveTarget) return; setIsProcessing(true); try { await Promise.all( - Array.from(selectedIds).map((id) => updateTask.mutateAsync({ id, input: { status } })) + Array.from(selectedIds).map((id) => + updateTask.mutateAsync({ id, input: { status: moveTarget } }) + ) ); clearSelection(); + setMoveTarget(null); } finally { setIsProcessing(false); } @@ -210,16 +215,20 @@ export function BulkActionsBar({ tasks }: BulkActionsBarProps) { {selectedCount > 0 && (
- {/* Move to status */} + {/* Move to status — two-step: pick target → confirm */} + {moveTarget && ( + + )} + {/* Archive */}