[Perf] Message Input: Fix memory leak

This commit is contained in:
Alexander Zinchuk 2022-05-07 12:52:43 +01:00
parent 957331985b
commit d47142b024

View File

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