From b7b8feb07d811278ec8e33d0930e395ecda0f6e6 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Wed, 5 Jul 2023 13:15:51 +0200 Subject: [PATCH] Do not use `useLastCallback` for `render*` functions --- .../common/ChatForumLastMessage.tsx | 6 ++--- .../left/main/hooks/useChatListEntry.tsx | 26 +++++++++++++------ src/components/middle/ActionMessage.tsx | 21 ++++++++------- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/components/common/ChatForumLastMessage.tsx b/src/components/common/ChatForumLastMessage.tsx index 6567a7f64..277773d82 100644 --- a/src/components/common/ChatForumLastMessage.tsx +++ b/src/components/common/ChatForumLastMessage.tsx @@ -46,8 +46,6 @@ const ChatForumLastMessage: FC = ({ const lang = useLang(); - const lastMessage = renderLastMessage(); - const [lastActiveTopic, ...otherTopics] = useMemo(() => { if (!chat.topics) { return []; @@ -90,7 +88,7 @@ const ChatForumLastMessage: FC = ({ setOverwrittenWidth(undefined); } setIsReversedCorner(lastMessageWidth > mainColumnWidth); - }, [lastActiveTopic, lastMessage]); + }, [lastActiveTopic, renderLastMessage]); return (
= ({ onClick={handleOpenTopicClick} onMouseDown={handleOpenTopicMouseDown} > - {lastMessage} + {renderLastMessage()} {!overwrittenWidth && !isReversedCorner && (
diff --git a/src/components/left/main/hooks/useChatListEntry.tsx b/src/components/left/main/hooks/useChatListEntry.tsx index b033122ca..0ec6606ed 100644 --- a/src/components/left/main/hooks/useChatListEntry.tsx +++ b/src/components/left/main/hooks/useChatListEntry.tsx @@ -1,10 +1,13 @@ -import React, { useLayoutEffect, useMemo, useRef } from '../../../../lib/teact/teact'; +import React, { + useCallback, useLayoutEffect, useMemo, useRef, +} from '../../../../lib/teact/teact'; import { requestMutation } from '../../../../lib/fasterdom/fasterdom'; import { getGlobal } from '../../../../global'; import type { LangFn } from '../../../../hooks/useLang'; +import useLang from '../../../../hooks/useLang'; import type { - ApiChat, ApiTopic, ApiMessage, ApiTypingStatus, ApiUser, + ApiChat, ApiMessage, ApiTopic, ApiTypingStatus, ApiUser, } from '../../../../api/types'; import type { ObserveFn } from '../../../../hooks/useIntersectionObserver'; import type { Thread } from '../../../../global/types'; @@ -14,13 +17,17 @@ import { renderTextWithEntities } from '../../../common/helpers/renderTextWithEn import { getMessageIsSpoiler, getMessageMediaHash, - getMessageMediaThumbDataUri, getMessageRoundVideo, - getMessageSenderName, getMessageSticker, getMessageVideo, isActionMessage, isChatChannel, + getMessageMediaThumbDataUri, + getMessageRoundVideo, + getMessageSenderName, + getMessageSticker, + getMessageVideo, + isActionMessage, + isChatChannel, } from '../../../../global/helpers'; import { renderActionMessageText } from '../../../common/helpers/renderActionMessageText'; import renderText from '../../../common/helpers/renderText'; import buildClassName from '../../../../util/buildClassName'; -import useLang from '../../../../hooks/useLang'; import useEnsureMessage from '../../../../hooks/useEnsureMessage'; import useMedia from '../../../../hooks/useMedia'; import { ChatAnimationTypes } from './useChatAnimationType'; @@ -28,7 +35,6 @@ import { ChatAnimationTypes } from './useChatAnimationType'; import MessageSummary from '../../../common/MessageSummary'; import ChatForumLastMessage from '../../../common/ChatForumLastMessage'; import TypingStatus from '../../../common/TypingStatus'; -import useLastCallback from '../../../../hooks/useLastCallback'; const ANIMATION_DURATION = 200; @@ -90,7 +96,7 @@ export default function useChatListEntry({ return actionTargetUserIds.map((userId) => usersById[userId]).filter(Boolean); }, [actionTargetUserIds]); - const renderLastMessageOrTyping = useLastCallback(() => { + const renderLastMessageOrTyping = useCallback(() => { if (typingStatus && lastMessage && typingStatus.timestamp > lastMessage.date * 1000) { return ; } @@ -148,7 +154,11 @@ export default function useChatListEntry({ {renderSummary(lang, lastMessage, observeIntersection, mediaBlobUrl || mediaThumbnail, isRoundVideo)}

); - }); + }, [ + actionTargetChatId, actionTargetMessage, actionTargetUsers, chat, chatId, draft, isAction, + isRoundVideo, isTopic, lang, lastMessage, lastMessageSender, lastMessageTopic, mediaBlobUrl, mediaThumbnail, + observeIntersection, typingStatus, + ]); function renderSubtitle() { if (chat?.isForum && !isTopic) { diff --git a/src/components/middle/ActionMessage.tsx b/src/components/middle/ActionMessage.tsx index 900c3c2c6..eb8f35fa1 100644 --- a/src/components/middle/ActionMessage.tsx +++ b/src/components/middle/ActionMessage.tsx @@ -1,31 +1,29 @@ import type { FC } from '../../lib/teact/teact'; import React, { - memo, useEffect, useMemo, useRef, + memo, useCallback, useEffect, useMemo, useRef, } from '../../lib/teact/teact'; import { getActions, getGlobal, withGlobal } from '../../global'; import type { - ApiUser, ApiMessage, ApiChat, ApiSticker, ApiTopic, + ApiChat, ApiMessage, ApiSticker, ApiTopic, ApiUser, } from '../../api/types'; import type { FocusDirection } from '../../types'; import type { PinnedIntersectionChangedCallback } from './hooks/usePinnedMessage'; import type { MessageListType } from '../../global/types'; import { - selectUser, + selectCanPlayAnimatedEmojis, + selectChat, selectChatMessage, selectIsMessageFocused, - selectChat, - selectTopicFromMessage, selectTabState, - selectCanPlayAnimatedEmojis, + selectTopicFromMessage, + selectUser, } from '../../global/selectors'; import { getMessageHtmlId, isChatChannel } from '../../global/helpers'; import buildClassName from '../../util/buildClassName'; import { renderActionMessageText } from '../common/helpers/renderActionMessageText'; import { preventMessageInputBlur } from './helpers/preventMessageInputBlur'; - -import useLastCallback from '../../hooks/useLastCallback'; import useEnsureMessage from '../../hooks/useEnsureMessage'; import useContextMenuHandlers from '../../hooks/useContextMenuHandlers'; import type { ObserveFn } from '../../hooks/useIntersectionObserver'; @@ -151,7 +149,7 @@ const ActionMessage: FC = ({ : undefined; }, [targetUserIds, usersById]); - const renderContent = useLastCallback(() => { + const renderContent = useCallback(() => { return renderActionMessageText( lang, message, @@ -165,7 +163,10 @@ const ActionMessage: FC = ({ observeIntersectionForLoading, observeIntersectionForPlaying, ); - }); + }, [ + isEmbedded, lang, message, observeIntersectionForLoading, observeIntersectionForPlaying, + senderChat, senderUser, targetChatId, targetMessage, targetUsers, topic, + ]); const { isContextMenuOpen, contextMenuPosition,