Skip to content

Commit 3038e7b

Browse files
committed
fix: change date separator and group styles to ref
1 parent 3f6d111 commit 3038e7b

File tree

3 files changed

+26
-16
lines changed

3 files changed

+26
-16
lines changed

package/src/components/MessageList/MessageList.tsx

+9-8
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
318318
* NOTE: rawMessageList changes only when messages array state changes
319319
* processedMessageList changes on any state change
320320
*/
321-
const { dateSeparators, messageGroupStyles, processedMessageList, rawMessageList } =
321+
const { dateSeparatorsRef, messageGroupStylesRef, processedMessageList, rawMessageList } =
322322
useMessageList({
323323
noGroupByUser,
324324
threadList,
@@ -493,7 +493,7 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
493493
const onViewableItemsChanged = useRef(unstableOnViewableItemsChanged);
494494
onViewableItemsChanged.current = unstableOnViewableItemsChanged;
495495

496-
const stableOnViwableItemsChanged = useCallback(
496+
const stableOnViewableItemsChanged = useCallback(
497497
({ viewableItems }: { viewableItems: ViewToken[] | undefined }) => {
498498
onViewableItemsChanged.current({ viewableItems });
499499
},
@@ -753,13 +753,14 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
753753
const showUnreadUnderlay = !!shouldShowUnreadUnderlay && showUnreadSeparator;
754754

755755
const wrapMessageInTheme = client.userID === message.user?.id && !!myMessageTheme;
756-
const renderDateSeperator = dateSeparators[message.id] && (
757-
<InlineDateSeparator date={dateSeparators[message.id]} />
756+
const renderDateSeperator = dateSeparatorsRef.current[message.id] && (
757+
<InlineDateSeparator date={dateSeparatorsRef.current[message.id]} />
758758
);
759+
759760
const renderMessage = (
760761
<Message
761762
goToMessage={goToMessage}
762-
groupStyles={messageGroupStyles[message.id] ?? []}
763+
groupStyles={messageGroupStylesRef.current[message.id] ?? []}
763764
isTargetedMessage={highlightedMessageId === message.id}
764765
lastReceivedId={
765766
lastReceivedId === message.id || message.quoted_message_id ? lastReceivedId : undefined
@@ -810,12 +811,12 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
810811
channelUnreadState?.last_read_message_id,
811812
channelUnreadState?.unread_messages,
812813
client.userID,
813-
dateSeparators,
814+
dateSeparatorsRef,
814815
goToMessage,
815816
highlightedMessageId,
816817
lastReceivedId,
817818
messageContainer,
818-
messageGroupStyles,
819+
messageGroupStylesRef,
819820
modifiedTheme,
820821
myMessageTheme,
821822
onThreadSelect,
@@ -1249,7 +1250,7 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
12491250
onScrollEndDrag={onScrollEndDrag}
12501251
onScrollToIndexFailed={onScrollToIndexFailedRef.current}
12511252
onTouchEnd={dismissImagePicker}
1252-
onViewableItemsChanged={stableOnViwableItemsChanged}
1253+
onViewableItemsChanged={stableOnViewableItemsChanged}
12531254
ref={refCallback}
12541255
renderItem={renderItem}
12551256
scrollEnabled={overlay === 'none'}

package/src/components/MessageList/hooks/useMessageList.ts

+16-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useMemo } from 'react';
1+
import { useMemo, useRef } from 'react';
22

33
import type { LocalMessage } from 'stream-chat';
44

@@ -11,7 +11,7 @@ import {
1111
import { usePaginatedMessageListContext } from '../../../contexts/paginatedMessageListContext/PaginatedMessageListContext';
1212
import { useThreadContext } from '../../../contexts/threadContext/ThreadContext';
1313

14-
import { getDateSeparators } from '../utils/getDateSeparators';
14+
import { DateSeparators, getDateSeparators } from '../utils/getDateSeparators';
1515
import { getGroupStyles } from '../utils/getGroupStyles';
1616

1717
export type UseMessageListParams = {
@@ -22,6 +22,10 @@ export type UseMessageListParams = {
2222

2323
export type GroupType = string;
2424

25+
export type MessageGroupStyles = {
26+
[key: string]: string[];
27+
};
28+
2529
export const shouldIncludeMessageInList = (
2630
message: LocalMessage,
2731
options: { deletedMessagesVisibilityType?: DeletedMessagesVisibilityType; userId?: string },
@@ -51,7 +55,6 @@ export const useMessageList = (params: UseMessageListParams) => {
5155
useMessagesContext();
5256
const { messages } = usePaginatedMessageListContext();
5357
const { threadMessages } = useThreadContext();
54-
5558
const messageList = threadList ? threadMessages : messages;
5659

5760
const dateSeparators = useMemo(
@@ -65,19 +68,22 @@ export const useMessageList = (params: UseMessageListParams) => {
6568
[deletedMessagesVisibilityType, hideDateSeparators, messageList, client.userID],
6669
);
6770

71+
const dateSeparatorsRef = useRef<DateSeparators>(dateSeparators);
72+
dateSeparatorsRef.current = dateSeparators;
73+
6874
const messageGroupStyles = useMemo(
6975
() =>
7076
getMessagesGroupStyles({
71-
dateSeparators,
77+
dateSeparators: dateSeparatorsRef.current,
7278
hideDateSeparators,
7379
maxTimeBetweenGroupedMessages,
7480
messages: messageList,
7581
noGroupByUser,
7682
userId: client.userID,
7783
}),
7884
[
85+
dateSeparatorsRef,
7986
getMessagesGroupStyles,
80-
dateSeparators,
8187
hideDateSeparators,
8288
maxTimeBetweenGroupedMessages,
8389
messageList,
@@ -86,6 +92,9 @@ export const useMessageList = (params: UseMessageListParams) => {
8692
],
8793
);
8894

95+
const messageGroupStylesRef = useRef<MessageGroupStyles>(messageGroupStyles);
96+
messageGroupStylesRef.current = messageGroupStyles;
97+
8998
const processedMessageList = useMemo<LocalMessage[]>(() => {
9099
const newMessageList = [];
91100
for (const message of messageList) {
@@ -103,9 +112,9 @@ export const useMessageList = (params: UseMessageListParams) => {
103112

104113
return {
105114
/** Date separators */
106-
dateSeparators,
115+
dateSeparatorsRef,
107116
/** Message group styles */
108-
messageGroupStyles,
117+
messageGroupStylesRef,
109118
/** Messages enriched with dates/readby/groups and also reversed in order */
110119
processedMessageList,
111120
/** Raw messages from the channel state */

package/src/components/MessageList/utils/getGroupStyles.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ const getGroupStyle = (
4040
previousMessage.type === 'error' ||
4141
userId !== previousMessage?.user?.id ||
4242
!!isPrevMessageTypeDeleted ||
43-
(!hideDateSeparators && dateSeparators[message.id]) ||
43+
(!hideDateSeparators && dateSeparators[previousMessage.id]) ||
4444
isEditedMessage(previousMessage);
4545

4646
const isBottomMessage =

0 commit comments

Comments
 (0)