Skip to content

Commit 84010f1

Browse files
authored
perf: optimize channel ctx usage in message (#3087)
* perf: optimize channel ctx usage in message * fix: check read by equality
1 parent 857fb68 commit 84010f1

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

package/src/components/Message/Message.tsx

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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
*/
927936
export 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

Comments
 (0)