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
|
@@ -3,10 +3,10 @@ import { ConnectionStatus } from './ConnectionStatus';
|
|
|
3
3
|
import { CustomNotification } from './CustomNotification';
|
|
4
4
|
import { useTranslationContext } from '../../context/TranslationContext';
|
|
5
5
|
export var MessageListNotifications = function (props) {
|
|
6
|
-
var hasNewMessages = props.hasNewMessages, isMessageListScrolledToBottom = props.isMessageListScrolledToBottom, isNotAtLatestMessageSet = props.isNotAtLatestMessageSet, MessageNotification = props.MessageNotification, notifications = props.notifications, scrollToBottom = props.scrollToBottom, threadList = props.threadList;
|
|
6
|
+
var hasNewMessages = props.hasNewMessages, isMessageListScrolledToBottom = props.isMessageListScrolledToBottom, isNotAtLatestMessageSet = props.isNotAtLatestMessageSet, MessageNotification = props.MessageNotification, notifications = props.notifications, scrollToBottom = props.scrollToBottom, threadList = props.threadList, unreadCount = props.unreadCount;
|
|
7
7
|
var t = useTranslationContext('MessageListNotifications').t;
|
|
8
8
|
return (React.createElement("div", { className: 'str-chat__list-notifications' },
|
|
9
9
|
notifications.map(function (notification) { return (React.createElement(CustomNotification, { active: true, key: notification.id, type: notification.type }, notification.text)); }),
|
|
10
10
|
React.createElement(ConnectionStatus, null),
|
|
11
|
-
React.createElement(MessageNotification, { isMessageListScrolledToBottom: isMessageListScrolledToBottom, onClick: scrollToBottom, showNotification: hasNewMessages || isNotAtLatestMessageSet, threadList: threadList }, isNotAtLatestMessageSet ? t('Latest Messages') : t('New Messages!'))));
|
|
11
|
+
React.createElement(MessageNotification, { isMessageListScrolledToBottom: isMessageListScrolledToBottom, onClick: scrollToBottom, showNotification: hasNewMessages || isNotAtLatestMessageSet, threadList: threadList, unreadCount: unreadCount }, isNotAtLatestMessageSet ? t('Latest Messages') : t('New Messages!'))));
|
|
12
12
|
};
|
|
@@ -8,6 +8,8 @@ export type MessageNotificationProps = PropsWithChildren<{
|
|
|
8
8
|
showNotification?: boolean;
|
|
9
9
|
/** informs the component whether it is rendered inside a thread message list */
|
|
10
10
|
threadList?: boolean;
|
|
11
|
+
/** */
|
|
12
|
+
unreadCount?: number;
|
|
11
13
|
}>;
|
|
12
14
|
export declare const MessageNotification: (props: MessageNotificationProps) => JSX.Element | null;
|
|
13
15
|
//# sourceMappingURL=MessageNotification.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageNotification.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/MessageNotification.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEjD,MAAM,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;IACvD,iCAAiC;IACjC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC;IACjC,gQAAgQ;IAChQ,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,mMAAmM;IACnM,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gFAAgF;IAChF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC,CAAC;AAmBH,eAAO,MAAM,mBAAmB,UAjBc,wBAAwB,uBAmB7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"MessageNotification.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/MessageNotification.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAEjD,MAAM,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;IACvD,iCAAiC;IACjC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC;IACjC,gQAAgQ;IAChQ,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,mMAAmM;IACnM,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gFAAgF;IAChF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM;IACN,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAmBH,eAAO,MAAM,mBAAmB,UAjBc,wBAAwB,uBAmB7B,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { MessageNotificationProps } from './MessageNotification';
|
|
2
|
-
export declare const ScrollToBottomButton: (props: Pick<MessageNotificationProps, 'isMessageListScrolledToBottom' | 'onClick' | 'threadList'>) => JSX.Element | null;
|
|
2
|
+
export declare const ScrollToBottomButton: (props: Pick<MessageNotificationProps, 'isMessageListScrolledToBottom' | 'onClick' | 'threadList' | 'unreadCount'>) => JSX.Element | null;
|
|
3
3
|
//# sourceMappingURL=ScrollToBottomButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollToBottomButton.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/ScrollToBottomButton.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ScrollToBottomButton.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/ScrollToBottomButton.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AA0CtE,eAAO,MAAM,oBAAoB,UAvCxB,KACL,wBAAwB,EACxB,+BAA+B,GAAG,SAAS,GAAG,YAAY,GAAG,aAAa,CAC3E,uBAsCuC,CAAC"}
|
|
@@ -1,54 +1,13 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import clsx from 'clsx';
|
|
3
3
|
import { ArrowDown } from './icons';
|
|
4
|
-
import { useChannelStateContext, useChatContext } from '../../context';
|
|
5
4
|
var UnMemoizedScrollToBottomButton = function (props) {
|
|
6
|
-
var isMessageListScrolledToBottom = props.isMessageListScrolledToBottom, onClick = props.onClick,
|
|
7
|
-
var _a = useChatContext(), activeChannel = _a.channel, client = _a.client;
|
|
8
|
-
var thread = useChannelStateContext().thread;
|
|
9
|
-
var _b = useState((activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.countUnread()) || 0), countUnread = _b[0], setCountUnread = _b[1];
|
|
10
|
-
var _c = useState((thread === null || thread === void 0 ? void 0 : thread.reply_count) || 0), replyCount = _c[0], setReplyCount = _c[1];
|
|
11
|
-
var observedEvent = threadList ? 'message.updated' : 'message.new';
|
|
12
|
-
useEffect(function () {
|
|
13
|
-
var handleEvent = function (event) {
|
|
14
|
-
var _a, _b, _c, _d, _e;
|
|
15
|
-
var newMessageInAnotherChannel = event.cid !== (activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.cid);
|
|
16
|
-
var newMessageIsMine = ((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) === ((_b = client.user) === null || _b === void 0 ? void 0 : _b.id);
|
|
17
|
-
var isThreadOpen = !!thread;
|
|
18
|
-
var newMessageIsReply = !!((_c = event.message) === null || _c === void 0 ? void 0 : _c.parent_id);
|
|
19
|
-
var dontIncreaseMainListCounterOnNewReply = isThreadOpen && !threadList && newMessageIsReply;
|
|
20
|
-
if (isMessageListScrolledToBottom ||
|
|
21
|
-
newMessageInAnotherChannel ||
|
|
22
|
-
newMessageIsMine ||
|
|
23
|
-
dontIncreaseMainListCounterOnNewReply) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
if (event.type === 'message.new') {
|
|
27
|
-
// cannot rely on channel.countUnread because active channel is automatically marked read
|
|
28
|
-
setCountUnread(function (prev) { return prev + 1; });
|
|
29
|
-
}
|
|
30
|
-
else if (((_d = event.message) === null || _d === void 0 ? void 0 : _d.id) === (thread === null || thread === void 0 ? void 0 : thread.id)) {
|
|
31
|
-
var newReplyCount_1 = ((_e = event.message) === null || _e === void 0 ? void 0 : _e.reply_count) || 0;
|
|
32
|
-
setCountUnread(function () { return newReplyCount_1 - replyCount; });
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
client.on(observedEvent, handleEvent);
|
|
36
|
-
return function () {
|
|
37
|
-
client.off(observedEvent, handleEvent);
|
|
38
|
-
};
|
|
39
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
40
|
-
}, [activeChannel, isMessageListScrolledToBottom, observedEvent, replyCount, thread]);
|
|
41
|
-
useEffect(function () {
|
|
42
|
-
if (isMessageListScrolledToBottom) {
|
|
43
|
-
setCountUnread(0);
|
|
44
|
-
setReplyCount((thread === null || thread === void 0 ? void 0 : thread.reply_count) || 0);
|
|
45
|
-
}
|
|
46
|
-
}, [isMessageListScrolledToBottom, thread]);
|
|
5
|
+
var isMessageListScrolledToBottom = props.isMessageListScrolledToBottom, onClick = props.onClick, _a = props.unreadCount, unreadCount = _a === void 0 ? 0 : _a;
|
|
47
6
|
if (isMessageListScrolledToBottom)
|
|
48
7
|
return null;
|
|
49
8
|
return (React.createElement("div", { className: 'str-chat__jump-to-latest-message' },
|
|
50
9
|
React.createElement("button", { "aria-live": 'polite', className: "\n str-chat__message-notification-right\n str-chat__message-notification-scroll-to-latest\n str-chat__circle-fab\n ", "data-testid": 'message-notification', onClick: onClick },
|
|
51
10
|
React.createElement(ArrowDown, null),
|
|
52
|
-
|
|
11
|
+
unreadCount > 0 && (React.createElement("div", { className: clsx('str-chat__message-notification', 'str-chat__message-notification-scroll-to-latest-unread-count', 'str-chat__jump-to-latest-unread-count'), "data-testid": 'unread-message-notification-counter' }, unreadCount)))));
|
|
53
12
|
};
|
|
54
13
|
export var ScrollToBottomButton = React.memo(UnMemoizedScrollToBottomButton);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type UnreadMessagesNotificationProps = {
|
|
2
|
+
queryMessageLimit?: number;
|
|
3
|
+
unreadCount?: number;
|
|
4
|
+
};
|
|
5
|
+
export declare const UnreadMessagesNotification: ({ queryMessageLimit, unreadCount, }: UnreadMessagesNotificationProps) => JSX.Element;
|
|
6
|
+
//# sourceMappingURL=UnreadMessagesNotification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnreadMessagesNotification.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/UnreadMessagesNotification.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,+BAA+B,GAAG;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,0BAA0B,wCAGpC,+BAA+B,gBAgBjC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { CloseIcon } from './icons';
|
|
3
|
+
import { useChannelActionContext, useTranslationContext } from '../../context';
|
|
4
|
+
export var UnreadMessagesNotification = function (_a) {
|
|
5
|
+
var queryMessageLimit = _a.queryMessageLimit, unreadCount = _a.unreadCount;
|
|
6
|
+
var _b = useChannelActionContext('UnreadMessagesNotification'), jumpToFirstUnreadMessage = _b.jumpToFirstUnreadMessage, markRead = _b.markRead;
|
|
7
|
+
var t = useTranslationContext('UnreadMessagesNotification').t;
|
|
8
|
+
return (React.createElement("div", { className: 'str-chat__unread-messages-notification' },
|
|
9
|
+
React.createElement("button", { onClick: function () { return jumpToFirstUnreadMessage(queryMessageLimit); } }, t('{{count}} unread', { count: unreadCount !== null && unreadCount !== void 0 ? unreadCount : 0 })),
|
|
10
|
+
React.createElement("button", { onClick: markRead },
|
|
11
|
+
React.createElement(CloseIcon, null))));
|
|
12
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const UNREAD_MESSAGE_SEPARATOR_CLASS = "str-chat__unread-messages-separator";
|
|
2
|
+
export type UnreadMessagesSeparatorProps = {
|
|
3
|
+
unreadCount?: number;
|
|
4
|
+
};
|
|
5
|
+
export declare const UnreadMessagesSeparator: ({ unreadCount }: UnreadMessagesSeparatorProps) => JSX.Element;
|
|
6
|
+
//# sourceMappingURL=UnreadMessagesSeparator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnreadMessagesSeparator.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/UnreadMessagesSeparator.tsx"],"names":[],"mappings":"AAGA,eAAO,MAAM,8BAA8B,wCAAwC,CAAC;AAEpF,MAAM,MAAM,4BAA4B,GAAG;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,uBAAuB,oBAAqB,4BAA4B,gBASpF,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useTranslationContext } from '../../context';
|
|
3
|
+
export var UNREAD_MESSAGE_SEPARATOR_CLASS = 'str-chat__unread-messages-separator';
|
|
4
|
+
export var UnreadMessagesSeparator = function (_a) {
|
|
5
|
+
var unreadCount = _a.unreadCount;
|
|
6
|
+
var t = useTranslationContext('UnreadMessagesSeparator').t;
|
|
7
|
+
return (React.createElement("div", { className: UNREAD_MESSAGE_SEPARATOR_CLASS }, unreadCount
|
|
8
|
+
? t('unreadMessagesSeparatorText', { count: unreadCount })
|
|
9
|
+
: t('Unread messages')));
|
|
10
|
+
};
|
|
@@ -12,7 +12,7 @@ type VirtualizedMessageListPropsForContext = 'additionalMessageInputProps' | 'cl
|
|
|
12
12
|
/**
|
|
13
13
|
* Context object provided to some Virtuoso props that are functions (components rendered by Virtuoso and other functions)
|
|
14
14
|
*/
|
|
15
|
-
export type VirtuosoContext<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Required<Pick<ComponentContextValue<StreamChatGenerics>, 'DateSeparator' | 'MessageSystem'>> & Pick<VirtualizedMessageListProps<StreamChatGenerics>, VirtualizedMessageListPropsForContext> & Pick<ChatContextValue<StreamChatGenerics>, 'customClasses'> & {
|
|
15
|
+
export type VirtuosoContext<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Required<Pick<ComponentContextValue<StreamChatGenerics>, 'DateSeparator' | 'MessageSystem' | 'UnreadMessagesSeparator'>> & Pick<VirtualizedMessageListProps<StreamChatGenerics>, VirtualizedMessageListPropsForContext> & Pick<ChatContextValue<StreamChatGenerics>, 'customClasses'> & {
|
|
16
16
|
/** Latest received message id in the current channel */
|
|
17
17
|
lastReceivedMessageId: string | null | undefined;
|
|
18
18
|
/** Object mapping between the message ID and a string representing the position in the group of a sequence of messages posted by the same user. */
|
|
@@ -25,6 +25,15 @@ export type VirtuosoContext<StreamChatGenerics extends DefaultStreamChatGenerics
|
|
|
25
25
|
processedMessages: StreamMessage<StreamChatGenerics>[];
|
|
26
26
|
/** Instance of VirtuosoHandle object providing the API to navigate in the virtualized list by various scroll actions. */
|
|
27
27
|
virtuosoRef: RefObject<VirtuosoHandle>;
|
|
28
|
+
/** Message id which was marked as unread. ALl the messages following this message are considered unrea. */
|
|
29
|
+
firstUnreadMessageId?: string;
|
|
30
|
+
/**
|
|
31
|
+
* The ID of the last message considered read by the current user in the current channel.
|
|
32
|
+
* All the messages following this message are considered unread.
|
|
33
|
+
*/
|
|
34
|
+
lastReadMessageId?: string;
|
|
35
|
+
/** The number of unread messages in the current channel. */
|
|
36
|
+
unreadMessageCount?: number;
|
|
28
37
|
};
|
|
29
38
|
type PropsDrilledToMessage = 'additionalMessageInputProps' | 'customMessageActions' | 'messageActions';
|
|
30
39
|
export type VirtualizedMessageListProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Partial<Pick<MessageProps<StreamChatGenerics>, PropsDrilledToMessage>> & {
|
|
@@ -65,6 +74,8 @@ export type VirtualizedMessageListProps<StreamChatGenerics extends DefaultStream
|
|
|
65
74
|
loadMore?: ChannelActionContextValue['loadMore'] | (() => Promise<void>);
|
|
66
75
|
/** Function called when new messages are to be loaded, defaults to function stored in [ChannelActionContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_action_context/) */
|
|
67
76
|
loadMoreNewer?: ChannelActionContextValue['loadMore'] | (() => Promise<void>);
|
|
77
|
+
/** When enabled, the channel will be marked read when a user scrolls to the bottom. Ignored when scrolled to the bottom of a thread message list. */
|
|
78
|
+
markReadOnScrolledToBottom?: boolean;
|
|
68
79
|
/** Custom UI component to display a message, defaults to and accepts same props as [MessageSimple](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageSimple.tsx) */
|
|
69
80
|
Message?: React.ComponentType<MessageUIComponentProps<StreamChatGenerics>>;
|
|
70
81
|
/** The limit to use when paginating messages */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualizedMessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/VirtualizedMessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAA2C,MAAM,OAAO,CAAC;AAClF,OAAO,EAEL,uBAAuB,EACvB,0BAA0B,EAE1B,cAAc,EACd,aAAa,EACd,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"VirtualizedMessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/VirtualizedMessageList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,15 +3,15 @@ import React, { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
|
3
3
|
import { Virtuoso, } from 'react-virtuoso';
|
|
4
4
|
import { GiphyPreviewMessage as DefaultGiphyPreviewMessage } from './GiphyPreviewMessage';
|
|
5
5
|
import { useLastReadData } from './hooks';
|
|
6
|
-
import { useGiphyPreview, useMessageSetKey, useNewMessageNotification, usePrependedMessagesCount, useScrollToBottomOnNewMessage, useShouldForceScrollToBottom, } from './hooks/VirtualizedMessageList';
|
|
6
|
+
import { useGiphyPreview, useMessageSetKey, useNewMessageNotification, usePrependedMessagesCount, useScrollToBottomOnNewMessage, useShouldForceScrollToBottom, useUnreadMessagesNotificationVirtualized, } from './hooks/VirtualizedMessageList';
|
|
7
|
+
import { useMarkRead } from './hooks/useMarkRead';
|
|
7
8
|
import { MessageNotification as DefaultMessageNotification } from './MessageNotification';
|
|
8
9
|
import { MessageListNotifications as DefaultMessageListNotifications } from './MessageListNotifications';
|
|
9
10
|
import { MessageListMainPanel } from './MessageListMainPanel';
|
|
10
11
|
import { getGroupStyles, getLastReceived, processMessages } from './utils';
|
|
11
12
|
import { MessageSimple } from '../Message';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { calculateFirstItemIndex, calculateItemIndex, EmptyPlaceholder, Footer, Header, Item, messageRenderer, } from './VirtualizedMessageListComponents';
|
|
13
|
+
import { UnreadMessagesNotification as DefaultUnreadMessagesNotification } from './UnreadMessagesNotification';
|
|
14
|
+
import { calculateFirstItemIndex, calculateItemIndex, EmptyPlaceholder, Footer, Header, Item, makeItemsRenderedHandler, messageRenderer, } from './VirtualizedMessageListComponents';
|
|
15
15
|
import { useChannelActionContext, } from '../../context/ChannelActionContext';
|
|
16
16
|
import { useChannelStateContext, } from '../../context/ChannelStateContext';
|
|
17
17
|
import { useChatContext } from '../../context/ChatContext';
|
|
@@ -46,21 +46,27 @@ function calculateInitialTopMostItemIndex(messages, highlightedMessageId) {
|
|
|
46
46
|
return messages.length - 1;
|
|
47
47
|
}
|
|
48
48
|
var VirtualizedMessageListWithContext = function (props) {
|
|
49
|
-
var
|
|
49
|
+
var _a, _b;
|
|
50
|
+
var additionalMessageInputProps = props.additionalMessageInputProps, _c = props.additionalVirtuosoProps, additionalVirtuosoProps = _c === void 0 ? {} : _c, channel = props.channel, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageActions = props.customMessageActions, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _d = props.disableDateSeparator, disableDateSeparator = _d === void 0 ? true : _d, groupStyles = props.groupStyles, hasMoreNewer = props.hasMoreNewer, head = props.head, _e = props.hideDeletedMessages, hideDeletedMessages = _e === void 0 ? false : _e, _f = props.hideNewMessageSeparator, hideNewMessageSeparator = _f === void 0 ? false : _f, highlightedMessageId = props.highlightedMessageId, jumpToLatestMessage = props.jumpToLatestMessage, loadingMore = props.loadingMore, loadMore = props.loadMore, loadMoreNewer = props.loadMoreNewer, markReadOnScrolledToBottom = props.markReadOnScrolledToBottom, MessageUIComponentFromProps = props.Message, messageActions = props.messageActions, _g = props.messageLimit, messageLimit = _g === void 0 ? 100 : _g, messages = props.messages, notifications = props.notifications,
|
|
50
51
|
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
51
|
-
|
|
52
|
+
_h = props.overscan,
|
|
52
53
|
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
53
|
-
overscan =
|
|
54
|
+
overscan = _h === void 0 ? 0 : _h, read = props.read, _j = props.returnAllReadData, returnAllReadData = _j === void 0 ? false : _j, scrollSeekPlaceHolder = props.scrollSeekPlaceHolder, _k = props.scrollToLatestMessageOnFocus, scrollToLatestMessageOnFocus = _k === void 0 ? false : _k, _l = props.separateGiphyPreview, separateGiphyPreview = _l === void 0 ? false : _l, _m = props.shouldGroupByUser, shouldGroupByUser = _m === void 0 ? false : _m, _o = props.stickToBottomScrollBehavior, stickToBottomScrollBehavior = _o === void 0 ? 'smooth' : _o, suppressAutoscroll = props.suppressAutoscroll, threadList = props.threadList;
|
|
54
55
|
var virtuosoComponentsFromProps = additionalVirtuosoProps.components, overridingVirtuosoProps = __rest(additionalVirtuosoProps, ["components"]);
|
|
55
56
|
// Stops errors generated from react-virtuoso to bubble up
|
|
56
57
|
// to Sentry or other tracking tools.
|
|
57
58
|
useCaptureResizeObserverExceededError();
|
|
58
|
-
var
|
|
59
|
+
var _p = useComponentContext('VirtualizedMessageList'), DateSeparator = _p.DateSeparator, _q = _p.GiphyPreviewMessage, GiphyPreviewMessage = _q === void 0 ? DefaultGiphyPreviewMessage : _q, _r = _p.MessageListNotifications, MessageListNotifications = _r === void 0 ? DefaultMessageListNotifications : _r, _s = _p.MessageNotification, MessageNotification = _s === void 0 ? DefaultMessageNotification : _s, MessageSystem = _p.MessageSystem, _t = _p.UnreadMessagesNotification, UnreadMessagesNotification = _t === void 0 ? DefaultUnreadMessagesNotification : _t, UnreadMessagesSeparator = _p.UnreadMessagesSeparator, _u = _p.VirtualMessage, MessageUIComponentFromContext = _u === void 0 ? MessageSimple : _u;
|
|
59
60
|
var MessageUIComponent = MessageUIComponentFromProps || MessageUIComponentFromContext;
|
|
60
|
-
var
|
|
61
|
+
var _v = useChatContext('VirtualizedMessageList'), client = _v.client, customClasses = _v.customClasses;
|
|
61
62
|
var virtuoso = useRef(null);
|
|
62
63
|
var lastRead = useMemo(function () { var _a; return (_a = channel.lastRead) === null || _a === void 0 ? void 0 : _a.call(channel); }, [channel]);
|
|
63
|
-
var
|
|
64
|
+
var currentUserChannelReadState = client.user && (read === null || read === void 0 ? void 0 : read[client.user.id]);
|
|
65
|
+
var _w = useUnreadMessagesNotificationVirtualized({
|
|
66
|
+
lastRead: currentUserChannelReadState === null || currentUserChannelReadState === void 0 ? void 0 : currentUserChannelReadState.last_read,
|
|
67
|
+
unreadCount: (_a = currentUserChannelReadState === null || currentUserChannelReadState === void 0 ? void 0 : currentUserChannelReadState.unread_messages) !== null && _a !== void 0 ? _a : 0,
|
|
68
|
+
}), showUnreadMessagesNotification = _w.show, toggleShowUnreadMessagesNotification = _w.toggleShowUnreadMessagesNotification;
|
|
69
|
+
var _x = useGiphyPreview(separateGiphyPreview), giphyPreviewMessage = _x.giphyPreviewMessage, setGiphyPreviewMessage = _x.setGiphyPreviewMessage;
|
|
64
70
|
var processedMessages = useMemo(function () {
|
|
65
71
|
if (typeof messages === 'undefined') {
|
|
66
72
|
return [];
|
|
@@ -112,7 +118,13 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
112
118
|
// processedMessages were incorrectly rebuilt with a new object identity at some point, hence the .length usage
|
|
113
119
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
114
120
|
[processedMessages.length, shouldGroupByUser, groupStylesFn]);
|
|
115
|
-
var
|
|
121
|
+
var _y = useNewMessageNotification(processedMessages, client.userID, hasMoreNewer), atBottom = _y.atBottom, isMessageListScrolledToBottom = _y.isMessageListScrolledToBottom, newMessagesNotification = _y.newMessagesNotification, setIsMessageListScrolledToBottom = _y.setIsMessageListScrolledToBottom, setNewMessagesNotification = _y.setNewMessagesNotification;
|
|
122
|
+
useMarkRead({
|
|
123
|
+
isMessageListScrolledToBottom: isMessageListScrolledToBottom,
|
|
124
|
+
markReadOnScrolledToBottom: markReadOnScrolledToBottom,
|
|
125
|
+
messageListIsThread: !!threadList,
|
|
126
|
+
unreadCount: (_b = currentUserChannelReadState === null || currentUserChannelReadState === void 0 ? void 0 : currentUserChannelReadState.unread_messages) !== null && _b !== void 0 ? _b : 0,
|
|
127
|
+
});
|
|
116
128
|
var scrollToBottom = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
117
129
|
return __generator(this, function (_a) {
|
|
118
130
|
switch (_a.label) {
|
|
@@ -143,6 +155,7 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
143
155
|
var numItemsPrepended = usePrependedMessagesCount(processedMessages, !disableDateSeparator);
|
|
144
156
|
var messageSetKey = useMessageSetKey({ messages: messages }).messageSetKey;
|
|
145
157
|
var shouldForceScrollToBottom = useShouldForceScrollToBottom(processedMessages, client.userID);
|
|
158
|
+
var handleItemsRendered = useMemo(function () { return makeItemsRenderedHandler([toggleShowUnreadMessagesNotification], processedMessages); }, [processedMessages, toggleShowUnreadMessagesNotification]);
|
|
146
159
|
var followOutput = function (isAtBottom) {
|
|
147
160
|
if (hasMoreNewer || suppressAutoscroll) {
|
|
148
161
|
return false;
|
|
@@ -170,19 +183,25 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
170
183
|
loadMore === null || loadMore === void 0 ? void 0 : loadMore(messageLimit);
|
|
171
184
|
};
|
|
172
185
|
useEffect(function () {
|
|
173
|
-
var
|
|
186
|
+
var scrollTimeout;
|
|
174
187
|
if (highlightedMessageId) {
|
|
175
|
-
var
|
|
176
|
-
if (
|
|
177
|
-
|
|
188
|
+
var index_1 = findMessageIndex(processedMessages, highlightedMessageId);
|
|
189
|
+
if (index_1 !== -1) {
|
|
190
|
+
scrollTimeout = setTimeout(function () {
|
|
191
|
+
var _a;
|
|
192
|
+
(_a = virtuoso.current) === null || _a === void 0 ? void 0 : _a.scrollToIndex({ align: 'center', index: index_1 });
|
|
193
|
+
}, 0);
|
|
178
194
|
}
|
|
179
195
|
}
|
|
180
|
-
|
|
181
|
-
|
|
196
|
+
return function () {
|
|
197
|
+
clearTimeout(scrollTimeout);
|
|
198
|
+
};
|
|
199
|
+
}, [highlightedMessageId, processedMessages]);
|
|
182
200
|
if (!processedMessages)
|
|
183
201
|
return null;
|
|
184
202
|
return (React.createElement(React.Fragment, null,
|
|
185
203
|
React.createElement(MessageListMainPanel, null,
|
|
204
|
+
!threadList && showUnreadMessagesNotification && (React.createElement(UnreadMessagesNotification, { unreadCount: currentUserChannelReadState === null || currentUserChannelReadState === void 0 ? void 0 : currentUserChannelReadState.unread_messages })),
|
|
186
205
|
React.createElement("div", { className: (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualizedMessageList) || 'str-chat__virtual-list' },
|
|
187
206
|
React.createElement(Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, atBottomThreshold: 100, atTopStateChange: atTopStateChange, atTopThreshold: 100, className: 'str-chat__message-list-scroll', components: __assign({ EmptyPlaceholder: EmptyPlaceholder, Footer: Footer, Header: Header, Item: Item }, virtuosoComponentsFromProps), computeItemKey: computeItemKey, context: {
|
|
188
207
|
additionalMessageInputProps: additionalMessageInputProps,
|
|
@@ -191,7 +210,9 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
191
210
|
customMessageActions: customMessageActions,
|
|
192
211
|
customMessageRenderer: customMessageRenderer,
|
|
193
212
|
DateSeparator: DateSeparator,
|
|
213
|
+
firstUnreadMessageId: currentUserChannelReadState === null || currentUserChannelReadState === void 0 ? void 0 : currentUserChannelReadState.first_unread_message_id,
|
|
194
214
|
head: head,
|
|
215
|
+
lastReadMessageId: currentUserChannelReadState === null || currentUserChannelReadState === void 0 ? void 0 : currentUserChannelReadState.last_read_message_id,
|
|
195
216
|
lastReceivedMessageId: lastReceivedMessageId,
|
|
196
217
|
loadingMore: loadingMore,
|
|
197
218
|
Message: MessageUIComponent,
|
|
@@ -203,9 +224,11 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
203
224
|
processedMessages: processedMessages,
|
|
204
225
|
shouldGroupByUser: shouldGroupByUser,
|
|
205
226
|
threadList: threadList,
|
|
227
|
+
unreadMessageCount: currentUserChannelReadState === null || currentUserChannelReadState === void 0 ? void 0 : currentUserChannelReadState.unread_messages,
|
|
228
|
+
UnreadMessagesSeparator: UnreadMessagesSeparator,
|
|
206
229
|
virtuosoRef: virtuoso,
|
|
207
|
-
}, firstItemIndex: calculateFirstItemIndex(numItemsPrepended), followOutput: followOutput, increaseViewportBy: { bottom: 200, top: 0 }, initialTopMostItemIndex: calculateInitialTopMostItemIndex(processedMessages, highlightedMessageId), itemContent: messageRenderer, itemSize: fractionalItemSize, key: messageSetKey, overscan: overscan, ref: virtuoso, style: { overflowX: 'hidden' }, totalCount: processedMessages.length }, overridingVirtuosoProps, (scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {}), (defaultItemHeight ? { defaultItemHeight: defaultItemHeight } : {}))))),
|
|
208
|
-
React.createElement(MessageListNotifications, { hasNewMessages: newMessagesNotification, isMessageListScrolledToBottom: isMessageListScrolledToBottom, isNotAtLatestMessageSet: hasMoreNewer, MessageNotification: MessageNotification, notifications: notifications, scrollToBottom: scrollToBottom, threadList: threadList }),
|
|
230
|
+
}, firstItemIndex: calculateFirstItemIndex(numItemsPrepended), followOutput: followOutput, increaseViewportBy: { bottom: 200, top: 0 }, initialTopMostItemIndex: calculateInitialTopMostItemIndex(processedMessages, highlightedMessageId), itemContent: messageRenderer, itemSize: fractionalItemSize, itemsRendered: handleItemsRendered, key: messageSetKey, overscan: overscan, ref: virtuoso, style: { overflowX: 'hidden' }, totalCount: processedMessages.length }, overridingVirtuosoProps, (scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {}), (defaultItemHeight ? { defaultItemHeight: defaultItemHeight } : {}))))),
|
|
231
|
+
React.createElement(MessageListNotifications, { hasNewMessages: newMessagesNotification, isMessageListScrolledToBottom: isMessageListScrolledToBottom, isNotAtLatestMessageSet: hasMoreNewer, MessageNotification: MessageNotification, notifications: notifications, scrollToBottom: scrollToBottom, threadList: threadList, unreadCount: threadList ? undefined : currentUserChannelReadState === null || currentUserChannelReadState === void 0 ? void 0 : currentUserChannelReadState.unread_messages }),
|
|
209
232
|
giphyPreviewMessage && React.createElement(GiphyPreviewMessage, { message: giphyPreviewMessage })));
|
|
210
233
|
};
|
|
211
234
|
/**
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { DefaultStreamChatGenerics, UnknownType } from '../../types/types';
|
|
2
1
|
import React from 'react';
|
|
3
|
-
import { ItemProps } from 'react-virtuoso';
|
|
4
|
-
import {
|
|
2
|
+
import { ItemProps, ListItem } from 'react-virtuoso';
|
|
3
|
+
import { StreamMessage } from '../../context';
|
|
4
|
+
import type { VirtuosoContext } from './VirtualizedMessageList';
|
|
5
|
+
import type { DefaultStreamChatGenerics, UnknownType } from '../../types/types';
|
|
5
6
|
export declare function calculateItemIndex(virtuosoIndex: number, numItemsPrepended: number): number;
|
|
6
7
|
export declare function calculateFirstItemIndex(numItemsPrepended: number): number;
|
|
8
|
+
export declare const makeItemsRenderedHandler: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(renderedItemsActions: ((msg: StreamMessage<StreamChatGenerics>[]) => void)[], processedMessages: StreamMessage<StreamChatGenerics>[]) => import("lodash").DebouncedFunc<(items: ListItem<UnknownType>[]) => void>;
|
|
7
9
|
type CommonVirtuosoComponentProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
|
|
8
10
|
context?: VirtuosoContext<StreamChatGenerics>;
|
|
9
11
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualizedMessageListComponents.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/VirtualizedMessageListComponents.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VirtualizedMessageListComponents.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/VirtualizedMessageListComponents.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAMrD,OAAO,EAAU,aAAa,EAAuB,MAAM,eAAe,CAAC;AAI3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhF,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,UAElF;AAED,wBAAgB,uBAAuB,CAAC,iBAAiB,EAAE,MAAM,UAEhE;AAED,eAAO,MAAM,wBAAwB,0JAGuC,IAAI,uGAG7D,SAAS,WAAW,CAAC,EAAE,UAUjC,CAAC;AAEV,KAAK,4BAA4B,CAC/B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,OAAO,CAAC,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;CAC/C,CAAC;AAGF,eAAO,MAAM,IAAI;;;;;;;oEAyBhB,CAAC;AACF,eAAO,MAAM,MAAM,0KAgBlB,CAAC;AACF,eAAO,MAAM,gBAAgB,mKAe5B,CAAC;AACF,eAAO,MAAM,MAAM,4GAKlB,CAAC;AACF,eAAO,MAAM,eAAe,oGAGX,MAAM,SACd,WAAW,6EA+EnB,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { __assign, __rest } from "tslib";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import throttle from 'lodash.throttle';
|
|
4
4
|
import React from 'react';
|
|
5
|
+
import { EmptyStateIndicator as DefaultEmptyStateIndicator } from '../EmptyStateIndicator';
|
|
5
6
|
import { LoadingIndicator as DefaultLoadingIndicator } from '../Loading';
|
|
6
|
-
import { CUSTOM_MESSAGE_TYPE } from '../../constants/messageTypes';
|
|
7
7
|
import { Message } from '../Message';
|
|
8
|
-
import
|
|
8
|
+
import { isDate, useComponentContext } from '../../context';
|
|
9
|
+
import { CUSTOM_MESSAGE_TYPE } from '../../constants/messageTypes';
|
|
9
10
|
var PREPEND_OFFSET = Math.pow(10, 7);
|
|
10
11
|
export function calculateItemIndex(virtuosoIndex, numItemsPrepended) {
|
|
11
12
|
return virtuosoIndex + numItemsPrepended - PREPEND_OFFSET;
|
|
@@ -13,6 +14,20 @@ export function calculateItemIndex(virtuosoIndex, numItemsPrepended) {
|
|
|
13
14
|
export function calculateFirstItemIndex(numItemsPrepended) {
|
|
14
15
|
return PREPEND_OFFSET - numItemsPrepended;
|
|
15
16
|
}
|
|
17
|
+
export var makeItemsRenderedHandler = function (renderedItemsActions, processedMessages) {
|
|
18
|
+
return throttle(function (items) {
|
|
19
|
+
var renderedMessages = items
|
|
20
|
+
.map(function (item) {
|
|
21
|
+
if (!item.originalIndex)
|
|
22
|
+
return undefined;
|
|
23
|
+
return processedMessages[calculateItemIndex(item.originalIndex, PREPEND_OFFSET)];
|
|
24
|
+
})
|
|
25
|
+
.filter(function (msg) { return !!msg; });
|
|
26
|
+
renderedItemsActions.forEach(function (action) {
|
|
27
|
+
return action(renderedMessages);
|
|
28
|
+
});
|
|
29
|
+
}, 200);
|
|
30
|
+
};
|
|
16
31
|
// using 'display: inline-block'
|
|
17
32
|
// traps CSS margins of the item elements, preventing incorrect item measurements
|
|
18
33
|
export var Item = function (_a) {
|
|
@@ -47,7 +62,7 @@ export var Footer = function () {
|
|
|
47
62
|
};
|
|
48
63
|
export var messageRenderer = function (virtuosoIndex, _data, virtuosoContext) {
|
|
49
64
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
50
|
-
var additionalMessageInputProps = virtuosoContext.additionalMessageInputProps, closeReactionSelectorOnClick = virtuosoContext.closeReactionSelectorOnClick, customMessageActions = virtuosoContext.customMessageActions, customMessageRenderer = virtuosoContext.customMessageRenderer, DateSeparator = virtuosoContext.DateSeparator, lastReceivedMessageId = virtuosoContext.lastReceivedMessageId, MessageUIComponent = virtuosoContext.Message, messageActions = virtuosoContext.messageActions, MessageSystem = virtuosoContext.MessageSystem, numItemsPrepended = virtuosoContext.numItemsPrepended, ownMessagesReadByOthers = virtuosoContext.ownMessagesReadByOthers, messageList = virtuosoContext.processedMessages, shouldGroupByUser = virtuosoContext.shouldGroupByUser, virtuosoRef = virtuosoContext.virtuosoRef;
|
|
65
|
+
var additionalMessageInputProps = virtuosoContext.additionalMessageInputProps, closeReactionSelectorOnClick = virtuosoContext.closeReactionSelectorOnClick, customMessageActions = virtuosoContext.customMessageActions, customMessageRenderer = virtuosoContext.customMessageRenderer, DateSeparator = virtuosoContext.DateSeparator, firstUnreadMessageId = virtuosoContext.firstUnreadMessageId, lastReadMessageId = virtuosoContext.lastReadMessageId, lastReceivedMessageId = virtuosoContext.lastReceivedMessageId, MessageUIComponent = virtuosoContext.Message, messageActions = virtuosoContext.messageActions, MessageSystem = virtuosoContext.MessageSystem, numItemsPrepended = virtuosoContext.numItemsPrepended, ownMessagesReadByOthers = virtuosoContext.ownMessagesReadByOthers, messageList = virtuosoContext.processedMessages, shouldGroupByUser = virtuosoContext.shouldGroupByUser, _k = virtuosoContext.unreadMessageCount, unreadMessageCount = _k === void 0 ? 0 : _k, UnreadMessagesSeparator = virtuosoContext.UnreadMessagesSeparator, virtuosoRef = virtuosoContext.virtuosoRef;
|
|
51
66
|
var streamMessageIndex = calculateItemIndex(virtuosoIndex, numItemsPrepended);
|
|
52
67
|
if (customMessageRenderer) {
|
|
53
68
|
return customMessageRenderer(messageList, streamMessageIndex);
|
|
@@ -66,5 +81,11 @@ export var messageRenderer = function (virtuosoIndex, _data, virtuosoContext) {
|
|
|
66
81
|
((_a = message.user) === null || _a === void 0 ? void 0 : _a.id) === ((_b = messageList[streamMessageIndex - 1].user) === null || _b === void 0 ? void 0 : _b.id);
|
|
67
82
|
var firstOfGroup = shouldGroupByUser && ((_c = message.user) === null || _c === void 0 ? void 0 : _c.id) !== ((_e = (_d = messageList[streamMessageIndex - 1]) === null || _d === void 0 ? void 0 : _d.user) === null || _e === void 0 ? void 0 : _e.id);
|
|
68
83
|
var endOfGroup = shouldGroupByUser && ((_f = message.user) === null || _f === void 0 ? void 0 : _f.id) !== ((_h = (_g = messageList[streamMessageIndex + 1]) === null || _g === void 0 ? void 0 : _g.user) === null || _h === void 0 ? void 0 : _h.id);
|
|
69
|
-
|
|
84
|
+
var isNewestMessage = lastReadMessageId === lastReceivedMessageId;
|
|
85
|
+
var isLastReadMessage = message.id === lastReadMessageId;
|
|
86
|
+
var showUnreadSeparator = isLastReadMessage && !isNewestMessage && (firstUnreadMessageId || unreadMessageCount > 0); // unread count can be 0 if the user marks unread only own messages
|
|
87
|
+
return (React.createElement(React.Fragment, null,
|
|
88
|
+
React.createElement(Message, { additionalMessageInputProps: additionalMessageInputProps, autoscrollToBottom: (_j = virtuosoRef.current) === null || _j === void 0 ? void 0 : _j.autoscrollToBottom, closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: customMessageActions, endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, groupedByUser: groupedByUser, lastReceivedId: lastReceivedMessageId, message: message, Message: MessageUIComponent, messageActions: messageActions, readBy: ownMessagesReadByOthers[message.id] || [] }),
|
|
89
|
+
showUnreadSeparator && (React.createElement("div", { className: 'str-chat__unread-messages-separator-wrapper' },
|
|
90
|
+
React.createElement(UnreadMessagesSeparator, { unreadCount: unreadMessageCount })))));
|
|
70
91
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/MessageList/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/MessageList/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { GroupStyle } from '../../utils';
|
|
3
|
-
import type {
|
|
3
|
+
import type { ChannelState as StreamChannelState } from 'stream-chat';
|
|
4
4
|
import type { StreamMessage } from '../../../../context/ChannelStateContext';
|
|
5
5
|
import type { DefaultStreamChatGenerics } from '../../../../types/types';
|
|
6
6
|
import { MessageRenderer, SharedMessageProps } from '../../renderMessages';
|
|
@@ -11,10 +11,7 @@ type UseMessageListElementsProps<StreamChatGenerics extends DefaultStreamChatGen
|
|
|
11
11
|
renderMessages: MessageRenderer<StreamChatGenerics>;
|
|
12
12
|
returnAllReadData: boolean;
|
|
13
13
|
threadList: boolean;
|
|
14
|
-
read?:
|
|
15
|
-
last_read: Date;
|
|
16
|
-
user: UserResponse<StreamChatGenerics>;
|
|
17
|
-
}>;
|
|
14
|
+
read?: StreamChannelState<StreamChatGenerics>['read'];
|
|
18
15
|
};
|
|
19
16
|
export declare const useMessageListElements: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(props: UseMessageListElementsProps<StreamChatGenerics>) => React.ReactNode[];
|
|
20
17
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMessageListElements.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/MessageList/useMessageListElements.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useMessageListElements.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/MessageList/useMessageListElements.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAmB,UAAU,EAAE,MAAM,aAAa,CAAC;AAK1D,OAAO,KAAK,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE3E,KAAK,2BAA2B,CAC9B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,gBAAgB,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IACtD,oBAAoB,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IAC7D,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/C,cAAc,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACpD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,sBAAsB,iKA0DlC,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { __assign } from "tslib";
|
|
2
|
-
/* eslint-disable no-continue */
|
|
3
2
|
import { useMemo } from 'react';
|
|
4
3
|
import { useLastReadData } from '../useLastReadData';
|
|
5
4
|
import { getLastReceived } from '../../utils';
|
|
@@ -19,6 +18,7 @@ export var useMessageListElements = function (props) {
|
|
|
19
18
|
var lastReceivedMessageId = useMemo(function () { return getLastReceived(enrichedMessages); }, [
|
|
20
19
|
enrichedMessages,
|
|
21
20
|
]);
|
|
21
|
+
var ownReadState = client.user && (read === null || read === void 0 ? void 0 : read[client.user.id]) ? read[client.user.id] : undefined;
|
|
22
22
|
var elements = useMemo(function () {
|
|
23
23
|
return renderMessages({
|
|
24
24
|
components: components,
|
|
@@ -26,6 +26,7 @@ export var useMessageListElements = function (props) {
|
|
|
26
26
|
lastReceivedMessageId: lastReceivedMessageId,
|
|
27
27
|
messageGroupStyles: messageGroupStyles,
|
|
28
28
|
messages: enrichedMessages,
|
|
29
|
+
ownReadState: ownReadState,
|
|
29
30
|
readData: readData,
|
|
30
31
|
sharedMessageProps: __assign(__assign({}, internalMessageProps), { threadList: threadList }),
|
|
31
32
|
});
|
|
@@ -36,6 +37,7 @@ export var useMessageListElements = function (props) {
|
|
|
36
37
|
internalMessageProps,
|
|
37
38
|
lastReceivedMessageId,
|
|
38
39
|
messageGroupStyles,
|
|
40
|
+
ownReadState,
|
|
39
41
|
readData,
|
|
40
42
|
renderMessages,
|
|
41
43
|
threadList,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type UseUnreadMessagesNotificationParams = {
|
|
2
|
+
unreadCount?: number;
|
|
3
|
+
};
|
|
4
|
+
export declare const useUnreadMessagesNotification: ({ unreadCount, }: UseUnreadMessagesNotificationParams) => {
|
|
5
|
+
show: boolean;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=useUnreadMessagesNotification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUnreadMessagesNotification.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,mCAAmC,GAAG;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,6BAA6B,qBAEvC,mCAAmC;;CAwCrC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { useChannelStateContext } from '../../../../context';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { MESSAGE_LIST_MAIN_PANEL_CLASS } from '../../MessageListMainPanel';
|
|
4
|
+
import { UNREAD_MESSAGE_SEPARATOR_CLASS } from '../../UnreadMessagesSeparator';
|
|
5
|
+
var targetIsVisibleInContainer = function (element, container) {
|
|
6
|
+
var msgListHeight = container.getBoundingClientRect().height;
|
|
7
|
+
var targetMessageY = element.getBoundingClientRect().y;
|
|
8
|
+
return 0 <= targetMessageY && targetMessageY <= msgListHeight;
|
|
9
|
+
};
|
|
10
|
+
export var useUnreadMessagesNotification = function (_a) {
|
|
11
|
+
var unreadCount = _a.unreadCount;
|
|
12
|
+
var messages = useChannelStateContext('UnreadMessagesNotification').messages;
|
|
13
|
+
var _b = useState(false), show = _b[0], setShow = _b[1];
|
|
14
|
+
var intersectionObserverIsSupported = typeof IntersectionObserver !== 'undefined';
|
|
15
|
+
useEffect(function () {
|
|
16
|
+
if (!(unreadCount && intersectionObserverIsSupported)) {
|
|
17
|
+
setShow(false);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
var msgListPanel = document.querySelector(".".concat(MESSAGE_LIST_MAIN_PANEL_CLASS));
|
|
21
|
+
if (!msgListPanel)
|
|
22
|
+
return;
|
|
23
|
+
var observedTarget = document.querySelector(".".concat(UNREAD_MESSAGE_SEPARATOR_CLASS));
|
|
24
|
+
if (!observedTarget) {
|
|
25
|
+
setShow(true);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
setShow(!targetIsVisibleInContainer(observedTarget, msgListPanel));
|
|
29
|
+
var observer = new IntersectionObserver(function (elements) {
|
|
30
|
+
if (!elements.length)
|
|
31
|
+
return;
|
|
32
|
+
var _a = elements[0], boundingClientRect = _a.boundingClientRect, isIntersecting = _a.isIntersecting, rootBounds = _a.rootBounds;
|
|
33
|
+
var isScrolledAboveTargetTop = rootBounds && boundingClientRect && rootBounds.bottom < boundingClientRect.top;
|
|
34
|
+
setShow(!isIntersecting && !isScrolledAboveTargetTop);
|
|
35
|
+
}, { root: msgListPanel });
|
|
36
|
+
observer.observe(observedTarget);
|
|
37
|
+
return function () {
|
|
38
|
+
observer.disconnect();
|
|
39
|
+
};
|
|
40
|
+
}, [intersectionObserverIsSupported, messages, unreadCount]);
|
|
41
|
+
return { show: show && intersectionObserverIsSupported };
|
|
42
|
+
};
|
|
@@ -4,4 +4,5 @@ export * from './useNewMessageNotification';
|
|
|
4
4
|
export * from './usePrependMessagesCount';
|
|
5
5
|
export * from './useScrollToBottomOnNewMessage';
|
|
6
6
|
export * from './useShouldForceScrollToBottom';
|
|
7
|
+
export * from './useUnreadMessagesNotificationVirtualized';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4CAA4C,CAAC"}
|