From d5f7c8756a9de4ec602f271f44c4825c3c244704 Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Sat, 18 Jul 2026 06:46:38 +0800 Subject: [PATCH] fix: close chat context menu on outside interaction --- frontend/src/app/page.tsx | 15 +++++++++++++++ tests/test_session_management_entrypoints.py | 2 ++ 2 files changed, 17 insertions(+) diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index dfde091e..77837df6 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -739,6 +739,21 @@ export default function Home() { localStorage.setItem(`${prefix}pinned`, JSON.stringify(pinnedSessionIds)); localStorage.setItem(`${prefix}archived`, JSON.stringify(archivedSessionIds)); }, [accountId, archivedSessionIds, hydrated, pinnedSessionIds]); + + useEffect(() => { + if (!sessionMenuId) return; + function closeSessionMenu(event: Event) { + if (event instanceof globalThis.KeyboardEvent && event.key !== "Escape") return; + if (event instanceof MouseEvent && (event.target as Element | null)?.closest(".session-row")) return; + setSessionMenuId(null); + } + window.addEventListener("mousedown", closeSessionMenu); + window.addEventListener("keydown", closeSessionMenu); + return () => { + window.removeEventListener("mousedown", closeSessionMenu); + window.removeEventListener("keydown", closeSessionMenu); + }; + }, [sessionMenuId]); const activeSuggestions = activeSession?.messages.reduce((latest, message) => message.role === "assistant" && message.suggestions?.length ? message.suggestions : latest, [] as string[]) ?? []; useEffect(() => { if (!accountId) { diff --git a/tests/test_session_management_entrypoints.py b/tests/test_session_management_entrypoints.py index e592fbec..88b7c8f6 100644 --- a/tests/test_session_management_entrypoints.py +++ b/tests/test_session_management_entrypoints.py @@ -18,6 +18,8 @@ def test_chat_history_management_actions_are_exposed() -> None: "onContextMenu", "session-menu-trigger", 'role="menu"', + "closeSessionMenu", + "Escape", "置顶", "重命名", "归档",