@@ -55,6 +55,10 @@ export interface MessageProps {
5555 * A function that is called when the new message separator visibility changes.
5656 */
5757 onNewMessageSeparatorVisibilityChange ?: ( isVisible : boolean ) => void ;
58+ /**
59+ * A function that forces scroll to message when new message is received.
60+ */
61+ forceScrollToMessage ?: ( ref : React . MutableRefObject < any > , message : CoreMessageType ) => void ;
5862 /**
5963 * @deprecated Please use `children` instead
6064 * @description Customizes all child components of the message.
@@ -97,6 +101,10 @@ export interface MessageViewProps extends MessageProps {
97101
98102 animatedMessageId : number | null ;
99103 setAnimatedMessageId : React . Dispatch < React . SetStateAction < number | null > > ;
104+
105+ newMessageIds ?: number [ ] | null ;
106+ setNewMessageIds ?: ( ids : number [ ] ) => void ;
107+
100108 onMessageAnimated ?: ( ) => void ;
101109 /** @deprecated * */
102110 highLightedMessageId ?: number | null ;
@@ -119,6 +127,7 @@ const MessageView = (props: MessageViewProps) => {
119127 chainBottom,
120128 handleScroll,
121129 onNewMessageSeparatorVisibilityChange,
130+ forceScrollToMessage,
122131
123132 // MessageViewProps
124133 channel,
@@ -147,6 +156,9 @@ const MessageView = (props: MessageViewProps) => {
147156 animatedMessageId,
148157 onMessageAnimated,
149158 usedInLegacy = true ,
159+
160+ newMessageIds,
161+ setNewMessageIds,
150162 } = props ;
151163
152164 const {
@@ -257,6 +269,23 @@ const MessageView = (props: MessageViewProps) => {
257269 } ;
258270 } , [ animatedMessageId , messageScrollRef . current , message . messageId ] ) ;
259271
272+ useLayoutEffect ( ( ) => {
273+ if ( newMessageIds ?. length > 0 && newMessageIds . includes ( message . messageId ) ) {
274+ let rafId : number | null = null ;
275+
276+ rafId = requestAnimationFrame ( ( ) => {
277+ forceScrollToMessage ( messageScrollRef , message ) ;
278+ setNewMessageIds ( [ ] ) ;
279+ } ) ;
280+
281+ return ( ) => {
282+ if ( rafId !== null ) {
283+ cancelAnimationFrame ( rafId ) ;
284+ }
285+ } ;
286+ }
287+ } , [ newMessageIds ] ) ;
288+
260289 const renderedCustomSeparator = useMemo ( ( ) => renderCustomSeparator ?.( { message } ) ?? null , [ message , renderCustomSeparator ] ) ;
261290
262291 const renderChildren = ( ) => {
0 commit comments