@@ -40,6 +40,7 @@ const ChatBody = ({
4040 showRoles,
4141 messageListRef,
4242 scrollToBottom,
43+ clearUnreadDividerRef,
4344} ) => {
4445 const { classNames, styleOverrides } = useComponentOverrides ( 'ChatBody' ) ;
4546 const { theme, mode } = useTheme ( ) ;
@@ -49,6 +50,8 @@ const ChatBody = ({
4950 const [ , setIsUserScrolledUp ] = useState ( false ) ;
5051 const [ otherUserMessage , setOtherUserMessage ] = useState ( false ) ;
5152 const [ isOverflowing , setIsOverflowing ] = useState ( false ) ;
53+ const [ firstUnreadMessageId , setFirstUnreadMessageId ] = useState ( null ) ;
54+ const pendingFirstUnreadRef = useRef ( null ) ;
5255 const { RCInstance, ECOptions } = useContext ( RCContext ) ;
5356 const showAnnouncement = ECOptions ?. showAnnouncement ;
5457 const messages = useMessageStore ( ( state ) => state . messages ) ;
@@ -124,6 +127,10 @@ const ChatBody = ({
124127 const isScrolledUp = messageListRef ?. current ?. scrollTop !== 0 ;
125128 if ( isScrolledUp && ! ( 'pinned' in message ) && ! ( 'starred' in message ) ) {
126129 setOtherUserMessage ( true ) ;
130+ // Track the first unread message (only set if not already tracking)
131+ if ( ! pendingFirstUnreadRef . current ) {
132+ pendingFirstUnreadRef . current = message . _id ;
133+ }
127134 }
128135 }
129136 upsertMessage ( message , ECOptions ?. enableThreads ) ;
@@ -177,7 +184,22 @@ const ChatBody = ({
177184 } ) ;
178185 } , [ ] ) ;
179186
187+ // Expose clearUnreadDivider function via ref for ChatInput to call
188+ useEffect ( ( ) => {
189+ if ( clearUnreadDividerRef ) {
190+ clearUnreadDividerRef . current = ( ) => {
191+ setFirstUnreadMessageId ( null ) ;
192+ pendingFirstUnreadRef . current = null ;
193+ } ;
194+ }
195+ } , [ clearUnreadDividerRef ] ) ;
196+
180197 const handlePopupClick = ( ) => {
198+ // Set the unread divider to show above the first unread message
199+ if ( pendingFirstUnreadRef . current ) {
200+ setFirstUnreadMessageId ( pendingFirstUnreadRef . current ) ;
201+ pendingFirstUnreadRef . current = null ;
202+ }
181203 scrollToBottom ( ) ;
182204 setIsUserScrolledUp ( false ) ;
183205 setOtherUserMessage ( false ) ;
@@ -242,6 +264,12 @@ const ChatBody = ({
242264 setPopupVisible ( false ) ;
243265 setIsUserScrolledUp ( false ) ;
244266 setOtherUserMessage ( false ) ;
267+ // Clear unread divider when scrolled to bottom
268+ if ( firstUnreadMessageId ) {
269+ setFirstUnreadMessageId ( null ) ;
270+ }
271+ // Also clear pending unread ref
272+ pendingFirstUnreadRef . current = null ;
245273 }
246274 } , [
247275 messageListRef ,
@@ -258,6 +286,7 @@ const ChatBody = ({
258286 setIsUserScrolledUp ,
259287 setPopupVisible ,
260288 setOtherUserMessage ,
289+ firstUnreadMessageId ,
261290 ] ) ;
262291
263292 const showNewMessagesPopup = ( ) => {
@@ -392,6 +421,7 @@ const ChatBody = ({
392421 loadingOlderMessages = { loadingOlderMessages }
393422 isUserAuthenticated = { isUserAuthenticated }
394423 hasMoreMessages = { hasMoreMessages }
424+ firstUnreadMessageId = { firstUnreadMessageId }
395425 />
396426 ) }
397427
0 commit comments