@@ -46,6 +46,29 @@ export const isMessageWithStylesReadByAndDateSeparator = <
4646) : message is MessagesWithStylesReadByAndDateSeparator < StreamChatGenerics > =>
4747 ( message as MessagesWithStylesReadByAndDateSeparator < StreamChatGenerics > ) . readBy !== undefined ;
4848
49+ export const shouldIncludeMessageInList = <
50+ StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics ,
51+ > (
52+ message : MessageType < StreamChatGenerics > ,
53+ options : { deletedMessagesVisibilityType ?: DeletedMessagesVisibilityType ; userId ?: string } ,
54+ ) => {
55+ const { deletedMessagesVisibilityType, userId } = options ;
56+ const isMessageTypeDeleted = message . type === 'deleted' ;
57+ switch ( deletedMessagesVisibilityType ) {
58+ case 'sender' :
59+ return ! isMessageTypeDeleted || message . user ?. id === userId ;
60+
61+ case 'receiver' :
62+ return ! isMessageTypeDeleted || message . user ?. id !== userId ;
63+
64+ case 'never' :
65+ return ! isMessageTypeDeleted ;
66+
67+ default :
68+ return ! ! message ;
69+ }
70+ } ;
71+
4972export const useMessageList = <
5073 StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics ,
5174> (
@@ -87,26 +110,25 @@ export const useMessageList = <
87110 noGroupByUser,
88111 userId : client . userID ,
89112 } ) ;
90- return messageList
91- . filter ( ( msg ) => {
92- const isMessageTypeDeleted = msg . type === 'deleted' ;
93- if ( deletedMessagesVisibilityType === 'sender' ) {
94- return ! isMessageTypeDeleted || msg . user ?. id === client . userID ;
95- } else if ( deletedMessagesVisibilityType === 'receiver' ) {
96- return ! isMessageTypeDeleted || msg . user ?. id !== client . userID ;
97- } else if ( deletedMessagesVisibilityType === 'never' ) {
98- return ! isMessageTypeDeleted ;
99- } else {
100- return msg ;
101- }
102- } )
103- . map ( ( msg ) => ( {
104- ...msg ,
105- dateSeparator : dateSeparators [ msg . id ] || undefined ,
106- groupStyles : messageGroupStyles [ msg . id ] || [ 'single' ] ,
107- readBy : msg . id ? readData [ msg . id ] || false : false ,
108- } ) )
109- . reverse ( ) as MessageType < StreamChatGenerics > [ ] ;
113+
114+ const newMessageList = [ ] ;
115+ for ( const message of messageList ) {
116+ if (
117+ shouldIncludeMessageInList ( message , {
118+ deletedMessagesVisibilityType,
119+ userId : client . userID ,
120+ } )
121+ ) {
122+ const messageId = message . id ;
123+ newMessageList . unshift ( {
124+ ...message ,
125+ dateSeparator : dateSeparators [ messageId ] || undefined ,
126+ groupStyles : messageGroupStyles [ messageId ] || [ 'single' ] ,
127+ readBy : messageId ? readData [ messageId ] || false : false ,
128+ } ) ;
129+ }
130+ }
131+ return newMessageList ;
110132 } , [
111133 client . userID ,
112134 deletedMessagesVisibilityType ,
0 commit comments