@@ -104,31 +104,46 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {
104104 confirmAndMarkAsRead ( [ props . channel ] ) ;
105105 } , [ updateHasSeenNewLine , updateHasUserMarkedAsUnread , props . channel . url , props . resetNewMessages ] ) ;
106106
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+
107126 const findUnreadFirstMessage = useFreshCallback ( ( isNewLineExistInChannel : boolean ) => {
108127 if ( ! sbOptions . uikit . groupChannel . channel . enableMarkAsUnread || ! isNewLineExistInChannel ) {
109128 return ;
110129 }
111130
112131 return props . messages . find ( ( msg , index ) => {
132+ if ( msg . silent ) {
133+ return false ;
134+ }
135+
113136 const isMarkedAsUnreadMessage = props . channel . myLastRead === msg . createdAt - 1 ;
114137 if ( isMarkedAsUnreadMessage ) {
115138 return true ;
116139 }
117140
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 ;
132147 } ) ;
133148 } ) ;
134149
0 commit comments