stream-chat-react 11.4.0 → 11.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/browser.full-bundle.js +6138 -5630
  2. package/dist/browser.full-bundle.js.map +1 -1
  3. package/dist/browser.full-bundle.min.js +4 -4
  4. package/dist/browser.full-bundle.min.js.map +1 -1
  5. package/dist/components/Channel/Channel.d.ts +9 -2
  6. package/dist/components/Channel/Channel.d.ts.map +1 -1
  7. package/dist/components/Channel/Channel.js +86 -22
  8. package/dist/components/ChannelPreview/ChannelPreview.d.ts +16 -0
  9. package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
  10. package/dist/components/ChannelPreview/ChannelPreview.js +16 -2
  11. package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts +5 -0
  12. package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts.map +1 -1
  13. package/dist/components/ChannelPreview/ChannelPreviewMessenger.js +62 -2
  14. package/dist/components/Emojis/index.cjs.js +1 -1
  15. package/dist/components/Message/Message.d.ts.map +1 -1
  16. package/dist/components/Message/Message.js +40 -8
  17. package/dist/components/Message/hooks/index.d.ts +2 -0
  18. package/dist/components/Message/hooks/index.d.ts.map +1 -1
  19. package/dist/components/Message/hooks/index.js +2 -0
  20. package/dist/components/Message/hooks/useMarkUnreadHandler.d.ts +10 -0
  21. package/dist/components/Message/hooks/useMarkUnreadHandler.d.ts.map +1 -0
  22. package/dist/components/Message/hooks/useMarkUnreadHandler.js +45 -0
  23. package/dist/components/Message/hooks/useReactionsFetcher.d.ts +11 -0
  24. package/dist/components/Message/hooks/useReactionsFetcher.d.ts.map +1 -0
  25. package/dist/components/Message/hooks/useReactionsFetcher.js +58 -0
  26. package/dist/components/Message/hooks/useUserRole.d.ts +1 -0
  27. package/dist/components/Message/hooks/useUserRole.d.ts.map +1 -1
  28. package/dist/components/Message/hooks/useUserRole.js +2 -0
  29. package/dist/components/Message/types.d.ts +7 -1
  30. package/dist/components/Message/types.d.ts.map +1 -1
  31. package/dist/components/Message/utils.d.ts +4 -1
  32. package/dist/components/Message/utils.d.ts.map +1 -1
  33. package/dist/components/Message/utils.js +12 -3
  34. package/dist/components/MessageActions/MessageActions.d.ts +1 -1
  35. package/dist/components/MessageActions/MessageActions.d.ts.map +1 -1
  36. package/dist/components/MessageActions/MessageActions.js +4 -3
  37. package/dist/components/MessageActions/MessageActionsBox.d.ts +1 -1
  38. package/dist/components/MessageActions/MessageActionsBox.d.ts.map +1 -1
  39. package/dist/components/MessageActions/MessageActionsBox.js +3 -4
  40. package/dist/components/MessageList/MessageList.d.ts +3 -1
  41. package/dist/components/MessageList/MessageList.d.ts.map +1 -1
  42. package/dist/components/MessageList/MessageList.js +29 -13
  43. package/dist/components/MessageList/MessageListMainPanel.d.ts +1 -0
  44. package/dist/components/MessageList/MessageListMainPanel.d.ts.map +1 -1
  45. package/dist/components/MessageList/MessageListMainPanel.js +2 -1
  46. package/dist/components/MessageList/MessageListNotifications.d.ts +1 -0
  47. package/dist/components/MessageList/MessageListNotifications.d.ts.map +1 -1
  48. package/dist/components/MessageList/MessageListNotifications.js +2 -2
  49. package/dist/components/MessageList/MessageNotification.d.ts +2 -0
  50. package/dist/components/MessageList/MessageNotification.d.ts.map +1 -1
  51. package/dist/components/MessageList/ScrollToBottomButton.d.ts +1 -1
  52. package/dist/components/MessageList/ScrollToBottomButton.d.ts.map +1 -1
  53. package/dist/components/MessageList/ScrollToBottomButton.js +3 -44
  54. package/dist/components/MessageList/UnreadMessagesNotification.d.ts +6 -0
  55. package/dist/components/MessageList/UnreadMessagesNotification.d.ts.map +1 -0
  56. package/dist/components/MessageList/UnreadMessagesNotification.js +12 -0
  57. package/dist/components/MessageList/UnreadMessagesSeparator.d.ts +6 -0
  58. package/dist/components/MessageList/UnreadMessagesSeparator.d.ts.map +1 -0
  59. package/dist/components/MessageList/UnreadMessagesSeparator.js +10 -0
  60. package/dist/components/MessageList/VirtualizedMessageList.d.ts +12 -1
  61. package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
  62. package/dist/components/MessageList/VirtualizedMessageList.js +42 -19
  63. package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +5 -3
  64. package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts.map +1 -1
  65. package/dist/components/MessageList/VirtualizedMessageListComponents.js +27 -6
  66. package/dist/components/MessageList/hooks/MessageList/index.d.ts +1 -0
  67. package/dist/components/MessageList/hooks/MessageList/index.d.ts.map +1 -1
  68. package/dist/components/MessageList/hooks/MessageList/index.js +1 -0
  69. package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts +2 -5
  70. package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts.map +1 -1
  71. package/dist/components/MessageList/hooks/MessageList/useMessageListElements.js +3 -1
  72. package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts +7 -0
  73. package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts.map +1 -0
  74. package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.js +42 -0
  75. package/dist/components/MessageList/hooks/VirtualizedMessageList/index.d.ts +1 -0
  76. package/dist/components/MessageList/hooks/VirtualizedMessageList/index.d.ts.map +1 -1
  77. package/dist/components/MessageList/hooks/VirtualizedMessageList/index.js +1 -0
  78. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts +22 -0
  79. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts.map +1 -0
  80. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.js +29 -0
  81. package/dist/components/MessageList/hooks/useMarkRead.d.ts +19 -0
  82. package/dist/components/MessageList/hooks/useMarkRead.d.ts.map +1 -0
  83. package/dist/components/MessageList/hooks/useMarkRead.js +38 -0
  84. package/dist/components/MessageList/icons.d.ts +1 -0
  85. package/dist/components/MessageList/icons.d.ts.map +1 -1
  86. package/dist/components/MessageList/icons.js +2 -0
  87. package/dist/components/MessageList/index.d.ts +2 -0
  88. package/dist/components/MessageList/index.d.ts.map +1 -1
  89. package/dist/components/MessageList/index.js +2 -0
  90. package/dist/components/MessageList/renderMessages.d.ts +13 -2
  91. package/dist/components/MessageList/renderMessages.d.ts.map +1 -1
  92. package/dist/components/MessageList/renderMessages.js +16 -11
  93. package/dist/components/Reactions/ReactionsList.d.ts +2 -1
  94. package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
  95. package/dist/components/Reactions/ReactionsList.js +32 -41
  96. package/dist/components/Reactions/ReactionsListModal.d.ts +13 -0
  97. package/dist/components/Reactions/ReactionsListModal.d.ts.map +1 -0
  98. package/dist/components/Reactions/ReactionsListModal.js +46 -0
  99. package/dist/components/Reactions/SimpleReactionsList.d.ts +2 -4
  100. package/dist/components/Reactions/SimpleReactionsList.d.ts.map +1 -1
  101. package/dist/components/Reactions/SimpleReactionsList.js +7 -24
  102. package/dist/components/Reactions/hooks/useFetchReactions.d.ts +12 -0
  103. package/dist/components/Reactions/hooks/useFetchReactions.d.ts.map +1 -0
  104. package/dist/components/Reactions/hooks/useFetchReactions.js +50 -0
  105. package/dist/components/Reactions/hooks/useProcessReactions.d.ts +3 -13
  106. package/dist/components/Reactions/hooks/useProcessReactions.d.ts.map +1 -1
  107. package/dist/components/Reactions/hooks/useProcessReactions.js +51 -46
  108. package/dist/components/Reactions/types.d.ts +9 -0
  109. package/dist/components/Reactions/types.d.ts.map +1 -0
  110. package/dist/components/Reactions/types.js +1 -0
  111. package/dist/context/ChannelActionContext.d.ts +2 -0
  112. package/dist/context/ChannelActionContext.d.ts.map +1 -1
  113. package/dist/context/ComponentContext.d.ts +6 -2
  114. package/dist/context/ComponentContext.d.ts.map +1 -1
  115. package/dist/context/MessageContext.d.ts +8 -2
  116. package/dist/context/MessageContext.d.ts.map +1 -1
  117. package/dist/css/v2/index.css +1 -1
  118. package/dist/css/v2/index.layout.css +1 -1
  119. package/dist/i18n/Streami18n.d.ts +10 -0
  120. package/dist/i18n/Streami18n.d.ts.map +1 -1
  121. package/dist/i18n/de.json +10 -0
  122. package/dist/i18n/en.json +10 -0
  123. package/dist/i18n/es.json +12 -0
  124. package/dist/i18n/fr.json +12 -0
  125. package/dist/i18n/hi.json +11 -0
  126. package/dist/i18n/it.json +12 -0
  127. package/dist/i18n/ja.json +8 -0
  128. package/dist/i18n/ko.json +8 -0
  129. package/dist/i18n/nl.json +10 -0
  130. package/dist/i18n/pt.json +12 -0
  131. package/dist/i18n/ru.json +14 -0
  132. package/dist/i18n/tr.json +10 -0
  133. package/dist/{icons-b84cd102.js → icons-7ead3d97.js} +12 -12
  134. package/dist/index.cjs.js +4880 -4372
  135. package/dist/scss/v2/AttachmentPreviewList/AttachmentPreviewList-layout.scss +1 -0
  136. package/dist/scss/v2/Autocomplete/Autocomplete-layout.scss +16 -8
  137. package/dist/scss/v2/Avatar/Avatar-theme.scss +1 -0
  138. package/dist/scss/v2/Message/Message-layout.scss +68 -10
  139. package/dist/scss/v2/Message/Message-theme.scss +34 -2
  140. package/dist/scss/v2/MessageActionsBox/MessageActionsBox-layout.scss +0 -11
  141. package/dist/scss/v2/MessageBounceOptions/MessageBounceOptions-layout.scss +18 -0
  142. package/dist/scss/v2/MessageBounceOptions/MessageBounceOptions-theme.scss +51 -0
  143. package/dist/scss/v2/MessageReactions/MessageReactions-layout.scss +74 -0
  144. package/dist/scss/v2/MessageReactions/MessageReactions-theme.scss +17 -0
  145. package/dist/scss/v2/_base.scss +3 -20
  146. package/dist/scss/v2/_global-theme-variables.scss +3 -0
  147. package/dist/scss/v2/index.layout.scss +1 -0
  148. package/dist/scss/v2/index.scss +1 -1
  149. package/dist/version.d.ts +1 -1
  150. package/dist/version.js +1 -1
  151. package/package.json +5 -3
@@ -8,7 +8,8 @@ import type { MessageProps } from '../Message/types';
8
8
  import type { MessageInputProps } from '../MessageInput/MessageInput';
9
9
  import type { CustomTrigger, DefaultStreamChatGenerics, GiphyVersions, ImageAttachmentSizeHandler, SendMessageOptions, UpdateMessageOptions, VideoAttachmentSizeHandler } from '../../types/types';
10
10
  import type { URLEnrichmentConfig } from '../MessageInput/hooks/useLinkPreviews';
11
- import { ReactionOptions } from '../../components/Reactions/reactionOptions';
11
+ import { ReactionOptions } from '../Reactions';
12
+ import type { UnreadMessagesNotificationProps } from '../MessageList';
12
13
  type ChannelPropsForwardedToComponentContext<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
13
14
  /** Custom UI component to display a message attachment, defaults to and accepts same props as: [Attachment](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Attachment/Attachment.tsx) */
14
15
  Attachment?: ComponentContextValue<StreamChatGenerics>['Attachment'];
@@ -96,13 +97,17 @@ type ChannelPropsForwardedToComponentContext<StreamChatGenerics extends DefaultS
96
97
  TriggerProvider?: ComponentContextValue<StreamChatGenerics>['TriggerProvider'];
97
98
  /** Custom UI component for the typing indicator, defaults to and accepts same props as: [TypingIndicator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/TypingIndicator/TypingIndicator.tsx) */
98
99
  TypingIndicator?: ComponentContextValue<StreamChatGenerics>['TypingIndicator'];
100
+ /** Custom UI component that indicates a user is viewing unread messages. It disappears once the user scrolls to UnreadMessagesSeparator. Defaults to and accepts same props as: [UnreadMessagesNotification](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageList/UnreadMessagesNotification.tsx) */
101
+ UnreadMessagesNotification?: React.ComponentType<UnreadMessagesNotificationProps>;
102
+ /** Custom UI component that separates read messages from unread, defaults to and accepts same props as: [UnreadMessagesSeparator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageList/UnreadMessagesSeparator.tsx) */
103
+ UnreadMessagesSeparator?: ComponentContextValue<StreamChatGenerics>['UnreadMessagesSeparator'];
99
104
  /** Custom UI component to display a message in the `VirtualizedMessageList`, does not have a default implementation */
100
105
  VirtualMessage?: ComponentContextValue<StreamChatGenerics>['VirtualMessage'];
101
106
  };
102
107
  export type ChannelProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger> = ChannelPropsForwardedToComponentContext<StreamChatGenerics> & {
103
108
  /** List of accepted file types */
104
109
  acceptedFiles?: string[];
105
- /** Custom handler function that runs when the active channel has unread messages (i.e., when chat is running on a separate browser tab) */
110
+ /** Custom handler function that runs when the active channel has unread messages (i.e., when chat is running in a separate browser tab) */
106
111
  activeUnreadHandler?: (unread: number, documentTitle: string) => void;
107
112
  /** The connected and active channel */
108
113
  channel?: StreamChannel<StreamChatGenerics>;
@@ -143,6 +148,8 @@ export type ChannelProps<StreamChatGenerics extends DefaultStreamChatGenerics =
143
148
  * Preventing to initialize the channel on mount allows us to postpone the channel creation to a later point in time.
144
149
  */
145
150
  initializeOnMount?: boolean;
151
+ /** Configuration parameter to mark the active channel as read when mounted (opened). By default, the channel is not marked read on mount. */
152
+ markReadOnMount?: boolean;
146
153
  /** Maximum number of attachments allowed per message */
147
154
  maxNumberOfFiles?: number;
148
155
  /** Whether to allow multiple attachment uploads */
@@ -1 +1 @@
1
- {"version":3,"file":"Channel.d.ts","sourceRoot":"","sources":["../../../src/components/Channel/Channel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Channel.d.ts","sourceRoot":"","sources":["../../../src/components/Channel/Channel.tsx"],"names":[],"mappings":"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"}
@@ -23,12 +23,12 @@ import { useChatContext } from '../../context/ChatContext';
23
23
  import { useTranslationContext } from '../../context/TranslationContext';
24
24
  import { TypingProvider } from '../../context/TypingContext';
25
25
  import { DEFAULT_INITIAL_CHANNEL_PAGE_SIZE, DEFAULT_NEXT_CHANNEL_PAGE_SIZE, DEFAULT_THREAD_PAGE_SIZE, } from '../../constants/limits';
26
- import { hasMoreMessagesProbably } from '../MessageList/utils';
27
- import { makeAddNotifications } from './utils';
28
- import { getChannel } from '../../utils/getChannel';
26
+ import { hasMoreMessagesProbably, UnreadMessagesSeparator } from '../MessageList';
29
27
  import { useChannelContainerClasses } from './hooks/useChannelContainerClasses';
28
+ import { makeAddNotifications } from './utils';
29
+ import { getChannel } from '../../utils';
30
30
  import { getImageAttachmentConfiguration, getVideoAttachmentConfiguration, } from '../Attachment/attachment-sizing';
31
- import { defaultReactionOptions, } from '../../components/Reactions/reactionOptions';
31
+ import { defaultReactionOptions } from '../Reactions';
32
32
  import { EventComponent } from '../EventComponent';
33
33
  import { DateSeparator } from '../DateSeparator';
34
34
  var isUserResponseArray = function (output) { var _a; return ((_a = output[0]) === null || _a === void 0 ? void 0 : _a.id) != null; };
@@ -55,7 +55,7 @@ var UnMemoizedChannel = function (props) {
55
55
  };
56
56
  var ChannelInner = function (props) {
57
57
  var _a;
58
- var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, channelQueryOptions = props.channelQueryOptions, children = props.children, doDeleteMessageRequest = props.doDeleteMessageRequest, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _b = props.dragAndDropWindow, dragAndDropWindow = _b === void 0 ? false : _b, enrichURLForPreviewConfig = props.enrichURLForPreviewConfig, _c = props.initializeOnMount, initializeOnMount = _c === void 0 ? true : _c, _d = props.LoadingErrorIndicator, LoadingErrorIndicator = _d === void 0 ? DefaultLoadingErrorIndicator : _d, _e = props.LoadingIndicator, LoadingIndicator = _e === void 0 ? DefaultLoadingIndicator : _e, maxNumberOfFiles = props.maxNumberOfFiles, _f = props.multipleUploads, multipleUploads = _f === void 0 ? true : _f, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, _g = props.optionalMessageInputProps, optionalMessageInputProps = _g === void 0 ? {} : _g, skipMessageDataMemoization = props.skipMessageDataMemoization;
58
+ var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, channelQueryOptions = props.channelQueryOptions, children = props.children, doDeleteMessageRequest = props.doDeleteMessageRequest, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _b = props.dragAndDropWindow, dragAndDropWindow = _b === void 0 ? false : _b, enrichURLForPreviewConfig = props.enrichURLForPreviewConfig, _c = props.initializeOnMount, initializeOnMount = _c === void 0 ? true : _c, _d = props.LoadingErrorIndicator, LoadingErrorIndicator = _d === void 0 ? DefaultLoadingErrorIndicator : _d, _e = props.LoadingIndicator, LoadingIndicator = _e === void 0 ? DefaultLoadingIndicator : _e, markReadOnMount = props.markReadOnMount, maxNumberOfFiles = props.maxNumberOfFiles, _f = props.multipleUploads, multipleUploads = _f === void 0 ? true : _f, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, _g = props.optionalMessageInputProps, optionalMessageInputProps = _g === void 0 ? {} : _g, skipMessageDataMemoization = props.skipMessageDataMemoization;
59
59
  var _h = useChatContext('Channel'), client = _h.client, customClasses = _h.customClasses, latestMessageDatesByChannels = _h.latestMessageDatesByChannels, mutes = _h.mutes, theme = _h.theme;
60
60
  var t = useTranslationContext('Channel').t;
61
61
  var _j = useChannelContainerClasses({ customClasses: customClasses }), channelClass = _j.channelClass, chatClass = _j.chatClass, chatContainerClass = _j.chatContainerClass, windowsEmojiClass = _j.windowsEmojiClass;
@@ -73,7 +73,8 @@ var ChannelInner = function (props) {
73
73
  leading: true,
74
74
  trailing: true,
75
75
  });
76
- var markRead = function () {
76
+ // eslint-disable-next-line react-hooks/exhaustive-deps
77
+ var markRead = useCallback(throttle(function () {
77
78
  if (channel.disconnected || !(channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events)) {
78
79
  return;
79
80
  }
@@ -90,8 +91,7 @@ var ChannelInner = function (props) {
90
91
  else if (originalTitle.current) {
91
92
  document.title = originalTitle.current;
92
93
  }
93
- };
94
- var markReadThrottled = throttle(markRead, 500, { leading: true, trailing: true });
94
+ }, 500, { leading: true, trailing: false }), [activeUnreadHandler, channel, channelConfig, doMarkReadRequest]);
95
95
  var handleEvent = function (event) { return __awaiter(void 0, void 0, void 0, function () {
96
96
  var mainChannelUpdated, unread, messageDate, cid, oldestID;
97
97
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
@@ -119,10 +119,7 @@ var ChannelInner = function (props) {
119
119
  mainChannelUpdated = false;
120
120
  }
121
121
  if (mainChannelUpdated) {
122
- if (!document.hidden) {
123
- markReadThrottled();
124
- }
125
- else if ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events) && !channel.muteStatus().muted) {
122
+ if (document.hidden && (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events) && !channel.muteStatus().muted) {
126
123
  unread = channel.countUnread(lastRead.current);
127
124
  if (activeUnreadHandler) {
128
125
  activeUnreadHandler(unread, originalTitle.current);
@@ -170,10 +167,6 @@ var ChannelInner = function (props) {
170
167
  useLayoutEffect(function () {
171
168
  var errored = false;
172
169
  var done = false;
173
- var onVisibilityChange = function () {
174
- if (!document.hidden)
175
- markRead();
176
- };
177
170
  (function () { return __awaiter(void 0, void 0, void 0, function () {
178
171
  var members, _i, _a, member, userId, _b, user, user_id, config, e_1;
179
172
  var _c, _d, _e;
@@ -228,10 +221,9 @@ var ChannelInner = function (props) {
228
221
  *
229
222
  * const lastRead = channel.state.read[client.userID as string].last_read;
230
223
  */
231
- if (channel.countUnread() > 0)
224
+ if (channel.countUnread() > 0 && markReadOnMount)
232
225
  markRead();
233
226
  // The more complex sync logic is done in Chat
234
- document.addEventListener('visibilitychange', onVisibilityChange);
235
227
  client.on('connection.changed', handleEvent);
236
228
  client.on('connection.recovered', handleEvent);
237
229
  client.on('user.updated', handleEvent);
@@ -245,7 +237,6 @@ var ChannelInner = function (props) {
245
237
  return function () {
246
238
  if (errored || !done)
247
239
  return;
248
- document.removeEventListener('visibilitychange', onVisibilityChange);
249
240
  channel === null || channel === void 0 ? void 0 : channel.off(handleEvent);
250
241
  client.off('connection.changed', handleEvent);
251
242
  client.off('connection.recovered', handleEvent);
@@ -409,6 +400,73 @@ var ChannelInner = function (props) {
409
400
  }
410
401
  });
411
402
  }); };
403
+ var jumpToFirstUnreadMessage = useCallback(function (queryMessageLimit) {
404
+ if (queryMessageLimit === void 0) { queryMessageLimit = 100; }
405
+ return __awaiter(void 0, void 0, void 0, function () {
406
+ var readState, indexOfLastReadMessage, currentMessageSet, i, id, hasMoreMessages, e_4, firstUnreadMessage, jumpToMessageId;
407
+ var _a;
408
+ return __generator(this, function (_b) {
409
+ switch (_b.label) {
410
+ case 0:
411
+ if (!client.user)
412
+ return [2 /*return*/];
413
+ readState = channel.state.read[client.user.id];
414
+ if (!(readState === null || readState === void 0 ? void 0 : readState.last_read_message_id)) {
415
+ addNotification(t('Failed to jump to the first unread message'), 'error');
416
+ return [2 /*return*/];
417
+ }
418
+ currentMessageSet = channel.state.messages;
419
+ for (i = currentMessageSet.length - 1; i >= 0; i--) {
420
+ id = currentMessageSet[i].id;
421
+ if (id === readState.last_read_message_id) {
422
+ indexOfLastReadMessage = i;
423
+ break;
424
+ }
425
+ }
426
+ if (!(typeof indexOfLastReadMessage === 'undefined')) return [3 /*break*/, 5];
427
+ dispatch({ loadingMore: true, type: 'setLoadingMore' });
428
+ hasMoreMessages = true;
429
+ _b.label = 1;
430
+ case 1:
431
+ _b.trys.push([1, 3, , 4]);
432
+ return [4 /*yield*/, channel.state.loadMessageIntoState(readState.last_read_message_id, undefined, queryMessageLimit)];
433
+ case 2:
434
+ _b.sent();
435
+ /**
436
+ * if the index of the last read message on the page is beyond the half of the page,
437
+ * we have arrived to the oldest page of the channel
438
+ */
439
+ indexOfLastReadMessage = channel.state.messages.findIndex(function (message) { return message.id === readState.last_read_message_id; });
440
+ hasMoreMessages = indexOfLastReadMessage >= Math.floor(queryMessageLimit / 2);
441
+ return [3 /*break*/, 4];
442
+ case 3:
443
+ e_4 = _b.sent();
444
+ addNotification(t('Failed to jump to the first unread message'), 'error');
445
+ loadMoreFinished(hasMoreMessages, channel.state.messages);
446
+ return [2 /*return*/];
447
+ case 4:
448
+ loadMoreFinished(hasMoreMessages, channel.state.messages);
449
+ _b.label = 5;
450
+ case 5:
451
+ firstUnreadMessage = channel.state.messages[indexOfLastReadMessage + 1];
452
+ jumpToMessageId = (_a = firstUnreadMessage === null || firstUnreadMessage === void 0 ? void 0 : firstUnreadMessage.id) !== null && _a !== void 0 ? _a : readState.last_read_message_id;
453
+ dispatch({
454
+ hasMoreNewer: channel.state.messages !== channel.state.latestMessages,
455
+ highlightedMessageId: jumpToMessageId,
456
+ type: 'jumpToMessageFinished',
457
+ });
458
+ if (clearHighlightedMessageTimeoutId.current) {
459
+ clearTimeout(clearHighlightedMessageTimeoutId.current);
460
+ }
461
+ clearHighlightedMessageTimeoutId.current = setTimeout(function () {
462
+ clearHighlightedMessageTimeoutId.current = null;
463
+ dispatch({ type: 'clearHighlightedMessage' });
464
+ }, 500);
465
+ return [2 /*return*/];
466
+ }
467
+ });
468
+ });
469
+ }, [addNotification, channel, client, loadMoreFinished, t]);
412
470
  var deleteMessage = useCallback(function (message) { return __awaiter(void 0, void 0, void 0, function () {
413
471
  var deletedMessage, result;
414
472
  return __generator(this, function (_a) {
@@ -471,7 +529,7 @@ var ChannelInner = function (props) {
471
529
  existingMessage = void 0;
472
530
  for (i = channel.state.messages.length - 1; i >= 0; i--) {
473
531
  msg = channel.state.messages[i];
474
- if (msg.id === messageData.id) {
532
+ if (msg.id && msg.id === messageData.id) {
475
533
  existingMessage = msg;
476
534
  break;
477
535
  }
@@ -570,7 +628,7 @@ var ChannelInner = function (props) {
570
628
  var loadMoreThread = function (limit) {
571
629
  if (limit === void 0) { limit = DEFAULT_THREAD_PAGE_SIZE; }
572
630
  return __awaiter(void 0, void 0, void 0, function () {
573
- var parentId, oldMessages, oldestMessageId, queryResponse, threadHasMoreMessages, newThreadMessages, e_4;
631
+ var parentId, oldMessages, oldestMessageId, queryResponse, threadHasMoreMessages, newThreadMessages, e_5;
574
632
  var _a;
575
633
  return __generator(this, function (_b) {
576
634
  switch (_b.label) {
@@ -600,7 +658,7 @@ var ChannelInner = function (props) {
600
658
  loadMoreThreadFinished(threadHasMoreMessages, newThreadMessages);
601
659
  return [3 /*break*/, 4];
602
660
  case 3:
603
- e_4 = _b.sent();
661
+ e_5 = _b.sent();
604
662
  loadMoreThreadFinished(false, oldMessages);
605
663
  return [3 /*break*/, 4];
606
664
  case 4: return [2 /*return*/];
@@ -618,11 +676,13 @@ var ChannelInner = function (props) {
618
676
  deleteMessage: deleteMessage,
619
677
  dispatch: dispatch,
620
678
  editMessage: editMessage,
679
+ jumpToFirstUnreadMessage: jumpToFirstUnreadMessage,
621
680
  jumpToLatestMessage: jumpToLatestMessage,
622
681
  jumpToMessage: jumpToMessage,
623
682
  loadMore: loadMore,
624
683
  loadMoreNewer: loadMoreNewer,
625
684
  loadMoreThread: loadMoreThread,
685
+ markRead: markRead,
626
686
  onMentionsClick: onMentionsHoverOrClick,
627
687
  onMentionsHover: onMentionsHoverOrClick,
628
688
  openThread: openThread,
@@ -641,7 +701,9 @@ var ChannelInner = function (props) {
641
701
  enrichURLForPreviewConfig === null || enrichURLForPreviewConfig === void 0 ? void 0 : enrichURLForPreviewConfig.onLinkPreviewDismissed,
642
702
  loadMore,
643
703
  loadMoreNewer,
704
+ markRead,
644
705
  quotedMessage,
706
+ jumpToFirstUnreadMessage,
645
707
  jumpToMessage,
646
708
  jumpToLatestMessage,
647
709
  ]);
@@ -690,6 +752,8 @@ var ChannelInner = function (props) {
690
752
  ThreadStart: props.ThreadStart,
691
753
  TriggerProvider: props.TriggerProvider,
692
754
  TypingIndicator: props.TypingIndicator,
755
+ UnreadMessagesNotification: props.UnreadMessagesNotification,
756
+ UnreadMessagesSeparator: props.UnreadMessagesSeparator || UnreadMessagesSeparator,
693
757
  VirtualMessage: props.VirtualMessage,
694
758
  });
695
759
  },
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { MarkChannelReadOn } from './ChannelPreviewMessenger';
2
3
  import { ChatContextValue } from '../../context/ChatContext';
3
4
  import { MessageDeliveryStatus } from './hooks/useMessageDeliveryStatus';
4
5
  import type { Channel } from 'stream-chat';
@@ -16,6 +17,21 @@ export type ChannelPreviewUIComponentProps<StreamChatGenerics extends DefaultStr
16
17
  lastMessage?: StreamMessage<StreamChatGenerics>;
17
18
  /** Latest message preview to display, will be a string or JSX element supporting markdown. */
18
19
  latestMessage?: string | JSX.Element;
20
+ /**
21
+ * Configuration that determines when and whether a channel is marked read upon clicking ChannelPreview.
22
+ * 1. MarkChannelReadOn.never:
23
+ * Prevents a channel from being marked read when any ChannelPreview is clicked.
24
+ * 2. MarkChannelReadOn.leave:
25
+ * Marks active channel read before switching the active channel state to the clicked preview's channel.
26
+ * This means that active channel being left is marked read before navigating to another channel.
27
+ * 3. MarkChannelReadOn.reenter:
28
+ * Channel, which is re-entered by clicking the preview, is marked read.
29
+ * That means
30
+ * 1. an active channel can be marked unread, left and on return marked read.
31
+ * 2. a non-active channel receives a new message, is entered, left and re-entered and marked read.
32
+ * The default configuration is set to MarkChannelReadOn.reenter.
33
+ */
34
+ markActiveChannelReadOn?: MarkChannelReadOn;
19
35
  /** Status describing whether own message has been delivered or read by another. If the last message is not an own message, then the status is undefined. */
20
36
  messageDeliveryStatus?: MessageDeliveryStatus;
21
37
  /** Number of unread Messages */
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelPreview.d.ts","sourceRoot":"","sources":["../../../src/components/ChannelPreview/ChannelPreview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAOhE,OAAO,EAAE,gBAAgB,EAAkB,MAAM,2BAA2B,CAAC;AAE7E,OAAO,EAAE,qBAAqB,EAA4B,MAAM,kCAAkC,CAAC;AAEnG,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,MAAM,8BAA8B,CACxC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,mBAAmB,CAAC,kBAAkB,CAAC,GAAG;IAC5C,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAChD,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IACrC,4JAA4J;IAC5J,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAC7B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,6MAA6M;IAC7M,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,sCAAsC;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5C,+LAA+L;IAC/L,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1C,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC7C,6PAA6P;IAC7P,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,8BAA8B,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClF,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC5E,2CAA2C;IAC3C,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD,CAAC;AAEF,eAAO,MAAM,cAAc,0JAgF1B,CAAC"}
1
+ {"version":3,"file":"ChannelPreview.d.ts","sourceRoot":"","sources":["../../../src/components/ChannelPreview/ChannelPreview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAEhE,OAAO,EAA2B,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAKvF,OAAO,EAAE,gBAAgB,EAAkB,MAAM,2BAA2B,CAAC;AAE7E,OAAO,EAAE,qBAAqB,EAA4B,MAAM,kCAAkC,CAAC;AAEnG,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,MAAM,8BAA8B,CACxC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,mBAAmB,CAAC,kBAAkB,CAAC,GAAG;IAC5C,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAChD,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IACrC;;;;;;;;;;;;;OAaG;IACH,uBAAuB,CAAC,EAAE,iBAAiB,CAAC;IAC5C,4JAA4J;IAC5J,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAC7B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,6MAA6M;IAC7M,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,sCAAsC;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5C,+LAA+L;IAC/L,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1C,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC7C,6PAA6P;IAC7P,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,8BAA8B,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClF,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC5E,2CAA2C;IAC3C,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD,CAAC;AAEF,eAAO,MAAM,cAAc,0JA4F1B,CAAC"}
@@ -31,14 +31,28 @@ export var ChannelPreview = function (props) {
31
31
  return function () { return client.off('notification.mark_read', handleEvent); };
32
32
  // eslint-disable-next-line react-hooks/exhaustive-deps
33
33
  }, []);
34
+ useEffect(function () {
35
+ var handleEvent = function (event) {
36
+ var _a, _b;
37
+ if (channel.cid !== event.cid)
38
+ return;
39
+ if (((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) !== ((_b = client.user) === null || _b === void 0 ? void 0 : _b.id))
40
+ return;
41
+ setUnread(channel.countUnread());
42
+ };
43
+ channel.on('notification.mark_unread', handleEvent);
44
+ return function () {
45
+ channel.off('notification.mark_unread', handleEvent);
46
+ };
47
+ }, [channel, client]);
34
48
  var refreshUnreadCount = useCallback(function () {
35
- if (isActive || muted) {
49
+ if (muted) {
36
50
  setUnread(0);
37
51
  }
38
52
  else {
39
53
  setUnread(channel.countUnread());
40
54
  }
41
- }, [channel, isActive, muted]);
55
+ }, [channel, muted]);
42
56
  useEffect(function () {
43
57
  refreshUnreadCount();
44
58
  var handleEvent = function (event) {
@@ -1,5 +1,10 @@
1
1
  import type { ChannelPreviewUIComponentProps } from './ChannelPreview';
2
2
  import type { DefaultStreamChatGenerics } from '../../types/types';
3
+ export declare enum MarkChannelReadOn {
4
+ 'never' = 0,
5
+ 'leave' = 1,
6
+ 'reenter' = 2
7
+ }
3
8
  /**
4
9
  * Used as preview component for channel item in [ChannelList](#channellist) component.
5
10
  * Its best suited for messenger type chat.
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelPreviewMessenger.d.ts","sourceRoot":"","sources":["../../../src/components/ChannelPreview/ChannelPreviewMessenger.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAwEnE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,8JAES,CAAC"}
1
+ {"version":3,"file":"ChannelPreviewMessenger.d.ts","sourceRoot":"","sources":["../../../src/components/ChannelPreview/ChannelPreviewMessenger.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,oBAAY,iBAAiB;IAC3B,OAAO,IAAA;IACP,OAAO,IAAA;IACP,SAAS,IAAA;CACV;AA4HD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,8JAES,CAAC"}
@@ -1,22 +1,82 @@
1
- import React, { useRef } from 'react';
1
+ import React, { useEffect, useRef } from 'react';
2
2
  import clsx from 'clsx';
3
3
  import { Avatar as DefaultAvatar } from '../Avatar';
4
+ import { useChatContext } from '../../context';
5
+ export var MarkChannelReadOn;
6
+ (function (MarkChannelReadOn) {
7
+ MarkChannelReadOn[MarkChannelReadOn["never"] = 0] = "never";
8
+ MarkChannelReadOn[MarkChannelReadOn["leave"] = 1] = "leave";
9
+ MarkChannelReadOn[MarkChannelReadOn["reenter"] = 2] = "reenter";
10
+ })(MarkChannelReadOn || (MarkChannelReadOn = {}));
4
11
  var UnMemoizedChannelPreviewMessenger = function (props) {
5
12
  var _a, _b;
6
- var active = props.active, _c = props.Avatar, Avatar = _c === void 0 ? DefaultAvatar : _c, channel = props.channel, _d = props.className, customClassName = _d === void 0 ? '' : _d, displayImage = props.displayImage, displayTitle = props.displayTitle, latestMessage = props.latestMessage, customOnSelectChannel = props.onSelect, setActiveChannel = props.setActiveChannel, unread = props.unread, watchers = props.watchers;
13
+ var active = props.active, activeChannel = props.activeChannel, _c = props.Avatar, Avatar = _c === void 0 ? DefaultAvatar : _c, channel = props.channel, _d = props.className, customClassName = _d === void 0 ? '' : _d, displayImage = props.displayImage, displayTitle = props.displayTitle, latestMessage = props.latestMessage, _e = props.markActiveChannelReadOn, markActiveChannelReadOn = _e === void 0 ? MarkChannelReadOn.reenter : _e, customOnSelectChannel = props.onSelect, setActiveChannel = props.setActiveChannel, unread = props.unread, watchers = props.watchers;
14
+ var client = useChatContext('ChannelPreviewMessenger').client;
7
15
  var channelPreviewButton = useRef(null);
8
16
  var avatarName = displayTitle || ((_b = (_a = channel.state.messages[channel.state.messages.length - 1]) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.id);
17
+ var previouslyClicked = useRef(active);
18
+ var handleMarkReadOnReenter = function () {
19
+ if (!client.user)
20
+ return;
21
+ var ownReadState = channel.state.read[client.user.id];
22
+ if (!previouslyClicked.current) {
23
+ previouslyClicked.current = true;
24
+ }
25
+ else if (!active &&
26
+ ((ownReadState === null || ownReadState === void 0 ? void 0 : ownReadState.first_unread_message_id) || (ownReadState === null || ownReadState === void 0 ? void 0 : ownReadState.unread_messages) > 0) &&
27
+ previouslyClicked.current) {
28
+ channel.markRead();
29
+ }
30
+ };
31
+ var handleMarkReadOnLeave = function () {
32
+ if (!(client.user && activeChannel))
33
+ return;
34
+ var ownReadState = activeChannel.state.read[client.user.id];
35
+ if ((ownReadState === null || ownReadState === void 0 ? void 0 : ownReadState.first_unread_message_id) || (ownReadState === null || ownReadState === void 0 ? void 0 : ownReadState.unread_messages) > 0) {
36
+ activeChannel.markRead();
37
+ }
38
+ };
9
39
  var onSelectChannel = function (e) {
10
40
  if (customOnSelectChannel) {
11
41
  customOnSelectChannel(e);
12
42
  }
13
43
  else if (setActiveChannel) {
44
+ // eslint-disable-next-line default-case
45
+ switch (markActiveChannelReadOn) {
46
+ case MarkChannelReadOn.never:
47
+ break;
48
+ case MarkChannelReadOn.leave:
49
+ handleMarkReadOnLeave();
50
+ break;
51
+ case MarkChannelReadOn.reenter:
52
+ handleMarkReadOnReenter();
53
+ }
14
54
  setActiveChannel(channel, watchers);
15
55
  }
16
56
  if (channelPreviewButton === null || channelPreviewButton === void 0 ? void 0 : channelPreviewButton.current) {
17
57
  channelPreviewButton.current.blur();
18
58
  }
19
59
  };
60
+ useEffect(function () {
61
+ if (markActiveChannelReadOn !== MarkChannelReadOn.reenter)
62
+ return;
63
+ var handleEvent = function (event) {
64
+ var _a, _b;
65
+ if (active)
66
+ return;
67
+ if (channel.cid !== event.cid)
68
+ return;
69
+ if (event.type === 'notification.mark_unread' && ((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) !== ((_b = client.user) === null || _b === void 0 ? void 0 : _b.id))
70
+ return;
71
+ previouslyClicked.current = false;
72
+ };
73
+ channel.on('notification.mark_unread', handleEvent);
74
+ channel.on('message.new', handleEvent);
75
+ return function () {
76
+ channel.off('notification.mark_unread', handleEvent);
77
+ channel.off('message.new', handleEvent);
78
+ };
79
+ }, [active, channel, client, markActiveChannelReadOn, previouslyClicked]);
20
80
  return (React.createElement("button", { "aria-label": "Select Channel: ".concat(displayTitle || ''), "aria-selected": active, className: clsx("str-chat__channel-preview-messenger str-chat__channel-preview", active && 'str-chat__channel-preview-messenger--active', unread && unread >= 1 && 'str-chat__channel-preview-messenger--unread', customClassName), "data-testid": 'channel-preview-button', onClick: onSelectChannel, ref: channelPreviewButton, role: 'option' },
21
81
  React.createElement("div", { className: 'str-chat__channel-preview-messenger--left' },
22
82
  React.createElement(Avatar, { image: displayImage, name: avatarName, size: 40 })),
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var icons = require('../../icons-b84cd102.js');
5
+ var icons = require('../../icons-7ead3d97.js');
6
6
  var React = require('react');
7
7
  var Picker = require('@emoji-mart/react');
8
8
  require('react-dom');
@@ -1 +1 @@
1
- {"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../../src/components/Message/Message.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAuHnE;;;GAGG;AACH,eAAO,MAAM,OAAO,uLAkHnB,CAAC"}
1
+ {"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../../src/components/Message/Message.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAsJnE;;;GAGG;AACH,eAAO,MAAM,OAAO,uLAkInB,CAAC"}
@@ -1,10 +1,12 @@
1
1
  import { __assign, __rest } from "tslib";
2
- import React, { useCallback, useRef } from 'react';
3
- import { useActionHandler, useDeleteHandler, useEditHandler, useFlagHandler, useMentionsHandler, useMuteHandler, useOpenThreadHandler, usePinHandler, useReactionClick, useReactionHandler, useRetryHandler, useUserHandler, useUserRole, } from './hooks';
2
+ import React, { useCallback, useMemo, useRef } from 'react';
3
+ import { useActionHandler, useDeleteHandler, useEditHandler, useFlagHandler, useMarkUnreadHandler, useMentionsHandler, useMuteHandler, useOpenThreadHandler, usePinHandler, useReactionClick, useReactionHandler, useReactionsFetcher, useRetryHandler, useUserHandler, useUserRole, } from './hooks';
4
4
  import { areMessagePropsEqual, getMessageActions, MESSAGE_ACTIONS } from './utils';
5
- import { MessageProvider, useChannelActionContext, useChannelStateContext, useComponentContext, } from '../../context';
5
+ import { MessageProvider, useChannelActionContext, useChannelStateContext, useChatContext, useComponentContext, } from '../../context';
6
6
  var MessageWithContext = function (props) {
7
7
  var canPin = props.canPin, groupedByUser = props.groupedByUser, propMessage = props.Message, message = props.message, _a = props.messageActions, messageActions = _a === void 0 ? Object.keys(MESSAGE_ACTIONS) : _a, propOnUserClick = props.onUserClick, propOnUserHover = props.onUserHover, userRoles = props.userRoles;
8
+ var client = useChatContext('Message').client;
9
+ var read = useChannelStateContext('Message').read;
8
10
  var contextMessage = useComponentContext('Message').Message;
9
11
  var actionsEnabled = message.type === 'regular' && message.status === 'received';
10
12
  var MessageUIComponent = propMessage || contextMessage;
@@ -13,19 +15,40 @@ var MessageWithContext = function (props) {
13
15
  onUserClickHandler: propOnUserClick,
14
16
  onUserHoverHandler: propOnUserHover,
15
17
  }), onUserClick = _c.onUserClick, onUserHover = _c.onUserHover;
16
- var canDelete = userRoles.canDelete, canEdit = userRoles.canEdit, canFlag = userRoles.canFlag, canMute = userRoles.canMute, canQuote = userRoles.canQuote, canReact = userRoles.canReact, canReply = userRoles.canReply, isMyMessage = userRoles.isMyMessage;
18
+ var canDelete = userRoles.canDelete, canEdit = userRoles.canEdit, canFlag = userRoles.canFlag, canMarkUnread = userRoles.canMarkUnread, canMute = userRoles.canMute, canQuote = userRoles.canQuote, canReact = userRoles.canReact, canReply = userRoles.canReply, isMyMessage = userRoles.isMyMessage;
19
+ var messageIsUnread = useMemo(function () {
20
+ var _a;
21
+ return !!(!isMyMessage &&
22
+ ((_a = client.user) === null || _a === void 0 ? void 0 : _a.id) &&
23
+ read &&
24
+ (!read[client.user.id] ||
25
+ ((message === null || message === void 0 ? void 0 : message.created_at) &&
26
+ new Date(message.created_at).getTime() > read[client.user.id].last_read.getTime())));
27
+ }, [client, isMyMessage, message.created_at, read]);
17
28
  var messageActionsHandler = useCallback(function () {
18
29
  return getMessageActions(messageActions, {
19
30
  canDelete: canDelete,
20
31
  canEdit: canEdit,
21
32
  canFlag: canFlag,
33
+ canMarkUnread: canMarkUnread,
22
34
  canMute: canMute,
23
35
  canPin: canPin,
24
36
  canQuote: canQuote,
25
37
  canReact: canReact,
26
38
  canReply: canReply,
27
39
  });
28
- }, [messageActions, canDelete, canEdit, canFlag, canMute, canPin, canQuote, canReact, canReply]);
40
+ }, [
41
+ messageActions,
42
+ canDelete,
43
+ canEdit,
44
+ canFlag,
45
+ canMarkUnread,
46
+ canMute,
47
+ canPin,
48
+ canQuote,
49
+ canReact,
50
+ canReply,
51
+ ]);
29
52
  var canPinPropToNotPass = props.canPin, // eslint-disable-line @typescript-eslint/no-unused-vars
30
53
  messageActionsPropToNotPass = props.messageActions, // eslint-disable-line @typescript-eslint/no-unused-vars
31
54
  onlySenderCanEditPropToNotPass = props.onlySenderCanEdit, // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -33,7 +56,7 @@ var MessageWithContext = function (props) {
33
56
  onUserHoverPropToNotPass = props.onUserHover, // eslint-disable-line @typescript-eslint/no-unused-vars
34
57
  userRolesPropToNotPass = props.userRoles, // eslint-disable-line @typescript-eslint/no-unused-vars
35
58
  rest = __rest(props, ["canPin", "messageActions", "onlySenderCanEdit", "onUserClick", "onUserHover", "userRoles"]);
36
- var messageContextValue = __assign(__assign({}, rest), { actionsEnabled: actionsEnabled, clearEditingState: clearEdit, editing: editing, getMessageActions: messageActionsHandler, handleEdit: setEdit, isMyMessage: function () { return isMyMessage; }, onUserClick: onUserClick, onUserHover: onUserHover, setEditingState: setEdit });
59
+ var messageContextValue = __assign(__assign({}, rest), { actionsEnabled: actionsEnabled, clearEditingState: clearEdit, editing: editing, getMessageActions: messageActionsHandler, handleEdit: setEdit, isMyMessage: function () { return isMyMessage; }, messageIsUnread: messageIsUnread, onUserClick: onUserClick, onUserHover: onUserHover, setEditingState: setEdit });
37
60
  return (React.createElement(MessageProvider, { value: messageContextValue },
38
61
  React.createElement(MessageUIComponent, { groupedByUser: groupedByUser })));
39
62
  };
@@ -43,7 +66,7 @@ var MemoizedMessage = React.memo(MessageWithContext, areMessagePropsEqual);
43
66
  * an individual message. The actual UI of the message is delegated via the Message prop on Channel.
44
67
  */
45
68
  export var Message = function (props) {
46
- var closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, disableQuotedMessages = props.disableQuotedMessages, getDeleteMessageErrorNotification = props.getDeleteMessageErrorNotification, getFlagMessageErrorNotification = props.getFlagMessageErrorNotification, getFlagMessageSuccessNotification = props.getFlagMessageSuccessNotification, getMuteUserErrorNotification = props.getMuteUserErrorNotification, getMuteUserSuccessNotification = props.getMuteUserSuccessNotification, getPinMessageErrorNotification = props.getPinMessageErrorNotification, message = props.message, _a = props.onlySenderCanEdit, onlySenderCanEdit = _a === void 0 ? false : _a, propOnMentionsClick = props.onMentionsClick, propOnMentionsHover = props.onMentionsHover, propOpenThread = props.openThread, pinPermissions = props.pinPermissions, propRetrySendMessage = props.retrySendMessage;
69
+ var closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, disableQuotedMessages = props.disableQuotedMessages, getDeleteMessageErrorNotification = props.getDeleteMessageErrorNotification, getFetchReactionsErrorNotification = props.getFetchReactionsErrorNotification, getFlagMessageErrorNotification = props.getFlagMessageErrorNotification, getFlagMessageSuccessNotification = props.getFlagMessageSuccessNotification, getMarkMessageUnreadErrorNotification = props.getMarkMessageUnreadErrorNotification, getMarkMessageUnreadSuccessNotification = props.getMarkMessageUnreadSuccessNotification, getMuteUserErrorNotification = props.getMuteUserErrorNotification, getMuteUserSuccessNotification = props.getMuteUserSuccessNotification, getPinMessageErrorNotification = props.getPinMessageErrorNotification, message = props.message, _a = props.onlySenderCanEdit, onlySenderCanEdit = _a === void 0 ? false : _a, propOnMentionsClick = props.onMentionsClick, propOnMentionsHover = props.onMentionsHover, propOpenThread = props.openThread, pinPermissions = props.pinPermissions, propRetrySendMessage = props.retrySendMessage;
47
70
  var addNotification = useChannelActionContext('Message').addNotification;
48
71
  var _b = useChannelStateContext('Message'), highlightedMessageId = _b.highlightedMessageId, mutes = _b.mutes;
49
72
  var reactionSelectorRef = useRef(null);
@@ -52,6 +75,10 @@ export var Message = function (props) {
52
75
  var handleReaction = useReactionHandler(message);
53
76
  var handleRetry = useRetryHandler(propRetrySendMessage);
54
77
  var userRoles = useUserRole(message, onlySenderCanEdit, disableQuotedMessages);
78
+ var handleFetchReactions = useReactionsFetcher(message, {
79
+ getErrorNotification: getFetchReactionsErrorNotification,
80
+ notify: addNotification,
81
+ });
55
82
  var handleDelete = useDeleteHandler(message, {
56
83
  getErrorNotification: getDeleteMessageErrorNotification,
57
84
  notify: addNotification,
@@ -61,6 +88,11 @@ export var Message = function (props) {
61
88
  getSuccessNotification: getFlagMessageSuccessNotification,
62
89
  notify: addNotification,
63
90
  });
91
+ var handleMarkUnread = useMarkUnreadHandler(message, {
92
+ getErrorNotification: getMarkMessageUnreadErrorNotification,
93
+ getSuccessNotification: getMarkMessageUnreadSuccessNotification,
94
+ notify: addNotification,
95
+ });
64
96
  var handleMute = useMuteHandler(message, {
65
97
  getErrorNotification: getMuteUserErrorNotification,
66
98
  getSuccessNotification: getMuteUserSuccessNotification,
@@ -76,5 +108,5 @@ export var Message = function (props) {
76
108
  }), canPin = _d.canPin, handlePin = _d.handlePin;
77
109
  var _e = useReactionClick(message, reactionSelectorRef, undefined, closeReactionSelectorOnClick), isReactionEnabled = _e.isReactionEnabled, onReactionListClick = _e.onReactionListClick, showDetailedReactions = _e.showDetailedReactions;
78
110
  var highlighted = highlightedMessageId === message.id;
79
- return (React.createElement(MemoizedMessage, { additionalMessageInputProps: props.additionalMessageInputProps, autoscrollToBottom: props.autoscrollToBottom, canPin: canPin, customMessageActions: props.customMessageActions, disableQuotedMessages: props.disableQuotedMessages, endOfGroup: props.endOfGroup, firstOfGroup: props.firstOfGroup, formatDate: props.formatDate, groupedByUser: props.groupedByUser, groupStyles: props.groupStyles, handleAction: handleAction, handleDelete: handleDelete, handleFlag: handleFlag, handleMute: handleMute, handleOpenThread: handleOpenThread, handlePin: handlePin, handleReaction: handleReaction, handleRetry: handleRetry, highlighted: highlighted, initialMessage: props.initialMessage, isReactionEnabled: isReactionEnabled, lastReceivedId: props.lastReceivedId, message: message, Message: props.Message, messageActions: props.messageActions, messageListRect: props.messageListRect, mutes: mutes, onMentionsClickMessage: onMentionsClick, onMentionsHoverMessage: onMentionsHover, onReactionListClick: onReactionListClick, onUserClick: props.onUserClick, onUserHover: props.onUserHover, pinPermissions: props.pinPermissions, reactionSelectorRef: reactionSelectorRef, readBy: props.readBy, renderText: props.renderText, showDetailedReactions: showDetailedReactions, threadList: props.threadList, unsafeHTML: props.unsafeHTML, userRoles: userRoles }));
111
+ return (React.createElement(MemoizedMessage, { additionalMessageInputProps: props.additionalMessageInputProps, autoscrollToBottom: props.autoscrollToBottom, canPin: canPin, customMessageActions: props.customMessageActions, disableQuotedMessages: props.disableQuotedMessages, endOfGroup: props.endOfGroup, firstOfGroup: props.firstOfGroup, formatDate: props.formatDate, groupedByUser: props.groupedByUser, groupStyles: props.groupStyles, handleAction: handleAction, handleDelete: handleDelete, handleFetchReactions: handleFetchReactions, handleFlag: handleFlag, handleMarkUnread: handleMarkUnread, handleMute: handleMute, handleOpenThread: handleOpenThread, handlePin: handlePin, handleReaction: handleReaction, handleRetry: handleRetry, highlighted: highlighted, initialMessage: props.initialMessage, isReactionEnabled: isReactionEnabled, lastReceivedId: props.lastReceivedId, message: message, Message: props.Message, messageActions: props.messageActions, messageListRect: props.messageListRect, mutes: mutes, onMentionsClickMessage: onMentionsClick, onMentionsHoverMessage: onMentionsHover, onReactionListClick: onReactionListClick, onUserClick: props.onUserClick, onUserHover: props.onUserHover, pinPermissions: props.pinPermissions, reactionSelectorRef: reactionSelectorRef, readBy: props.readBy, renderText: props.renderText, showDetailedReactions: showDetailedReactions, threadList: props.threadList, unsafeHTML: props.unsafeHTML, userRoles: userRoles }));
80
112
  };
@@ -3,6 +3,7 @@ export * from './useDeleteHandler';
3
3
  export * from './useEditHandler';
4
4
  export * from './useFlagHandler';
5
5
  export * from './useMentionsHandler';
6
+ export * from './useMarkUnreadHandler';
6
7
  export * from './useMuteHandler';
7
8
  export * from './useOpenThreadHandler';
8
9
  export * from './usePinHandler';
@@ -10,4 +11,5 @@ export * from './useReactionHandler';
10
11
  export * from './useRetryHandler';
11
12
  export * from './useUserHandler';
12
13
  export * from './useUserRole';
14
+ export * from './useReactionsFetcher';
13
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Message/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Message/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC"}