[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();
|
||||
}
|
||||
|
||||
function handleMouseDown(event: React.MouseEvent<HTMLDivElement, MouseEvent>) {
|
||||
function handleMouseUp() {
|
||||
processSelection();
|
||||
|
||||
event.target.removeEventListener('mouseup', handleMouseUp);
|
||||
}
|
||||
|
||||
if (event.button !== 2) {
|
||||
event.target.addEventListener('mouseup', handleMouseUp);
|
||||
function handleMouseDown(e: React.MouseEvent<HTMLDivElement, 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<OwnProps & StateProps> = ({
|
||||
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<HTMLDivElement>) {
|
||||
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<OwnProps & StateProps> = ({
|
||||
e.preventDefault();
|
||||
editLastMessage();
|
||||
} else {
|
||||
e.target.addEventListener('keyup', handleKeyUp);
|
||||
e.target.addEventListener('keyup', processSelection, { once: true });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user