From 4f12ae02174eea33b08dee5248ef546a5f5f8ad5 Mon Sep 17 00:00:00 2001 From: Jared <865332676@qq.com> Date: Thu, 6 Aug 2026 11:57:04 +0800 Subject: [PATCH] fix(web): avoid Windows focus loss after team deletion --- .../src/hooks/workspace/useAgentController.ts | 4 -- .../TeamDetailPane/TeamDetailPane.tsx | 70 ++++++++++++++++++- .../tests/components/TeamDetailPane.test.tsx | 43 ++++++++++++ .../tests/hooks/useAgentController.test.tsx | 34 ++++++++- 4 files changed, 144 insertions(+), 7 deletions(-) create mode 100644 web/app/tests/components/TeamDetailPane.test.tsx diff --git a/web/app/src/hooks/workspace/useAgentController.ts b/web/app/src/hooks/workspace/useAgentController.ts index a6854cf3..5afe2397 100644 --- a/web/app/src/hooks/workspace/useAgentController.ts +++ b/web/app/src/hooks/workspace/useAgentController.ts @@ -2183,10 +2183,6 @@ export function useAgentController({ if (!teamID || teamActionBusy) { return false; } - const teamTitle = item ? displayTeam(item) : teamID; - if (!window.confirm(t("teamDeleteConfirm", { title: teamTitle }))) { - return false; - } setTeamActionBusy(true); setTeamActionError(""); try { diff --git a/web/app/src/pages/TeamPage/components/TeamDetailPane/TeamDetailPane.tsx b/web/app/src/pages/TeamPage/components/TeamDetailPane/TeamDetailPane.tsx index 30ec2b93..5d152943 100644 --- a/web/app/src/pages/TeamPage/components/TeamDetailPane/TeamDetailPane.tsx +++ b/web/app/src/pages/TeamPage/components/TeamDetailPane/TeamDetailPane.tsx @@ -3,7 +3,17 @@ import type { ReactNode } from "react"; import { AgentAvatarContent, RoomAvatar } from "@/components/business"; import { ListChecks, Trash2, UserPlus, Users } from "lucide-react"; import { TaskSubtaskIndicator } from "@/components/business"; -import { Button } from "@/components/ui"; +import { + Button, + DialogBody, + DialogCloseButton, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogRoot, + DialogTitle, +} from "@/components/ui"; import { isAgentRunning } from "@/models/agents"; import type { AgentLike } from "@/models/agents"; import type { IMUser, TranslateFn, UsersById } from "@/models/conversations"; @@ -56,6 +66,17 @@ export function TeamDetailPane({ onSelectTask = () => {}, }: TeamDetailPaneProps) { const [activeTab, setActiveTab] = useState("members"); + const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); + + async function handleDeleteTeam(): Promise { + if (!team) { + return; + } + const deleted = await onDeleteTeam(team); + if (deleted !== false) { + setDeleteDialogOpen(false); + } + } if (!team) { return ( @@ -107,7 +128,7 @@ export function TeamDetailPane({ variant="outlineDanger" size="md" disabled={teamActionBusy} - onClick={() => void onDeleteTeam(team)} + onClick={() => setDeleteDialogOpen(true)} >