From 05810e7882cb03d448d9d8fa84bc6ca54eafbed0 Mon Sep 17 00:00:00 2001 From: memoclaw Date: Fri, 20 Mar 2026 08:43:01 +0800 Subject: [PATCH] fix(memo-editor): scope Cmd+Enter save to the active editor (#5745) Co-authored-by: memoclaw <265580040+memoclaw@users.noreply.github.com> --- .../MemoEditor/hooks/useKeyboard.ts | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/web/src/components/MemoEditor/hooks/useKeyboard.ts b/web/src/components/MemoEditor/hooks/useKeyboard.ts index e90537503..880806370 100644 --- a/web/src/components/MemoEditor/hooks/useKeyboard.ts +++ b/web/src/components/MemoEditor/hooks/useKeyboard.ts @@ -5,16 +5,29 @@ interface UseKeyboardOptions { onSave: () => void; } -export const useKeyboard = (_editorRef: React.RefObject, options: UseKeyboardOptions) => { +export const useKeyboard = (editorRef: React.RefObject, options: UseKeyboardOptions) => { useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { - if ((event.metaKey || event.ctrlKey) && event.key === "Enter") { - event.preventDefault(); - options.onSave(); + if (!(event.metaKey || event.ctrlKey) || event.key !== "Enter") { + return; } + + const editor = editorRef.current?.getEditor(); + if (!editor) { + return; + } + + const activeElement = document.activeElement; + const target = event.target; + if (activeElement !== editor && target !== editor) { + return; + } + + event.preventDefault(); + options.onSave(); }; window.addEventListener("keydown", handleKeyDown); return () => window.removeEventListener("keydown", handleKeyDown); - }, [options]); + }, [editorRef, options]); };