diff --git a/src/modules/actions/apiUpdaters/messages.ts b/src/modules/actions/apiUpdaters/messages.ts index 8880245b9..265f505c0 100644 --- a/src/modules/actions/apiUpdaters/messages.ts +++ b/src/modules/actions/apiUpdaters/messages.ts @@ -35,6 +35,7 @@ import { selectCurrentMessageList, selectViewportIds, selectFirstUnreadId, + selectRealLastReadId, } from '../../selectors'; import { getMessageContent, isChatPrivate, isMessageLocal } from '../../helpers'; @@ -429,12 +430,13 @@ function updateListedAndViewportIds(global: GlobalState, message: ApiMessage) { global = updateListedIds(global, chatId, MAIN_THREAD_ID, [id]); if (selectIsViewportNewest(global, chatId, MAIN_THREAD_ID)) { - // Always keep the first uread message in the viewport list + // Always keep the first unread message in the viewport list + const lastReadId = selectRealLastReadId(global, chatId, MAIN_THREAD_ID); const firstUnreadId = selectFirstUnreadId(global, chatId, MAIN_THREAD_ID); const newGlobal = addViewportId(global, chatId, MAIN_THREAD_ID, id); const newViewportIds = selectViewportIds(newGlobal, chatId, MAIN_THREAD_ID); - if (!firstUnreadId || newViewportIds!.includes(firstUnreadId)) { + if (!lastReadId || (firstUnreadId && newViewportIds!.includes(firstUnreadId))) { global = newGlobal; } }