From f440007efccdf47c3936270126fefd3886d185c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Salavisa?= Date: Fri, 17 Apr 2026 18:27:10 +0100 Subject: [PATCH] feat: add confirmation dialog before archiving tasks (#621) --- apps/web/components/kanban-card.tsx | 50 ++++++++------- .../task/archive-confirm-dialog.tsx | 62 +++++++++++++++++++ .../mobile/session-task-switcher-sheet.tsx | 56 ++++++++++++----- .../components/task/task-session-sidebar.tsx | 57 +++++++++++++---- apps/web/e2e/pages/session-page.ts | 8 ++- 5 files changed, 183 insertions(+), 50 deletions(-) create mode 100644 apps/web/components/task/archive-confirm-dialog.tsx diff --git a/apps/web/components/kanban-card.tsx b/apps/web/components/kanban-card.tsx index 642762f821..1b61013b48 100644 --- a/apps/web/components/kanban-card.tsx +++ b/apps/web/components/kanban-card.tsx @@ -41,6 +41,7 @@ import { needsAction } from "@/lib/utils/needs-action"; import { useAppStore } from "@/components/state-provider"; import { PRTaskIcon } from "@/components/github/pr-task-icon"; import { RemoteCloudTooltip } from "@/components/task/remote-cloud-tooltip"; +import { ArchiveConfirmDialog } from "@/components/task/archive-confirm-dialog"; export interface Task { id: string; @@ -341,18 +342,7 @@ function MoveToSubmenu({ ); } -function KanbanCardMenu({ - task, - effectiveMenuOpen, - setMenuOpen, - isDeleting, - isArchiving, - onEdit, - onDelete, - onArchive, - onMove, - steps, -}: { +type KanbanCardMenuProps = { task: Task; effectiveMenuOpen: boolean; setMenuOpen: (open: boolean) => void; @@ -363,8 +353,13 @@ function KanbanCardMenu({ onArchive?: (task: Task) => void; onMove?: (task: Task, targetStepId: string) => void; steps?: WorkflowStep[]; -}) { +}; + +function KanbanCardMenu(props: KanbanCardMenuProps) { + const { task, effectiveMenuOpen, setMenuOpen, isDeleting, isArchiving } = props; + const { onEdit, onDelete, onArchive, onMove, steps } = props; const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); + const [showArchiveConfirm, setShowArchiveConfirm] = useState(false); const isProcessing = isDeleting || isArchiving; return ( @@ -380,8 +375,8 @@ function KanbanCardMenu({