Skip to content

Commit 96aa96b

Browse files
authored
Merge pull request #665 from GetStream/CRNS-354-allow-config-override
CRNS-354: add config override
2 parents b729dbe + b2c54ad commit 96aa96b

File tree

17 files changed

+359
-203
lines changed

17 files changed

+359
-203
lines changed

CHANGELOG.md

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

3+
## [3.5.0]
4+
5+
### Bug fixes
6+
- Mute status updates on every message
7+
8+
### **🛑 BREAKING**
9+
- `reply`, `handleReply`, and `handleReplyMessage` have now all been shifted to `quotedReply`, `handleQuotedReply`, and `handleQuotedReplyMessage` respectively.
10+
311
## [3.4.0] (2021-05-14)
412

513
### Features

src/components/Channel/Channel.tsx

Lines changed: 59 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ export type ChannelPropsWithContext<
255255
| 'handleFlag'
256256
| 'handleMute'
257257
| 'handleReaction'
258-
| 'handleReply'
258+
| 'handleQuotedReply'
259259
| 'handleRetry'
260260
| 'handleThreadReply'
261261
| 'InlineDateSeparator'
@@ -283,9 +283,9 @@ export type ChannelPropsWithContext<
283283
| 'onPressInMessage'
284284
| 'onPressMessage'
285285
| 'OverlayReactionList'
286+
| 'quotedReply'
286287
| 'ReactionList'
287288
| 'Reply'
288-
| 'reply'
289289
| 'retry'
290290
| 'ScrollToBottomButton'
291291
| 'selectReaction'
@@ -381,7 +381,14 @@ export type ChannelPropsWithContext<
381381
* Custom loading error indicator to override the Stream default
382382
*/
383383
LoadingErrorIndicator?: React.ComponentType<LoadingErrorProps>;
384+
maxMessageLength?: number;
384385
messageId?: string;
386+
quotedRepliesEnabled?: boolean;
387+
reactionsEnabled?: boolean;
388+
readEventsEnabled?: boolean;
389+
threadRepliesEnabled?: boolean;
390+
typingEventsEnabled?: boolean;
391+
uploadsEnabled?: boolean;
385392
};
386393

387394
const ChannelWithContext = <
@@ -404,7 +411,6 @@ const ChannelWithContext = <
404411
AttachButton = AttachButtonDefault,
405412
Attachment = AttachmentDefault,
406413
AttachmentActions = AttachmentActionsDefault,
407-
FileAttachmentIcon = FileIconDefault,
408414
autoCompleteTriggerSettings,
409415
blockUser,
410416
Card = CardDefault,
@@ -433,6 +439,7 @@ const ChannelWithContext = <
433439
EmptyStateIndicator = EmptyStateIndicatorDefault,
434440
enforceUniqueReaction = false,
435441
FileAttachment = FileAttachmentDefault,
442+
FileAttachmentIcon = FileIconDefault,
436443
FileAttachmentGroup = FileAttachmentGroupDefault,
437444
FileUploadPreview = FileUploadPreviewDefault,
438445
flagMessage,
@@ -449,8 +456,8 @@ const ChannelWithContext = <
449456
handleEdit,
450457
handleFlag,
451458
handleMute,
459+
handleQuotedReply,
452460
handleReaction,
453-
handleReply,
454461
handleRetry,
455462
handleThreadReply,
456463
hasCommands = true,
@@ -473,6 +480,7 @@ const ChannelWithContext = <
473480
loadingMoreRecent: loadingMoreRecentProp,
474481
markdownRules,
475482
messageId,
483+
maxMessageLength: maxMessageLengthProp,
476484
maxNumberOfFiles = 10,
477485
maxTimeBetweenGroupedMessages,
478486
Message = MessageDefault,
@@ -484,18 +492,17 @@ const ChannelWithContext = <
484492
MessageFooter = MessageFooterDefault,
485493
MessageHeader,
486494
MessageList = MessageListDefault,
487-
messages: messagesProp,
488-
muteUser,
489-
myMessageTheme,
490-
NetworkDownIndicator = NetworkDownIndicatorDefault,
491-
ScrollToBottomButton = ScrollToBottomButtonDefault,
492495
MessageReplies = MessageRepliesDefault,
493496
MessageRepliesAvatars = MessageRepliesAvatarsDefault,
497+
messages: messagesProp,
494498
MessageSimple = MessageSimpleDefault,
495499
MessageStatus = MessageStatusDefault,
496500
MessageSystem = MessageSystemDefault,
497501
MessageText,
498502
MoreOptionsButton = MoreOptionsButtonDefault,
503+
muteUser,
504+
myMessageTheme,
505+
NetworkDownIndicator = NetworkDownIndicatorDefault,
499506
numberOfLines = 5,
500507
onChangeText,
501508
onDoubleTapMessage,
@@ -504,10 +511,14 @@ const ChannelWithContext = <
504511
onPressInMessage,
505512
openSuggestions,
506513
OverlayReactionList = OverlayReactionListDefault,
514+
quotedRepliesEnabled: quotedRepliesEnabledProp,
515+
quotedReply,
507516
ReactionList = ReactionListDefault,
517+
reactionsEnabled: reactionsEnabledProp,
518+
readEventsEnabled: readEventsEnabledProp,
508519
Reply = ReplyDefault,
509-
reply,
510520
retry,
521+
ScrollToBottomButton = ScrollToBottomButtonDefault,
511522
selectReaction,
512523
SendButton = SendButtonDefault,
513524
sendImageAsync = false,
@@ -517,11 +528,14 @@ const ChannelWithContext = <
517528
supportedReactions = reactionData,
518529
t,
519530
thread: threadProps,
531+
threadRepliesEnabled: threadRepliesEnabledProp,
520532
threadReply,
533+
typingEventsEnabled: typingEventsEnabledProp,
521534
TypingIndicator = TypingIndicatorDefault,
522535
TypingIndicatorContainer = TypingIndicatorContainerDefault,
523536
updateSuggestions,
524537
UploadProgressIndicator = UploadProgressIndicatorDefault,
538+
uploadsEnabled: uploadsEnabledProp,
525539
UrlPreview = CardDefault,
526540
} = props;
527541

@@ -726,8 +740,10 @@ const ChannelWithContext = <
726740
};
727741

728742
useEffect(() => {
729-
// The more complex sync logic around internet connectivity (NetInfo) is part of Chat.tsx
730-
// listen to client.connection.recovered and all channel events
743+
/**
744+
* The more complex sync logic around internet connectivity (NetInfo) is part of Chat.tsx
745+
* listen to client.connection.recovered and all channel events
746+
*/
731747
client.on('connection.recovered', connectionRecoveredHandler);
732748
client.on('connection.changed', connectionChangedHandler);
733749
channel?.on(handleEvent);
@@ -1055,35 +1071,36 @@ const ChannelWithContext = <
10551071
};
10561072

10571073
/**
1058-
* Channel configs for use in disabling local functionality
1074+
* Channel configs for use in disabling local functionality.
1075+
* Nullish coalescing is used to give first priority to props to override
1076+
* the server settings. Then priority to server settings to override defaults.
10591077
*/
1060-
const messagesConfig = {
1061-
reactionsEnabled: true,
1062-
repliesEnabled: true,
1063-
} as MessagesConfig;
1064-
const channelConfig = {
1065-
readEventsEnabled: true,
1066-
typingEventsEnabled: true,
1067-
} as ChannelConfig;
1068-
const inputConfig = {
1069-
maxMessageLength: undefined,
1070-
uploadsEnabled: true,
1071-
} as InputConfig;
1072-
if (typeof channel?.getConfig === 'function') {
1073-
const clientChannelConfig = channel.getConfig();
1074-
const maxMessageLength = clientChannelConfig?.max_message_length;
1075-
const reactions = clientChannelConfig?.reactions;
1076-
const readEvents = clientChannelConfig?.read_events;
1077-
const replies = clientChannelConfig?.replies;
1078-
const typingEvents = clientChannelConfig?.typing_events;
1079-
const uploads = clientChannelConfig?.uploads;
1080-
channelConfig.readEventsEnabled = readEvents;
1081-
channelConfig.typingEventsEnabled = typingEvents;
1082-
inputConfig.maxMessageLength = maxMessageLength;
1083-
inputConfig.uploadsEnabled = uploads;
1084-
messagesConfig.reactionsEnabled = reactions;
1085-
messagesConfig.repliesEnabled = replies;
1086-
}
1078+
const clientChannelConfig =
1079+
typeof channel?.getConfig === 'function' ? channel.getConfig() : undefined;
1080+
1081+
const messagesConfig: MessagesConfig = {
1082+
/**
1083+
* Replace with backend flag once its ready
1084+
*/
1085+
quotedRepliesEnabled: quotedRepliesEnabledProp ?? true,
1086+
reactionsEnabled:
1087+
reactionsEnabledProp ?? clientChannelConfig?.reactions ?? true,
1088+
threadRepliesEnabled:
1089+
threadRepliesEnabledProp ?? clientChannelConfig?.replies ?? true,
1090+
};
1091+
const channelConfig: ChannelConfig = {
1092+
readEventsEnabled:
1093+
readEventsEnabledProp ?? clientChannelConfig?.read_events ?? true,
1094+
typingEventsEnabled:
1095+
typingEventsEnabledProp ?? clientChannelConfig?.typing_events ?? true,
1096+
};
1097+
const inputConfig: InputConfig = {
1098+
maxMessageLength:
1099+
maxMessageLengthProp ??
1100+
clientChannelConfig?.max_message_length ??
1101+
undefined,
1102+
uploadsEnabled: uploadsEnabledProp ?? clientChannelConfig?.uploads ?? true,
1103+
};
10871104

10881105
/**
10891106
* MESSAGE METHODS
@@ -1712,8 +1729,8 @@ const ChannelWithContext = <
17121729
handleEdit,
17131730
handleFlag,
17141731
handleMute,
1732+
handleQuotedReply,
17151733
handleReaction,
1716-
handleReply,
17171734
handleRetry,
17181735
handleThreadReply,
17191736
initialScrollToFirstUnreadMessage,
@@ -1742,10 +1759,10 @@ const ChannelWithContext = <
17421759
onPressInMessage,
17431760
onPressMessage,
17441761
OverlayReactionList,
1762+
quotedReply,
17451763
ReactionList,
17461764
removeMessage,
17471765
Reply,
1748-
reply,
17491766
retry,
17501767
retrySendMessage,
17511768
ScrollToBottomButton,

src/components/Channel/hooks/useCreateMessagesContext.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ export const useCreateMessagesContext = <
5252
handleEdit,
5353
handleFlag,
5454
handleMute,
55+
handleQuotedReply,
5556
handleReaction,
56-
handleReply,
5757
handleRetry,
5858
handleThreadReply,
5959
initialScrollToFirstUnreadMessage,
@@ -82,19 +82,20 @@ export const useCreateMessagesContext = <
8282
onPressInMessage,
8383
onPressMessage,
8484
OverlayReactionList,
85+
quotedRepliesEnabled,
86+
quotedReply,
8587
ReactionList,
8688
reactionsEnabled,
8789
removeMessage,
88-
repliesEnabled,
8990
Reply,
90-
reply,
9191
retry,
9292
retrySendMessage,
9393
ScrollToBottomButton,
9494
selectReaction,
9595
setEditingState,
9696
setQuotedMessageState,
9797
supportedReactions,
98+
threadRepliesEnabled,
9899
threadReply,
99100
TypingIndicator,
100101
TypingIndicatorContainer,
@@ -153,8 +154,8 @@ export const useCreateMessagesContext = <
153154
handleEdit,
154155
handleFlag,
155156
handleMute,
157+
handleQuotedReply,
156158
handleReaction,
157-
handleReply,
158159
handleRetry,
159160
handleThreadReply,
160161
initialScrollToFirstUnreadMessage,
@@ -183,19 +184,20 @@ export const useCreateMessagesContext = <
183184
onPressInMessage,
184185
onPressMessage,
185186
OverlayReactionList,
187+
quotedRepliesEnabled,
188+
quotedReply,
186189
ReactionList,
187190
reactionsEnabled,
188191
removeMessage,
189-
repliesEnabled,
190192
Reply,
191-
reply,
192193
retry,
193194
retrySendMessage,
194195
ScrollToBottomButton,
195196
selectReaction,
196197
setEditingState,
197198
setQuotedMessageState,
198199
supportedReactions,
200+
threadRepliesEnabled,
199201
threadReply,
200202
TypingIndicator,
201203
TypingIndicatorContainer,

src/components/Chat/Chat.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import Dayjs from 'dayjs';
44

55
import { useCreateChatContext } from './hooks/useCreateChatContext';
66
import { useIsOnline } from './hooks/useIsOnline';
7+
import { useMutedUsers } from './hooks/useMutedUsers';
78

89
import {
910
ChatContextValue,
@@ -162,10 +163,14 @@ const ChatWithContext = <
162163
tDateTimeParser: (input?: string | number | Date) => Dayjs(input),
163164
});
164165

165-
// Setup translators
166+
/**
167+
* Setup translators
168+
*/
166169
const loadingTranslators = useStreami18n({ i18nInstance, setTranslators });
167170

168-
// Setup connection event listeners
171+
/**
172+
* Setup connection event listeners
173+
*/
169174
const { connectionRecovering, isOnline } = useIsOnline<
170175
At,
171176
Ch,
@@ -176,6 +181,11 @@ const ChatWithContext = <
176181
Us
177182
>(client, closeConnectionOnBackground);
178183

184+
/**
185+
* Setup muted user listener
186+
*/
187+
const mutedUsers = useMutedUsers<At, Ch, Co, Ev, Me, Re, Us>(client);
188+
179189
useEffect(() => {
180190
if (client.setUserAgent) {
181191
client.setUserAgent(`${SDK}-${Platform.OS}-${version}`);
@@ -192,6 +202,7 @@ const ChatWithContext = <
192202
client,
193203
connectionRecovering,
194204
isOnline,
205+
mutedUsers,
195206
setActiveChannel,
196207
});
197208

src/components/Chat/hooks/useCreateChatContext.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,25 @@ export const useCreateChatContext = <
2525
client,
2626
connectionRecovering,
2727
isOnline,
28+
mutedUsers,
2829
setActiveChannel,
2930
}: ChatContextValue<At, Ch, Co, Ev, Me, Re, Us>) => {
3031
const channelId = channel?.id;
3132
const clientValues = `${client.clientID}${
3233
Object.keys(client.activeChannels).length
3334
}${Object.keys(client.listeners).length}${client.mutedChannels.length}`;
35+
const mutedUsersLength = mutedUsers.length;
3436

3537
const chatContext: ChatContextValue<At, Ch, Co, Ev, Me, Re, Us> = useMemo(
3638
() => ({
3739
channel,
3840
client,
3941
connectionRecovering,
4042
isOnline,
43+
mutedUsers,
4144
setActiveChannel,
4245
}),
43-
[channelId, clientValues, connectionRecovering, isOnline],
46+
[channelId, clientValues, connectionRecovering, isOnline, mutedUsersLength],
4447
);
4548

4649
return chatContext;

0 commit comments

Comments
 (0)