diff --git a/src/components/middle/composer/MessageInput.tsx b/src/components/middle/composer/MessageInput.tsx index 8afcc1245..6d1ff2d56 100644 --- a/src/components/middle/composer/MessageInput.tsx +++ b/src/components/middle/composer/MessageInput.tsx @@ -203,34 +203,20 @@ const MessageInput: FC = ({ openTextFormatter(); } - function handleMouseDown(event: React.MouseEvent) { - function handleMouseUp() { - processSelection(); - - event.target.removeEventListener('mouseup', handleMouseUp); - } - - if (event.button !== 2) { - event.target.addEventListener('mouseup', handleMouseUp); + function handleMouseDown(e: React.MouseEvent) { + if (e.button !== 2) { + e.target.addEventListener('mouseup', processSelection, { once: true }); return; } - if (isContextMenuOpenRef.current === true) { + if (isContextMenuOpenRef.current) { return; } isContextMenuOpenRef.current = true; - function closeContextMenuMouseListener() { - setTimeout(() => { - isContextMenuOpenRef.current = false; - }, CONTEXT_MENU_CLOSE_DELAY_MS); - - window.removeEventListener('mouseup', closeContextMenuMouseListener); - } - - function closeContextMenuKeyListener(e: KeyboardEvent) { - if (e.key !== 'Esc' && e.key !== 'Escape') { + function handleCloseContextMenu(e2: KeyboardEvent | MouseEvent) { + if (e2 instanceof KeyboardEvent && e2.key !== 'Esc' && e2.key !== 'Escape') { return; } @@ -238,20 +224,15 @@ const MessageInput: FC = ({ isContextMenuOpenRef.current = false; }, CONTEXT_MENU_CLOSE_DELAY_MS); - window.removeEventListener('keydown', closeContextMenuKeyListener); + window.removeEventListener('keydown', handleCloseContextMenu); + window.removeEventListener('mousedown', handleCloseContextMenu); } - document.addEventListener('mousedown', closeContextMenuMouseListener); - document.addEventListener('keydown', closeContextMenuKeyListener); + document.addEventListener('mousedown', handleCloseContextMenu); + document.addEventListener('keydown', handleCloseContextMenu); } function handleKeyDown(e: React.KeyboardEvent) { - function handleKeyUp() { - processSelection(); - - e.target.removeEventListener('keyup', handleKeyUp); - } - if (!html.length && (e.metaKey || e.ctrlKey)) { const targetIndexDelta = e.key === 'ArrowDown' ? 1 : e.key === 'ArrowUp' ? -1 : undefined; if (targetIndexDelta) { @@ -279,7 +260,7 @@ const MessageInput: FC = ({ e.preventDefault(); editLastMessage(); } else { - e.target.addEventListener('keyup', handleKeyUp); + e.target.addEventListener('keyup', processSelection, { once: true }); } }