diff --git a/src/components/middle/ActionMessage.tsx b/src/components/middle/ActionMessage.tsx index c47bbd790..f4812b77a 100644 --- a/src/components/middle/ActionMessage.tsx +++ b/src/components/middle/ActionMessage.tsx @@ -36,6 +36,7 @@ import ActionMessageSuggestedAvatar from './ActionMessageSuggestedAvatar'; type OwnProps = { message: ApiMessage; + threadId?: number; observeIntersectionForReading?: ObserveFn; observeIntersectionForLoading?: ObserveFn; observeIntersectionForPlaying?: ObserveFn; @@ -234,7 +235,7 @@ const ActionMessage: FC = ({ }; export default memo(withGlobal( - (global, { message }): StateProps => { + (global, { message, threadId }): StateProps => { const { byId: usersById } = global.users; const userId = message.senderId; const { targetUserIds, targetChatId } = message.content.action || {}; @@ -243,7 +244,7 @@ export default memo(withGlobal( ? selectChatMessage(global, message.chatId, targetMessageId) : undefined; - const isFocused = selectIsMessageFocused(global, message); + const isFocused = threadId ? selectIsMessageFocused(global, message, threadId) : false; const { direction: focusDirection, noHighlight: noFocusHighlight, diff --git a/src/components/middle/MessageListContent.tsx b/src/components/middle/MessageListContent.tsx index 2c9622656..f01f9761d 100644 --- a/src/components/middle/MessageListContent.tsx +++ b/src/components/middle/MessageListContent.tsx @@ -146,6 +146,7 @@ const MessageListContent: FC = ({ ( const uploadProgress = selectUploadProgress(global, message); const isFocused = messageListType === 'thread' && ( album - ? album.messages.some((m) => selectIsMessageFocused(global, m)) - : selectIsMessageFocused(global, message) + ? album.messages.some((m) => selectIsMessageFocused(global, m, threadId)) + : selectIsMessageFocused(global, message, threadId) ); const { diff --git a/src/global/actions/ui/messages.ts b/src/global/actions/ui/messages.ts index 1fa56721b..0d2d9386d 100644 --- a/src/global/actions/ui/messages.ts +++ b/src/global/actions/ui/messages.ts @@ -416,12 +416,12 @@ addActionHandler('focusMessage', (global, actions, payload): ActionReturnType => } blurTimeout = window.setTimeout(() => { global = getGlobal(); - global = updateFocusedMessage(global, undefined, undefined, undefined, undefined, tabId); + global = updateFocusedMessage(global, undefined, undefined, undefined, undefined, undefined, tabId); global = updateFocusDirection(global, undefined, tabId); setGlobal(global); }, noHighlight ? FOCUS_NO_HIGHLIGHT_DURATION : FOCUS_DURATION); - global = updateFocusedMessage(global, chatId, messageId, noHighlight, isResizingContainer, tabId); + global = updateFocusedMessage(global, chatId, messageId, threadId, noHighlight, isResizingContainer, tabId); global = updateFocusDirection(global, undefined, tabId); if (replyMessageId) { diff --git a/src/global/reducers/messages.ts b/src/global/reducers/messages.ts index cc3095b4c..e0c0bd0e4 100644 --- a/src/global/reducers/messages.ts +++ b/src/global/reducers/messages.ts @@ -501,13 +501,15 @@ function updateScheduledMessages( } export function updateFocusedMessage( - global: T, chatId?: string, messageId?: number, noHighlight = false, isResizingContainer = false, + global: T, chatId?: string, messageId?: number, threadId = MAIN_THREAD_ID, noHighlight = false, + isResizingContainer = false, ...[tabId = getCurrentTabId()]: TabArgs ): T { return updateTabState(global, { focusedMessage: { ...selectTabState(global, tabId).focusedMessage, chatId, + threadId, messageId, noHighlight, isResizingContainer, diff --git a/src/global/selectors/messages.ts b/src/global/selectors/messages.ts index f3db89c82..80f1e82cf 100644 --- a/src/global/selectors/messages.ts +++ b/src/global/selectors/messages.ts @@ -367,10 +367,13 @@ export function selectFocusedMessageId( } export function selectIsMessageFocused( - global: T, message: ApiMessage, + global: T, message: ApiMessage, currentThreadId: number, ...[tabId = getCurrentTabId()]: TabArgs ) { const focusedId = selectFocusedMessageId(global, message.chatId, tabId); + const threadId = selectTabState(global, tabId).focusedMessage?.threadId; + + if (currentThreadId !== threadId) return false; return focusedId ? focusedId === message.id || focusedId === message.previousLocalId : false; }