diff --git a/apps/meteor/client/lib/chats/readStateManager.ts b/apps/meteor/client/lib/chats/readStateManager.ts index 89b85c52401f9..fbb0c849e9680 100644 --- a/apps/meteor/client/lib/chats/readStateManager.ts +++ b/apps/meteor/client/lib/chats/readStateManager.ts @@ -38,6 +38,10 @@ export class ReadStateManager extends Emitter { return this.firstUnreadRecordId; }; + public subscribeToMessages() { + return RoomHistoryManager.on('loaded-messages', () => this.updateFirstUnreadRecordId()); + } + public updateSubscription(subscription?: ISubscription) { if (!subscription) { return; @@ -88,8 +92,6 @@ export class ReadStateManager extends Emitter { ); this.setFirstUnreadRecordId(firstUnreadRecord?._id); - - RoomHistoryManager.once('loaded-messages', () => this.updateFirstUnreadRecordId()); } private setFirstUnreadRecordId(firstUnreadRecordId: string | undefined) { diff --git a/apps/meteor/client/views/room/providers/hooks/useChatMessagesInstance.spec.ts b/apps/meteor/client/views/room/providers/hooks/useChatMessagesInstance.spec.ts index b63056ec4e228..40401bfb1b992 100644 --- a/apps/meteor/client/views/room/providers/hooks/useChatMessagesInstance.spec.ts +++ b/apps/meteor/client/views/room/providers/hooks/useChatMessagesInstance.spec.ts @@ -35,6 +35,7 @@ jest.mock('../../../../../app/ui/client/lib/ChatMessages', () => { release: jest.fn(), readStateManager: { updateSubscription: updateSubscriptionMock, + subscribeToMessages: jest.fn(), }, }; }), diff --git a/apps/meteor/client/views/room/providers/hooks/useChatMessagesInstance.ts b/apps/meteor/client/views/room/providers/hooks/useChatMessagesInstance.ts index fbadf90e2947d..06bf65eebdf43 100644 --- a/apps/meteor/client/views/room/providers/hooks/useChatMessagesInstance.ts +++ b/apps/meteor/client/views/room/providers/hooks/useChatMessagesInstance.ts @@ -30,6 +30,12 @@ export function useChatMessagesInstance({ return [instance, () => instance.release()]; }, [rid, tmid, uid, encrypted, e2eRoomState]); + useEffect(() => { + if (subscription?.rid) { + return chatMessages?.readStateManager.subscribeToMessages(); + } + }, [subscription?.rid, chatMessages?.readStateManager]); + useEffect(() => { if (subscription) { chatMessages?.readStateManager.updateSubscription(subscription);