stream-chat-react 13.10.2 → 13.11.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/components/Chat/hooks/useChat.js +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.d.ts +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.js +2 -1
- package/dist/components/MessageList/VirtualizedMessageListComponents.js +2 -2
- package/dist/components/MessageList/hooks/useLastDeliveredData.js +25 -13
- package/dist/index.browser.cjs +33 -20
- package/dist/index.browser.cjs.map +3 -3
- package/dist/index.node.cjs +33 -20
- package/dist/index.node.cjs.map +3 -3
- package/package.json +1 -1
|
@@ -24,7 +24,7 @@ export const useChat = ({ client, defaultLanguage = 'en', i18nInstance, initialN
|
|
|
24
24
|
useEffect(() => {
|
|
25
25
|
if (!client)
|
|
26
26
|
return;
|
|
27
|
-
const version = "13.
|
|
27
|
+
const version = "13.11.0";
|
|
28
28
|
const userAgent = client.getUserAgent();
|
|
29
29
|
if (!userAgent.includes('stream-chat-react')) {
|
|
30
30
|
// result looks like: 'stream-chat-react-2.3.2-stream-chat-javascript-client-browser-2.2.2'
|
|
@@ -9,7 +9,7 @@ import type { ChatContextValue } from '../../context/ChatContext';
|
|
|
9
9
|
import type { ComponentContextValue } from '../../context/ComponentContext';
|
|
10
10
|
import type { LocalMessage, UserResponse } from 'stream-chat';
|
|
11
11
|
import type { UnknownType } from '../../types/types';
|
|
12
|
-
type PropsDrilledToMessage = 'additionalMessageInputProps' | 'customMessageActions' | 'formatDate' | 'messageActions' | 'openThread' | 'reactionDetailsSort' | 'sortReactions' | 'sortReactionDetails';
|
|
12
|
+
type PropsDrilledToMessage = 'additionalMessageInputProps' | 'customMessageActions' | 'formatDate' | 'messageActions' | 'openThread' | 'reactionDetailsSort' | 'renderText' | 'sortReactions' | 'sortReactionDetails';
|
|
13
13
|
type VirtualizedMessageListPropsForContext = PropsDrilledToMessage | 'closeReactionSelectorOnClick' | 'customMessageRenderer' | 'head' | 'loadingMore' | 'Message' | 'returnAllReadData' | 'shouldGroupByUser' | 'threadList';
|
|
14
14
|
/**
|
|
15
15
|
* Context object provided to some Virtuoso props that are functions (components rendered by Virtuoso and other functions)
|
|
@@ -56,7 +56,7 @@ function calculateInitialTopMostItemIndex(messages, highlightedMessageId) {
|
|
|
56
56
|
const VirtualizedMessageListWithContext = (props) => {
|
|
57
57
|
const { additionalMessageInputProps, additionalVirtuosoProps = {}, channel, channelUnreadUiState, closeReactionSelectorOnClick, customMessageActions, customMessageRenderer, defaultItemHeight, disableDateSeparator = true, formatDate, groupStyles, hasMoreNewer, head, hideDeletedMessages = false, hideNewMessageSeparator = false, highlightedMessageId, jumpToLatestMessage, loadingMore, loadMore, loadMoreNewer, maxTimeBetweenGroupedMessages, Message: MessageUIComponentFromProps, messageActions, messageLimit = DEFAULT_NEXT_CHANNEL_PAGE_SIZE, messages, notifications, openThread,
|
|
58
58
|
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
59
|
-
overscan = 0, reactionDetailsSort, returnAllReadData = false, reviewProcessedMessage, scrollSeekPlaceHolder, scrollToLatestMessageOnFocus = false, separateGiphyPreview = false, shouldGroupByUser = false, showUnreadNotificationAlways, sortReactionDetails, sortReactions, stickToBottomScrollBehavior = 'smooth', suppressAutoscroll, threadList, } = props;
|
|
59
|
+
overscan = 0, reactionDetailsSort, renderText, returnAllReadData = false, reviewProcessedMessage, scrollSeekPlaceHolder, scrollToLatestMessageOnFocus = false, separateGiphyPreview = false, shouldGroupByUser = false, showUnreadNotificationAlways, sortReactionDetails, sortReactions, stickToBottomScrollBehavior = 'smooth', suppressAutoscroll, threadList, } = props;
|
|
60
60
|
const { components: virtuosoComponentsFromProps, ...overridingVirtuosoProps } = additionalVirtuosoProps;
|
|
61
61
|
// Stops errors generated from react-virtuoso to bubble up
|
|
62
62
|
// to Sentry or other tracking tools.
|
|
@@ -245,6 +245,7 @@ const VirtualizedMessageListWithContext = (props) => {
|
|
|
245
245
|
ownMessagesReadByOthers,
|
|
246
246
|
processedMessages,
|
|
247
247
|
reactionDetailsSort,
|
|
248
|
+
renderText,
|
|
248
249
|
returnAllReadData,
|
|
249
250
|
shouldGroupByUser,
|
|
250
251
|
sortReactionDetails,
|
|
@@ -51,7 +51,7 @@ export const EmptyPlaceholder = ({ context }) => {
|
|
|
51
51
|
return (React.createElement(React.Fragment, null, EmptyStateIndicator && (React.createElement(EmptyStateIndicator, { listType: context?.threadList ? 'thread' : 'message' }))));
|
|
52
52
|
};
|
|
53
53
|
export const messageRenderer = (virtuosoIndex, _data, virtuosoContext) => {
|
|
54
|
-
const { additionalMessageInputProps, closeReactionSelectorOnClick, customMessageActions, customMessageRenderer, DateSeparator, firstUnreadMessageId, formatDate, lastOwnMessage, lastReadDate, lastReadMessageId, lastReceivedMessageId, Message: MessageUIComponent, messageActions, messageGroupStyles, MessageSystem, numItemsPrepended, openThread, ownMessagesDeliveredToOthers, ownMessagesReadByOthers, processedMessages: messageList, reactionDetailsSort, returnAllReadData, shouldGroupByUser, sortReactionDetails, sortReactions, threadList, unreadMessageCount = 0, UnreadMessagesSeparator, virtuosoRef, } = virtuosoContext;
|
|
54
|
+
const { additionalMessageInputProps, closeReactionSelectorOnClick, customMessageActions, customMessageRenderer, DateSeparator, firstUnreadMessageId, formatDate, lastOwnMessage, lastReadDate, lastReadMessageId, lastReceivedMessageId, Message: MessageUIComponent, messageActions, messageGroupStyles, MessageSystem, numItemsPrepended, openThread, ownMessagesDeliveredToOthers, ownMessagesReadByOthers, processedMessages: messageList, reactionDetailsSort, renderText, returnAllReadData, shouldGroupByUser, sortReactionDetails, sortReactions, threadList, unreadMessageCount = 0, UnreadMessagesSeparator, virtuosoRef, } = virtuosoContext;
|
|
55
55
|
const streamMessageIndex = calculateItemIndex(virtuosoIndex, numItemsPrepended);
|
|
56
56
|
if (customMessageRenderer) {
|
|
57
57
|
return customMessageRenderer(messageList, streamMessageIndex);
|
|
@@ -88,5 +88,5 @@ export const messageRenderer = (virtuosoIndex, _data, virtuosoContext) => {
|
|
|
88
88
|
return (React.createElement(React.Fragment, null,
|
|
89
89
|
isFirstUnreadMessage && (React.createElement("div", { className: 'str-chat__unread-messages-separator-wrapper' },
|
|
90
90
|
React.createElement(UnreadMessagesSeparator, { unreadCount: unreadMessageCount }))),
|
|
91
|
-
React.createElement(Message, { additionalMessageInputProps: additionalMessageInputProps, autoscrollToBottom: virtuosoRef.current?.autoscrollToBottom, closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: customMessageActions, deliveredTo: ownMessagesDeliveredToOthers[message.id] || [], endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, formatDate: formatDate, groupedByUser: groupedByUser, groupStyles: [messageGroupStyles[message.id] ?? ''], lastOwnMessage: lastOwnMessage, lastReceivedId: lastReceivedMessageId, message: message, Message: MessageUIComponent, messageActions: messageActions, openThread: openThread, reactionDetailsSort: reactionDetailsSort, readBy: ownMessagesReadByOthers[message.id] || [], returnAllReadData: returnAllReadData, sortReactionDetails: sortReactionDetails, sortReactions: sortReactions, threadList: threadList })));
|
|
91
|
+
React.createElement(Message, { additionalMessageInputProps: additionalMessageInputProps, autoscrollToBottom: virtuosoRef.current?.autoscrollToBottom, closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: customMessageActions, deliveredTo: ownMessagesDeliveredToOthers[message.id] || [], endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, formatDate: formatDate, groupedByUser: groupedByUser, groupStyles: [messageGroupStyles[message.id] ?? ''], lastOwnMessage: lastOwnMessage, lastReceivedId: lastReceivedMessageId, message: message, Message: MessageUIComponent, messageActions: messageActions, openThread: openThread, reactionDetailsSort: reactionDetailsSort, readBy: ownMessagesReadByOthers[message.id] || [], renderText: renderText, returnAllReadData: returnAllReadData, sortReactionDetails: sortReactionDetails, sortReactions: sortReactions, threadList: threadList })));
|
|
92
92
|
};
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { useCallback, useEffect, useState } from 'react';
|
|
2
2
|
export const useLastDeliveredData = (props) => {
|
|
3
3
|
const { channel, lastOwnMessage, messages, returnAllReadData } = props;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}, {});
|
|
13
|
-
}
|
|
4
|
+
const calculateForAll = useCallback(() => messages.reduce((acc, msg) => {
|
|
5
|
+
acc[msg.id] = channel.messageReceiptsTracker.deliveredForMessage({
|
|
6
|
+
msgId: msg.id,
|
|
7
|
+
timestampMs: msg.created_at.getTime(),
|
|
8
|
+
});
|
|
9
|
+
return acc;
|
|
10
|
+
}, {}), [channel, messages]);
|
|
11
|
+
const calculateForLastOwn = useCallback(() => {
|
|
14
12
|
if (!lastOwnMessage)
|
|
15
13
|
return {};
|
|
16
14
|
return {
|
|
@@ -19,8 +17,22 @@ export const useLastDeliveredData = (props) => {
|
|
|
19
17
|
timestampMs: lastOwnMessage.created_at.getTime(),
|
|
20
18
|
}),
|
|
21
19
|
};
|
|
22
|
-
}, [channel, lastOwnMessage
|
|
23
|
-
const [deliveredTo, setDeliveredTo] = useState(
|
|
24
|
-
useEffect(() =>
|
|
20
|
+
}, [channel, lastOwnMessage]);
|
|
21
|
+
const [deliveredTo, setDeliveredTo] = useState(returnAllReadData ? calculateForAll : calculateForLastOwn);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
if (!returnAllReadData)
|
|
24
|
+
return;
|
|
25
|
+
setDeliveredTo(calculateForAll);
|
|
26
|
+
return channel.on('message.delivered', () => setDeliveredTo(calculateForAll))
|
|
27
|
+
.unsubscribe;
|
|
28
|
+
}, [channel, calculateForAll, returnAllReadData]);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (returnAllReadData)
|
|
31
|
+
return;
|
|
32
|
+
else
|
|
33
|
+
setDeliveredTo(calculateForLastOwn);
|
|
34
|
+
return channel.on('message.delivered', () => setDeliveredTo(calculateForLastOwn))
|
|
35
|
+
.unsubscribe;
|
|
36
|
+
}, [channel, calculateForLastOwn, returnAllReadData]);
|
|
25
37
|
return deliveredTo;
|
|
26
38
|
};
|
package/dist/index.browser.cjs
CHANGED
|
@@ -27609,19 +27609,20 @@ var useLastReadData = (props) => {
|
|
|
27609
27609
|
var import_react163 = require("react");
|
|
27610
27610
|
var useLastDeliveredData = (props) => {
|
|
27611
27611
|
const { channel, lastOwnMessage, messages, returnAllReadData } = props;
|
|
27612
|
-
const
|
|
27613
|
-
|
|
27614
|
-
|
|
27615
|
-
|
|
27616
|
-
|
|
27617
|
-
|
|
27618
|
-
|
|
27619
|
-
|
|
27620
|
-
|
|
27621
|
-
|
|
27622
|
-
|
|
27623
|
-
|
|
27624
|
-
|
|
27612
|
+
const calculateForAll = (0, import_react163.useCallback)(
|
|
27613
|
+
() => messages.reduce(
|
|
27614
|
+
(acc, msg) => {
|
|
27615
|
+
acc[msg.id] = channel.messageReceiptsTracker.deliveredForMessage({
|
|
27616
|
+
msgId: msg.id,
|
|
27617
|
+
timestampMs: msg.created_at.getTime()
|
|
27618
|
+
});
|
|
27619
|
+
return acc;
|
|
27620
|
+
},
|
|
27621
|
+
{}
|
|
27622
|
+
),
|
|
27623
|
+
[channel, messages]
|
|
27624
|
+
);
|
|
27625
|
+
const calculateForLastOwn = (0, import_react163.useCallback)(() => {
|
|
27625
27626
|
if (!lastOwnMessage) return {};
|
|
27626
27627
|
return {
|
|
27627
27628
|
[lastOwnMessage.id]: channel.messageReceiptsTracker.deliveredForMessage({
|
|
@@ -27629,12 +27630,20 @@ var useLastDeliveredData = (props) => {
|
|
|
27629
27630
|
timestampMs: lastOwnMessage.created_at.getTime()
|
|
27630
27631
|
})
|
|
27631
27632
|
};
|
|
27632
|
-
}, [channel, lastOwnMessage
|
|
27633
|
-
const [deliveredTo, setDeliveredTo] = (0, import_react163.useState)(
|
|
27634
|
-
|
|
27635
|
-
|
|
27636
|
-
|
|
27637
|
-
|
|
27633
|
+
}, [channel, lastOwnMessage]);
|
|
27634
|
+
const [deliveredTo, setDeliveredTo] = (0, import_react163.useState)(
|
|
27635
|
+
returnAllReadData ? calculateForAll : calculateForLastOwn
|
|
27636
|
+
);
|
|
27637
|
+
(0, import_react163.useEffect)(() => {
|
|
27638
|
+
if (!returnAllReadData) return;
|
|
27639
|
+
setDeliveredTo(calculateForAll);
|
|
27640
|
+
return channel.on("message.delivered", () => setDeliveredTo(calculateForAll)).unsubscribe;
|
|
27641
|
+
}, [channel, calculateForAll, returnAllReadData]);
|
|
27642
|
+
(0, import_react163.useEffect)(() => {
|
|
27643
|
+
if (returnAllReadData) return;
|
|
27644
|
+
else setDeliveredTo(calculateForLastOwn);
|
|
27645
|
+
return channel.on("message.delivered", () => setDeliveredTo(calculateForLastOwn)).unsubscribe;
|
|
27646
|
+
}, [channel, calculateForLastOwn, returnAllReadData]);
|
|
27638
27647
|
return deliveredTo;
|
|
27639
27648
|
};
|
|
27640
27649
|
|
|
@@ -29043,6 +29052,7 @@ var messageRenderer = (virtuosoIndex, _data, virtuosoContext) => {
|
|
|
29043
29052
|
ownMessagesReadByOthers,
|
|
29044
29053
|
processedMessages: messageList,
|
|
29045
29054
|
reactionDetailsSort,
|
|
29055
|
+
renderText: renderText2,
|
|
29046
29056
|
returnAllReadData,
|
|
29047
29057
|
shouldGroupByUser,
|
|
29048
29058
|
sortReactionDetails,
|
|
@@ -29099,6 +29109,7 @@ var messageRenderer = (virtuosoIndex, _data, virtuosoContext) => {
|
|
|
29099
29109
|
openThread,
|
|
29100
29110
|
reactionDetailsSort,
|
|
29101
29111
|
readBy: ownMessagesReadByOthers[message.id] || [],
|
|
29112
|
+
renderText: renderText2,
|
|
29102
29113
|
returnAllReadData,
|
|
29103
29114
|
sortReactionDetails,
|
|
29104
29115
|
sortReactions,
|
|
@@ -29182,6 +29193,7 @@ var VirtualizedMessageListWithContext = (props) => {
|
|
|
29182
29193
|
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
29183
29194
|
overscan = 0,
|
|
29184
29195
|
reactionDetailsSort,
|
|
29196
|
+
renderText: renderText2,
|
|
29185
29197
|
returnAllReadData = false,
|
|
29186
29198
|
reviewProcessedMessage,
|
|
29187
29199
|
scrollSeekPlaceHolder,
|
|
@@ -29425,6 +29437,7 @@ var VirtualizedMessageListWithContext = (props) => {
|
|
|
29425
29437
|
ownMessagesReadByOthers,
|
|
29426
29438
|
processedMessages,
|
|
29427
29439
|
reactionDetailsSort,
|
|
29440
|
+
renderText: renderText2,
|
|
29428
29441
|
returnAllReadData,
|
|
29429
29442
|
shouldGroupByUser,
|
|
29430
29443
|
sortReactionDetails,
|
|
@@ -36553,7 +36566,7 @@ var useChat = ({
|
|
|
36553
36566
|
};
|
|
36554
36567
|
(0, import_react286.useEffect)(() => {
|
|
36555
36568
|
if (!client) return;
|
|
36556
|
-
const version = "13.
|
|
36569
|
+
const version = "13.11.0";
|
|
36557
36570
|
const userAgent = client.getUserAgent();
|
|
36558
36571
|
if (!userAgent.includes("stream-chat-react")) {
|
|
36559
36572
|
client.setUserAgent(`stream-chat-react-${version}-${userAgent}`);
|