stream-chat-react 11.4.0 → 11.5.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.
- package/dist/browser.full-bundle.js +6138 -5630
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +4 -4
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/Channel/Channel.d.ts +9 -2
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +86 -22
- package/dist/components/ChannelPreview/ChannelPreview.d.ts +16 -0
- package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
- package/dist/components/ChannelPreview/ChannelPreview.js +16 -2
- package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts +5 -0
- package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts.map +1 -1
- package/dist/components/ChannelPreview/ChannelPreviewMessenger.js +62 -2
- package/dist/components/Emojis/index.cjs.js +1 -1
- package/dist/components/Message/Message.d.ts.map +1 -1
- package/dist/components/Message/Message.js +40 -8
- package/dist/components/Message/hooks/index.d.ts +2 -0
- package/dist/components/Message/hooks/index.d.ts.map +1 -1
- package/dist/components/Message/hooks/index.js +2 -0
- package/dist/components/Message/hooks/useMarkUnreadHandler.d.ts +10 -0
- package/dist/components/Message/hooks/useMarkUnreadHandler.d.ts.map +1 -0
- package/dist/components/Message/hooks/useMarkUnreadHandler.js +45 -0
- package/dist/components/Message/hooks/useReactionsFetcher.d.ts +11 -0
- package/dist/components/Message/hooks/useReactionsFetcher.d.ts.map +1 -0
- package/dist/components/Message/hooks/useReactionsFetcher.js +58 -0
- package/dist/components/Message/hooks/useUserRole.d.ts +1 -0
- package/dist/components/Message/hooks/useUserRole.d.ts.map +1 -1
- package/dist/components/Message/hooks/useUserRole.js +2 -0
- package/dist/components/Message/types.d.ts +7 -1
- package/dist/components/Message/types.d.ts.map +1 -1
- package/dist/components/Message/utils.d.ts +4 -1
- package/dist/components/Message/utils.d.ts.map +1 -1
- package/dist/components/Message/utils.js +12 -3
- package/dist/components/MessageActions/MessageActions.d.ts +1 -1
- package/dist/components/MessageActions/MessageActions.d.ts.map +1 -1
- package/dist/components/MessageActions/MessageActions.js +4 -3
- package/dist/components/MessageActions/MessageActionsBox.d.ts +1 -1
- package/dist/components/MessageActions/MessageActionsBox.d.ts.map +1 -1
- package/dist/components/MessageActions/MessageActionsBox.js +3 -4
- package/dist/components/MessageList/MessageList.d.ts +3 -1
- package/dist/components/MessageList/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList/MessageList.js +29 -13
- package/dist/components/MessageList/MessageListMainPanel.d.ts +1 -0
- package/dist/components/MessageList/MessageListMainPanel.d.ts.map +1 -1
- package/dist/components/MessageList/MessageListMainPanel.js +2 -1
- package/dist/components/MessageList/MessageListNotifications.d.ts +1 -0
- package/dist/components/MessageList/MessageListNotifications.d.ts.map +1 -1
- package/dist/components/MessageList/MessageListNotifications.js +2 -2
- package/dist/components/MessageList/MessageNotification.d.ts +2 -0
- package/dist/components/MessageList/MessageNotification.d.ts.map +1 -1
- package/dist/components/MessageList/ScrollToBottomButton.d.ts +1 -1
- package/dist/components/MessageList/ScrollToBottomButton.d.ts.map +1 -1
- package/dist/components/MessageList/ScrollToBottomButton.js +3 -44
- package/dist/components/MessageList/UnreadMessagesNotification.d.ts +6 -0
- package/dist/components/MessageList/UnreadMessagesNotification.d.ts.map +1 -0
- package/dist/components/MessageList/UnreadMessagesNotification.js +12 -0
- package/dist/components/MessageList/UnreadMessagesSeparator.d.ts +6 -0
- package/dist/components/MessageList/UnreadMessagesSeparator.d.ts.map +1 -0
- package/dist/components/MessageList/UnreadMessagesSeparator.js +10 -0
- package/dist/components/MessageList/VirtualizedMessageList.d.ts +12 -1
- package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.js +42 -19
- package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +5 -3
- package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageListComponents.js +27 -6
- package/dist/components/MessageList/hooks/MessageList/index.d.ts +1 -0
- package/dist/components/MessageList/hooks/MessageList/index.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/MessageList/index.js +1 -0
- package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts +2 -5
- package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/MessageList/useMessageListElements.js +3 -1
- package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts +7 -0
- package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.js +42 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/index.d.ts +1 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/index.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/VirtualizedMessageList/index.js +1 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts +22 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.js +29 -0
- package/dist/components/MessageList/hooks/useMarkRead.d.ts +19 -0
- package/dist/components/MessageList/hooks/useMarkRead.d.ts.map +1 -0
- package/dist/components/MessageList/hooks/useMarkRead.js +38 -0
- package/dist/components/MessageList/icons.d.ts +1 -0
- package/dist/components/MessageList/icons.d.ts.map +1 -1
- package/dist/components/MessageList/icons.js +2 -0
- package/dist/components/MessageList/index.d.ts +2 -0
- package/dist/components/MessageList/index.d.ts.map +1 -1
- package/dist/components/MessageList/index.js +2 -0
- package/dist/components/MessageList/renderMessages.d.ts +13 -2
- package/dist/components/MessageList/renderMessages.d.ts.map +1 -1
- package/dist/components/MessageList/renderMessages.js +16 -11
- package/dist/components/Reactions/ReactionsList.d.ts +2 -1
- package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
- package/dist/components/Reactions/ReactionsList.js +32 -41
- package/dist/components/Reactions/ReactionsListModal.d.ts +13 -0
- package/dist/components/Reactions/ReactionsListModal.d.ts.map +1 -0
- package/dist/components/Reactions/ReactionsListModal.js +46 -0
- package/dist/components/Reactions/SimpleReactionsList.d.ts +2 -4
- package/dist/components/Reactions/SimpleReactionsList.d.ts.map +1 -1
- package/dist/components/Reactions/SimpleReactionsList.js +7 -24
- package/dist/components/Reactions/hooks/useFetchReactions.d.ts +12 -0
- package/dist/components/Reactions/hooks/useFetchReactions.d.ts.map +1 -0
- package/dist/components/Reactions/hooks/useFetchReactions.js +50 -0
- package/dist/components/Reactions/hooks/useProcessReactions.d.ts +3 -13
- package/dist/components/Reactions/hooks/useProcessReactions.d.ts.map +1 -1
- package/dist/components/Reactions/hooks/useProcessReactions.js +51 -46
- package/dist/components/Reactions/types.d.ts +9 -0
- package/dist/components/Reactions/types.d.ts.map +1 -0
- package/dist/components/Reactions/types.js +1 -0
- package/dist/context/ChannelActionContext.d.ts +2 -0
- package/dist/context/ChannelActionContext.d.ts.map +1 -1
- package/dist/context/ComponentContext.d.ts +6 -2
- package/dist/context/ComponentContext.d.ts.map +1 -1
- package/dist/context/MessageContext.d.ts +8 -2
- package/dist/context/MessageContext.d.ts.map +1 -1
- package/dist/css/v2/index.css +1 -1
- package/dist/css/v2/index.layout.css +1 -1
- package/dist/i18n/Streami18n.d.ts +10 -0
- package/dist/i18n/Streami18n.d.ts.map +1 -1
- package/dist/i18n/de.json +10 -0
- package/dist/i18n/en.json +10 -0
- package/dist/i18n/es.json +12 -0
- package/dist/i18n/fr.json +12 -0
- package/dist/i18n/hi.json +11 -0
- package/dist/i18n/it.json +12 -0
- package/dist/i18n/ja.json +8 -0
- package/dist/i18n/ko.json +8 -0
- package/dist/i18n/nl.json +10 -0
- package/dist/i18n/pt.json +12 -0
- package/dist/i18n/ru.json +14 -0
- package/dist/i18n/tr.json +10 -0
- package/dist/{icons-b84cd102.js → icons-7ead3d97.js} +12 -12
- package/dist/index.cjs.js +4880 -4372
- package/dist/scss/v2/AttachmentPreviewList/AttachmentPreviewList-layout.scss +1 -0
- package/dist/scss/v2/Message/Message-layout.scss +68 -10
- package/dist/scss/v2/Message/Message-theme.scss +34 -2
- package/dist/scss/v2/MessageActionsBox/MessageActionsBox-layout.scss +0 -11
- package/dist/scss/v2/MessageBounceOptions/MessageBounceOptions-layout.scss +18 -0
- package/dist/scss/v2/MessageBounceOptions/MessageBounceOptions-theme.scss +51 -0
- package/dist/scss/v2/MessageReactions/MessageReactions-layout.scss +74 -0
- package/dist/scss/v2/MessageReactions/MessageReactions-theme.scss +17 -0
- package/dist/scss/v2/_base.scss +3 -20
- package/dist/scss/v2/_global-theme-variables.scss +3 -0
- package/dist/scss/v2/index.layout.scss +1 -0
- package/dist/scss/v2/index.scss +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -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 '
|
|
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
|
|
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":"AAAA,OAAO,KAAK,EAAE,EACZ,iBAAiB,EAQlB,MAAM,OAAO,CAAC;AAIf,OAAO,EAGL,mBAAmB,EAInB,OAAO,EACP,eAAe,EAEf,OAAO,IAAI,aAAa,EACxB,UAAU,EACV,cAAc,EAEf,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,eAAe,EAAuB,MAAM,6BAA6B,CAAC;AAGnF,OAAO,EAEL,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAUpB,OAAO,EAGL,aAAa,EACd,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAqB,MAAM,gCAAgC,CAAC;
|
|
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
|
|
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
|
|
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
|
-
|
|
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 (
|
|
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,
|
|
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
|
-
|
|
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;
|
|
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 (
|
|
49
|
+
if (muted) {
|
|
36
50
|
setUnread(0);
|
|
37
51
|
}
|
|
38
52
|
else {
|
|
39
53
|
setUnread(channel.countUnread());
|
|
40
54
|
}
|
|
41
|
-
}, [channel,
|
|
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":"
|
|
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-
|
|
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":"
|
|
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
|
-
}, [
|
|
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"}
|