@@ -104,31 +104,46 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {
104
104
confirmAndMarkAsRead ( [ props . channel ] ) ;
105
105
} , [ updateHasSeenNewLine , updateHasUserMarkedAsUnread , props . channel . url , props . resetNewMessages ] ) ;
106
106
107
+ const getPrevNonSilentMessage = useCallback (
108
+ ( messages : SendbirdMessage [ ] , prevMessageIndex : number ) : SendbirdMessage | null => {
109
+ if ( messages . length <= prevMessageIndex ) {
110
+ return null ;
111
+ }
112
+
113
+ const prevMessage = props . messages [ prevMessageIndex ] ;
114
+ if ( prevMessage ) {
115
+ if ( prevMessage . silent ) {
116
+ return getPrevNonSilentMessage ( messages , prevMessageIndex + 1 ) ;
117
+ } else {
118
+ return prevMessage ;
119
+ }
120
+ }
121
+ return null ;
122
+ } ,
123
+ [ ] ,
124
+ ) ;
125
+
107
126
const findUnreadFirstMessage = useFreshCallback ( ( isNewLineExistInChannel : boolean ) => {
108
127
if ( ! sbOptions . uikit . groupChannel . channel . enableMarkAsUnread || ! isNewLineExistInChannel ) {
109
128
return ;
110
129
}
111
130
112
131
return props . messages . find ( ( msg , index ) => {
132
+ if ( msg . silent ) {
133
+ return false ;
134
+ }
135
+
113
136
const isMarkedAsUnreadMessage = props . channel . myLastRead === msg . createdAt - 1 ;
114
137
if ( isMarkedAsUnreadMessage ) {
115
138
return true ;
116
139
}
117
140
118
- let isFirstUnreadAfterReadMessages ;
119
- if ( index < props . messages . length - 1 ) {
120
- const prevMessage = props . messages [ index + 1 ] ;
121
- const hasNoPreviousAndNoPrevMessage = ! props . hasPrevious ?.( ) && prevMessage == null ;
122
- const prevMessageIsRead = prevMessage != null && prevMessage . createdAt <= props . channel . myLastRead ;
123
- const isMessageUnread = props . channel . myLastRead < msg . createdAt ;
124
- isFirstUnreadAfterReadMessages = ( hasNoPreviousAndNoPrevMessage || prevMessageIsRead ) && isMessageUnread ;
125
- } else {
126
- const hasNoPreviousAndNoPrevMessage = ! props . hasPrevious ?.( ) ;
127
- const isMessageUnread = props . channel . myLastRead < msg . createdAt ;
128
- isFirstUnreadAfterReadMessages = hasNoPreviousAndNoPrevMessage && isMessageUnread ;
129
- }
130
-
131
- return isFirstUnreadAfterReadMessages ;
141
+ const prevNonSilentMessage = getPrevNonSilentMessage ( props . messages , index + 1 ) ;
142
+ const hasNoPreviousAndNoPrevMessage = ! props . hasPrevious ?.( ) && prevNonSilentMessage == null ;
143
+ const prevMessageIsRead =
144
+ prevNonSilentMessage != null && prevNonSilentMessage . createdAt <= props . channel . myLastRead ;
145
+ const isMessageUnread = props . channel . myLastRead < msg . createdAt ;
146
+ return ( hasNoPreviousAndNoPrevMessage || prevMessageIsRead ) && isMessageUnread ;
132
147
} ) ;
133
148
} ) ;
134
149
0 commit comments