From e93b0586b98e92bfb4ec879cfed3fbed6f59c494 Mon Sep 17 00:00:00 2001 From: xintaofei Date: Wed, 25 Mar 2026 21:56:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=A0=87=E7=AD=BE=E9=A1=B5fo?= =?UTF-8?q?lder=E7=AA=97=E5=8F=A3=E6=89=93=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/contexts/folder-context.tsx | 13 ++----------- src/lib/api.ts | 22 ++++++---------------- 2 files changed, 8 insertions(+), 27 deletions(-) diff --git a/src/contexts/folder-context.tsx b/src/contexts/folder-context.tsx index 76665e0..3605549 100644 --- a/src/contexts/folder-context.tsx +++ b/src/contexts/folder-context.tsx @@ -11,7 +11,7 @@ import { type ReactNode, } from "react" import { toErrorMessage } from "@/lib/app-error" -import { getFolder, listFolderConversations, closeFolderWindow } from "@/lib/api" +import { getFolder, listFolderConversations } from "@/lib/api" import { isDesktop } from "@/lib/transport" import type { AgentType, @@ -196,20 +196,11 @@ export function FolderProvider({ } }, []) - // Web mode: register this tab's name so that window.open(url, "folder-{id}") + // Web mode: register this tab's name so that window.open("", "folder-{id}") // from other pages can find and reuse it instead of opening duplicates. - // Also notify backend when the folder tab closes. useEffect(() => { if (isDesktop() || !folderId) return - window.name = `folder-${folderId}` - - const onUnload = () => closeFolderWindow(folderId) - window.addEventListener("pagehide", onUnload) - - return () => { - window.removeEventListener("pagehide", onUnload) - } }, [folderId]) const selectConversation = useCallback((id: number, agentType: AgentType) => { diff --git a/src/lib/api.ts b/src/lib/api.ts index d968830..a4301f7 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -910,22 +910,12 @@ export async function focusFolderWindow(folderId: number): Promise { if (getTransport().isDesktop()) { return getTransport().call("focus_folder_window", { folderId }) } - // Web mode: use named window — reuses existing tab if still open, - // otherwise opens a new one. - window.open(`/folder?id=${folderId}`, `folder-${folderId}`) -} - -/** - * Notify the backend that a folder tab has been closed. - * Uses sendBeacon for reliability during page unload. - */ -export function closeFolderWindow(folderId: number): void { - if (getTransport().isDesktop()) return - const token = localStorage.getItem("codeg_token") ?? "" - navigator.sendBeacon( - `/api/close_folder_window?token=${encodeURIComponent(token)}`, - JSON.stringify({ folderId }), - ) + // Web mode: open empty string to focus existing named window without reload. + // If the window doesn't exist (was closed), open the folder page. + const win = window.open("", `folder-${folderId}`) + if (!win || win.closed || !win.location.href || win.location.href === "about:blank") { + window.open(`/folder?id=${folderId}`, `folder-${folderId}`) + } } // Conversation CRUD commands