stream-chat-react 11.12.1 → 11.12.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/{Window-40a618cb.js → Window-44a85f63.js} +230 -94
- package/dist/browser.full-bundle.js +309 -138
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +3 -3
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +122 -47
- package/dist/components/Channel/utils.d.ts +27 -0
- package/dist/components/Channel/utils.d.ts.map +1 -1
- package/dist/components/Channel/utils.js +56 -0
- package/dist/components/Emojis/index.cjs.js +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.d.ts +1 -0
- package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.js +1 -0
- package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageListComponents.js +20 -7
- package/dist/components/MessageList/hooks/useMarkRead.js +2 -3
- package/dist/components/MessageList/renderMessages.d.ts +5 -5
- package/dist/components/MessageList/renderMessages.d.ts.map +1 -1
- package/dist/components/MessageList/renderMessages.js +44 -22
- package/dist/components/MessageList/utils.d.ts +10 -1
- package/dist/components/MessageList/utils.d.ts.map +1 -1
- package/dist/components/MessageList/utils.js +3 -0
- package/dist/constants/limits.d.ts +1 -0
- package/dist/constants/limits.d.ts.map +1 -1
- package/dist/constants/limits.js +1 -0
- package/dist/index.cjs.js +67 -31
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -42034,6 +42034,7 @@ var DropzoneProvider = function (props) {
|
|
|
42034
42034
|
|
|
42035
42035
|
var DEFAULT_INITIAL_CHANNEL_PAGE_SIZE = 25;
|
|
42036
42036
|
var DEFAULT_NEXT_CHANNEL_PAGE_SIZE = 100;
|
|
42037
|
+
var DEFAULT_JUMP_TO_PAGE_SIZE = 100;
|
|
42037
42038
|
var DEFAULT_THREAD_PAGE_SIZE = 50;
|
|
42038
42039
|
var DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD = 250;
|
|
42039
42040
|
|
|
@@ -42395,6 +42396,9 @@ var hasMoreMessagesProbably = function (returnedCountMessages, limit) {
|
|
|
42395
42396
|
var hasNotMoreMessages = function (returnedCountMessages, limit) {
|
|
42396
42397
|
return returnedCountMessages < limit;
|
|
42397
42398
|
};
|
|
42399
|
+
function isDateSeparatorMessage(message) {
|
|
42400
|
+
return message.customType === CUSTOM_MESSAGE_TYPE.date && !!message.date && isDate(message.date);
|
|
42401
|
+
}
|
|
42398
42402
|
|
|
42399
42403
|
var UNREAD_MESSAGE_SEPARATOR_CLASS = 'str-chat__unread-messages-separator';
|
|
42400
42404
|
var UnreadMessagesSeparator = function (_a) {
|
|
@@ -42542,57 +42546,6 @@ var UnMemoizedTypingIndicator = function (props) {
|
|
|
42542
42546
|
};
|
|
42543
42547
|
var TypingIndicator = React__default["default"].memo(UnMemoizedTypingIndicator);
|
|
42544
42548
|
|
|
42545
|
-
var UnMemoizedScrollToBottomButton = function (props) {
|
|
42546
|
-
var isMessageListScrolledToBottom = props.isMessageListScrolledToBottom, onClick = props.onClick, threadList = props.threadList;
|
|
42547
|
-
var _a = useChatContext(), activeChannel = _a.channel, client = _a.client;
|
|
42548
|
-
var thread = useChannelStateContext().thread;
|
|
42549
|
-
var _b = React.useState((activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.countUnread()) || 0), countUnread = _b[0], setCountUnread = _b[1];
|
|
42550
|
-
var _c = React.useState((thread === null || thread === void 0 ? void 0 : thread.reply_count) || 0), replyCount = _c[0], setReplyCount = _c[1];
|
|
42551
|
-
var observedEvent = threadList ? 'message.updated' : 'message.new';
|
|
42552
|
-
React.useEffect(function () {
|
|
42553
|
-
var handleEvent = function (event) {
|
|
42554
|
-
var _a, _b, _c, _d, _e;
|
|
42555
|
-
var newMessageInAnotherChannel = event.cid !== (activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.cid);
|
|
42556
|
-
var newMessageIsMine = ((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) === ((_b = client.user) === null || _b === void 0 ? void 0 : _b.id);
|
|
42557
|
-
var isThreadOpen = !!thread;
|
|
42558
|
-
var newMessageIsReply = !!((_c = event.message) === null || _c === void 0 ? void 0 : _c.parent_id);
|
|
42559
|
-
var dontIncreaseMainListCounterOnNewReply = isThreadOpen && !threadList && newMessageIsReply;
|
|
42560
|
-
if (isMessageListScrolledToBottom ||
|
|
42561
|
-
newMessageInAnotherChannel ||
|
|
42562
|
-
newMessageIsMine ||
|
|
42563
|
-
dontIncreaseMainListCounterOnNewReply) {
|
|
42564
|
-
return;
|
|
42565
|
-
}
|
|
42566
|
-
if (event.type === 'message.new') {
|
|
42567
|
-
// cannot rely on channel.countUnread because active channel is automatically marked read
|
|
42568
|
-
setCountUnread(function (prev) { return prev + 1; });
|
|
42569
|
-
}
|
|
42570
|
-
else if (((_d = event.message) === null || _d === void 0 ? void 0 : _d.id) === (thread === null || thread === void 0 ? void 0 : thread.id)) {
|
|
42571
|
-
var newReplyCount_1 = ((_e = event.message) === null || _e === void 0 ? void 0 : _e.reply_count) || 0;
|
|
42572
|
-
setCountUnread(function () { return newReplyCount_1 - replyCount; });
|
|
42573
|
-
}
|
|
42574
|
-
};
|
|
42575
|
-
client.on(observedEvent, handleEvent);
|
|
42576
|
-
return function () {
|
|
42577
|
-
client.off(observedEvent, handleEvent);
|
|
42578
|
-
};
|
|
42579
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42580
|
-
}, [activeChannel, isMessageListScrolledToBottom, observedEvent, replyCount, thread]);
|
|
42581
|
-
React.useEffect(function () {
|
|
42582
|
-
if (isMessageListScrolledToBottom) {
|
|
42583
|
-
setCountUnread(0);
|
|
42584
|
-
setReplyCount((thread === null || thread === void 0 ? void 0 : thread.reply_count) || 0);
|
|
42585
|
-
}
|
|
42586
|
-
}, [isMessageListScrolledToBottom, thread]);
|
|
42587
|
-
if (isMessageListScrolledToBottom)
|
|
42588
|
-
return null;
|
|
42589
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__jump-to-latest-message' },
|
|
42590
|
-
React__default["default"].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 },
|
|
42591
|
-
React__default["default"].createElement(ArrowDown, null),
|
|
42592
|
-
countUnread > 0 && (React__default["default"].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' }, countUnread)))));
|
|
42593
|
-
};
|
|
42594
|
-
var ScrollToBottomButton = React__default["default"].memo(UnMemoizedScrollToBottomButton);
|
|
42595
|
-
|
|
42596
42549
|
var selectColor = function (number, dark) {
|
|
42597
42550
|
var hue = number * 137.508; // use golden angle approximation
|
|
42598
42551
|
return "hsl(".concat(hue, ",").concat(dark ? '50%' : '85%', ", ").concat(dark ? '75%' : '55%', ")");
|
|
@@ -42655,6 +42608,57 @@ var UnMemoizedFixedHeightMessage = function (props) {
|
|
|
42655
42608
|
*/
|
|
42656
42609
|
var FixedHeightMessage = React__default["default"].memo(UnMemoizedFixedHeightMessage);
|
|
42657
42610
|
|
|
42611
|
+
var UnMemoizedScrollToBottomButton = function (props) {
|
|
42612
|
+
var isMessageListScrolledToBottom = props.isMessageListScrolledToBottom, onClick = props.onClick, threadList = props.threadList;
|
|
42613
|
+
var _a = useChatContext(), activeChannel = _a.channel, client = _a.client;
|
|
42614
|
+
var thread = useChannelStateContext().thread;
|
|
42615
|
+
var _b = React.useState((activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.countUnread()) || 0), countUnread = _b[0], setCountUnread = _b[1];
|
|
42616
|
+
var _c = React.useState((thread === null || thread === void 0 ? void 0 : thread.reply_count) || 0), replyCount = _c[0], setReplyCount = _c[1];
|
|
42617
|
+
var observedEvent = threadList ? 'message.updated' : 'message.new';
|
|
42618
|
+
React.useEffect(function () {
|
|
42619
|
+
var handleEvent = function (event) {
|
|
42620
|
+
var _a, _b, _c, _d, _e;
|
|
42621
|
+
var newMessageInAnotherChannel = event.cid !== (activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.cid);
|
|
42622
|
+
var newMessageIsMine = ((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) === ((_b = client.user) === null || _b === void 0 ? void 0 : _b.id);
|
|
42623
|
+
var isThreadOpen = !!thread;
|
|
42624
|
+
var newMessageIsReply = !!((_c = event.message) === null || _c === void 0 ? void 0 : _c.parent_id);
|
|
42625
|
+
var dontIncreaseMainListCounterOnNewReply = isThreadOpen && !threadList && newMessageIsReply;
|
|
42626
|
+
if (isMessageListScrolledToBottom ||
|
|
42627
|
+
newMessageInAnotherChannel ||
|
|
42628
|
+
newMessageIsMine ||
|
|
42629
|
+
dontIncreaseMainListCounterOnNewReply) {
|
|
42630
|
+
return;
|
|
42631
|
+
}
|
|
42632
|
+
if (event.type === 'message.new') {
|
|
42633
|
+
// cannot rely on channel.countUnread because active channel is automatically marked read
|
|
42634
|
+
setCountUnread(function (prev) { return prev + 1; });
|
|
42635
|
+
}
|
|
42636
|
+
else if (((_d = event.message) === null || _d === void 0 ? void 0 : _d.id) === (thread === null || thread === void 0 ? void 0 : thread.id)) {
|
|
42637
|
+
var newReplyCount_1 = ((_e = event.message) === null || _e === void 0 ? void 0 : _e.reply_count) || 0;
|
|
42638
|
+
setCountUnread(function () { return newReplyCount_1 - replyCount; });
|
|
42639
|
+
}
|
|
42640
|
+
};
|
|
42641
|
+
client.on(observedEvent, handleEvent);
|
|
42642
|
+
return function () {
|
|
42643
|
+
client.off(observedEvent, handleEvent);
|
|
42644
|
+
};
|
|
42645
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42646
|
+
}, [activeChannel, isMessageListScrolledToBottom, observedEvent, replyCount, thread]);
|
|
42647
|
+
React.useEffect(function () {
|
|
42648
|
+
if (isMessageListScrolledToBottom) {
|
|
42649
|
+
setCountUnread(0);
|
|
42650
|
+
setReplyCount((thread === null || thread === void 0 ? void 0 : thread.reply_count) || 0);
|
|
42651
|
+
}
|
|
42652
|
+
}, [isMessageListScrolledToBottom, thread]);
|
|
42653
|
+
if (isMessageListScrolledToBottom)
|
|
42654
|
+
return null;
|
|
42655
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__jump-to-latest-message' },
|
|
42656
|
+
React__default["default"].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 },
|
|
42657
|
+
React__default["default"].createElement(ArrowDown, null),
|
|
42658
|
+
countUnread > 0 && (React__default["default"].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' }, countUnread)))));
|
|
42659
|
+
};
|
|
42660
|
+
var ScrollToBottomButton = React__default["default"].memo(UnMemoizedScrollToBottomButton);
|
|
42661
|
+
|
|
42658
42662
|
var useChannelContainerClasses = function (_a) {
|
|
42659
42663
|
var _b, _c, _d;
|
|
42660
42664
|
var customClasses = _a.customClasses;
|
|
@@ -42682,6 +42686,62 @@ var makeAddNotifications = function (setNotifications, notificationTimeouts) { r
|
|
|
42682
42686
|
}, 5000);
|
|
42683
42687
|
notificationTimeouts.push(timeout);
|
|
42684
42688
|
}; };
|
|
42689
|
+
/**
|
|
42690
|
+
* Utility function for jumpToFirstUnreadMessage
|
|
42691
|
+
* @param targetId
|
|
42692
|
+
* @param msgSet
|
|
42693
|
+
*/
|
|
42694
|
+
var findInMsgSetById = function (targetId, msgSet) {
|
|
42695
|
+
for (var i = msgSet.length - 1; i >= 0; i--) {
|
|
42696
|
+
var item = msgSet[i];
|
|
42697
|
+
if (item.id === targetId) {
|
|
42698
|
+
return {
|
|
42699
|
+
index: i,
|
|
42700
|
+
target: item,
|
|
42701
|
+
};
|
|
42702
|
+
}
|
|
42703
|
+
}
|
|
42704
|
+
return {
|
|
42705
|
+
index: -1,
|
|
42706
|
+
};
|
|
42707
|
+
};
|
|
42708
|
+
/**
|
|
42709
|
+
* Utility function for jumpToFirstUnreadMessage
|
|
42710
|
+
* @param targetDate
|
|
42711
|
+
* @param msgSet
|
|
42712
|
+
* @param exact
|
|
42713
|
+
*/
|
|
42714
|
+
var findInMsgSetByDate = function (targetDate, msgSet, exact) {
|
|
42715
|
+
var _a, _b;
|
|
42716
|
+
if (exact === void 0) { exact = false; }
|
|
42717
|
+
var targetTimestamp = targetDate.getTime();
|
|
42718
|
+
var left = 0;
|
|
42719
|
+
var middle = 0;
|
|
42720
|
+
var right = msgSet.length - 1;
|
|
42721
|
+
while (left <= right) {
|
|
42722
|
+
middle = Math.floor((right + left) / 2);
|
|
42723
|
+
var middleTimestamp = new Date(msgSet[middle].created_at).getTime();
|
|
42724
|
+
var middleLeftTimestamp = ((_a = msgSet[middle - 1]) === null || _a === void 0 ? void 0 : _a.created_at) &&
|
|
42725
|
+
new Date(msgSet[middle - 1].created_at).getTime();
|
|
42726
|
+
var middleRightTimestamp = ((_b = msgSet[middle + 1]) === null || _b === void 0 ? void 0 : _b.created_at) &&
|
|
42727
|
+
new Date(msgSet[middle + 1].created_at).getTime();
|
|
42728
|
+
if (middleTimestamp === targetTimestamp ||
|
|
42729
|
+
(middleLeftTimestamp &&
|
|
42730
|
+
middleRightTimestamp &&
|
|
42731
|
+
middleLeftTimestamp < targetTimestamp &&
|
|
42732
|
+
targetTimestamp < middleRightTimestamp)) {
|
|
42733
|
+
return { index: middle, target: msgSet[middle] };
|
|
42734
|
+
}
|
|
42735
|
+
if (middleTimestamp < targetTimestamp)
|
|
42736
|
+
left = middle + 1;
|
|
42737
|
+
else
|
|
42738
|
+
right = middle - 1;
|
|
42739
|
+
}
|
|
42740
|
+
if (!exact || new Date(msgSet[left].created_at).getTime() === targetTimestamp) {
|
|
42741
|
+
return { index: left, target: msgSet[left] };
|
|
42742
|
+
}
|
|
42743
|
+
return { index: -1 };
|
|
42744
|
+
};
|
|
42685
42745
|
|
|
42686
42746
|
/**
|
|
42687
42747
|
* @deprecated will be removed in the next major release
|
|
@@ -43054,6 +43114,9 @@ var ChannelInner = function (props) {
|
|
|
43054
43114
|
unread_messages: (_a = event.unread_messages) !== null && _a !== void 0 ? _a : 0,
|
|
43055
43115
|
};
|
|
43056
43116
|
});
|
|
43117
|
+
if (event.type === 'channel.truncated' && event.cid === channel.cid) {
|
|
43118
|
+
_setChannelUnreadUiState(undefined);
|
|
43119
|
+
}
|
|
43057
43120
|
throttledCopyStateFromChannel();
|
|
43058
43121
|
return [2 /*return*/];
|
|
43059
43122
|
}
|
|
@@ -43213,7 +43276,7 @@ var ChannelInner = function (props) {
|
|
|
43213
43276
|
});
|
|
43214
43277
|
};
|
|
43215
43278
|
var loadMoreNewer = function (limit) {
|
|
43216
|
-
if (limit === void 0) { limit =
|
|
43279
|
+
if (limit === void 0) { limit = DEFAULT_NEXT_CHANNEL_PAGE_SIZE; }
|
|
43217
43280
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
43218
43281
|
var newestMessage, newestId, perPage, queryResponse, e_4, hasMoreNewerMessages;
|
|
43219
43282
|
var _a, _b;
|
|
@@ -43257,7 +43320,7 @@ var ChannelInner = function (props) {
|
|
|
43257
43320
|
};
|
|
43258
43321
|
var clearHighlightedMessageTimeoutId = React.useRef(null);
|
|
43259
43322
|
var jumpToMessage = function (messageId, messageLimit) {
|
|
43260
|
-
if (messageLimit === void 0) { messageLimit =
|
|
43323
|
+
if (messageLimit === void 0) { messageLimit = DEFAULT_JUMP_TO_PAGE_SIZE; }
|
|
43261
43324
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
43262
43325
|
var indexOfMessage, hasMoreMessages;
|
|
43263
43326
|
return __generator(this, function (_a) {
|
|
@@ -43304,57 +43367,113 @@ var ChannelInner = function (props) {
|
|
|
43304
43367
|
});
|
|
43305
43368
|
}); };
|
|
43306
43369
|
var jumpToFirstUnreadMessage = React.useCallback(function (queryMessageLimit) {
|
|
43307
|
-
if (queryMessageLimit === void 0) { queryMessageLimit =
|
|
43370
|
+
if (queryMessageLimit === void 0) { queryMessageLimit = DEFAULT_JUMP_TO_PAGE_SIZE; }
|
|
43308
43371
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
43309
|
-
var
|
|
43310
|
-
var
|
|
43311
|
-
return __generator(this, function (
|
|
43312
|
-
switch (
|
|
43372
|
+
var lastReadMessageId, firstUnreadMessageId, isInCurrentMessageSet, hasMoreMessages, result, result, lastReadTimestamp, _a, lastReadMessageIndex, lastReadMessage, messages, firstMessageWithCreationDate, firstMessageTimestamp, result, targetId_1, indexOfTarget;
|
|
43373
|
+
var _b, _c, _d, _e;
|
|
43374
|
+
return __generator(this, function (_f) {
|
|
43375
|
+
switch (_f.label) {
|
|
43313
43376
|
case 0:
|
|
43314
|
-
if (!(
|
|
43377
|
+
if (!(channelUnreadUiState === null || channelUnreadUiState === void 0 ? void 0 : channelUnreadUiState.unread_messages))
|
|
43315
43378
|
return [2 /*return*/];
|
|
43316
|
-
|
|
43317
|
-
|
|
43318
|
-
|
|
43319
|
-
}
|
|
43320
|
-
currentMessageSet = channel.state.messages;
|
|
43321
|
-
for (i = currentMessageSet.length - 1; i >= 0; i--) {
|
|
43322
|
-
id = currentMessageSet[i].id;
|
|
43323
|
-
if (id === channelUnreadUiState.last_read_message_id) {
|
|
43324
|
-
indexOfLastReadMessage = i;
|
|
43325
|
-
break;
|
|
43326
|
-
}
|
|
43327
|
-
}
|
|
43328
|
-
if (!(typeof indexOfLastReadMessage === 'undefined')) return [3 /*break*/, 5];
|
|
43329
|
-
dispatch({ loadingMore: true, type: 'setLoadingMore' });
|
|
43379
|
+
lastReadMessageId = channelUnreadUiState === null || channelUnreadUiState === void 0 ? void 0 : channelUnreadUiState.last_read_message_id;
|
|
43380
|
+
firstUnreadMessageId = channelUnreadUiState === null || channelUnreadUiState === void 0 ? void 0 : channelUnreadUiState.first_unread_message_id;
|
|
43381
|
+
isInCurrentMessageSet = false;
|
|
43330
43382
|
hasMoreMessages = true;
|
|
43331
|
-
|
|
43383
|
+
if (!firstUnreadMessageId) return [3 /*break*/, 1];
|
|
43384
|
+
result = findInMsgSetById(firstUnreadMessageId, channel.state.messages);
|
|
43385
|
+
isInCurrentMessageSet = result.index !== -1;
|
|
43386
|
+
return [3 /*break*/, 8];
|
|
43332
43387
|
case 1:
|
|
43333
|
-
|
|
43334
|
-
|
|
43388
|
+
if (!lastReadMessageId) return [3 /*break*/, 2];
|
|
43389
|
+
result = findInMsgSetById(lastReadMessageId, channel.state.messages);
|
|
43390
|
+
isInCurrentMessageSet = !!result.target;
|
|
43391
|
+
firstUnreadMessageId =
|
|
43392
|
+
result.index > -1 ? (_b = channel.state.messages[result.index + 1]) === null || _b === void 0 ? void 0 : _b.id : undefined;
|
|
43393
|
+
return [3 /*break*/, 8];
|
|
43335
43394
|
case 2:
|
|
43336
|
-
|
|
43337
|
-
|
|
43338
|
-
|
|
43339
|
-
|
|
43340
|
-
|
|
43341
|
-
|
|
43342
|
-
|
|
43343
|
-
return [3 /*break*/, 4];
|
|
43395
|
+
lastReadTimestamp = channelUnreadUiState.last_read.getTime();
|
|
43396
|
+
_a = findInMsgSetByDate(channelUnreadUiState.last_read, channel.state.messages, true), lastReadMessageIndex = _a.index, lastReadMessage = _a.target;
|
|
43397
|
+
if (!lastReadMessage) return [3 /*break*/, 3];
|
|
43398
|
+
firstUnreadMessageId = (_c = channel.state.messages[lastReadMessageIndex + 1]) === null || _c === void 0 ? void 0 : _c.id;
|
|
43399
|
+
isInCurrentMessageSet = !!firstUnreadMessageId;
|
|
43400
|
+
lastReadMessageId = lastReadMessage.id;
|
|
43401
|
+
return [3 /*break*/, 8];
|
|
43344
43402
|
case 3:
|
|
43345
|
-
|
|
43403
|
+
dispatch({ loadingMore: true, type: 'setLoadingMore' });
|
|
43404
|
+
messages = void 0;
|
|
43405
|
+
_f.label = 4;
|
|
43406
|
+
case 4:
|
|
43407
|
+
_f.trys.push([4, 6, , 7]);
|
|
43408
|
+
return [4 /*yield*/, channel.query({
|
|
43409
|
+
messages: {
|
|
43410
|
+
created_at_around: channelUnreadUiState.last_read.toISOString(),
|
|
43411
|
+
limit: queryMessageLimit,
|
|
43412
|
+
},
|
|
43413
|
+
}, 'new')];
|
|
43414
|
+
case 5:
|
|
43415
|
+
messages = (_f.sent()).messages;
|
|
43416
|
+
return [3 /*break*/, 7];
|
|
43417
|
+
case 6:
|
|
43418
|
+
_f.sent();
|
|
43346
43419
|
addNotification(t('Failed to jump to the first unread message'), 'error');
|
|
43347
43420
|
loadMoreFinished(hasMoreMessages, channel.state.messages);
|
|
43348
43421
|
return [2 /*return*/];
|
|
43349
|
-
case
|
|
43422
|
+
case 7:
|
|
43423
|
+
firstMessageWithCreationDate = messages.find(function (msg) { return msg.created_at; });
|
|
43424
|
+
if (!firstMessageWithCreationDate) {
|
|
43425
|
+
addNotification(t('Failed to jump to the first unread message'), 'error');
|
|
43426
|
+
loadMoreFinished(hasMoreMessages, channel.state.messages);
|
|
43427
|
+
return [2 /*return*/];
|
|
43428
|
+
}
|
|
43429
|
+
firstMessageTimestamp = new Date(firstMessageWithCreationDate.created_at).getTime();
|
|
43430
|
+
if (lastReadTimestamp < firstMessageTimestamp) {
|
|
43431
|
+
// whole channel is unread
|
|
43432
|
+
firstUnreadMessageId = firstMessageWithCreationDate.id;
|
|
43433
|
+
hasMoreMessages = false;
|
|
43434
|
+
}
|
|
43435
|
+
else {
|
|
43436
|
+
result = findInMsgSetByDate(channelUnreadUiState.last_read, messages);
|
|
43437
|
+
lastReadMessageId = (_d = result.target) === null || _d === void 0 ? void 0 : _d.id;
|
|
43438
|
+
hasMoreMessages = result.index >= Math.floor(queryMessageLimit / 2);
|
|
43439
|
+
}
|
|
43350
43440
|
loadMoreFinished(hasMoreMessages, channel.state.messages);
|
|
43351
|
-
|
|
43352
|
-
case
|
|
43353
|
-
|
|
43354
|
-
|
|
43441
|
+
_f.label = 8;
|
|
43442
|
+
case 8:
|
|
43443
|
+
if (!firstUnreadMessageId && !lastReadMessageId) {
|
|
43444
|
+
addNotification(t('Failed to jump to the first unread message'), 'error');
|
|
43445
|
+
return [2 /*return*/];
|
|
43446
|
+
}
|
|
43447
|
+
if (!!isInCurrentMessageSet) return [3 /*break*/, 12];
|
|
43448
|
+
dispatch({ loadingMore: true, type: 'setLoadingMore' });
|
|
43449
|
+
_f.label = 9;
|
|
43450
|
+
case 9:
|
|
43451
|
+
_f.trys.push([9, 11, , 12]);
|
|
43452
|
+
targetId_1 = (firstUnreadMessageId !== null && firstUnreadMessageId !== void 0 ? firstUnreadMessageId : lastReadMessageId);
|
|
43453
|
+
return [4 /*yield*/, channel.state.loadMessageIntoState(targetId_1, undefined, queryMessageLimit)];
|
|
43454
|
+
case 10:
|
|
43455
|
+
_f.sent();
|
|
43456
|
+
indexOfTarget = channel.state.messages.findIndex(function (message) { return message.id === targetId_1; });
|
|
43457
|
+
hasMoreMessages = indexOfTarget >= Math.floor(queryMessageLimit / 2);
|
|
43458
|
+
loadMoreFinished(hasMoreMessages, channel.state.messages);
|
|
43459
|
+
firstUnreadMessageId =
|
|
43460
|
+
firstUnreadMessageId !== null && firstUnreadMessageId !== void 0 ? firstUnreadMessageId : (_e = channel.state.messages[indexOfTarget + 1]) === null || _e === void 0 ? void 0 : _e.id;
|
|
43461
|
+
return [3 /*break*/, 12];
|
|
43462
|
+
case 11:
|
|
43463
|
+
_f.sent();
|
|
43464
|
+
addNotification(t('Failed to jump to the first unread message'), 'error');
|
|
43465
|
+
loadMoreFinished(hasMoreMessages, channel.state.messages);
|
|
43466
|
+
return [2 /*return*/];
|
|
43467
|
+
case 12:
|
|
43468
|
+
if (!firstUnreadMessageId) {
|
|
43469
|
+
addNotification(t('Failed to jump to the first unread message'), 'error');
|
|
43470
|
+
return [2 /*return*/];
|
|
43471
|
+
}
|
|
43472
|
+
if (!channelUnreadUiState.first_unread_message_id)
|
|
43473
|
+
_setChannelUnreadUiState(exports.__assign(exports.__assign({}, channelUnreadUiState), { first_unread_message_id: firstUnreadMessageId, last_read_message_id: lastReadMessageId }));
|
|
43355
43474
|
dispatch({
|
|
43356
43475
|
hasMoreNewer: channel.state.messages !== channel.state.latestMessages,
|
|
43357
|
-
highlightedMessageId:
|
|
43476
|
+
highlightedMessageId: firstUnreadMessageId,
|
|
43358
43477
|
type: 'jumpToMessageFinished',
|
|
43359
43478
|
});
|
|
43360
43479
|
if (clearHighlightedMessageTimeoutId.current) {
|
|
@@ -43368,7 +43487,7 @@ var ChannelInner = function (props) {
|
|
|
43368
43487
|
}
|
|
43369
43488
|
});
|
|
43370
43489
|
});
|
|
43371
|
-
}, [addNotification, channel,
|
|
43490
|
+
}, [addNotification, channel, loadMoreFinished, t, channelUnreadUiState]);
|
|
43372
43491
|
var deleteMessage = React.useCallback(function (message) { return __awaiter(void 0, void 0, void 0, function () {
|
|
43373
43492
|
var deletedMessage, result;
|
|
43374
43493
|
return __generator(this, function (_a) {
|
|
@@ -43452,8 +43571,24 @@ var ChannelInner = function (props) {
|
|
|
43452
43571
|
case 6:
|
|
43453
43572
|
error_1 = _d.sent();
|
|
43454
43573
|
stringError = JSON.stringify(error_1);
|
|
43455
|
-
parsedError =
|
|
43456
|
-
|
|
43574
|
+
parsedError = (stringError
|
|
43575
|
+
? JSON.parse(stringError)
|
|
43576
|
+
: {});
|
|
43577
|
+
// Handle the case where the message already exists
|
|
43578
|
+
// (typically, when retrying to send a message).
|
|
43579
|
+
// If the message already exists, we can assume it was sent successfully,
|
|
43580
|
+
// so we update the message status to "received".
|
|
43581
|
+
// Right now, the only way to check this error is by checking
|
|
43582
|
+
// the combination of the error code and the error description,
|
|
43583
|
+
// since there is no special error code for duplicate messages.
|
|
43584
|
+
if (parsedError.code === 4 &&
|
|
43585
|
+
error_1 instanceof Error &&
|
|
43586
|
+
error_1.message.includes('already exists')) {
|
|
43587
|
+
updateMessage(exports.__assign(exports.__assign({}, message), { status: 'received' }));
|
|
43588
|
+
}
|
|
43589
|
+
else {
|
|
43590
|
+
updateMessage(exports.__assign(exports.__assign({}, message), { error: parsedError, errorStatusCode: parsedError.status || undefined, status: 'failed' }));
|
|
43591
|
+
}
|
|
43457
43592
|
return [3 /*break*/, 7];
|
|
43458
43593
|
case 7: return [2 /*return*/];
|
|
43459
43594
|
}
|
|
@@ -45229,6 +45364,7 @@ exports.insertIntro = insertIntro;
|
|
|
45229
45364
|
exports.isAudioAttachment = isAudioAttachment;
|
|
45230
45365
|
exports.isChannel = isChannel;
|
|
45231
45366
|
exports.isDate = isDate;
|
|
45367
|
+
exports.isDateSeparatorMessage = isDateSeparatorMessage;
|
|
45232
45368
|
exports.isDayOrMoment = isDayOrMoment;
|
|
45233
45369
|
exports.isFileAttachment = isFileAttachment;
|
|
45234
45370
|
exports.isGalleryAttachmentType = isGalleryAttachmentType;
|