Skip to content

Commit 3c85f10

Browse files
committed
fix: further optimize Message status component
1 parent b3fcb61 commit 3c85f10

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

package/src/components/Message/MessageSimple/MessageStatus.tsx

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
import React from 'react';
22
import { 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';
85
import {
96
MessageContextValue,
107
useMessageContext,
@@ -15,11 +12,15 @@ import { CheckAll } from '../../../icons/CheckAll';
1512
import { Time } from '../../../icons/Time';
1613
import { 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

2122
const 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

126135
export 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

Comments
 (0)