diff --git a/apps/meteor/client/views/room/body/hooks/useUnreadMessages.ts b/apps/meteor/client/views/room/body/hooks/useUnreadMessages.ts index 9ccbda0d38d75..cc454ab3a80b5 100644 --- a/apps/meteor/client/views/room/body/hooks/useUnreadMessages.ts +++ b/apps/meteor/client/views/room/body/hooks/useUnreadMessages.ts @@ -74,8 +74,9 @@ export const useHandleUnread = ( return; } setMessageJumpQueryStringParameter(message?._id); + chat.readStateManager.markAsRead(); setUnreadCount(0); - }, [room._id, setUnreadCount, findFirstMessage, unread?.since]); + }, [room._id, setUnreadCount, findFirstMessage, unread?.since, chat.readStateManager]); const handleMarkAsReadButtonClick = useCallback(() => { chat.readStateManager.markAsRead(); @@ -91,7 +92,8 @@ export const useHandleUnread = ( const count = filterMessages( (record) => record.rid === room._id && - record.ts.getTime() <= (lastMessageDate?.getTime() ?? Infinity) && + !!lastMessageDate && + record.ts.getTime() <= lastMessageDate?.getTime() && record.ts.getTime() > (subscription?.ls?.getTime() ?? -Infinity), ).length; diff --git a/apps/meteor/tests/e2e/threads.spec.ts b/apps/meteor/tests/e2e/threads.spec.ts index 0794102e33b31..62a46ea8f74f7 100644 --- a/apps/meteor/tests/e2e/threads.spec.ts +++ b/apps/meteor/tests/e2e/threads.spec.ts @@ -1,6 +1,6 @@ import { Users } from './fixtures/userStates'; import { HomeChannel } from './page-objects'; -import { createTargetChannel } from './utils'; +import { createTargetChannel, deleteChannel } from './utils'; import { expect, test } from './utils/test'; test.use({ storageState: Users.admin.state }); @@ -15,6 +15,18 @@ test.describe.serial('Threads', () => { await page.goto('/home'); await poHomeChannel.sidenav.openChat(targetChannel); }); + + test.afterAll(async ({ api }) => deleteChannel(api, targetChannel)); + + test('expect no unread banner when replying to a thread in a fresh channel', async ({ page }) => { + await poHomeChannel.content.sendMessage('parent for unread-banner test'); + await poHomeChannel.content.openReplyInThread(); + await poHomeChannel.content.sendMessageInThread('first thread reply'); + + await page.waitForTimeout(200); + await expect(page.getByTitle('Mark as read')).not.toBeVisible(); + }); + test('expect thread message preview if alsoSendToChannel checkbox is checked', async ({ page }) => { await poHomeChannel.content.sendMessage('this is a message for reply'); await page.locator('[data-qa-type="message"]').last().hover();