@@ -135,9 +135,12 @@ export type MessagePropsWithContext = Pick<
135135> &
136136 Pick < KeyboardContextValue , 'dismissKeyboard' > &
137137 Partial <
138- Omit < MessageContextValue , 'groupStyles' | 'handleReaction' | 'message' | 'isMessageAIGenerated' >
138+ Omit <
139+ MessageContextValue ,
140+ 'groupStyles' | 'handleReaction' | 'message' | 'isMessageAIGenerated' | 'readBy'
141+ >
139142 > &
140- Pick < MessageContextValue , 'groupStyles' | 'message' | 'isMessageAIGenerated' > &
143+ Pick < MessageContextValue , 'groupStyles' | 'message' | 'isMessageAIGenerated' | 'readBy' > &
141144 Pick <
142145 MessagesContextValue ,
143146 | 'sendReaction'
@@ -262,8 +265,8 @@ const MessageWithContext = (props: MessagePropsWithContext) => {
262265 t,
263266 threadList = false ,
264267 updateMessage,
268+ readBy,
265269 } = props ;
266- const { read } = useChannelContext ( ) ;
267270 const isMessageAIGenerated = messagesContext . isMessageAIGenerated ;
268271 const isAIGenerated = useMemo (
269272 ( ) => isMessageAIGenerated ( message ) ,
@@ -278,7 +281,6 @@ const MessageWithContext = (props: MessagePropsWithContext) => {
278281 screenPadding,
279282 } ,
280283 } = useTheme ( ) ;
281- const readBy = useMemo ( ( ) => getReadState ( message , read ) , [ message , read ] ) ;
282284
283285 const showMessageOverlay = async ( showMessageReactions = false , selectedReaction ?: string ) => {
284286 await dismissKeyboard ( ) ;
@@ -759,6 +761,7 @@ const areEqual = (prevProps: MessagePropsWithContext, nextProps: MessagePropsWit
759761 message : prevMessage ,
760762 messagesContext : prevMessagesContext ,
761763 showUnreadUnderlay : prevShowUnreadUnderlay ,
764+ readBy : prevReadBy ,
762765 t : prevT ,
763766 } = prevProps ;
764767 const {
@@ -771,9 +774,15 @@ const areEqual = (prevProps: MessagePropsWithContext, nextProps: MessagePropsWit
771774 message : nextMessage ,
772775 messagesContext : nextMessagesContext ,
773776 showUnreadUnderlay : nextShowUnreadUnderlay ,
777+ readBy : nextReadBy ,
774778 t : nextT ,
775779 } = nextProps ;
776780
781+ const readByEqual = prevReadBy === nextReadBy ;
782+ if ( ! readByEqual ) {
783+ return false ;
784+ }
785+
777786 const membersEqual = Object . keys ( prevMembers ) . length === Object . keys ( nextMembers ) . length ;
778787 if ( ! membersEqual ) {
779788 return false ;
@@ -925,12 +934,14 @@ export type MessageProps = Partial<
925934 * @example ./Message.md
926935 */
927936export const Message = ( props : MessageProps ) => {
928- const { channel, enforceUniqueReaction, members } = useChannelContext ( ) ;
937+ const { message } = props ;
938+ const { channel, enforceUniqueReaction, members, read } = useChannelContext ( ) ;
929939 const chatContext = useChatContext ( ) ;
930940 const { dismissKeyboard } = useKeyboardContext ( ) ;
931941 const messagesContext = useMessagesContext ( ) ;
932942 const { openThread } = useThreadContext ( ) ;
933943 const { t } = useTranslationContext ( ) ;
944+ const readBy = useMemo ( ( ) => getReadState ( message , read ) , [ message , read ] ) ;
934945
935946 return (
936947 < MemoizedMessage
@@ -943,6 +954,7 @@ export const Message = (props: MessageProps) => {
943954 members,
944955 messagesContext,
945956 openThread,
957+ readBy,
946958 t,
947959 } }
948960 { ...props }
0 commit comments