import { useEffect, useRef } from 'react'; import type { LocalMessage } from 'stream-chat'; export function useShouldScrollToRecentOnNewOwnMessage( rawMessageList: LocalMessage[], currentUserId?: string, ) { const lastFocusedOwnMessageId = useRef(''); const initialFocusRegistered = useRef(false); const messagesRef = useRef(rawMessageList); messagesRef.current = rawMessageList; const isMyOwnNewMessageRef = useRef(() => { if (messagesRef.current && messagesRef.current.length > 0) { const lastMessage = messagesRef.current[messagesRef.current.length - 1]; if ( lastMessage && lastMessage.user?.id === currentUserId && lastFocusedOwnMessageId.current !== lastMessage.id ) { lastFocusedOwnMessageId.current = lastMessage.id; return true; } } return false; }); useEffect(() => { if (rawMessageList && rawMessageList.length) { if (!initialFocusRegistered.current) { initialFocusRegistered.current = true; const lastMessage = rawMessageList[rawMessageList.length - 1]; if (lastMessage && lastMessage.user?.id === currentUserId) { lastFocusedOwnMessageId.current = lastMessage.id; } } } }, [currentUserId, rawMessageList]); return isMyOwnNewMessageRef; }