Skip to content

Commit 3e18b73

Browse files
committed
fix: Older message is deselected after message set switch
1 parent bc521f9 commit 3e18b73

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

projects/stream-chat-angular/src/lib/message-list/message-list.component.spec.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,29 @@ describe('MessageListComponent', () => {
442442
/* eslint-enable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */
443443
});
444444

445+
it(`should deselect oldest message if it's removed from the list`, () => {
446+
const olderMessages = generateMockMessages(50, true);
447+
channelServiceMock.activeChannelMessages$.next(olderMessages);
448+
fixture.detectChanges();
449+
450+
const newerMessages = generateMockMessages();
451+
channelServiceMock.activeChannelMessages$.next(newerMessages);
452+
fixture.detectChanges();
453+
spyOn(channelServiceMock, 'loadMoreMessages').and.callFake(() =>
454+
channelServiceMock.activeChannelMessages$.next([
455+
...generateMockMessages(25, true),
456+
...newerMessages,
457+
])
458+
);
459+
460+
const scrollContainer = queryScrollContainer()!;
461+
scrollContainer.scrollTo({ top: 0 });
462+
scrollContainer.dispatchEvent(new Event('scroll'));
463+
fixture.detectChanges();
464+
465+
expect(Math.floor(scrollContainer.scrollTop)).not.toBe(0);
466+
});
467+
445468
it('should get unread message information from "message.new" event if an older message list is displayed', () => {
446469
let channel!: Channel<DefaultStreamChatGenerics>;
447470
channelServiceMock.activeChannel$.subscribe((c) => (channel = c!));

projects/stream-chat-angular/src/lib/message-list/message-list.component.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export class MessageListComponent
6565
private latestMessage: { id: string; created_at: Date } | undefined;
6666
private hasNewMessages: boolean | undefined;
6767
private containerHeight: number | undefined;
68-
private oldestMessageDate: Date | undefined;
68+
private oldestMessage: { id: string; created_at: Date } | undefined;
6969
private olderMassagesLoaded: boolean | undefined;
7070
private isNewMessageSentByUser: boolean | undefined;
7171
private subscriptions: Subscription[] = [];
@@ -345,13 +345,17 @@ export class MessageListComponent
345345
}
346346
const currentLatestMessage = messages[messages.length - 1];
347347
this.newMessageReceived(currentLatestMessage);
348-
const currentOldestMessageDate = messages[0].created_at;
349-
if (!this.oldestMessageDate) {
350-
this.oldestMessageDate = currentOldestMessageDate;
348+
const currentOldestMessage = messages[0];
349+
if (
350+
!this.oldestMessage ||
351+
!messages.find((m) => m.id === this.oldestMessage!.id)
352+
) {
353+
this.oldestMessage = currentOldestMessage;
351354
} else if (
352-
this.oldestMessageDate?.getTime() > currentOldestMessageDate.getTime()
355+
this.oldestMessage.created_at.getTime() >
356+
currentOldestMessage.created_at.getTime()
353357
) {
354-
this.oldestMessageDate = currentOldestMessageDate;
358+
this.oldestMessage = currentOldestMessage;
355359
this.olderMassagesLoaded = true;
356360
}
357361
}),
@@ -391,7 +395,7 @@ export class MessageListComponent
391395
this.isUserScrolled = false;
392396
this.containerHeight = undefined;
393397
this.olderMassagesLoaded = false;
394-
this.oldestMessageDate = undefined;
398+
this.oldestMessage = undefined;
395399
this.unreadMessageCount = 0;
396400
this.prevScrollTop = undefined;
397401
this.isNewMessageSentByUser = undefined;

0 commit comments

Comments
 (0)