From 2e6658221f989dfcb976f9490e2f5345c09f4a73 Mon Sep 17 00:00:00 2001 From: Maksim Eltyshev Date: Fri, 6 Jun 2025 12:48:43 +0200 Subject: [PATCH] fix: Handle escape actions properly in mentions input --- .../src/components/comments/Comments/Add.jsx | 27 ++++++++++--------- .../src/components/comments/Comments/Edit.jsx | 22 +++++++++------ 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/client/src/components/comments/Comments/Add.jsx b/client/src/components/comments/Comments/Add.jsx index 24cdf11d..ae863eb9 100755 --- a/client/src/components/comments/Comments/Add.jsx +++ b/client/src/components/comments/Comments/Add.jsx @@ -31,8 +31,9 @@ const Add = React.memo(() => { const [isOpened, setIsOpened] = useState(false); const [selectTextFieldState, selectTextField] = useToggle(); - const mentionsInputRef = useRef(null); const textFieldRef = useRef(null); + const textMentionsRef = useRef(null); + const textInputRef = useRef(null); const [buttonRef, handleButtonRef] = useNestedRef(); const submit = useCallback(() => { @@ -42,24 +43,24 @@ const Add = React.memo(() => { }; if (!cleanData.text) { - textFieldRef.current.select(); + textInputRef.current.select(); return; } dispatch(entryActions.createCommentInCurrentCard(cleanData)); setData(DEFAULT_DATA); selectTextField(); - }, [dispatch, data, setData, selectTextField, textFieldRef]); + }, [dispatch, data, setData, selectTextField]); const handleEscape = useCallback(() => { - if (mentionsInputRef.current.isOpened()) { - mentionsInputRef.current.clearSuggestions(); + if (textMentionsRef.current.isOpened()) { + textMentionsRef.current.clearSuggestions(); return; } setIsOpened(false); - textFieldRef.current.blur(); - }, [textFieldRef]); + textInputRef.current.blur(); + }, []); const [activateEscapeInterceptor, deactivateEscapeInterceptor] = useEscapeInterceptor(handleEscape); @@ -95,8 +96,8 @@ const Add = React.memo(() => { }, []); const handleClickAwayCancel = useCallback(() => { - textFieldRef.current.focus(); - }, [textFieldRef]); + textInputRef.current.focus(); + }, []); const clickAwayProps = useClickAwayListener( [textFieldRef, buttonRef], @@ -123,18 +124,18 @@ const Add = React.memo(() => { }, [isOpened]); useDidUpdate(() => { - textFieldRef.current.focus(); + textInputRef.current.focus(); }, [selectTextFieldState]); return (
-
+
{ ...defaultData, })); - const mentionsInputRef = useRef(null); const textFieldRef = useRef(null); + const textMentionsRef = useRef(null); + const textInputRef = useRef(null); const [buttonRef, handleButtonRef] = useNestedRef(); const submit = useCallback(() => { @@ -79,6 +80,11 @@ const Edit = React.memo(({ commentId, onClose }) => { submit(); } } else if (event.key === 'Escape') { + if (textMentionsRef.current.isOpened()) { + textMentionsRef.current.clearSuggestions(); + return; + } + onClose(); } }, @@ -86,8 +92,8 @@ const Edit = React.memo(({ commentId, onClose }) => { ); const handleClickAwayCancel = useCallback(() => { - textFieldRef.current.focus(); - }, [textFieldRef]); + textInputRef.current.focus(); + }, []); const clickAwayProps = useClickAwayListener( [textFieldRef, buttonRef], @@ -106,18 +112,18 @@ const Edit = React.memo(({ commentId, onClose }) => { ); useEffect(() => { - focusEnd(textFieldRef.current); - }, [textFieldRef]); + focusEnd(textInputRef.current); + }, []); return ( -
+