[Perf] Message Input: Fix memory leak
This commit is contained in:
parent
957331985b
commit
d47142b024
@ -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 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user