Skip to content

Commit 92f891e

Browse files
authored
Merge pull request #535 from GetStream/improve-non-immutable-rendering
Improve non immutable rendering
2 parents 696cccb + 65a9385 commit 92f891e

File tree

10 files changed

+87
-66
lines changed

10 files changed

+87
-66
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
"path": "0.12.7",
7272
"react-art": "^16.8.6",
7373
"react-native-markdown-package": "1.8.1",
74-
"stream-chat": "3.0.0"
74+
"stream-chat": "3.1.2"
7575
},
7676
"peerDependencies": {
7777
"react": "^16.8.6",

src/components/Message/Message.tsx

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import {
5151
} from '../../contexts/messageOverlayContext/MessageOverlayContext';
5252
import {
5353
MessagesContextValue,
54+
MessagesProvider,
5455
useMessagesContext,
5556
} from '../../contexts/messagesContext/MessagesContext';
5657
import {
@@ -141,6 +142,8 @@ export type MessagePropsWithContext<
141142
| 'isAdmin'
142143
| 'isModerator'
143144
| 'isOwner'
145+
| 'members'
146+
| 'readEventsEnabled'
144147
> &
145148
Pick<ChatContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'client'> &
146149
Pick<KeyboardContextValue, 'dismissKeyboard'> &
@@ -295,6 +298,7 @@ const MessageWithContext = <
295298
isModerator,
296299
isOwner,
297300
lastReceivedId,
301+
members,
298302
message,
299303
messageActions: messageActionsProp,
300304
messageContentOrder: messageContentOrderProp,
@@ -310,6 +314,7 @@ const MessageWithContext = <
310314
OverlayReactionList,
311315
preventPress,
312316
reactionsEnabled,
317+
readEventsEnabled,
313318
removeMessage,
314319
repliesEnabled,
315320
reply: replyProp,
@@ -934,6 +939,8 @@ const MessageWithContext = <
934939
alignment,
935940
animatedLongPress,
936941
canModifyMessage,
942+
channel,
943+
disabled,
937944
files: attachments.files,
938945
groupStyles: forwardedGroupStyles,
939946
handleAction,
@@ -944,6 +951,7 @@ const MessageWithContext = <
944951
forwardedGroupStyles[0] === 'single' ||
945952
forwardedGroupStyles[0] === 'bottom',
946953
lastReceivedId,
954+
members,
947955
message,
948956
messageContentOrder,
949957
onLongPress: animatedLongPress
@@ -966,6 +974,7 @@ const MessageWithContext = <
966974
otherAttachments: attachments.other,
967975
preventPress,
968976
reactions,
977+
readEventsEnabled,
969978
showAvatar,
970979
showMessageOverlay,
971980
showMessageStatus:
@@ -1048,9 +1057,18 @@ const MessageWithContext = <
10481057
targetedStyle,
10491058
]}
10501059
/>
1051-
<MessageProvider value={messageContext}>
1052-
<MessageSimple />
1053-
</MessageProvider>
1060+
{/**
1061+
* MessagesProvider is here to prevent and issue where FlatList
1062+
* and context re-rendering causes memoization to be skipped.
1063+
* We will separate messages to another context and keep the
1064+
* components currently in the same context apart to remove
1065+
* the need for this in a future PR.
1066+
*/}
1067+
<MessagesProvider value={messagesContext}>
1068+
<MessageProvider value={messageContext}>
1069+
<MessageSimple />
1070+
</MessageProvider>
1071+
</MessagesProvider>
10541072
</Animated.View>
10551073
</TapGestureHandler>
10561074
</Animated.View>
@@ -1206,6 +1224,8 @@ export const Message = <
12061224
isAdmin,
12071225
isModerator,
12081226
isOwner,
1227+
members,
1228+
readEventsEnabled,
12091229
} = useChannelContext<At, Ch, Co, Ev, Me, Re, Us>();
12101230
const { client } = useChatContext<At, Ch, Co, Ev, Me, Re, Us>();
12111231
const { dismissKeyboard } = useKeyboardContext();
@@ -1227,8 +1247,10 @@ export const Message = <
12271247
isAdmin,
12281248
isModerator,
12291249
isOwner,
1250+
members,
12301251
messagesContext,
12311252
openThread,
1253+
readEventsEnabled,
12321254
setData,
12331255
setOverlay,
12341256
t,

src/components/Message/MessageSimple/MessageContent.tsx

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ import merge from 'lodash/merge';
99

1010
import { MessageTextContainer } from './MessageTextContainer';
1111

12-
import {
13-
ChannelContextValue,
14-
useChannelContext,
15-
} from '../../../contexts/channelContext/ChannelContext';
1612
import {
1713
MessageContextValue,
1814
useMessageContext,
@@ -83,25 +79,23 @@ export type MessageContentPropsWithContext<
8379
Re extends UnknownType = DefaultReactionType,
8480
Us extends UnknownType = DefaultUserType
8581
> = Pick<
86-
ChannelContextValue<At, Ch, Co, Ev, Me, Re, Us>,
87-
'disabled' | 'members'
82+
MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>,
83+
| 'alignment'
84+
| 'disabled'
85+
| 'groupStyles'
86+
| 'hasReactions'
87+
| 'lastGroupMessage'
88+
| 'members'
89+
| 'message'
90+
| 'messageContentOrder'
91+
| 'onLongPress'
92+
| 'onlyEmojis'
93+
| 'onPress'
94+
| 'otherAttachments'
95+
| 'preventPress'
96+
| 'showMessageStatus'
97+
| 'threadList'
8898
> &
89-
Pick<
90-
MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>,
91-
| 'alignment'
92-
| 'groupStyles'
93-
| 'hasReactions'
94-
| 'lastGroupMessage'
95-
| 'message'
96-
| 'messageContentOrder'
97-
| 'onLongPress'
98-
| 'onlyEmojis'
99-
| 'onPress'
100-
| 'otherAttachments'
101-
| 'preventPress'
102-
| 'showMessageStatus'
103-
| 'threadList'
104-
> &
10599
Pick<
106100
MessagesContextValue<At, Ch, Co, Ev, Me, Re, Us>,
107101
| 'additionalTouchableProps'
@@ -553,12 +547,13 @@ export const MessageContent = <
553547
>(
554548
props: MessageContentProps<At, Ch, Co, Ev, Me, Re, Us>,
555549
) => {
556-
const { disabled, members } = useChannelContext<At, Ch, Co, Ev, Me, Re, Us>();
557550
const {
558551
alignment,
552+
disabled,
559553
groupStyles,
560554
hasReactions,
561555
lastGroupMessage,
556+
members,
562557
message,
563558
messageContentOrder,
564559
onLongPress,

src/components/Message/MessageSimple/MessageSimple.tsx

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
import React, { useState } from 'react';
22
import { StyleSheet, View } from 'react-native';
33

4-
import {
5-
ChannelContextValue,
6-
useChannelContext,
7-
} from '../../../contexts/channelContext/ChannelContext';
84
import {
95
MessageContextValue,
106
useMessageContext,
@@ -41,11 +37,10 @@ export type MessageSimplePropsWithContext<
4137
Me extends UnknownType = DefaultMessageType,
4238
Re extends UnknownType = DefaultReactionType,
4339
Us extends UnknownType = DefaultUserType
44-
> = Pick<ChannelContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'channel'> &
45-
Pick<
46-
MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>,
47-
'alignment' | 'groupStyles' | 'hasReactions' | 'message'
48-
> &
40+
> = Pick<
41+
MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>,
42+
'alignment' | 'channel' | 'groupStyles' | 'hasReactions' | 'message'
43+
> &
4944
Pick<
5045
MessagesContextValue<At, Ch, Co, Ev, Me, Re, Us>,
5146
'MessageAvatar' | 'MessageContent' | 'ReactionList'
@@ -216,16 +211,13 @@ export const MessageSimple = <
216211
>(
217212
props: MessageSimpleProps<At, Ch, Co, Ev, Me, Re, Us>,
218213
) => {
219-
const { channel } = useChannelContext<At, Ch, Co, Ev, Me, Re, Us>();
220-
const { alignment, groupStyles, hasReactions, message } = useMessageContext<
221-
At,
222-
Ch,
223-
Co,
224-
Ev,
225-
Me,
226-
Re,
227-
Us
228-
>();
214+
const {
215+
alignment,
216+
channel,
217+
groupStyles,
218+
hasReactions,
219+
message,
220+
} = useMessageContext<At, Ch, Co, Ev, Me, Re, Us>();
229221
const { MessageAvatar, MessageContent, ReactionList } = useMessagesContext<
230222
At,
231223
Ch,

src/components/Message/MessageSimple/MessageStatus.tsx

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@ import { StyleSheet, Text, View } from 'react-native';
33

44
import { isMessagesWithStylesAndReadBy } from '../../MessageList/hooks/useMessageList';
55

6-
import {
7-
ChannelContextValue,
8-
useChannelContext,
9-
} from '../../../contexts/channelContext/ChannelContext';
106
import {
117
MessageContextValue,
128
useMessageContext,
@@ -51,9 +47,8 @@ export type MessageStatusPropsWithContext<
5147
Us extends DefaultUserType = DefaultUserType
5248
> = Pick<
5349
MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>,
54-
'message' | 'threadList'
55-
> &
56-
Pick<ChannelContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'readEventsEnabled'>;
50+
'message' | 'readEventsEnabled' | 'threadList'
51+
>;
5752

5853
const MessageStatusWithContext = <
5954
At extends UnknownType = DefaultAttachmentType,
@@ -191,8 +186,7 @@ export const MessageStatus = <
191186
>(
192187
props: MessageStatusProps<At, Ch, Co, Ev, Me, Re, Us>,
193188
) => {
194-
const { readEventsEnabled } = useChannelContext<At, Ch, Co, Ev, Me, Re, Us>();
195-
const { message, threadList } = useMessageContext<
189+
const { message, readEventsEnabled, threadList } = useMessageContext<
196190
At,
197191
Ch,
198192
Co,

src/components/Message/MessageSimple/MessageTextContainer.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ export type MessageTextContainerPropsWithContext<
6363
MessagesContextValue<At, Ch, Co, Ev, Me, Re, Us>,
6464
'markdownRules' | 'MessageText'
6565
> & {
66-
theme: { theme: Theme };
6766
markdownStyles?: MarkdownStyle;
6867
styles?: Partial<{
6968
textContainer: StyleProp<ViewStyle>;
@@ -81,6 +80,8 @@ const MessageTextContainerWithContext = <
8180
>(
8281
props: MessageTextContainerPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,
8382
) => {
83+
const theme = useTheme();
84+
8485
const {
8586
markdownRules,
8687
markdownStyles: markdownStylesProp = {},
@@ -89,7 +90,6 @@ const MessageTextContainerWithContext = <
8990
onLongPress,
9091
onlyEmojis,
9192
styles: stylesProp = {},
92-
theme,
9393
} = props;
9494

9595
const {
@@ -203,7 +203,6 @@ export const MessageTextContainer = <
203203
Re,
204204
Us
205205
>();
206-
const theme = useTheme();
207206

208207
return (
209208
<MemoizedMessageTextContainer
@@ -213,7 +212,6 @@ export const MessageTextContainer = <
213212
MessageText,
214213
onLongPress,
215214
onlyEmojis,
216-
theme,
217215
}}
218216
{...props}
219217
/>

src/components/Message/hooks/useCreateMessageContext.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ export const useCreateMessageContext = <
2727
alignment,
2828
animatedLongPress,
2929
canModifyMessage,
30+
channel,
31+
disabled,
3032
files,
3133
groupStyles,
3234
handleAction,
@@ -35,6 +37,7 @@ export const useCreateMessageContext = <
3537
isMyMessage,
3638
lastGroupMessage,
3739
lastReceivedId,
40+
members,
3841
message,
3942
messageContentOrder,
4043
onLongPress,
@@ -44,6 +47,7 @@ export const useCreateMessageContext = <
4447
otherAttachments,
4548
preventPress,
4649
reactions,
50+
readEventsEnabled,
4751
showAvatar,
4852
showMessageOverlay,
4953
showMessageStatus,
@@ -62,6 +66,7 @@ export const useCreateMessageContext = <
6266
}${message.updated_at}${message.deleted_at}${readBy}${message.status}${
6367
message.type
6468
}${message.text}${message.reply_count}`;
69+
const membersValue = JSON.stringify(members);
6570

6671
const messageContext: MessageContextValue<
6772
At,
@@ -77,6 +82,8 @@ export const useCreateMessageContext = <
7782
alignment,
7883
animatedLongPress,
7984
canModifyMessage,
85+
channel,
86+
disabled,
8087
files,
8188
groupStyles,
8289
handleAction,
@@ -85,6 +92,7 @@ export const useCreateMessageContext = <
8592
isMyMessage,
8693
lastGroupMessage,
8794
lastReceivedId,
95+
members,
8896
message,
8997
messageContentOrder,
9098
onLongPress,
@@ -94,6 +102,7 @@ export const useCreateMessageContext = <
94102
otherAttachments,
95103
preventPress,
96104
reactions,
105+
readEventsEnabled,
97106
showAvatar,
98107
showMessageOverlay,
99108
showMessageStatus,
@@ -103,12 +112,15 @@ export const useCreateMessageContext = <
103112
actionsEnabled,
104113
alignment,
105114
animatedLongPress,
115+
disabled,
106116
groupStylesLength,
107117
hasReactions,
108118
lastGroupMessage,
109119
lastReceivedId,
120+
membersValue,
110121
messageValue,
111122
reactionsValue,
123+
readEventsEnabled,
112124
showAvatar,
113125
showMessageStatus,
114126
threadList,

src/components/MessageList/MessageList.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,10 @@ const MessageListWithContext = <
692692
closePicker();
693693
}
694694
};
695+
const onScrollBeginDrag = () =>
696+
!hasMoved && selectedPicker && setHasMoved(true);
697+
const onScrollEndDrag = () =>
698+
hasMoved && selectedPicker && setHasMoved(false);
695699

696700
if (!FlatList) return null;
697701

@@ -735,8 +739,8 @@ const MessageListWithContext = <
735739
}}
736740
onEndReached={threadList ? loadMoreThread : loadMore}
737741
onScroll={handleScroll}
738-
onScrollBeginDrag={() => setHasMoved(true)}
739-
onScrollEndDrag={() => setHasMoved(false)}
742+
onScrollBeginDrag={onScrollBeginDrag}
743+
onScrollEndDrag={onScrollEndDrag}
740744
onTouchEnd={dismissImagePicker}
741745
onViewableItemsChanged={onViewableItemsChanged.current}
742746
ref={(ref) => {

0 commit comments

Comments
 (0)