1
1
import { Channel } from './channel' ;
2
2
import {
3
3
ChannelMemberResponse ,
4
- FormatMessageResponse ,
4
+ DefaultGenerics ,
5
5
Event ,
6
6
ExtendableGenerics ,
7
- DefaultGenerics ,
8
- MessageSetType ,
7
+ FormatMessageResponse ,
9
8
MessageResponse ,
10
- ReactionResponse ,
11
- UserResponse ,
9
+ MessageSetType ,
12
10
PendingMessageResponse ,
13
- PollVote ,
14
11
PollResponse ,
12
+ PollVote ,
13
+ ReactionResponse ,
14
+ UserResponse ,
15
15
} from './types' ;
16
16
import { addToMessageList } from './utils' ;
17
17
@@ -242,14 +242,13 @@ export class ChannelState<StreamChatGenerics extends ExtendableGenerics = Defaul
242
242
*/
243
243
if ( parentID && ! initializing ) {
244
244
const thread = this . threads [ parentID ] || [ ] ;
245
- const threadMessages = this . _addToMessageList (
245
+ this . threads [ parentID ] = this . _addToMessageList (
246
246
thread ,
247
247
message ,
248
248
timestampChanged ,
249
249
'created_at' ,
250
250
addIfDoesNotExist ,
251
251
) ;
252
- this . threads [ parentID ] = threadMessages ;
253
252
}
254
253
}
255
254
@@ -349,7 +348,13 @@ export class ChannelState<StreamChatGenerics extends ExtendableGenerics = Defaul
349
348
return messageWithReaction ;
350
349
}
351
350
352
- removeQuotedMessageReferences ( message : MessageResponse < StreamChatGenerics > ) {
351
+ _updateQuotedMessageReferences ( {
352
+ message,
353
+ remove,
354
+ } : {
355
+ message : MessageResponse < StreamChatGenerics > ;
356
+ remove ?: boolean ;
357
+ } ) {
353
358
const parseMessage = ( m : ReturnType < ChannelState < StreamChatGenerics > [ 'formatMessage' ] > ) =>
354
359
( ( {
355
360
...m ,
@@ -358,14 +363,26 @@ export class ChannelState<StreamChatGenerics extends ExtendableGenerics = Defaul
358
363
updated_at : m . updated_at ?. toISOString ( ) ,
359
364
} as unknown ) as MessageResponse < StreamChatGenerics > ) ;
360
365
361
- this . messageSets . forEach ( ( set ) => {
362
- const updatedMessages = set . messages
363
- . filter ( ( msg ) => msg . quoted_message_id === message . id )
364
- . map ( parseMessage )
365
- . map ( ( msg ) => ( { ...msg , quoted_message : { ...message , attachments : [ ] } } ) ) ;
366
-
366
+ const update = ( messages : FormatMessageResponse < StreamChatGenerics > [ ] ) => {
367
+ const updatedMessages = messages . reduce < MessageResponse < StreamChatGenerics > [ ] > ( ( acc , msg ) => {
368
+ if ( msg . quoted_message_id === message . id ) {
369
+ acc . push ( { ...parseMessage ( msg ) , quoted_message : remove ? { ...message , attachments : [ ] } : message } ) ;
370
+ }
371
+ return acc ;
372
+ } , [ ] ) ;
367
373
this . addMessagesSorted ( updatedMessages , true ) ;
368
- } ) ;
374
+ } ;
375
+
376
+ if ( ! message . parent_id ) {
377
+ this . messageSets . forEach ( ( set ) => update ( set . messages ) ) ;
378
+ } else if ( message . parent_id && this . threads [ message . parent_id ] ) {
379
+ // prevent going through all the threads even though it is possible to quote a message from another thread
380
+ update ( this . threads [ message . parent_id ] ) ;
381
+ }
382
+ }
383
+
384
+ removeQuotedMessageReferences ( message : MessageResponse < StreamChatGenerics > ) {
385
+ this . _updateQuotedMessageReferences ( { message, remove : true } ) ;
369
386
}
370
387
371
388
/**
0 commit comments