[Perf] Use useMemo with useHotkeys

This commit is contained in:
Alexander Zinchuk 2024-09-19 20:43:30 +02:00
parent f4200e5a64
commit 1c40b9b514
6 changed files with 23 additions and 13 deletions

View File

@ -1,5 +1,7 @@
import type { RefObject } from 'react';
import React, { memo, useEffect, useState } from '../../lib/teact/teact';
import React, {
memo, useEffect, useMemo, useState,
} from '../../lib/teact/teact';
import { getActions, withGlobal } from '../../global';
import type { GlobalState } from '../../global/types';
@ -410,7 +412,7 @@ function LeftColumn({
setContent(LeftColumnContent.Settings);
});
useHotkeys({
useHotkeys(useMemo(() => ({
'Mod+Shift+F': handleHotkeySearch,
// https://support.mozilla.org/en-US/kb/take-screenshots-firefox
...(!IS_FIREFOX && {
@ -421,7 +423,7 @@ function LeftColumn({
'Mod+9': handleArchivedChats,
}),
...(IS_MAC_OS && IS_APP && { 'Mod+,': handleHotkeySettings }),
});
}), []));
useEffect(() => {
clearTwoFaError();

View File

@ -116,7 +116,7 @@ const ChatList: FC<OwnProps> = ({
}, [shouldShowUnconfirmedSessions]);
// Support <Alt>+<Up/Down> to navigate between chats
useHotkeys(isActive && orderedIds?.length ? {
useHotkeys(useMemo(() => (isActive && orderedIds?.length ? {
'Alt+ArrowUp': (e: KeyboardEvent) => {
e.preventDefault();
openNextChat({ targetIndexDelta: -1, orderedIds });
@ -125,7 +125,7 @@ const ChatList: FC<OwnProps> = ({
e.preventDefault();
openNextChat({ targetIndexDelta: 1, orderedIds });
},
} : undefined);
} : undefined), [isActive, orderedIds]));
// Support <Cmd>+<Digit> to navigate between chats
useEffect(() => {

View File

@ -146,12 +146,12 @@ const LeftMainHeader: FC<OwnProps & StateProps> = ({
}
});
useHotkeys(canSetPasscode ? {
useHotkeys(useMemo(() => (canSetPasscode ? {
'Ctrl+Shift+L': handleLockScreenHotkey,
'Alt+Shift+L': handleLockScreenHotkey,
'Meta+Shift+L': handleLockScreenHotkey,
...(IS_APP && { 'Mod+L': handleLockScreenHotkey }),
} : undefined);
} : undefined), [canSetPasscode]));
const MainButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {
return ({ onTrigger, isOpen }) => (

View File

@ -276,9 +276,9 @@ const HeaderActions: FC<OwnProps & StateProps> = ({
showNotification({ message: getTextWithLanguage('AddedToDoNotTranslate', detectedChatLanguage) });
});
useHotkeys({
useHotkeys(useMemo(() => ({
'Mod+F': handleHotkeySearchClick,
});
}), []));
const MoreMenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {
return ({ onTrigger, isOpen }) => (

View File

@ -1,3 +1,4 @@
import { useMemo } from '../../../lib/teact/teact';
import { getActions } from '../../../global';
import { useHotkeys } from '../../../hooks/useHotkeys';
@ -8,7 +9,9 @@ const useCopySelectedMessages = (isActive?: boolean) => {
getActions().copySelectedMessages();
}
useHotkeys(isActive ? { 'Mod+C': handleCopy } : undefined);
useHotkeys(useMemo(() => (isActive ? {
'Mod+C': handleCopy,
} : undefined), [isActive]));
};
export default useCopySelectedMessages;

View File

@ -1,17 +1,22 @@
import { useMemo } from '../lib/teact/teact';
import getMessageIdsForSelectedText from '../util/getMessageIdsForSelectedText';
import { useHotkeys } from './useHotkeys';
import useLastCallback from './useLastCallback';
const useNativeCopySelectedMessages = (copyMessagesByIds: ({ messageIds }: { messageIds?: number[] }) => void) => {
function handleCopy(e: KeyboardEvent) {
const handleCopy = useLastCallback((e: KeyboardEvent) => {
const messageIds = getMessageIdsForSelectedText();
if (messageIds && messageIds.length > 1) {
e.preventDefault();
copyMessagesByIds({ messageIds });
}
}
});
useHotkeys({ 'Mod+C': handleCopy });
useHotkeys(useMemo(() => ({
'Mod+C': handleCopy,
}), []));
};
export default useNativeCopySelectedMessages;