From 3775ad26804fb1571e0af3bdab17f8e1cbef100b Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Fri, 29 May 2026 19:30:40 -0700 Subject: [PATCH] Move markdown review copy timer into handler (#3423) --- .../src/components/editor/MarkdownPreview.tsx | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/renderer/src/components/editor/MarkdownPreview.tsx b/src/renderer/src/components/editor/MarkdownPreview.tsx index fc807fe51ee..393f7bcfbe4 100644 --- a/src/renderer/src/components/editor/MarkdownPreview.tsx +++ b/src/renderer/src/components/editor/MarkdownPreview.tsx @@ -459,6 +459,7 @@ export default function MarkdownPreview({ const [activeAnnotationBlockKey, setActiveAnnotationBlockKey] = useState(null) const [reviewPanelOpen, setReviewPanelOpen] = useState(false) const [reviewNotesCopied, setReviewNotesCopied] = useState(false) + const reviewNotesCopiedResetTimerRef = useRef(null) const [activeReviewCommentId, setActiveReviewCommentId] = useState(null) const markdownReviewNotes = useMemo( () => sortMarkdownReviewNotes(markdownComments as MarkdownReviewNote[]), @@ -581,6 +582,13 @@ export default function MarkdownPreview({ setActiveMatchIndex(-1) }, []) + const clearReviewNotesCopiedResetTimer = useCallback((): void => { + if (reviewNotesCopiedResetTimerRef.current !== null) { + window.clearTimeout(reviewNotesCopiedResetTimerRef.current) + reviewNotesCopiedResetTimerRef.current = null + } + }, []) + const scrollToAnchor = useCallback((rawAnchor: string): boolean => { const container = rootRef.current const body = bodyRef.current @@ -716,19 +724,16 @@ export default function MarkdownPreview({ } try { await window.api.ui.writeClipboardText(markdownReviewPrompt) + clearReviewNotesCopiedResetTimer() setReviewNotesCopied(true) + reviewNotesCopiedResetTimerRef.current = window.setTimeout(() => { + reviewNotesCopiedResetTimerRef.current = null + setReviewNotesCopied(false) + }, 1600) } catch { // Best-effort clipboard action; failures usually mean the window is not focused. } - }, [markdownReviewNotes.length, markdownReviewPrompt]) - - useEffect(() => { - if (!reviewNotesCopied) { - return - } - const timeout = window.setTimeout(() => setReviewNotesCopied(false), 1600) - return () => window.clearTimeout(timeout) - }, [reviewNotesCopied]) + }, [clearReviewNotesCopiedResetTimer, markdownReviewNotes.length, markdownReviewPrompt]) const scrollToReviewNote = useCallback((comment: DiffComment): void => { setActiveReviewCommentId(comment.id)