11import React from 'react' ;
22import { StyleSheet , Text , View } from 'react-native' ;
33
4- import {
5- ChannelContextValue ,
6- useChannelContext ,
7- } from '../../../contexts/channelContext/ChannelContext' ;
4+ import { useChannelContext } from '../../../contexts/channelContext/ChannelContext' ;
85import {
96 MessageContextValue ,
107 useMessageContext ,
@@ -15,11 +12,15 @@ import { CheckAll } from '../../../icons/CheckAll';
1512import { Time } from '../../../icons/Time' ;
1613import { MessageStatusTypes } from '../../../utils/utils' ;
1714
18- export type MessageStatusPropsWithContext = Pick < ChannelContextValue , 'channel' > &
19- Pick < MessageContextValue , 'deliveredToCount' | 'message' | 'readBy' | 'threadList' > ;
15+ export type MessageStatusPropsWithContext = Pick <
16+ MessageContextValue ,
17+ 'deliveredToCount' | 'message' | 'readBy' | 'threadList'
18+ > & {
19+ channelMembersCount : number ;
20+ } ;
2021
2122const MessageStatusWithContext = ( props : MessageStatusPropsWithContext ) => {
22- const { channel , deliveredToCount, message, readBy, threadList } = props ;
23+ const { channelMembersCount , deliveredToCount, message, readBy, threadList } = props ;
2324
2425 const {
2526 theme : {
@@ -46,8 +47,7 @@ const MessageStatusWithContext = (props: MessageStatusPropsWithContext) => {
4647 ! read &&
4748 message . type !== 'ephemeral' ;
4849
49- const members = channel ?. state . members ;
50- const isGroupChannel = Object . keys ( members ) . length > 2 ;
50+ const isGroupChannel = channelMembersCount > 2 ;
5151
5252 const shouldDisplayReadByCount = isGroupChannel && hasReadByGreaterThanOne ;
5353 const countOfReadBy = typeof readBy === 'number' && shouldDisplayReadByCount ? readBy - 1 : 0 ;
@@ -84,12 +84,14 @@ const areEqual = (
8484 message : prevMessage ,
8585 readBy : prevReadBy ,
8686 threadList : prevThreadList ,
87+ channelMembersCount : prevChannelMembersCount ,
8788 } = prevProps ;
8889 const {
8990 deliveredToCount : nextDeliveredBy ,
9091 message : nextMessage ,
9192 readBy : nextReadBy ,
9293 threadList : nextThreadList ,
94+ channelMembersCount : nextChannelMembersCount ,
9395 } = nextProps ;
9496
9597 const deliveredByEqual = prevDeliveredBy === nextDeliveredBy ;
@@ -107,6 +109,11 @@ const areEqual = (
107109 return false ;
108110 }
109111
112+ const channelMembersCountEqual = prevChannelMembersCount === nextChannelMembersCount ;
113+ if ( ! channelMembersCountEqual ) {
114+ return false ;
115+ }
116+
110117 const messageEqual =
111118 prevMessage . status === nextMessage . status && prevMessage . type === nextMessage . type ;
112119 if ( ! messageEqual ) {
@@ -121,15 +128,19 @@ const MemoizedMessageStatus = React.memo(
121128 areEqual ,
122129) as typeof MessageStatusWithContext ;
123130
124- export type MessageStatusProps = Partial < MessageStatusPropsWithContext > ;
131+ export type MessageStatusProps = Partial < MessageStatusPropsWithContext > & {
132+ channelMembersCount : number ;
133+ } ;
125134
126135export const MessageStatus = ( props : MessageStatusProps ) => {
127136 const { channel } = useChannelContext ( ) ;
128137 const { deliveredToCount, message, readBy, threadList } = useMessageContext ( ) ;
129138
139+ const channelMembersCount = channel ?. state . members ?. length ;
140+
130141 return (
131142 < MemoizedMessageStatus
132- { ...{ channel, deliveredToCount, message, readBy, threadList } }
143+ { ...{ channel, channelMembersCount , deliveredToCount, message, readBy, threadList } }
133144 { ...props }
134145 />
135146 ) ;
0 commit comments