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

View File

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

View File

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

View File

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

View File

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

View File

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