From 533bcdd91ff143df46e92351b2fee90b1f221aaf Mon Sep 17 00:00:00 2001 From: haoyuren <13851610112@163.com> Date: Sun, 15 Mar 2026 19:16:42 -0500 Subject: Fix resolved comment highlights not disappearing immediately The resolve-thread socket event was only handled in ReviewPanel's useEffect, but ReviewPanel is conditionally mounted (only when visible). When Claude Code resolves a comment via MCP with the panel hidden, the resolvedThreadIds store was never updated, so the editor highlight persisted until the user opened the Review panel. Fix: add a comments:event listener in App.tsx (always mounted) that updates resolvedThreadIds for resolve/reopen/delete-thread events. Co-Authored-By: Claude Opus 4.6 --- src/renderer/src/App.tsx | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src') diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index cb14123..1905e79 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -122,6 +122,30 @@ export default function App() { useAppStore.getState().setCommentContexts(data.contexts) }) + // Listen for comment events to update resolvedThreadIds immediately + // (ReviewPanel may not be mounted, so highlights wouldn't update otherwise) + const unsubCommentsEvent = window.api.onCommentsEvent?.((event) => { + const { type, args } = event + const store = useAppStore.getState() + if (type === 'resolve-thread') { + const threadId = args[0] as string + store.setResolvedThreadIds(new Set([...(store.resolvedThreadIds || []), threadId])) + } else if (type === 'reopen-thread') { + const threadId = args[0] as string + const ids = new Set(store.resolvedThreadIds || []) + ids.delete(threadId) + store.setResolvedThreadIds(ids) + } else if (type === 'delete-thread') { + const threadId = args[0] as string + const newCtx = { ...store.commentContexts } + delete newCtx[threadId] + store.setCommentContexts(newCtx) + const ids = new Set(store.resolvedThreadIds || []) + ids.delete(threadId) + store.setResolvedThreadIds(ids) + } + }) + // Listen for remote cursor updates const unsubCursorUpdate = window.api.onCursorRemoteUpdate((raw) => { const data = raw as { @@ -181,6 +205,7 @@ export default function App() { unsubNewDoc() unsubInitThreads?.() unsubInitContexts?.() + unsubCommentsEvent?.() unsubCursorUpdate() unsubCursorDisconnected() remoteCursors.clear() -- cgit v1.2.3