Skip to content

Commit a67c469

Browse files
authored
Merge pull request #1088 from GetStream/vml-grouping-update
Update VML message grouping logic
2 parents d426f1c + 759fe28 commit a67c469

File tree

7 files changed

+49
-15
lines changed

7 files changed

+49
-15
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# Changelog
22

3+
## [6.4.9](https://github.com/GetStream/stream-chat-react/releases/tag/v6.4.9) 2021-08-02
4+
5+
### Feature
6+
7+
- Add `defaultLanguage` prop to `Chat` component to specify fallback language for translation of UI components [#1086](https://github.com/GetStream/stream-chat-react/pull/1086)
8+
9+
### Chore
10+
- Optimize `VirtualizedMessageList` message grouping and rendering logic [#1088](https://github.com/GetStream/stream-chat-react/pull/1088)
11+
312
## [6.4.8](https://github.com/GetStream/stream-chat-react/releases/tag/v6.4.8) 2021-07-30
413

514
### Feature

docusaurus/docs/React/contexts/message-context.mdx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@ Function that returns an array of the allowed actions on a message by the curren
7575
| ------------------------- |
7676
| () => MessageActionsArray |
7777

78+
### groupedByUser
79+
80+
If true, group messages sent by each user (only used in the `VirtualizedMessageList`).
81+
82+
| Type | Default |
83+
| ------- | ------- |
84+
| boolean | false |
85+
7886
### groupStyles
7987

8088
An array of potential styles to apply to a grouped message (ex: top, bottom, single).

docusaurus/docs/React/message-components/message.mdx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,14 @@ pinned [message object](https://getstream.io/chat/docs/javascript/message_format
129129
| ---------------------------------- |
130130
| (message: StreamMessage) => string |
131131

132+
### groupedByUser
133+
134+
If true, group messages sent by each user (only used in the `VirtualizedMessageList`).
135+
136+
| Type | Default |
137+
| ------- | ------- |
138+
| boolean | false |
139+
132140
### groupStyles
133141

134142
An array of potential styles to apply to a grouped message (ex: top, bottom, single).

src/components/Message/FixedHeightMessage.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,19 @@ const UnMemoizedFixedHeightMessage = <
7070
>(
7171
props: FixedHeightMessageProps<At, Ch, Co, Ev, Me, Re, Us>,
7272
) => {
73-
const { groupedByUser, message: propMessage } = props;
73+
const { groupedByUser: propGroupedByUser, message: propMessage } = props;
7474

7575
const { theme } = useChatContext<At, Ch, Co, Ev, Me, Re, Us>();
7676

77-
const { message: contextMessage } = useMessageContext<At, Ch, Co, Ev, Me, Re, Us>();
77+
const { groupedByUser: contextGroupedByUser, message: contextMessage } = useMessageContext<
78+
At,
79+
Ch,
80+
Co,
81+
Ev,
82+
Me,
83+
Re,
84+
Us
85+
>();
7886

7987
const { MessageDeleted = DefaultMessageDeleted } = useComponentContext<
8088
At,
@@ -85,8 +93,10 @@ const UnMemoizedFixedHeightMessage = <
8593
Re,
8694
Us
8795
>();
96+
8897
const { userLanguage } = useTranslationContext();
8998

99+
const groupedByUser = propGroupedByUser !== undefined ? propGroupedByUser : contextGroupedByUser;
90100
const message = propMessage || contextMessage;
91101

92102
const handleAction = useActionHandler(message);

src/components/Message/Message.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ const MessageWithContext = <
8080
) => {
8181
const {
8282
canPin,
83+
groupedByUser,
8384
Message: propMessage,
8485
message,
8586
messageActions = Object.keys(MESSAGE_ACTIONS),
@@ -153,7 +154,8 @@ const MessageWithContext = <
153154

154155
return (
155156
<MessageProvider value={messageContextValue}>
156-
<MessageUIComponent />
157+
<MessageUIComponent groupedByUser={groupedByUser} />
158+
{/* TODO - remove prop in next major release, maintains VML backwards compatibility */}
157159
</MessageProvider>
158160
);
159161
};
@@ -245,6 +247,7 @@ export const Message = <
245247
customMessageActions={props.customMessageActions}
246248
disableQuotedMessages={props.disableQuotedMessages}
247249
formatDate={props.formatDate}
250+
groupedByUser={props.groupedByUser}
248251
groupStyles={props.groupStyles}
249252
handleAction={handleAction}
250253
handleDelete={handleDelete}

src/components/MessageList/VirtualizedMessageList.tsx

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -218,19 +218,13 @@ const VirtualizedMessageListWithContext = <
218218
return <MessageSystem message={message} />;
219219
}
220220

221+
const groupedByUser =
222+
shouldGroupByUser &&
223+
streamMessageIndex > 0 &&
224+
message.user?.id === messageList[streamMessageIndex - 1].user?.id;
225+
221226
return (
222-
<Message
223-
message={message}
224-
Message={() => (
225-
<MessageUIComponent
226-
groupedByUser={
227-
shouldGroupByUser &&
228-
streamMessageIndex > 0 &&
229-
message.user?.id === messageList[streamMessageIndex - 1].user?.id
230-
}
231-
/>
232-
)}
233-
/>
227+
<Message groupedByUser={groupedByUser} message={message} Message={MessageUIComponent} />
234228
);
235229
},
236230
[customMessageRenderer, shouldGroupByUser, numItemsPrepended],

src/context/MessageContext.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ export type MessageContextValue<
105105
customMessageActions?: CustomMessageActions<At, Ch, Co, Ev, Me, Re, Us>;
106106
/** Override the default formatting of the date. This is a function that has access to the original date object, returns a string */
107107
formatDate?: (date: Date) => string;
108+
/** If true, group messages sent by each user (only used in the `VirtualizedMessageList`) */
109+
groupedByUser?: boolean;
108110
/** A list of styles to apply to this message, ie. top, bottom, single */
109111
groupStyles?: GroupStyle[];
110112
/** Whether the threaded message is the first in the thread list */

0 commit comments

Comments
 (0)