From d0c124993c9ffbed45e80e20ba6ef3ccbd9c5442 Mon Sep 17 00:00:00 2001 From: tianma-if Date: Thu, 13 Aug 2026 01:18:02 +0800 Subject: [PATCH] fix: prevent editor bubble menu update loop --- apps/web/src/components/EditorPane.tsx | 8 ++-- .../src/components/editor/useAiBubbleMenu.ts | 22 +++++++++ apps/web/src/desktop-renderer-test.tsx | 47 ++++++++++++++++++- scripts/verify-desktop-renderer.mjs | 2 +- 4 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 apps/web/src/components/editor/useAiBubbleMenu.ts diff --git a/apps/web/src/components/EditorPane.tsx b/apps/web/src/components/EditorPane.tsx index a06701af..2fcaf83f 100644 --- a/apps/web/src/components/EditorPane.tsx +++ b/apps/web/src/components/EditorPane.tsx @@ -76,6 +76,7 @@ import { } from "@/components/ui/dialog"; import { EditorToolbar } from "./EditorToolbar"; import { EditorOutline } from "./EditorOutline"; +import { useAiBubbleMenu } from "./editor/useAiBubbleMenu"; import { WeChatIcon } from "./WeChatIcon"; import { ThemeToggle } from "./ThemeToggle"; import { useTheme } from "./ThemeProvider"; @@ -703,6 +704,7 @@ const RichEditorPane = ({ const [historyOpen, setHistoryOpen] = useState(false); const [shareOpen, setShareOpen] = useState(false); const [aiAssistantOpen, setAiAssistantOpen] = useState(false); + const aiBubbleMenu = useAiBubbleMenu(aiAssistantOpen); const [aiSelection, setAiSelection] = useState(null); const [systemInfoOpen, setSystemInfoOpen] = useState(false); const [updateAvailable, setUpdateAvailable] = useState(false); @@ -4133,10 +4135,8 @@ const RichEditorPane = ({ > - activeEditor.isEditable && !activeEditor.state.selection.empty && !aiAssistantOpen - } - options={{ placement: "top" }} + shouldShow={aiBubbleMenu.shouldShow} + options={aiBubbleMenu.options} >