stream-chat-react 12.8.0 → 12.8.2
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/Dialog/DialogManager.d.ts +8 -0
- package/dist/components/Dialog/DialogManager.js +42 -0
- package/dist/components/Dialog/hooks/useDialog.js +5 -1
- package/dist/components/MessageList/VirtualizedMessageListComponents.js +12 -19
- package/dist/components/MessageList/hooks/useMarkRead.js +3 -6
- package/dist/components/MessageList/renderMessages.js +14 -21
- package/dist/components/MessageList/utils.d.ts +9 -0
- package/dist/components/MessageList/utils.js +8 -0
- package/dist/experimental/index.browser.cjs +1 -1
- package/dist/experimental/index.browser.cjs.map +2 -2
- package/dist/experimental/index.node.cjs +1 -1
- package/dist/experimental/index.node.cjs.map +2 -2
- package/dist/index.browser.cjs +87 -26
- package/dist/index.browser.cjs.map +2 -2
- package/dist/index.node.cjs +88 -26
- package/dist/index.node.cjs.map +2 -2
- package/package.json +2 -2
package/dist/index.node.cjs
CHANGED
|
@@ -20327,6 +20327,7 @@ __export(src_exports, {
|
|
|
20327
20327
|
getGroupChannelDisplayInfo: () => getGroupChannelDisplayInfo,
|
|
20328
20328
|
getGroupStyles: () => getGroupStyles,
|
|
20329
20329
|
getImages: () => getImages,
|
|
20330
|
+
getIsFirstUnreadMessage: () => getIsFirstUnreadMessage,
|
|
20330
20331
|
getLastReceived: () => getLastReceived,
|
|
20331
20332
|
getLatestMessagePreview: () => getLatestMessagePreview,
|
|
20332
20333
|
getMessageActions: () => getMessageActions,
|
|
@@ -20673,6 +20674,7 @@ var DialogManager = class {
|
|
|
20673
20674
|
open: () => {
|
|
20674
20675
|
this.open({ id });
|
|
20675
20676
|
},
|
|
20677
|
+
removalTimeout: void 0,
|
|
20676
20678
|
remove: () => {
|
|
20677
20679
|
this.remove(id);
|
|
20678
20680
|
},
|
|
@@ -20685,6 +20687,21 @@ var DialogManager = class {
|
|
|
20685
20687
|
...{ dialogsById: { ...current.dialogsById, [id]: dialog } }
|
|
20686
20688
|
}));
|
|
20687
20689
|
}
|
|
20690
|
+
if (dialog.removalTimeout) {
|
|
20691
|
+
clearTimeout(dialog.removalTimeout);
|
|
20692
|
+
this.state.next((current) => ({
|
|
20693
|
+
...current,
|
|
20694
|
+
...{
|
|
20695
|
+
dialogsById: {
|
|
20696
|
+
...current.dialogsById,
|
|
20697
|
+
[id]: {
|
|
20698
|
+
...dialog,
|
|
20699
|
+
removalTimeout: void 0
|
|
20700
|
+
}
|
|
20701
|
+
}
|
|
20702
|
+
}
|
|
20703
|
+
}));
|
|
20704
|
+
}
|
|
20688
20705
|
return dialog;
|
|
20689
20706
|
}
|
|
20690
20707
|
open(params, closeRest) {
|
|
@@ -20720,6 +20737,9 @@ var DialogManager = class {
|
|
|
20720
20737
|
const state = this.state.getLatestValue();
|
|
20721
20738
|
const dialog = state.dialogsById[id];
|
|
20722
20739
|
if (!dialog) return;
|
|
20740
|
+
if (dialog.removalTimeout) {
|
|
20741
|
+
clearTimeout(dialog.removalTimeout);
|
|
20742
|
+
}
|
|
20723
20743
|
this.state.next((current) => {
|
|
20724
20744
|
const newDialogs = { ...current.dialogsById };
|
|
20725
20745
|
delete newDialogs[id];
|
|
@@ -20729,6 +20749,29 @@ var DialogManager = class {
|
|
|
20729
20749
|
};
|
|
20730
20750
|
});
|
|
20731
20751
|
}
|
|
20752
|
+
/**
|
|
20753
|
+
* Marks the dialog state as unused. If the dialog id is referenced again quickly,
|
|
20754
|
+
* the state will not be removed. Otherwise, the state will be removed after
|
|
20755
|
+
* a short timeout.
|
|
20756
|
+
*/
|
|
20757
|
+
markForRemoval(id) {
|
|
20758
|
+
const dialog = this.state.getLatestValue().dialogsById[id];
|
|
20759
|
+
if (!dialog) {
|
|
20760
|
+
return;
|
|
20761
|
+
}
|
|
20762
|
+
this.state.next((current) => ({
|
|
20763
|
+
...current,
|
|
20764
|
+
dialogsById: {
|
|
20765
|
+
...current.dialogsById,
|
|
20766
|
+
[id]: {
|
|
20767
|
+
...dialog,
|
|
20768
|
+
removalTimeout: setTimeout(() => {
|
|
20769
|
+
this.remove(id);
|
|
20770
|
+
}, 16)
|
|
20771
|
+
}
|
|
20772
|
+
}
|
|
20773
|
+
}));
|
|
20774
|
+
}
|
|
20732
20775
|
};
|
|
20733
20776
|
|
|
20734
20777
|
// src/components/Dialog/DialogPortal.tsx
|
|
@@ -20757,7 +20800,7 @@ var useDialog = ({ id }) => {
|
|
|
20757
20800
|
const { dialogManager } = useDialogManager();
|
|
20758
20801
|
(0, import_react7.useEffect)(
|
|
20759
20802
|
() => () => {
|
|
20760
|
-
dialogManager.
|
|
20803
|
+
dialogManager.markForRemoval(id);
|
|
20761
20804
|
},
|
|
20762
20805
|
[dialogManager, id]
|
|
20763
20806
|
);
|
|
@@ -52344,6 +52387,21 @@ var hasNotMoreMessages = (returnedCountMessages, limit) => returnedCountMessages
|
|
|
52344
52387
|
function isDateSeparatorMessage(message) {
|
|
52345
52388
|
return message.customType === CUSTOM_MESSAGE_TYPE.date && !!message.date && isDate(message.date);
|
|
52346
52389
|
}
|
|
52390
|
+
var getIsFirstUnreadMessage = ({
|
|
52391
|
+
firstUnreadMessageId,
|
|
52392
|
+
isFirstMessage,
|
|
52393
|
+
lastReadDate,
|
|
52394
|
+
lastReadMessageId,
|
|
52395
|
+
message,
|
|
52396
|
+
previousMessage,
|
|
52397
|
+
unreadMessageCount = 0
|
|
52398
|
+
}) => {
|
|
52399
|
+
const createdAtTimestamp = message.created_at && new Date(message.created_at).getTime();
|
|
52400
|
+
const lastReadTimestamp = lastReadDate?.getTime();
|
|
52401
|
+
const messageIsUnread = !!createdAtTimestamp && !!lastReadTimestamp && createdAtTimestamp > lastReadTimestamp;
|
|
52402
|
+
const previousMessageIsLastRead = !!lastReadMessageId && lastReadMessageId === previousMessage?.id;
|
|
52403
|
+
return firstUnreadMessageId === message.id || !!unreadMessageCount && messageIsUnread && (isFirstMessage || previousMessageIsLastRead);
|
|
52404
|
+
};
|
|
52347
52405
|
|
|
52348
52406
|
// src/components/MessageList/hooks/MessageList/useEnrichedMessages.ts
|
|
52349
52407
|
var useEnrichedMessages = (args) => {
|
|
@@ -52700,7 +52758,6 @@ var useMarkRead = ({
|
|
|
52700
52758
|
if (shouldMarkRead(channel.countUnread())) markRead();
|
|
52701
52759
|
};
|
|
52702
52760
|
const handleMessageNew = (event) => {
|
|
52703
|
-
const newMessageToCurrentChannel = event.cid === channel.cid;
|
|
52704
52761
|
const isOwnMessage = event.user?.id && event.user.id === client.user?.id;
|
|
52705
52762
|
const mainChannelUpdated = !event.message?.parent_id || event.message?.show_in_channel;
|
|
52706
52763
|
if (isOwnMessage) return;
|
|
@@ -52718,17 +52775,17 @@ var useMarkRead = ({
|
|
|
52718
52775
|
unread_messages: previousUnreadCount + 1
|
|
52719
52776
|
};
|
|
52720
52777
|
});
|
|
52721
|
-
} else if (
|
|
52778
|
+
} else if (mainChannelUpdated && shouldMarkRead(channel.countUnread())) {
|
|
52722
52779
|
markRead();
|
|
52723
52780
|
}
|
|
52724
52781
|
};
|
|
52725
|
-
|
|
52782
|
+
channel.on("message.new", handleMessageNew);
|
|
52726
52783
|
document.addEventListener("visibilitychange", onVisibilityChange);
|
|
52727
52784
|
const hasScrolledToBottom = previousRenderMessageListScrolledToBottom.current !== isMessageListScrolledToBottom && isMessageListScrolledToBottom;
|
|
52728
52785
|
if (hasScrolledToBottom && shouldMarkRead(channel.countUnread())) markRead();
|
|
52729
52786
|
previousRenderMessageListScrolledToBottom.current = isMessageListScrolledToBottom;
|
|
52730
52787
|
return () => {
|
|
52731
|
-
|
|
52788
|
+
channel.off("message.new", handleMessageNew);
|
|
52732
52789
|
document.removeEventListener("visibilitychange", onVisibilityChange);
|
|
52733
52790
|
};
|
|
52734
52791
|
}, [
|
|
@@ -53163,6 +53220,7 @@ function defaultRenderMessages({
|
|
|
53163
53220
|
} = components;
|
|
53164
53221
|
const renderedMessages = [];
|
|
53165
53222
|
let firstMessage;
|
|
53223
|
+
let previousMessage = void 0;
|
|
53166
53224
|
for (let index3 = 0; index3 < messages.length; index3++) {
|
|
53167
53225
|
const message = messages[index3];
|
|
53168
53226
|
if (isDateSeparatorMessage(message)) {
|
|
@@ -53190,16 +53248,17 @@ function defaultRenderMessages({
|
|
|
53190
53248
|
}
|
|
53191
53249
|
const groupStyles = messageGroupStyles[message.id] || "";
|
|
53192
53250
|
const messageClass = customClasses?.message || `str-chat__li str-chat__li--${groupStyles}`;
|
|
53193
|
-
const
|
|
53194
|
-
|
|
53195
|
-
|
|
53196
|
-
|
|
53197
|
-
|
|
53198
|
-
|
|
53199
|
-
|
|
53200
|
-
|
|
53251
|
+
const isFirstUnreadMessage = getIsFirstUnreadMessage({
|
|
53252
|
+
firstUnreadMessageId: channelUnreadUiState?.first_unread_message_id,
|
|
53253
|
+
isFirstMessage: !!firstMessage?.id && firstMessage.id === message.id,
|
|
53254
|
+
lastReadDate: channelUnreadUiState?.last_read,
|
|
53255
|
+
lastReadMessageId: channelUnreadUiState?.last_read_message_id,
|
|
53256
|
+
message,
|
|
53257
|
+
previousMessage,
|
|
53258
|
+
unreadMessageCount: channelUnreadUiState?.unread_messages
|
|
53259
|
+
});
|
|
53201
53260
|
renderedMessages.push(
|
|
53202
|
-
/* @__PURE__ */ import_react245.default.createElement(import_react245.Fragment, { key: message.id || message.created_at },
|
|
53261
|
+
/* @__PURE__ */ import_react245.default.createElement(import_react245.Fragment, { key: message.id || message.created_at }, isFirstUnreadMessage && UnreadMessagesSeparator2 && /* @__PURE__ */ import_react245.default.createElement("li", { className: "str-chat__li str-chat__unread-messages-separator-wrapper" }, /* @__PURE__ */ import_react245.default.createElement(UnreadMessagesSeparator2, { unreadCount: channelUnreadUiState?.unread_messages })), /* @__PURE__ */ import_react245.default.createElement("li", { className: messageClass, "data-message-id": message.id, "data-testid": messageClass }, /* @__PURE__ */ import_react245.default.createElement(
|
|
53203
53262
|
Message,
|
|
53204
53263
|
{
|
|
53205
53264
|
groupStyles: [groupStyles],
|
|
@@ -53208,8 +53267,9 @@ function defaultRenderMessages({
|
|
|
53208
53267
|
readBy: readData[message.id] || [],
|
|
53209
53268
|
...messageProps
|
|
53210
53269
|
}
|
|
53211
|
-
))
|
|
53270
|
+
)))
|
|
53212
53271
|
);
|
|
53272
|
+
previousMessage = message;
|
|
53213
53273
|
}
|
|
53214
53274
|
}
|
|
53215
53275
|
return renderedMessages;
|
|
@@ -53809,15 +53869,16 @@ var messageRenderer = (virtuosoIndex, _data, virtuosoContext) => {
|
|
|
53809
53869
|
const maybeNextMessage = messageList[streamMessageIndex + 1];
|
|
53810
53870
|
const firstOfGroup = shouldGroupByUser && (message.user?.id !== maybePrevMessage?.user?.id || maybePrevMessage && isMessageEdited(maybePrevMessage));
|
|
53811
53871
|
const endOfGroup = shouldGroupByUser && (message.user?.id !== maybeNextMessage?.user?.id || isMessageEdited(message));
|
|
53812
|
-
const
|
|
53813
|
-
|
|
53814
|
-
|
|
53815
|
-
|
|
53816
|
-
|
|
53817
|
-
|
|
53818
|
-
|
|
53819
|
-
|
|
53820
|
-
|
|
53872
|
+
const isFirstUnreadMessage = getIsFirstUnreadMessage({
|
|
53873
|
+
firstUnreadMessageId,
|
|
53874
|
+
isFirstMessage: streamMessageIndex === 0,
|
|
53875
|
+
lastReadDate,
|
|
53876
|
+
lastReadMessageId,
|
|
53877
|
+
message,
|
|
53878
|
+
previousMessage: streamMessageIndex ? messageList[streamMessageIndex - 1] : void 0,
|
|
53879
|
+
unreadMessageCount
|
|
53880
|
+
});
|
|
53881
|
+
return /* @__PURE__ */ import_react255.default.createElement(import_react255.default.Fragment, null, isFirstUnreadMessage && /* @__PURE__ */ import_react255.default.createElement("div", { className: "str-chat__unread-messages-separator-wrapper" }, /* @__PURE__ */ import_react255.default.createElement(UnreadMessagesSeparator2, { unreadCount: unreadMessageCount })), /* @__PURE__ */ import_react255.default.createElement(
|
|
53821
53882
|
Message,
|
|
53822
53883
|
{
|
|
53823
53884
|
additionalMessageInputProps,
|
|
@@ -53840,7 +53901,7 @@ var messageRenderer = (virtuosoIndex, _data, virtuosoContext) => {
|
|
|
53840
53901
|
sortReactions,
|
|
53841
53902
|
threadList
|
|
53842
53903
|
}
|
|
53843
|
-
)
|
|
53904
|
+
));
|
|
53844
53905
|
};
|
|
53845
53906
|
|
|
53846
53907
|
// src/components/MessageList/VirtualizedMessageList.tsx
|
|
@@ -55317,7 +55378,7 @@ var useChat = ({
|
|
|
55317
55378
|
if (!client) return;
|
|
55318
55379
|
const userAgent = client.getUserAgent();
|
|
55319
55380
|
if (!userAgent.includes("stream-chat-react")) {
|
|
55320
|
-
client.setUserAgent(`stream-chat-react-12.8.
|
|
55381
|
+
client.setUserAgent(`stream-chat-react-12.8.2-${userAgent}`);
|
|
55321
55382
|
}
|
|
55322
55383
|
client.threads.registerSubscriptions();
|
|
55323
55384
|
client.polls.registerSubscriptions();
|
|
@@ -55954,6 +56015,7 @@ var Window = import_react270.default.memo(UnMemoizedWindow);
|
|
|
55954
56015
|
getGroupChannelDisplayInfo,
|
|
55955
56016
|
getGroupStyles,
|
|
55956
56017
|
getImages,
|
|
56018
|
+
getIsFirstUnreadMessage,
|
|
55957
56019
|
getLastReceived,
|
|
55958
56020
|
getLatestMessagePreview,
|
|
55959
56021
|
getMessageActions,
|