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