Skip to content

Commit bc521f9

Browse files
committed
fix: Close thread if parent message removed from state
1 parent d3ad756 commit bc521f9

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

projects/stream-chat-angular/src/lib/channel.service.thread.spec.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,19 @@ describe('ChannelService - threads', () => {
162162
});
163163
});
164164

165+
it('should handle if selected parent message is removed from message list', async () => {
166+
await init();
167+
let parentMessage!: StreamMessage;
168+
service.activeChannelMessages$.subscribe((m) => (parentMessage = m[0]));
169+
parentMessage.id = 'parentMessage';
170+
service.activeParentMessage$.subscribe();
171+
await service.setAsActiveParentMessage(parentMessage);
172+
spyOn(service, 'setAsActiveParentMessage').and.callThrough();
173+
await service.jumpToMessage('message-very-far-away');
174+
175+
expect(service.setAsActiveParentMessage).toHaveBeenCalledWith(undefined);
176+
});
177+
165178
it(`shouldn't deselect message to quote, if not a thread reply`, async () => {
166179
await init();
167180
const messageToQuoteSpy = jasmine.createSpy();

projects/stream-chat-angular/src/lib/channel.service.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
ReplaySubject,
77
Subscription,
88
} from 'rxjs';
9-
import { filter, first, map, shareReplay } from 'rxjs/operators';
9+
import { filter, first, map, shareReplay, tap } from 'rxjs/operators';
1010
import {
1111
Attachment,
1212
Channel,
@@ -343,7 +343,13 @@ export class ChannelService<
343343
if (!parentMessageId) {
344344
return undefined;
345345
} else {
346-
return messages.find((m) => m.id === parentMessageId);
346+
const message = messages.find((m) => m.id === parentMessageId);
347+
if (!message) {
348+
this.setAsActiveParentMessage(undefined);
349+
return undefined;
350+
} else {
351+
return message;
352+
}
347353
}
348354
}
349355
),

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ export class MessageListComponent
368368
tap((messages) => {
369369
this.isLatestMessageInList =
370370
!this.latestMessage ||
371+
messages.length === 0 ||
371372
messages[messages.length - 1].id === this.latestMessage.id;
372373
if (!this.isLatestMessageInList) {
373374
this.isUserScrolled = true;

0 commit comments

Comments
 (0)