diff --git a/src/components/left/LeftColumn.tsx b/src/components/left/LeftColumn.tsx index abb309521..6e54434dc 100644 --- a/src/components/left/LeftColumn.tsx +++ b/src/components/left/LeftColumn.tsx @@ -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(); diff --git a/src/components/left/main/ChatList.tsx b/src/components/left/main/ChatList.tsx index 8a35018e9..cc06cbb8c 100644 --- a/src/components/left/main/ChatList.tsx +++ b/src/components/left/main/ChatList.tsx @@ -116,7 +116,7 @@ const ChatList: FC = ({ }, [shouldShowUnconfirmedSessions]); // Support + 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 = ({ e.preventDefault(); openNextChat({ targetIndexDelta: 1, orderedIds }); }, - } : undefined); + } : undefined), [isActive, orderedIds])); // Support + to navigate between chats useEffect(() => { diff --git a/src/components/left/main/LeftMainHeader.tsx b/src/components/left/main/LeftMainHeader.tsx index 92a8f8b98..a1ec2df39 100644 --- a/src/components/left/main/LeftMainHeader.tsx +++ b/src/components/left/main/LeftMainHeader.tsx @@ -146,12 +146,12 @@ const LeftMainHeader: FC = ({ } }); - 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 }) => ( diff --git a/src/components/middle/HeaderActions.tsx b/src/components/middle/HeaderActions.tsx index 61ecc7c2b..e50ded80f 100644 --- a/src/components/middle/HeaderActions.tsx +++ b/src/components/middle/HeaderActions.tsx @@ -276,9 +276,9 @@ const HeaderActions: FC = ({ showNotification({ message: getTextWithLanguage('AddedToDoNotTranslate', detectedChatLanguage) }); }); - useHotkeys({ + useHotkeys(useMemo(() => ({ 'Mod+F': handleHotkeySearchClick, - }); + }), [])); const MoreMenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => { return ({ onTrigger, isOpen }) => ( diff --git a/src/components/middle/hooks/useCopySelectedMessages.ts b/src/components/middle/hooks/useCopySelectedMessages.ts index 007e8b221..acf0642ee 100644 --- a/src/components/middle/hooks/useCopySelectedMessages.ts +++ b/src/components/middle/hooks/useCopySelectedMessages.ts @@ -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; diff --git a/src/hooks/useNativeCopySelectedMessages.ts b/src/hooks/useNativeCopySelectedMessages.ts index 2edc09145..a3ee7f64d 100644 --- a/src/hooks/useNativeCopySelectedMessages.ts +++ b/src/hooks/useNativeCopySelectedMessages.ts @@ -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;