stream-chat-react 6.7.0 → 6.9.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/README.md +1 -1
- package/dist/browser.full-bundle.js +3989 -1360
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +10 -3
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/AutoCompleteTextarea/Textarea.js +1 -1
- package/dist/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar/Avatar.js +3 -1
- package/dist/components/Channel/Channel.d.ts +4 -0
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +69 -94
- package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts +15 -0
- package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -0
- package/dist/components/Channel/hooks/useCreateChannelStateContext.js +87 -0
- package/dist/components/Channel/hooks/useCreateTypingContext.d.ts +4 -0
- package/dist/components/Channel/hooks/useCreateTypingContext.d.ts.map +1 -0
- package/dist/components/Channel/hooks/useCreateTypingContext.js +9 -0
- package/dist/components/ChannelList/ChannelList.d.ts +3 -3
- package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
- package/dist/components/ChannelList/ChannelList.js +3 -3
- package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts +1 -1
- package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.js +3 -2
- package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts +1 -1
- package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.js +4 -6
- package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts +0 -1
- package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/usePaginatedChannels.js +7 -15
- package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
- package/dist/components/ChannelPreview/ChannelPreview.js +10 -0
- package/dist/components/Chat/Chat.d.ts.map +1 -1
- package/dist/components/Chat/Chat.js +14 -12
- package/dist/components/Chat/hooks/useChat.js +1 -1
- package/dist/components/Chat/hooks/useCreateChatContext.d.ts +4 -0
- package/dist/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -0
- package/dist/components/Chat/hooks/useCreateChatContext.js +21 -0
- package/dist/components/Message/hooks/useReactionHandler.d.ts +1 -1
- package/dist/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
- package/dist/components/Message/hooks/useReactionHandler.js +1 -5
- package/dist/components/MessageInput/DefaultTriggerProvider.d.ts.map +1 -1
- package/dist/components/MessageInput/DefaultTriggerProvider.js +1 -0
- package/dist/components/MessageInput/MessageInput.d.ts +3 -1
- package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInput.js +2 -1
- package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts +4 -0
- package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts.map +1 -0
- package/dist/components/MessageInput/hooks/useCreateMessageInputContext.js +88 -0
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +1 -0
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useMessageInputState.js +6 -1
- package/dist/components/MessageInput/hooks/useMessageInputText.js +1 -1
- package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useSubmitHandler.js +2 -1
- package/dist/components/MessageInput/hooks/useUserTrigger.d.ts +1 -0
- package/dist/components/MessageInput/hooks/useUserTrigger.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useUserTrigger.js +19 -13
- package/dist/components/MessageInput/hooks/utils.d.ts +15 -0
- package/dist/components/MessageInput/hooks/utils.d.ts.map +1 -0
- package/dist/components/MessageInput/hooks/utils.js +114 -0
- package/dist/components/MessageList/VirtualizedMessageList.d.ts +4 -2
- package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.js +2 -2
- package/dist/css/index.css +1 -7329
- package/dist/index.cjs.js +449 -175
- package/dist/index.cjs.js.map +1 -1
- package/dist/scss/ActionsBox.scss +2 -0
- package/dist/scss/Attachment.scss +4 -0
- package/dist/scss/AttachmentActions.scss +1 -0
- package/dist/scss/Audio.scss +2 -0
- package/dist/scss/Avatar.scss +2 -0
- package/dist/scss/Card.scss +6 -2
- package/dist/scss/ChannelHeader.scss +22 -3
- package/dist/scss/ChannelList.scss +5 -6
- package/dist/scss/ChannelSearch.scss +2 -4
- package/dist/scss/ChatDown.scss +1 -0
- package/dist/scss/DateSeparator.scss +3 -0
- package/dist/scss/EditMessageForm.scss +4 -0
- package/dist/scss/EventComponent.scss +4 -0
- package/dist/scss/Gallery.scss +7 -1
- package/dist/scss/LoadMoreButton.scss +1 -0
- package/dist/scss/Message.scss +78 -2
- package/dist/scss/MessageInput.scss +3 -0
- package/dist/scss/MessageInputFlat.scss +8 -1
- package/dist/scss/MessageList.scss +10 -0
- package/dist/scss/MessageRepliesCountButton.scss +1 -0
- package/dist/scss/MessageTeam.scss +3 -7
- package/dist/scss/Modal.scss +3 -0
- package/dist/scss/ReactionList.scss +18 -18
- package/dist/scss/ReactionSelector.scss +4 -0
- package/dist/scss/SimpleReactionsList.scss +2 -1
- package/dist/scss/Thread.scss +19 -0
- package/dist/scss/TypingIndicator.scss +7 -0
- package/dist/scss/VirtualMessage.scss +8 -7
- package/dist/scss/_base.scss +17 -2
- package/dist/utils.d.ts +2 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +22 -15
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +10 -29
- package/CHANGELOG.md +0 -1534
- package/dist/css/index.js +0 -1
- package/dist/css/index.min.css +0 -1
package/dist/index.cjs.js
CHANGED
|
@@ -778,24 +778,31 @@ function generateRandomId() {
|
|
|
778
778
|
// prettier-ignore
|
|
779
779
|
return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
|
|
780
780
|
}
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
781
|
+
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt#getting_whole_characters
|
|
782
|
+
var getWholeChar = function (str, i) {
|
|
783
|
+
var code = str.charCodeAt(i);
|
|
784
|
+
if (Number.isNaN(code))
|
|
785
|
+
return '';
|
|
786
|
+
if (code < 0xd800 || code > 0xdfff)
|
|
787
|
+
return str.charAt(i);
|
|
788
|
+
if (0xd800 <= code && code <= 0xdbff) {
|
|
789
|
+
if (str.length <= i + 1) {
|
|
790
|
+
throw 'High surrogate without following low surrogate';
|
|
791
|
+
}
|
|
792
|
+
var next = str.charCodeAt(i + 1);
|
|
793
|
+
if (0xdc00 > next || next > 0xdfff) {
|
|
794
|
+
throw 'High surrogate without following low surrogate';
|
|
795
|
+
}
|
|
796
|
+
return str.charAt(i) + str.charAt(i + 1);
|
|
784
797
|
}
|
|
785
|
-
if (
|
|
786
|
-
|
|
787
|
-
var element = ElementOrComponentOrLiteral;
|
|
788
|
-
return element;
|
|
798
|
+
if (i === 0) {
|
|
799
|
+
throw 'Low surrogate without preceding high surrogate';
|
|
789
800
|
}
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
typeof ComponentOrLiteral === 'number' ||
|
|
794
|
-
typeof ComponentOrLiteral === 'boolean' ||
|
|
795
|
-
ComponentOrLiteral == null) {
|
|
796
|
-
return ComponentOrLiteral;
|
|
801
|
+
var prev = str.charCodeAt(i - 1);
|
|
802
|
+
if (0xd800 > prev || prev > 0xdbff) {
|
|
803
|
+
throw 'Low surrogate without preceding high surrogate';
|
|
797
804
|
}
|
|
798
|
-
return
|
|
805
|
+
return '';
|
|
799
806
|
};
|
|
800
807
|
|
|
801
808
|
var DefaultSuggestionListHeader = function (_a) {
|
|
@@ -1377,7 +1384,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
1377
1384
|
};
|
|
1378
1385
|
}
|
|
1379
1386
|
|
|
1380
|
-
if (!textToReplace.text) {
|
|
1387
|
+
if (!textToReplace.text && currentTrigger !== ':') {
|
|
1381
1388
|
throw new Error("Output \"text\" is not defined! Object should has shape {text: string, caretPosition: string | number}. Check the implementation for trigger \"".concat(currentTrigger, "\" and its token \"").concat(actualToken, "\"\n"));
|
|
1382
1389
|
}
|
|
1383
1390
|
|
|
@@ -1901,7 +1908,8 @@ var Avatar = function (props) {
|
|
|
1901
1908
|
setError(false);
|
|
1902
1909
|
setLoaded(false);
|
|
1903
1910
|
}, [image]);
|
|
1904
|
-
var
|
|
1911
|
+
var nameStr = (name === null || name === void 0 ? void 0 : name.toString()) || '';
|
|
1912
|
+
var initials = getWholeChar(nameStr, 0);
|
|
1905
1913
|
return (React__default['default'].createElement("div", { className: "str-chat__avatar str-chat__avatar--" + shape, "data-testid": 'avatar', onClick: onClick, onMouseOver: onMouseOver, style: {
|
|
1906
1914
|
flexBasis: size + "px",
|
|
1907
1915
|
fontSize: size / 2 + "px",
|
|
@@ -2018,6 +2026,101 @@ var defaultMinimalEmojis = [
|
|
|
2018
2026
|
// use this only for small lists like in ReactionSelector
|
|
2019
2027
|
var getStrippedEmojiData = function (data) { return (__assign(__assign({}, data), { emojis: {} })); };
|
|
2020
2028
|
|
|
2029
|
+
var useCreateChannelStateContext = function (value) {
|
|
2030
|
+
var _a;
|
|
2031
|
+
var acceptedFiles = value.acceptedFiles, channel = value.channel, channelConfig = value.channelConfig, error = value.error, hasMore = value.hasMore, loading = value.loading, loadingMore = value.loadingMore, maxNumberOfFiles = value.maxNumberOfFiles, members = value.members, _b = value.messages, messages = _b === void 0 ? [] : _b, multipleUploads = value.multipleUploads, mutes = value.mutes, notifications = value.notifications, pinnedMessages = value.pinnedMessages, quotedMessage = value.quotedMessage, _c = value.read, read = _c === void 0 ? {} : _c, skipMessageDataMemoization = value.skipMessageDataMemoization, thread = value.thread, threadHasMore = value.threadHasMore, threadLoadingMore = value.threadLoadingMore, _d = value.threadMessages, threadMessages = _d === void 0 ? [] : _d, watcherCount = value.watcherCount, watcher_count = value.watcher_count, watchers = value.watchers;
|
|
2032
|
+
var channelId = channel.cid;
|
|
2033
|
+
var lastRead = channel.initialized && ((_a = channel.lastRead()) === null || _a === void 0 ? void 0 : _a.getTime());
|
|
2034
|
+
var membersLength = Object.keys(members || []).length;
|
|
2035
|
+
var notificationsLength = notifications.length;
|
|
2036
|
+
var readUsers = Object.values(read);
|
|
2037
|
+
var readUsersLength = readUsers.length;
|
|
2038
|
+
var readUsersLastReads = readUsers.map(function (_a) {
|
|
2039
|
+
var last_read = _a.last_read;
|
|
2040
|
+
return last_read.toISOString();
|
|
2041
|
+
}).join();
|
|
2042
|
+
var threadMessagesLength = threadMessages === null || threadMessages === void 0 ? void 0 : threadMessages.length;
|
|
2043
|
+
var memoizedMessageData = skipMessageDataMemoization
|
|
2044
|
+
? messages
|
|
2045
|
+
: messages
|
|
2046
|
+
.map(function (_a) {
|
|
2047
|
+
var deleted_at = _a.deleted_at, latest_reactions = _a.latest_reactions, pinned = _a.pinned, reply_count = _a.reply_count, status = _a.status, updated_at = _a.updated_at;
|
|
2048
|
+
return "" + deleted_at + (latest_reactions ? latest_reactions.map(function (_a) {
|
|
2049
|
+
var type = _a.type;
|
|
2050
|
+
return type;
|
|
2051
|
+
}).join() : '') + pinned + reply_count + status + (updated_at && (isDayOrMoment(updated_at) || isDate(updated_at))
|
|
2052
|
+
? updated_at.toISOString()
|
|
2053
|
+
: updated_at || '');
|
|
2054
|
+
})
|
|
2055
|
+
.join();
|
|
2056
|
+
var memoizedThreadMessageData = threadMessages
|
|
2057
|
+
.map(function (_a) {
|
|
2058
|
+
var deleted_at = _a.deleted_at, latest_reactions = _a.latest_reactions, pinned = _a.pinned, status = _a.status, updated_at = _a.updated_at;
|
|
2059
|
+
return "" + deleted_at + (latest_reactions ? latest_reactions.map(function (_a) {
|
|
2060
|
+
var type = _a.type;
|
|
2061
|
+
return type;
|
|
2062
|
+
}).join() : '') + pinned + status + (updated_at && (isDayOrMoment(updated_at) || isDate(updated_at))
|
|
2063
|
+
? updated_at.toISOString()
|
|
2064
|
+
: updated_at || '');
|
|
2065
|
+
})
|
|
2066
|
+
.join();
|
|
2067
|
+
var channelStateContext = React.useMemo(function () { return ({
|
|
2068
|
+
acceptedFiles: acceptedFiles,
|
|
2069
|
+
channel: channel,
|
|
2070
|
+
channelConfig: channelConfig,
|
|
2071
|
+
error: error,
|
|
2072
|
+
hasMore: hasMore,
|
|
2073
|
+
loading: loading,
|
|
2074
|
+
loadingMore: loadingMore,
|
|
2075
|
+
maxNumberOfFiles: maxNumberOfFiles,
|
|
2076
|
+
members: members,
|
|
2077
|
+
messages: messages,
|
|
2078
|
+
multipleUploads: multipleUploads,
|
|
2079
|
+
mutes: mutes,
|
|
2080
|
+
notifications: notifications,
|
|
2081
|
+
pinnedMessages: pinnedMessages,
|
|
2082
|
+
quotedMessage: quotedMessage,
|
|
2083
|
+
read: read,
|
|
2084
|
+
thread: thread,
|
|
2085
|
+
threadHasMore: threadHasMore,
|
|
2086
|
+
threadLoadingMore: threadLoadingMore,
|
|
2087
|
+
threadMessages: threadMessages,
|
|
2088
|
+
watcher_count: watcher_count,
|
|
2089
|
+
watcherCount: watcherCount,
|
|
2090
|
+
watchers: watchers,
|
|
2091
|
+
}); }, [
|
|
2092
|
+
channelId,
|
|
2093
|
+
error,
|
|
2094
|
+
hasMore,
|
|
2095
|
+
lastRead,
|
|
2096
|
+
loading,
|
|
2097
|
+
loadingMore,
|
|
2098
|
+
membersLength,
|
|
2099
|
+
memoizedMessageData,
|
|
2100
|
+
memoizedThreadMessageData,
|
|
2101
|
+
notificationsLength,
|
|
2102
|
+
quotedMessage,
|
|
2103
|
+
readUsersLength,
|
|
2104
|
+
readUsersLastReads,
|
|
2105
|
+
skipMessageDataMemoization,
|
|
2106
|
+
thread,
|
|
2107
|
+
threadHasMore,
|
|
2108
|
+
threadLoadingMore,
|
|
2109
|
+
threadMessagesLength,
|
|
2110
|
+
watcherCount,
|
|
2111
|
+
]);
|
|
2112
|
+
return channelStateContext;
|
|
2113
|
+
};
|
|
2114
|
+
|
|
2115
|
+
var useCreateTypingContext = function (value) {
|
|
2116
|
+
var typing = value.typing;
|
|
2117
|
+
var typingValue = Object.keys(typing || {}).join();
|
|
2118
|
+
var typingContext = React.useMemo(function () { return ({
|
|
2119
|
+
typing: typing,
|
|
2120
|
+
}); }, [typingValue]);
|
|
2121
|
+
return typingContext;
|
|
2122
|
+
};
|
|
2123
|
+
|
|
2021
2124
|
var ChatContext = React__default['default'].createContext({});
|
|
2022
2125
|
var ChatProvider = function (_a) {
|
|
2023
2126
|
var children = _a.children, value = _a.value;
|
|
@@ -3111,7 +3214,7 @@ var usePinHandler = function (message, permissions, notifications) {
|
|
|
3111
3214
|
return { canPin: canPin(), handlePin: handlePin };
|
|
3112
3215
|
};
|
|
3113
3216
|
|
|
3114
|
-
var reactionHandlerWarning = "Reaction handler was called, but it is missing one of its required arguments
|
|
3217
|
+
var reactionHandlerWarning = "Reaction handler was called, but it is missing one of its required arguments.\nMake sure the ChannelAction and ChannelState contexts are properly set and the hook is initialized with a valid message.";
|
|
3115
3218
|
var useReactionHandler = function (message) {
|
|
3116
3219
|
var updateMessage = useChannelActionContext().updateMessage;
|
|
3117
3220
|
var channel = useChannelStateContext().channel;
|
|
@@ -3250,14 +3353,12 @@ var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef
|
|
|
3250
3353
|
if (showDetailedReactions && !hasListener.current) {
|
|
3251
3354
|
hasListener.current = true;
|
|
3252
3355
|
document.addEventListener('click', closeDetailedReactions);
|
|
3253
|
-
document.addEventListener('touchend', closeDetailedReactions);
|
|
3254
3356
|
if (messageWrapper) {
|
|
3255
3357
|
messageWrapper.addEventListener('mouseleave', closeDetailedReactions);
|
|
3256
3358
|
}
|
|
3257
3359
|
}
|
|
3258
3360
|
if (!showDetailedReactions && hasListener.current) {
|
|
3259
3361
|
document.removeEventListener('click', closeDetailedReactions);
|
|
3260
|
-
document.removeEventListener('touchend', closeDetailedReactions);
|
|
3261
3362
|
if (messageWrapper) {
|
|
3262
3363
|
messageWrapper.removeEventListener('mouseleave', closeDetailedReactions);
|
|
3263
3364
|
}
|
|
@@ -3266,7 +3367,6 @@ var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef
|
|
|
3266
3367
|
return function () {
|
|
3267
3368
|
if (hasListener.current) {
|
|
3268
3369
|
document.removeEventListener('click', closeDetailedReactions);
|
|
3269
|
-
document.removeEventListener('touchend', closeDetailedReactions);
|
|
3270
3370
|
if (messageWrapper) {
|
|
3271
3371
|
messageWrapper.removeEventListener('mouseleave', closeDetailedReactions);
|
|
3272
3372
|
}
|
|
@@ -3278,7 +3378,6 @@ var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef
|
|
|
3278
3378
|
var messageWrapper = messageWrapperRef === null || messageWrapperRef === void 0 ? void 0 : messageWrapperRef.current;
|
|
3279
3379
|
if (messageDeleted && hasListener.current) {
|
|
3280
3380
|
document.removeEventListener('click', closeDetailedReactions);
|
|
3281
|
-
document.removeEventListener('touchend', closeDetailedReactions);
|
|
3282
3381
|
if (messageWrapper) {
|
|
3283
3382
|
messageWrapper.removeEventListener('mouseleave', closeDetailedReactions);
|
|
3284
3383
|
}
|
|
@@ -3516,6 +3615,85 @@ var useEmojiTrigger = function (emojiIndex) { return ({
|
|
|
3516
3615
|
}); },
|
|
3517
3616
|
}); };
|
|
3518
3617
|
|
|
3618
|
+
var accentsMap = {
|
|
3619
|
+
a: 'á|à|ã|â|À|Á|Ã|Â',
|
|
3620
|
+
c: 'ç|Ç',
|
|
3621
|
+
e: 'é|è|ê|É|È|Ê',
|
|
3622
|
+
i: 'í|ì|î|Í|Ì|Î',
|
|
3623
|
+
n: 'ñ|Ñ',
|
|
3624
|
+
o: 'ó|ò|ô|õ|Ó|Ò|Ô|Õ',
|
|
3625
|
+
u: 'ú|ù|û|ü|Ú|Ù|Û|Ü',
|
|
3626
|
+
};
|
|
3627
|
+
var removeDiacritics = function (text) {
|
|
3628
|
+
if (!text)
|
|
3629
|
+
return '';
|
|
3630
|
+
return Object.keys(accentsMap).reduce(function (acc, current) { return acc.replace(new RegExp(accentsMap[current], 'g'), current); }, text);
|
|
3631
|
+
};
|
|
3632
|
+
var calculateLevenshtein = function (query, name) {
|
|
3633
|
+
if (query.length === 0)
|
|
3634
|
+
return name.length;
|
|
3635
|
+
if (name.length === 0)
|
|
3636
|
+
return query.length;
|
|
3637
|
+
var matrix = [];
|
|
3638
|
+
var i;
|
|
3639
|
+
for (i = 0; i <= name.length; i++) {
|
|
3640
|
+
matrix[i] = [i];
|
|
3641
|
+
}
|
|
3642
|
+
var j;
|
|
3643
|
+
for (j = 0; j <= query.length; j++) {
|
|
3644
|
+
matrix[0][j] = j;
|
|
3645
|
+
}
|
|
3646
|
+
for (i = 1; i <= name.length; i++) {
|
|
3647
|
+
for (j = 1; j <= query.length; j++) {
|
|
3648
|
+
if (name.charAt(i - 1) === query.charAt(j - 1)) {
|
|
3649
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
3650
|
+
}
|
|
3651
|
+
else {
|
|
3652
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
|
|
3653
|
+
Math.min(matrix[i][j - 1] + 1, // insertion
|
|
3654
|
+
matrix[i - 1][j] + 1)); // deletion
|
|
3655
|
+
}
|
|
3656
|
+
}
|
|
3657
|
+
}
|
|
3658
|
+
return matrix[name.length][query.length];
|
|
3659
|
+
};
|
|
3660
|
+
var searchLocalUsers = function (params) {
|
|
3661
|
+
var ownUserId = params.ownUserId, query = params.query, useMentionsTransliteration = params.useMentionsTransliteration, users = params.users;
|
|
3662
|
+
var matchingUsers = users.filter(function (user) {
|
|
3663
|
+
if (user.id === ownUserId)
|
|
3664
|
+
return false;
|
|
3665
|
+
if (!query)
|
|
3666
|
+
return true;
|
|
3667
|
+
var updatedId = removeDiacritics(user.id).toLowerCase();
|
|
3668
|
+
var updatedName = removeDiacritics(user.name).toLowerCase();
|
|
3669
|
+
var updatedQuery = removeDiacritics(query).toLowerCase();
|
|
3670
|
+
if (useMentionsTransliteration) {
|
|
3671
|
+
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
3672
|
+
var transliterate;
|
|
3673
|
+
return __generator(this, function (_a) {
|
|
3674
|
+
switch (_a.label) {
|
|
3675
|
+
case 0: return [4 /*yield*/, Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@sindresorhus/transliterate')); })];
|
|
3676
|
+
case 1:
|
|
3677
|
+
transliterate = (_a.sent()).default;
|
|
3678
|
+
updatedName = transliterate(user.name || '').toLowerCase();
|
|
3679
|
+
updatedQuery = transliterate(query).toLowerCase();
|
|
3680
|
+
updatedId = transliterate(user.id).toLowerCase();
|
|
3681
|
+
return [2 /*return*/];
|
|
3682
|
+
}
|
|
3683
|
+
});
|
|
3684
|
+
}); })();
|
|
3685
|
+
}
|
|
3686
|
+
if (updatedName) {
|
|
3687
|
+
var levenshtein_1 = calculateLevenshtein(updatedQuery, updatedName);
|
|
3688
|
+
if (updatedName.includes(updatedQuery) || levenshtein_1 <= 3)
|
|
3689
|
+
return true;
|
|
3690
|
+
}
|
|
3691
|
+
var levenshtein = calculateLevenshtein(updatedQuery, updatedId);
|
|
3692
|
+
return updatedId.includes(updatedQuery) || levenshtein <= 3;
|
|
3693
|
+
});
|
|
3694
|
+
return matchingUsers;
|
|
3695
|
+
};
|
|
3696
|
+
|
|
3519
3697
|
/**
|
|
3520
3698
|
* UI component for mentions rendered in suggestion list
|
|
3521
3699
|
*/
|
|
@@ -3538,7 +3716,7 @@ var UnMemoizedUserItem = function (props) {
|
|
|
3538
3716
|
var UserItem = React__default['default'].memo(UnMemoizedUserItem);
|
|
3539
3717
|
|
|
3540
3718
|
var useUserTrigger = function (params) {
|
|
3541
|
-
var disableMentions = params.disableMentions, mentionAllAppUsers = params.mentionAllAppUsers, _a = params.mentionQueryParams, mentionQueryParams = _a === void 0 ? {} : _a, onSelectUser = params.onSelectUser;
|
|
3719
|
+
var disableMentions = params.disableMentions, mentionAllAppUsers = params.mentionAllAppUsers, _a = params.mentionQueryParams, mentionQueryParams = _a === void 0 ? {} : _a, onSelectUser = params.onSelectUser, useMentionsTransliteration = params.useMentionsTransliteration;
|
|
3542
3720
|
var _b = React.useState(false), searching = _b[0], setSearching = _b[1];
|
|
3543
3721
|
var _c = useChatContext(), client = _c.client, mutes = _c.mutes;
|
|
3544
3722
|
var channel = useChannelStateContext().channel;
|
|
@@ -3622,14 +3800,22 @@ var useUserTrigger = function (params) {
|
|
|
3622
3800
|
return {
|
|
3623
3801
|
callback: function (item) { return onSelectUser(item); },
|
|
3624
3802
|
component: UserItem,
|
|
3625
|
-
dataProvider: function (query,
|
|
3803
|
+
dataProvider: function (query, text, onReady) {
|
|
3626
3804
|
var _a;
|
|
3627
3805
|
if (disableMentions)
|
|
3628
3806
|
return;
|
|
3629
3807
|
var filterMutes = function (data) {
|
|
3808
|
+
if (text.includes('/unmute') && !mutes.length) {
|
|
3809
|
+
return [];
|
|
3810
|
+
}
|
|
3630
3811
|
if (!mutes.length)
|
|
3631
3812
|
return data;
|
|
3632
|
-
|
|
3813
|
+
if (text.includes('/unmute')) {
|
|
3814
|
+
return data.filter(function (suggestion) {
|
|
3815
|
+
return mutes.some(function (mute) { return mute.target.id === suggestion.id; });
|
|
3816
|
+
});
|
|
3817
|
+
}
|
|
3818
|
+
return data.filter(function (suggestion) { return mutes.every(function (mute) { return mute.target.id !== suggestion.id; }); });
|
|
3633
3819
|
};
|
|
3634
3820
|
if (mentionAllAppUsers) {
|
|
3635
3821
|
return queryUsersThrottled(query, function (data) {
|
|
@@ -3645,16 +3831,13 @@ var useUserTrigger = function (params) {
|
|
|
3645
3831
|
*/
|
|
3646
3832
|
if (!query || Object.values(members || {}).length < 100) {
|
|
3647
3833
|
var users = getMembersAndWatchers();
|
|
3648
|
-
var
|
|
3649
|
-
|
|
3650
|
-
|
|
3651
|
-
|
|
3652
|
-
|
|
3653
|
-
|
|
3654
|
-
|
|
3655
|
-
}
|
|
3656
|
-
return user.id.toLowerCase().includes(query.toLowerCase());
|
|
3657
|
-
});
|
|
3834
|
+
var params_1 = {
|
|
3835
|
+
ownUserId: client.userID,
|
|
3836
|
+
query: query,
|
|
3837
|
+
useMentionsTransliteration: useMentionsTransliteration,
|
|
3838
|
+
users: users,
|
|
3839
|
+
};
|
|
3840
|
+
var matchingUsers = searchLocalUsers(params_1);
|
|
3658
3841
|
var usersToShow = ((_a = mentionQueryParams.options) === null || _a === void 0 ? void 0 : _a.limit) || 10;
|
|
3659
3842
|
var data = matchingUsers.slice(0, usersToShow);
|
|
3660
3843
|
if (onReady)
|
|
@@ -3701,6 +3884,7 @@ var DefaultTriggerProvider = function (_a) {
|
|
|
3701
3884
|
mentionAllAppUsers: currentValue.mentionAllAppUsers,
|
|
3702
3885
|
mentionQueryParams: currentValue.mentionQueryParams,
|
|
3703
3886
|
onSelectUser: currentValue.onSelectUser,
|
|
3887
|
+
useMentionsTransliteration: currentValue.useMentionsTransliteration,
|
|
3704
3888
|
}),
|
|
3705
3889
|
};
|
|
3706
3890
|
var newValue = __assign(__assign({}, currentValue), { autocompleteTriggers: defaultAutocompleteTriggers });
|
|
@@ -4198,7 +4382,7 @@ var useAttachments = function (props, state, dispatch) {
|
|
|
4198
4382
|
|
|
4199
4383
|
var useMessageInputText = function (props, state, dispatch) {
|
|
4200
4384
|
var channel = useChannelStateContext().channel;
|
|
4201
|
-
var additionalTextareaProps = props.additionalTextareaProps, focus = props.focus, parent = props.parent,
|
|
4385
|
+
var additionalTextareaProps = props.additionalTextareaProps, focus = props.focus, parent = props.parent, _a = props.publishTypingEvent, publishTypingEvent = _a === void 0 ? true : _a;
|
|
4202
4386
|
var text = state.text;
|
|
4203
4387
|
var textareaRef = React.useRef();
|
|
4204
4388
|
// Focus
|
|
@@ -4399,10 +4583,11 @@ var useSubmitHandler = function (props, state, dispatch, numberOfUploads) {
|
|
|
4399
4583
|
text: text,
|
|
4400
4584
|
};
|
|
4401
4585
|
if (!message) return [3 /*break*/, 5];
|
|
4586
|
+
delete message.i18n;
|
|
4402
4587
|
_a.label = 1;
|
|
4403
4588
|
case 1:
|
|
4404
4589
|
_a.trys.push([1, 3, , 4]);
|
|
4405
|
-
return [4 /*yield*/, editMessage(__assign(__assign({},
|
|
4590
|
+
return [4 /*yield*/, editMessage(__assign(__assign({}, message), updatedMessage))];
|
|
4406
4591
|
case 2:
|
|
4407
4592
|
_a.sent();
|
|
4408
4593
|
if (clearEditingState)
|
|
@@ -4516,6 +4701,7 @@ var initState = function (message) {
|
|
|
4516
4701
|
imageOrder: [],
|
|
4517
4702
|
imageUploads: __assign({}, emptyImageUploads),
|
|
4518
4703
|
mentioned_users: [],
|
|
4704
|
+
setText: function () { return null; },
|
|
4519
4705
|
text: '',
|
|
4520
4706
|
};
|
|
4521
4707
|
}
|
|
@@ -4567,6 +4753,7 @@ var initState = function (message) {
|
|
|
4567
4753
|
imageOrder: imageOrder,
|
|
4568
4754
|
imageUploads: imageUploads,
|
|
4569
4755
|
mentioned_users: mentioned_users,
|
|
4756
|
+
setText: function () { return null; },
|
|
4570
4757
|
text: message.text || '',
|
|
4571
4758
|
};
|
|
4572
4759
|
};
|
|
@@ -4655,12 +4842,15 @@ var useMessageInputState = function (props) {
|
|
|
4655
4842
|
var onSelectUser = React.useCallback(function (item) {
|
|
4656
4843
|
dispatch({ type: 'addMentionedUser', user: item });
|
|
4657
4844
|
}, []);
|
|
4845
|
+
var setText = React.useCallback(function (text) {
|
|
4846
|
+
dispatch({ getNewText: function () { return text; }, type: 'setText' });
|
|
4847
|
+
}, []);
|
|
4658
4848
|
return __assign(__assign({}, state), { closeCommandsList: closeCommandsList,
|
|
4659
4849
|
/**
|
|
4660
4850
|
* TODO: fix the below at some point because this type casting is wrong
|
|
4661
4851
|
* and just forced to not have warnings currently with the unknown casting
|
|
4662
4852
|
*/
|
|
4663
|
-
closeEmojiPicker: closeEmojiPicker, emojiIndex: useEmojiIndex(), emojiPickerRef: emojiPickerRef, handleChange: handleChange, handleEmojiKeyDown: handleEmojiKeyDown, handleSubmit: handleSubmit, insertText: insertText, isUploadEnabled: isUploadEnabled, maxFilesLeft: maxFilesLeft, numberOfUploads: numberOfUploads, onPaste: onPaste, onSelectEmoji: onSelectEmoji, onSelectUser: onSelectUser, openCommandsList: openCommandsList, openEmojiPicker: openEmojiPicker, removeFile: removeFile, removeImage: removeImage, showCommandsList: showCommandsList, textareaRef: textareaRef, uploadFile: uploadFile, uploadImage: uploadImage, uploadNewFiles: uploadNewFiles });
|
|
4853
|
+
closeEmojiPicker: closeEmojiPicker, emojiIndex: useEmojiIndex(), emojiPickerRef: emojiPickerRef, handleChange: handleChange, handleEmojiKeyDown: handleEmojiKeyDown, handleSubmit: handleSubmit, insertText: insertText, isUploadEnabled: isUploadEnabled, maxFilesLeft: maxFilesLeft, numberOfUploads: numberOfUploads, onPaste: onPaste, onSelectEmoji: onSelectEmoji, onSelectUser: onSelectUser, openCommandsList: openCommandsList, openEmojiPicker: openEmojiPicker, removeFile: removeFile, removeImage: removeImage, setText: setText, showCommandsList: showCommandsList, textareaRef: textareaRef, uploadFile: uploadFile, uploadImage: uploadImage, uploadNewFiles: uploadNewFiles });
|
|
4664
4854
|
};
|
|
4665
4855
|
|
|
4666
4856
|
var QuotedMessagePreviewHeader = function () {
|
|
@@ -4722,13 +4912,101 @@ var MessageInputFlat = function () {
|
|
|
4722
4912
|
!cooldownRemaining && React__default['default'].createElement(SendButton$1, { sendMessage: handleSubmit })))));
|
|
4723
4913
|
};
|
|
4724
4914
|
|
|
4915
|
+
var useCreateMessageInputContext = function (value) {
|
|
4916
|
+
var additionalTextareaProps = value.additionalTextareaProps, attachments = value.attachments, autocompleteTriggers = value.autocompleteTriggers, clearEditingState = value.clearEditingState, closeCommandsList = value.closeCommandsList, closeEmojiPicker = value.closeEmojiPicker, cooldownInterval = value.cooldownInterval, disabled = value.disabled, disableMentions = value.disableMentions, doFileUploadRequest = value.doFileUploadRequest, doImageUploadRequest = value.doImageUploadRequest, emojiIndex = value.emojiIndex, emojiPickerIsOpen = value.emojiPickerIsOpen, emojiPickerRef = value.emojiPickerRef, errorHandler = value.errorHandler, fileOrder = value.fileOrder, fileUploads = value.fileUploads, focus = value.focus, grow = value.grow, handleChange = value.handleChange, handleEmojiKeyDown = value.handleEmojiKeyDown, handleSubmit = value.handleSubmit, imageOrder = value.imageOrder, imageUploads = value.imageUploads, insertText = value.insertText, isUploadEnabled = value.isUploadEnabled, keycodeSubmitKeys = value.keycodeSubmitKeys, maxFilesLeft = value.maxFilesLeft, maxRows = value.maxRows, mentionAllAppUsers = value.mentionAllAppUsers, mentioned_users = value.mentioned_users, mentionQueryParams = value.mentionQueryParams, message = value.message, noFiles = value.noFiles, numberOfUploads = value.numberOfUploads, onPaste = value.onPaste, onSelectEmoji = value.onSelectEmoji, onSelectUser = value.onSelectUser, openCommandsList = value.openCommandsList, openEmojiPicker = value.openEmojiPicker, overrideSubmitHandler = value.overrideSubmitHandler, parent = value.parent, publishTypingEvent = value.publishTypingEvent, removeFile = value.removeFile, removeImage = value.removeImage, setCooldownRemaining = value.setCooldownRemaining, setText = value.setText, showCommandsList = value.showCommandsList, text = value.text, textareaRef = value.textareaRef, uploadFile = value.uploadFile, uploadImage = value.uploadImage, uploadNewFiles = value.uploadNewFiles, useMentionsTransliteration = value.useMentionsTransliteration;
|
|
4917
|
+
var editing = message === null || message === void 0 ? void 0 : message.editing;
|
|
4918
|
+
var fileUploadsValue = Object.entries(fileUploads)
|
|
4919
|
+
// eslint-disable-next-line
|
|
4920
|
+
.map(function (_a) {
|
|
4921
|
+
_a[0]; var value = _a[1];
|
|
4922
|
+
return value.state;
|
|
4923
|
+
})
|
|
4924
|
+
.join();
|
|
4925
|
+
var imageUploadsValue = Object.entries(imageUploads)
|
|
4926
|
+
// eslint-disable-next-line
|
|
4927
|
+
.map(function (_a) {
|
|
4928
|
+
_a[0]; var value = _a[1];
|
|
4929
|
+
return value.state;
|
|
4930
|
+
})
|
|
4931
|
+
.join();
|
|
4932
|
+
var mentionedUsersLength = mentioned_users.length;
|
|
4933
|
+
var parentId = parent === null || parent === void 0 ? void 0 : parent.id;
|
|
4934
|
+
var messageInputContext = React.useMemo(function () { return ({
|
|
4935
|
+
additionalTextareaProps: additionalTextareaProps,
|
|
4936
|
+
attachments: attachments,
|
|
4937
|
+
autocompleteTriggers: autocompleteTriggers,
|
|
4938
|
+
clearEditingState: clearEditingState,
|
|
4939
|
+
closeCommandsList: closeCommandsList,
|
|
4940
|
+
closeEmojiPicker: closeEmojiPicker,
|
|
4941
|
+
cooldownInterval: cooldownInterval,
|
|
4942
|
+
disabled: disabled,
|
|
4943
|
+
disableMentions: disableMentions,
|
|
4944
|
+
doFileUploadRequest: doFileUploadRequest,
|
|
4945
|
+
doImageUploadRequest: doImageUploadRequest,
|
|
4946
|
+
emojiIndex: emojiIndex,
|
|
4947
|
+
emojiPickerIsOpen: emojiPickerIsOpen,
|
|
4948
|
+
emojiPickerRef: emojiPickerRef,
|
|
4949
|
+
errorHandler: errorHandler,
|
|
4950
|
+
fileOrder: fileOrder,
|
|
4951
|
+
fileUploads: fileUploads,
|
|
4952
|
+
focus: focus,
|
|
4953
|
+
grow: grow,
|
|
4954
|
+
handleChange: handleChange,
|
|
4955
|
+
handleEmojiKeyDown: handleEmojiKeyDown,
|
|
4956
|
+
handleSubmit: handleSubmit,
|
|
4957
|
+
imageOrder: imageOrder,
|
|
4958
|
+
imageUploads: imageUploads,
|
|
4959
|
+
insertText: insertText,
|
|
4960
|
+
isUploadEnabled: isUploadEnabled,
|
|
4961
|
+
keycodeSubmitKeys: keycodeSubmitKeys,
|
|
4962
|
+
maxFilesLeft: maxFilesLeft,
|
|
4963
|
+
maxRows: maxRows,
|
|
4964
|
+
mentionAllAppUsers: mentionAllAppUsers,
|
|
4965
|
+
mentioned_users: mentioned_users,
|
|
4966
|
+
mentionQueryParams: mentionQueryParams,
|
|
4967
|
+
message: message,
|
|
4968
|
+
noFiles: noFiles,
|
|
4969
|
+
numberOfUploads: numberOfUploads,
|
|
4970
|
+
onPaste: onPaste,
|
|
4971
|
+
onSelectEmoji: onSelectEmoji,
|
|
4972
|
+
onSelectUser: onSelectUser,
|
|
4973
|
+
openCommandsList: openCommandsList,
|
|
4974
|
+
openEmojiPicker: openEmojiPicker,
|
|
4975
|
+
overrideSubmitHandler: overrideSubmitHandler,
|
|
4976
|
+
parent: parent,
|
|
4977
|
+
publishTypingEvent: publishTypingEvent,
|
|
4978
|
+
removeFile: removeFile,
|
|
4979
|
+
removeImage: removeImage,
|
|
4980
|
+
setCooldownRemaining: setCooldownRemaining,
|
|
4981
|
+
setText: setText,
|
|
4982
|
+
showCommandsList: showCommandsList,
|
|
4983
|
+
text: text,
|
|
4984
|
+
textareaRef: textareaRef,
|
|
4985
|
+
uploadFile: uploadFile,
|
|
4986
|
+
uploadImage: uploadImage,
|
|
4987
|
+
uploadNewFiles: uploadNewFiles,
|
|
4988
|
+
useMentionsTransliteration: useMentionsTransliteration,
|
|
4989
|
+
}); }, [
|
|
4990
|
+
editing,
|
|
4991
|
+
emojiPickerIsOpen,
|
|
4992
|
+
fileUploadsValue,
|
|
4993
|
+
imageUploadsValue,
|
|
4994
|
+
isUploadEnabled,
|
|
4995
|
+
mentionedUsersLength,
|
|
4996
|
+
parentId,
|
|
4997
|
+
publishTypingEvent,
|
|
4998
|
+
text,
|
|
4999
|
+
]);
|
|
5000
|
+
return messageInputContext;
|
|
5001
|
+
};
|
|
5002
|
+
|
|
4725
5003
|
var UnMemoizedMessageInput = function (props) {
|
|
4726
5004
|
var PropInput = props.Input;
|
|
4727
5005
|
var _a = useComponentContext(), ContextInput = _a.Input, _b = _a.TriggerProvider, TriggerProvider = _b === void 0 ? DefaultTriggerProvider : _b;
|
|
4728
5006
|
var Input = PropInput || ContextInput || MessageInputFlat;
|
|
4729
5007
|
var messageInputState = useMessageInputState(props);
|
|
4730
5008
|
var cooldownTimerState = useCooldownTimer();
|
|
4731
|
-
var messageInputContextValue = __assign(__assign(__assign({}, cooldownTimerState), messageInputState), props);
|
|
5009
|
+
var messageInputContextValue = useCreateMessageInputContext(__assign(__assign(__assign({}, cooldownTimerState), messageInputState), props));
|
|
4732
5010
|
return (React__default['default'].createElement(MessageInputContextProvider, { value: messageInputContextValue },
|
|
4733
5011
|
React__default['default'].createElement(TriggerProvider, null,
|
|
4734
5012
|
React__default['default'].createElement(Input, null))));
|
|
@@ -5120,7 +5398,7 @@ var UnMemoizedChannel = function (props) {
|
|
|
5120
5398
|
return React__default['default'].createElement(ChannelInner, __assign({}, props, { channel: channel, key: channel.cid }));
|
|
5121
5399
|
};
|
|
5122
5400
|
var ChannelInner = function (props) {
|
|
5123
|
-
var acceptedFiles = props.acceptedFiles, channel = props.channel, children = props.children, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _a = props.emojiData, emojiData = _a === void 0 ? defaultEmojiData : _a, _b = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _b === void 0 ? LoadingErrorIndicator : _b, _c = props.LoadingIndicator, LoadingIndicator$1 = _c === void 0 ? LoadingIndicator : _c, maxNumberOfFiles = props.maxNumberOfFiles, _d = props.multipleUploads, multipleUploads = _d === void 0 ? true : _d, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover;
|
|
5401
|
+
var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, children = props.children, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _a = props.emojiData, emojiData = _a === void 0 ? defaultEmojiData : _a, _b = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _b === void 0 ? LoadingErrorIndicator : _b, _c = props.LoadingIndicator, LoadingIndicator$1 = _c === void 0 ? LoadingIndicator : _c, maxNumberOfFiles = props.maxNumberOfFiles, _d = props.multipleUploads, multipleUploads = _d === void 0 ? true : _d, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, skipMessageDataMemoization = props.skipMessageDataMemoization;
|
|
5124
5402
|
var _e = useChatContext(), client = _e.client, customClasses = _e.customClasses, mutes = _e.mutes, theme = _e.theme, useImageFlagEmojisOnWindows = _e.useImageFlagEmojisOnWindows;
|
|
5125
5403
|
var t = useTranslationContext().t;
|
|
5126
5404
|
var _f = React.useState([]), notifications = _f[0], setNotifications = _f[1];
|
|
@@ -5138,14 +5416,12 @@ var ChannelInner = function (props) {
|
|
|
5138
5416
|
emojiData: emojiData,
|
|
5139
5417
|
emojiSetDef: emojiSetDef,
|
|
5140
5418
|
};
|
|
5141
|
-
var throttledCopyStateFromChannel =
|
|
5142
|
-
|
|
5143
|
-
|
|
5144
|
-
|
|
5145
|
-
|
|
5146
|
-
|
|
5147
|
-
var _a;
|
|
5148
|
-
if (!channel || channel.disconnected || !((_a = channel.getConfig()) === null || _a === void 0 ? void 0 : _a.read_events)) {
|
|
5419
|
+
var throttledCopyStateFromChannel = throttle__default['default'](function () { return dispatch({ channel: channel, type: 'copyStateFromChannelOnEvent' }); }, 500, {
|
|
5420
|
+
leading: true,
|
|
5421
|
+
trailing: true,
|
|
5422
|
+
});
|
|
5423
|
+
var markRead = function () {
|
|
5424
|
+
if (channel.disconnected || !(channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events)) {
|
|
5149
5425
|
return;
|
|
5150
5426
|
}
|
|
5151
5427
|
lastRead.current = new Date();
|
|
@@ -5158,10 +5434,10 @@ var ChannelInner = function (props) {
|
|
|
5158
5434
|
if (originalTitle.current) {
|
|
5159
5435
|
document.title = originalTitle.current;
|
|
5160
5436
|
}
|
|
5161
|
-
}
|
|
5162
|
-
var markReadThrottled =
|
|
5163
|
-
var handleEvent =
|
|
5164
|
-
var _a, _b, _c, _d
|
|
5437
|
+
};
|
|
5438
|
+
var markReadThrottled = throttle__default['default'](markRead, 500, { leading: true, trailing: true });
|
|
5439
|
+
var handleEvent = function (event) {
|
|
5440
|
+
var _a, _b, _c, _d;
|
|
5165
5441
|
if (event.message) {
|
|
5166
5442
|
dispatch({
|
|
5167
5443
|
channel: channel,
|
|
@@ -5170,11 +5446,7 @@ var ChannelInner = function (props) {
|
|
|
5170
5446
|
});
|
|
5171
5447
|
}
|
|
5172
5448
|
if (event.type === 'typing.start' || event.type === 'typing.stop') {
|
|
5173
|
-
dispatch({
|
|
5174
|
-
channel: channel,
|
|
5175
|
-
type: 'setTyping',
|
|
5176
|
-
});
|
|
5177
|
-
return;
|
|
5449
|
+
return dispatch({ channel: channel, type: 'setTyping' });
|
|
5178
5450
|
}
|
|
5179
5451
|
if (event.type === 'connection.changed' && typeof event.online === 'boolean') {
|
|
5180
5452
|
online.current = event.online;
|
|
@@ -5188,29 +5460,33 @@ var ChannelInner = function (props) {
|
|
|
5188
5460
|
if (!document.hidden) {
|
|
5189
5461
|
markReadThrottled();
|
|
5190
5462
|
}
|
|
5191
|
-
else if ((
|
|
5463
|
+
else if ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events) && !channel.muteStatus().muted) {
|
|
5192
5464
|
var unread = channel.countUnread(lastRead.current);
|
|
5193
|
-
|
|
5465
|
+
if (activeUnreadHandler) {
|
|
5466
|
+
activeUnreadHandler(unread, originalTitle.current);
|
|
5467
|
+
}
|
|
5468
|
+
else {
|
|
5469
|
+
document.title = "(" + unread + ") " + originalTitle.current;
|
|
5470
|
+
}
|
|
5194
5471
|
}
|
|
5195
5472
|
}
|
|
5196
5473
|
}
|
|
5197
5474
|
throttledCopyStateFromChannel();
|
|
5198
|
-
}
|
|
5475
|
+
};
|
|
5199
5476
|
// useLayoutEffect here to prevent spinner. Use Suspense when it is available in stable release
|
|
5200
5477
|
React.useLayoutEffect(function () {
|
|
5201
5478
|
var errored = false;
|
|
5202
5479
|
var done = false;
|
|
5203
5480
|
var onVisibilityChange = function () {
|
|
5204
|
-
if (!document.hidden)
|
|
5481
|
+
if (!document.hidden)
|
|
5205
5482
|
markRead();
|
|
5206
|
-
}
|
|
5207
5483
|
};
|
|
5208
5484
|
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
5209
5485
|
var e_1;
|
|
5210
5486
|
return __generator(this, function (_a) {
|
|
5211
5487
|
switch (_a.label) {
|
|
5212
5488
|
case 0:
|
|
5213
|
-
if (
|
|
5489
|
+
if (!!channel.initialized) return [3 /*break*/, 4];
|
|
5214
5490
|
_a.label = 1;
|
|
5215
5491
|
case 1:
|
|
5216
5492
|
_a.trys.push([1, 3, , 4]);
|
|
@@ -5226,7 +5502,7 @@ var ChannelInner = function (props) {
|
|
|
5226
5502
|
case 4:
|
|
5227
5503
|
done = true;
|
|
5228
5504
|
originalTitle.current = document.title;
|
|
5229
|
-
if (
|
|
5505
|
+
if (!errored) {
|
|
5230
5506
|
dispatch({ channel: channel, type: 'initStateFromChannel' });
|
|
5231
5507
|
if (channel.countUnread() > 0)
|
|
5232
5508
|
markRead();
|
|
@@ -5246,15 +5522,14 @@ var ChannelInner = function (props) {
|
|
|
5246
5522
|
if (errored || !done)
|
|
5247
5523
|
return;
|
|
5248
5524
|
document.removeEventListener('visibilitychange', onVisibilityChange);
|
|
5249
|
-
|
|
5250
|
-
channel.off(handleEvent);
|
|
5525
|
+
channel === null || channel === void 0 ? void 0 : channel.off(handleEvent);
|
|
5251
5526
|
client.off('connection.changed', handleEvent);
|
|
5252
5527
|
client.off('connection.recovered', handleEvent);
|
|
5253
5528
|
client.off('user.updated', handleEvent);
|
|
5254
5529
|
client.off('user.deleted', handleEvent);
|
|
5255
5530
|
notificationTimeouts.forEach(clearTimeout);
|
|
5256
5531
|
};
|
|
5257
|
-
}, [channel
|
|
5532
|
+
}, [channel.cid]);
|
|
5258
5533
|
React.useEffect(function () {
|
|
5259
5534
|
var _a;
|
|
5260
5535
|
if (state.thread && ((_a = state.messages) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
@@ -5281,17 +5556,15 @@ var ChannelInner = function (props) {
|
|
|
5281
5556
|
}, 5000);
|
|
5282
5557
|
notificationTimeouts.push(timeout);
|
|
5283
5558
|
};
|
|
5284
|
-
var loadMoreFinished =
|
|
5559
|
+
var loadMoreFinished = debounce__default['default'](function (hasMore, messages) {
|
|
5285
5560
|
if (!isMounted.current)
|
|
5286
5561
|
return;
|
|
5287
5562
|
dispatch({ hasMore: hasMore, messages: messages, type: 'loadMoreFinished' });
|
|
5288
5563
|
}, 2000, {
|
|
5289
5564
|
leading: true,
|
|
5290
5565
|
trailing: true,
|
|
5291
|
-
})
|
|
5292
|
-
var loadMore =
|
|
5293
|
-
// eslint-disable-next-line @typescript-eslint/no-inferrable-types
|
|
5294
|
-
function (limit) {
|
|
5566
|
+
});
|
|
5567
|
+
var loadMore = function (limit) {
|
|
5295
5568
|
if (limit === void 0) { limit = 100; }
|
|
5296
5569
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
5297
5570
|
var oldestMessage, oldestID, perPage, queryResponse, e_2, hasMoreMessages;
|
|
@@ -5299,7 +5572,7 @@ var ChannelInner = function (props) {
|
|
|
5299
5572
|
return __generator(this, function (_b) {
|
|
5300
5573
|
switch (_b.label) {
|
|
5301
5574
|
case 0:
|
|
5302
|
-
if (!online.current || !window.navigator.onLine
|
|
5575
|
+
if (!online.current || !window.navigator.onLine)
|
|
5303
5576
|
return [2 /*return*/, 0];
|
|
5304
5577
|
oldestMessage = (_a = state === null || state === void 0 ? void 0 : state.messages) === null || _a === void 0 ? void 0 : _a[0];
|
|
5305
5578
|
if (state.loadingMore || (oldestMessage === null || oldestMessage === void 0 ? void 0 : oldestMessage.status) !== 'received')
|
|
@@ -5334,27 +5607,22 @@ var ChannelInner = function (props) {
|
|
|
5334
5607
|
}
|
|
5335
5608
|
});
|
|
5336
5609
|
});
|
|
5337
|
-
}
|
|
5338
|
-
var updateMessage =
|
|
5339
|
-
|
|
5340
|
-
return;
|
|
5341
|
-
// adds the message to the local channel state..
|
|
5342
|
-
// this adds to both the main channel state as well as any reply threads
|
|
5610
|
+
};
|
|
5611
|
+
var updateMessage = function (updatedMessage) {
|
|
5612
|
+
// add the message to the local channel state
|
|
5343
5613
|
channel.state.addMessageSorted(updatedMessage, true);
|
|
5344
5614
|
dispatch({
|
|
5345
5615
|
channel: channel,
|
|
5346
5616
|
parentId: state.thread && updatedMessage.parent_id,
|
|
5347
5617
|
type: 'copyMessagesFromChannel',
|
|
5348
5618
|
});
|
|
5349
|
-
}
|
|
5619
|
+
};
|
|
5350
5620
|
var isUserResponseArray = function (output) { var _a; return ((_a = output[0]) === null || _a === void 0 ? void 0 : _a.id) != null; };
|
|
5351
|
-
var doSendMessage =
|
|
5621
|
+
var doSendMessage = function (message, customMessageData) { return __awaiter(void 0, void 0, void 0, function () {
|
|
5352
5622
|
var attachments, id, _a, mentioned_users, parent_id, text, mentions, messageData, messageResponse, error_1, stringError, parsedError;
|
|
5353
5623
|
return __generator(this, function (_b) {
|
|
5354
5624
|
switch (_b.label) {
|
|
5355
5625
|
case 0:
|
|
5356
|
-
if (!channel)
|
|
5357
|
-
return [2 /*return*/];
|
|
5358
5626
|
attachments = message.attachments, id = message.id, _a = message.mentioned_users, mentioned_users = _a === void 0 ? [] : _a, parent_id = message.parent_id, text = message.text;
|
|
5359
5627
|
mentions = isUserResponseArray(mentioned_users)
|
|
5360
5628
|
? mentioned_users.map(function (_a) {
|
|
@@ -5378,7 +5646,7 @@ var ChannelInner = function (props) {
|
|
|
5378
5646
|
_b.label = 5;
|
|
5379
5647
|
case 5:
|
|
5380
5648
|
// replace it after send is completed
|
|
5381
|
-
if (messageResponse
|
|
5649
|
+
if (messageResponse === null || messageResponse === void 0 ? void 0 : messageResponse.message) {
|
|
5382
5650
|
updateMessage(__assign(__assign({}, messageResponse.message), { status: 'received' }));
|
|
5383
5651
|
}
|
|
5384
5652
|
if (quotedMessage)
|
|
@@ -5393,25 +5661,20 @@ var ChannelInner = function (props) {
|
|
|
5393
5661
|
case 7: return [2 /*return*/];
|
|
5394
5662
|
}
|
|
5395
5663
|
});
|
|
5396
|
-
}); }
|
|
5397
|
-
var createMessagePreview =
|
|
5398
|
-
// create a preview of the message
|
|
5664
|
+
}); };
|
|
5665
|
+
var createMessagePreview = function (text, attachments, parent, mentioned_users) {
|
|
5399
5666
|
var clientSideID = client.userID + "-" + uuid.v4();
|
|
5400
5667
|
return __assign({ __html: text, attachments: attachments, created_at: new Date(), html: text, id: clientSideID, mentioned_users: mentioned_users, reactions: [], status: 'sending', text: text, type: 'regular', user: client.user }, ((parent === null || parent === void 0 ? void 0 : parent.id) ? { parent_id: parent.id } : null));
|
|
5401
|
-
}
|
|
5402
|
-
var sendMessage =
|
|
5668
|
+
};
|
|
5669
|
+
var sendMessage = function (_a, customMessageData) {
|
|
5403
5670
|
var _b = _a.attachments, attachments = _b === void 0 ? [] : _b, _c = _a.mentioned_users, mentioned_users = _c === void 0 ? [] : _c, _d = _a.parent, parent = _d === void 0 ? undefined : _d, _e = _a.text, text = _e === void 0 ? '' : _e;
|
|
5404
5671
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
5405
5672
|
var messagePreview;
|
|
5406
5673
|
return __generator(this, function (_f) {
|
|
5407
5674
|
switch (_f.label) {
|
|
5408
5675
|
case 0:
|
|
5409
|
-
if (!channel)
|
|
5410
|
-
return [2 /*return*/];
|
|
5411
|
-
// remove error messages upon submit
|
|
5412
5676
|
channel.state.filterErrorMessages();
|
|
5413
5677
|
messagePreview = createMessagePreview(text, attachments, parent, mentioned_users);
|
|
5414
|
-
// first we add the message to the UI
|
|
5415
5678
|
updateMessage(messagePreview);
|
|
5416
5679
|
return [4 /*yield*/, doSendMessage(messagePreview, customMessageData)];
|
|
5417
5680
|
case 1:
|
|
@@ -5420,62 +5683,55 @@ var ChannelInner = function (props) {
|
|
|
5420
5683
|
}
|
|
5421
5684
|
});
|
|
5422
5685
|
});
|
|
5423
|
-
}
|
|
5424
|
-
var retrySendMessage =
|
|
5686
|
+
};
|
|
5687
|
+
var retrySendMessage = function (message) { return __awaiter(void 0, void 0, void 0, function () {
|
|
5425
5688
|
return __generator(this, function (_a) {
|
|
5426
5689
|
switch (_a.label) {
|
|
5427
5690
|
case 0:
|
|
5428
|
-
// set the message status to sending
|
|
5429
5691
|
updateMessage(__assign(__assign({}, message), { errorStatusCode: undefined, status: 'sending' }));
|
|
5430
|
-
// actually try to send the message...
|
|
5431
5692
|
return [4 /*yield*/, doSendMessage(message)];
|
|
5432
5693
|
case 1:
|
|
5433
|
-
// actually try to send the message...
|
|
5434
5694
|
_a.sent();
|
|
5435
5695
|
return [2 /*return*/];
|
|
5436
5696
|
}
|
|
5437
5697
|
});
|
|
5438
|
-
}); }
|
|
5439
|
-
var removeMessage =
|
|
5440
|
-
if (!channel)
|
|
5441
|
-
return;
|
|
5698
|
+
}); };
|
|
5699
|
+
var removeMessage = function (message) {
|
|
5442
5700
|
channel.state.removeMessage(message);
|
|
5443
5701
|
dispatch({
|
|
5444
5702
|
channel: channel,
|
|
5445
5703
|
parentId: state.thread && message.parent_id,
|
|
5446
5704
|
type: 'copyMessagesFromChannel',
|
|
5447
5705
|
});
|
|
5448
|
-
}
|
|
5706
|
+
};
|
|
5449
5707
|
/** THREAD */
|
|
5450
|
-
var openThread =
|
|
5451
|
-
|
|
5452
|
-
return;
|
|
5453
|
-
if (event && event.preventDefault) {
|
|
5454
|
-
event.preventDefault();
|
|
5455
|
-
}
|
|
5708
|
+
var openThread = function (message, event) {
|
|
5709
|
+
event.preventDefault();
|
|
5456
5710
|
dispatch({ channel: channel, message: message, type: 'openThread' });
|
|
5457
|
-
}
|
|
5458
|
-
var
|
|
5711
|
+
};
|
|
5712
|
+
var closeThread = function (event) {
|
|
5713
|
+
event.preventDefault();
|
|
5714
|
+
dispatch({ type: 'closeThread' });
|
|
5715
|
+
};
|
|
5716
|
+
var loadMoreThreadFinished = debounce__default['default'](function (threadHasMore, threadMessages) {
|
|
5459
5717
|
dispatch({
|
|
5460
5718
|
threadHasMore: threadHasMore,
|
|
5461
5719
|
threadMessages: threadMessages,
|
|
5462
5720
|
type: 'loadMoreThreadFinished',
|
|
5463
5721
|
});
|
|
5464
|
-
}, 2000, { leading: true, trailing: true })
|
|
5465
|
-
var loadMoreThread =
|
|
5722
|
+
}, 2000, { leading: true, trailing: true });
|
|
5723
|
+
var loadMoreThread = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
5466
5724
|
var parentID, oldMessages, oldestMessageID, limit, queryResponse, threadHasMoreMessages, newThreadMessages;
|
|
5467
5725
|
var _a;
|
|
5468
5726
|
return __generator(this, function (_b) {
|
|
5469
5727
|
switch (_b.label) {
|
|
5470
5728
|
case 0:
|
|
5471
|
-
|
|
5472
|
-
if (!channel || state.threadLoadingMore || !state.thread)
|
|
5729
|
+
if (state.threadLoadingMore || !state.thread)
|
|
5473
5730
|
return [2 /*return*/];
|
|
5474
5731
|
dispatch({ type: 'startLoadingThread' });
|
|
5475
5732
|
parentID = state.thread.id;
|
|
5476
5733
|
if (!parentID) {
|
|
5477
|
-
dispatch({ type: 'closeThread' });
|
|
5478
|
-
return [2 /*return*/];
|
|
5734
|
+
return [2 /*return*/, dispatch({ type: 'closeThread' })];
|
|
5479
5735
|
}
|
|
5480
5736
|
oldMessages = channel.state.threads[parentID] || [];
|
|
5481
5737
|
oldestMessageID = (_a = oldMessages[0]) === null || _a === void 0 ? void 0 : _a.id;
|
|
@@ -5491,7 +5747,7 @@ var ChannelInner = function (props) {
|
|
|
5491
5747
|
queryResponse = _b.sent();
|
|
5492
5748
|
threadHasMoreMessages = queryResponse.messages.length === limit;
|
|
5493
5749
|
newThreadMessages = channel.state.threads[parentID] || [];
|
|
5494
|
-
// next set loadingMore to false so we can start asking for more data
|
|
5750
|
+
// next set loadingMore to false so we can start asking for more data
|
|
5495
5751
|
loadMoreThreadFinished(threadHasMoreMessages, newThreadMessages);
|
|
5496
5752
|
return [3 /*break*/, 4];
|
|
5497
5753
|
case 3:
|
|
@@ -5501,18 +5757,12 @@ var ChannelInner = function (props) {
|
|
|
5501
5757
|
case 4: return [2 /*return*/];
|
|
5502
5758
|
}
|
|
5503
5759
|
});
|
|
5504
|
-
}); }
|
|
5505
|
-
var closeThread = React.useCallback(function (event) {
|
|
5506
|
-
if (event && event.preventDefault) {
|
|
5507
|
-
event.preventDefault();
|
|
5508
|
-
}
|
|
5509
|
-
dispatch({ type: 'closeThread' });
|
|
5510
|
-
}, []);
|
|
5760
|
+
}); };
|
|
5511
5761
|
var onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);
|
|
5512
5762
|
var editMessage = useEditMessageHandler(doUpdateMessageRequest);
|
|
5513
5763
|
var typing = state.typing, restState = __rest(state, ["typing"]);
|
|
5514
|
-
var channelStateContextValue = __assign(__assign({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelConfig: channelConfig, maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, watcher_count: state.watcherCount });
|
|
5515
|
-
var channelActionContextValue = {
|
|
5764
|
+
var channelStateContextValue = useCreateChannelStateContext(__assign(__assign({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelConfig: channelConfig, maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, watcher_count: state.watcherCount }));
|
|
5765
|
+
var channelActionContextValue = React.useMemo(function () { return ({
|
|
5516
5766
|
addNotification: addNotification,
|
|
5517
5767
|
closeThread: closeThread,
|
|
5518
5768
|
dispatch: dispatch,
|
|
@@ -5526,8 +5776,9 @@ var ChannelInner = function (props) {
|
|
|
5526
5776
|
retrySendMessage: retrySendMessage,
|
|
5527
5777
|
sendMessage: sendMessage,
|
|
5528
5778
|
setQuotedMessage: setQuotedMessage,
|
|
5779
|
+
skipMessageDataMemoization: skipMessageDataMemoization,
|
|
5529
5780
|
updateMessage: updateMessage,
|
|
5530
|
-
};
|
|
5781
|
+
}); }, [channel.cid, loadMore, quotedMessage]);
|
|
5531
5782
|
var componentContextValue = React.useMemo(function () { return ({
|
|
5532
5783
|
Attachment: props.Attachment || Attachment,
|
|
5533
5784
|
AutocompleteSuggestionHeader: props.AutocompleteSuggestionHeader,
|
|
@@ -5571,13 +5822,13 @@ var ChannelInner = function (props) {
|
|
|
5571
5822
|
EmojiIndex: props.EmojiIndex,
|
|
5572
5823
|
EmojiPicker: props.EmojiPicker,
|
|
5573
5824
|
}); }, []);
|
|
5574
|
-
var typingContextValue = {
|
|
5825
|
+
var typingContextValue = useCreateTypingContext({
|
|
5575
5826
|
typing: typing,
|
|
5576
|
-
};
|
|
5827
|
+
});
|
|
5577
5828
|
var chatClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) || 'str-chat';
|
|
5578
5829
|
var channelClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.channel) || 'str-chat-channel';
|
|
5579
5830
|
var windowsEmojiClass = useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/)
|
|
5580
|
-
? '
|
|
5831
|
+
? 'str-chat--windows-flags'
|
|
5581
5832
|
: '';
|
|
5582
5833
|
if (state.error) {
|
|
5583
5834
|
return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
@@ -5587,7 +5838,7 @@ var ChannelInner = function (props) {
|
|
|
5587
5838
|
return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
5588
5839
|
React__default['default'].createElement(LoadingIndicator$1, { size: 25 })));
|
|
5589
5840
|
}
|
|
5590
|
-
if (!
|
|
5841
|
+
if (!channel.watch) {
|
|
5591
5842
|
return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
5592
5843
|
React__default['default'].createElement("div", null, t('Channel Missing'))));
|
|
5593
5844
|
}
|
|
@@ -5881,7 +6132,8 @@ var useMobileNavigation = function (channelListRef, navOpen, closeMobileNav) {
|
|
|
5881
6132
|
}, [channelListRef, closeMobileNav, navOpen]);
|
|
5882
6133
|
};
|
|
5883
6134
|
|
|
5884
|
-
var useNotificationAddedToChannelListener = function (setChannels, customHandler) {
|
|
6135
|
+
var useNotificationAddedToChannelListener = function (setChannels, customHandler, allowNewMessagesFromUnfilteredChannels) {
|
|
6136
|
+
if (allowNewMessagesFromUnfilteredChannels === void 0) { allowNewMessagesFromUnfilteredChannels = true; }
|
|
5885
6137
|
var client = useChatContext().client;
|
|
5886
6138
|
React.useEffect(function () {
|
|
5887
6139
|
var handleEvent = function (event) { return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -5894,7 +6146,7 @@ var useNotificationAddedToChannelListener = function (setChannels, customHandler
|
|
|
5894
6146
|
customHandler(setChannels, event);
|
|
5895
6147
|
return [3 /*break*/, 3];
|
|
5896
6148
|
case 1:
|
|
5897
|
-
if (!((_a = event.channel) === null || _a === void 0 ? void 0 : _a.type)) return [3 /*break*/, 3];
|
|
6149
|
+
if (!(allowNewMessagesFromUnfilteredChannels && ((_a = event.channel) === null || _a === void 0 ? void 0 : _a.type))) return [3 /*break*/, 3];
|
|
5898
6150
|
return [4 /*yield*/, getChannel(client, event.channel.type, event.channel.id)];
|
|
5899
6151
|
case 2:
|
|
5900
6152
|
channel_1 = _b.sent();
|
|
@@ -5911,7 +6163,8 @@ var useNotificationAddedToChannelListener = function (setChannels, customHandler
|
|
|
5911
6163
|
}, [customHandler]);
|
|
5912
6164
|
};
|
|
5913
6165
|
|
|
5914
|
-
var useNotificationMessageNewListener = function (setChannels, customHandler,
|
|
6166
|
+
var useNotificationMessageNewListener = function (setChannels, customHandler, allowNewMessagesFromUnfilteredChannels) {
|
|
6167
|
+
if (allowNewMessagesFromUnfilteredChannels === void 0) { allowNewMessagesFromUnfilteredChannels = true; }
|
|
5915
6168
|
var client = useChatContext().client;
|
|
5916
6169
|
React.useEffect(function () {
|
|
5917
6170
|
var handleEvent = function (event) { return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -5924,16 +6177,13 @@ var useNotificationMessageNewListener = function (setChannels, customHandler, se
|
|
|
5924
6177
|
customHandler(setChannels, event);
|
|
5925
6178
|
return [3 /*break*/, 3];
|
|
5926
6179
|
case 1:
|
|
5927
|
-
if (!((_a = event.channel) === null || _a === void 0 ? void 0 : _a.type)) return [3 /*break*/, 3];
|
|
6180
|
+
if (!(allowNewMessagesFromUnfilteredChannels && ((_a = event.channel) === null || _a === void 0 ? void 0 : _a.type))) return [3 /*break*/, 3];
|
|
5928
6181
|
return [4 /*yield*/, getChannel(client, event.channel.type, event.channel.id)];
|
|
5929
6182
|
case 2:
|
|
5930
6183
|
channel_1 = _b.sent();
|
|
5931
|
-
// move channel to starting position
|
|
5932
6184
|
setChannels(function (channels) { return uniqBy__default['default'](__spreadArray([channel_1], channels), 'cid'); });
|
|
5933
6185
|
_b.label = 3;
|
|
5934
|
-
case 3:
|
|
5935
|
-
setOffset === null || setOffset === void 0 ? void 0 : setOffset(function (prevOffset) { return prevOffset + 1; });
|
|
5936
|
-
return [2 /*return*/];
|
|
6186
|
+
case 3: return [2 /*return*/];
|
|
5937
6187
|
}
|
|
5938
6188
|
});
|
|
5939
6189
|
}); };
|
|
@@ -5967,12 +6217,11 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
|
|
|
5967
6217
|
var _b = React.useState(false), error = _b[0], setError = _b[1];
|
|
5968
6218
|
var _c = React.useState(true), hasNextPage = _c[0], setHasNextPage = _c[1];
|
|
5969
6219
|
var _d = React.useState(true), loadingChannels = _d[0], setLoadingChannels = _d[1];
|
|
5970
|
-
var _e = React.useState(
|
|
5971
|
-
var _f = React.useState(true), refreshing = _f[0], setRefreshing = _f[1];
|
|
6220
|
+
var _e = React.useState(true), refreshing = _e[0], setRefreshing = _e[1];
|
|
5972
6221
|
var filterString = React.useMemo(function () { return JSON.stringify(filters); }, [filters]);
|
|
5973
6222
|
var sortString = React.useMemo(function () { return JSON.stringify(sort); }, [sort]);
|
|
5974
6223
|
var queryChannels = function (queryType) { return __awaiter(void 0, void 0, void 0, function () {
|
|
5975
|
-
var newOptions, channelQueryResponse, newChannels, err_1;
|
|
6224
|
+
var offset, newOptions, channelQueryResponse, newChannels, err_1;
|
|
5976
6225
|
var _a;
|
|
5977
6226
|
return __generator(this, function (_b) {
|
|
5978
6227
|
switch (_b.label) {
|
|
@@ -5982,27 +6231,21 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
|
|
|
5982
6231
|
setLoadingChannels(true);
|
|
5983
6232
|
}
|
|
5984
6233
|
setRefreshing(true);
|
|
5985
|
-
|
|
6234
|
+
offset = queryType === 'reload' ? 0 : channels.length;
|
|
6235
|
+
newOptions = __assign({ limit: (_a = options === null || options === void 0 ? void 0 : options.limit) !== null && _a !== void 0 ? _a : MAX_QUERY_CHANNELS_LIMIT, offset: offset }, options);
|
|
5986
6236
|
_b.label = 1;
|
|
5987
6237
|
case 1:
|
|
5988
6238
|
_b.trys.push([1, 3, , 4]);
|
|
5989
6239
|
return [4 /*yield*/, client.queryChannels(filters, sort || {}, newOptions)];
|
|
5990
6240
|
case 2:
|
|
5991
6241
|
channelQueryResponse = _b.sent();
|
|
5992
|
-
newChannels =
|
|
5993
|
-
if (queryType === 'reload') {
|
|
5994
|
-
newChannels = channelQueryResponse;
|
|
5995
|
-
}
|
|
5996
|
-
else {
|
|
5997
|
-
newChannels = __spreadArray(__spreadArray([], channels), channelQueryResponse);
|
|
5998
|
-
}
|
|
6242
|
+
newChannels = queryType === 'reload' ? channelQueryResponse : __spreadArray(__spreadArray([], channels), channelQueryResponse);
|
|
5999
6243
|
setChannels(newChannels);
|
|
6000
6244
|
setHasNextPage(channelQueryResponse.length >= newOptions.limit);
|
|
6001
|
-
// Set active channel only
|
|
6002
|
-
if (offset
|
|
6245
|
+
// Set active channel only on load of first page
|
|
6246
|
+
if (!offset && activeChannelHandler) {
|
|
6003
6247
|
activeChannelHandler(newChannels, setChannels);
|
|
6004
6248
|
}
|
|
6005
|
-
setOffset(newChannels.length);
|
|
6006
6249
|
return [3 /*break*/, 4];
|
|
6007
6250
|
case 3:
|
|
6008
6251
|
err_1 = _b.sent();
|
|
@@ -6027,7 +6270,6 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
|
|
|
6027
6270
|
hasNextPage: hasNextPage,
|
|
6028
6271
|
loadNextPage: loadNextPage,
|
|
6029
6272
|
setChannels: setChannels,
|
|
6030
|
-
setOffset: setOffset,
|
|
6031
6273
|
status: {
|
|
6032
6274
|
error: error,
|
|
6033
6275
|
loadingChannels: loadingChannels,
|
|
@@ -6158,6 +6400,16 @@ var ChannelPreview = function (props) {
|
|
|
6158
6400
|
var _e = React.useState(0), unread = _e[0], setUnread = _e[1];
|
|
6159
6401
|
var isActive = (activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.cid) === channel.cid;
|
|
6160
6402
|
var muted = useIsChannelMuted(channel).muted;
|
|
6403
|
+
React.useEffect(function () {
|
|
6404
|
+
var handleEvent = function (event) {
|
|
6405
|
+
if (!event.cid)
|
|
6406
|
+
return setUnread(0);
|
|
6407
|
+
if (channel.cid === event.cid)
|
|
6408
|
+
setUnread(0);
|
|
6409
|
+
};
|
|
6410
|
+
client.on('notification.mark_read', handleEvent);
|
|
6411
|
+
return function () { return client.off('notification.mark_read', handleEvent); };
|
|
6412
|
+
}, []);
|
|
6161
6413
|
React.useEffect(function () {
|
|
6162
6414
|
if (isActive || muted) {
|
|
6163
6415
|
setUnread(0);
|
|
@@ -6467,12 +6719,12 @@ var UnMemoizedChannelList = function (props) {
|
|
|
6467
6719
|
* force a re-render. Incrementing this dummy variable ensures the channel previews update.
|
|
6468
6720
|
*/
|
|
6469
6721
|
var forceUpdate = function () { return setChannelUpdateCount(function (count) { return count + 1; }); };
|
|
6470
|
-
var _r = usePaginatedChannels(client, filters || DEFAULT_FILTERS, sort || DEFAULT_SORT, options || DEFAULT_OPTIONS, activeChannelHandler), channels = _r.channels, hasNextPage = _r.hasNextPage, loadNextPage = _r.loadNextPage, setChannels = _r.setChannels,
|
|
6722
|
+
var _r = usePaginatedChannels(client, filters || DEFAULT_FILTERS, sort || DEFAULT_SORT, options || DEFAULT_OPTIONS, activeChannelHandler), channels = _r.channels, hasNextPage = _r.hasNextPage, loadNextPage = _r.loadNextPage, setChannels = _r.setChannels, status = _r.status;
|
|
6471
6723
|
var loadedChannels = channelRenderFilterFn ? channelRenderFilterFn(channels) : channels;
|
|
6472
6724
|
useMobileNavigation(channelListRef, navOpen, closeMobileNav);
|
|
6473
6725
|
useMessageNewListener(setChannels, lockChannelOrder, allowNewMessagesFromUnfilteredChannels);
|
|
6474
|
-
useNotificationMessageNewListener(setChannels, onMessageNew,
|
|
6475
|
-
useNotificationAddedToChannelListener(setChannels, onAddedToChannel);
|
|
6726
|
+
useNotificationMessageNewListener(setChannels, onMessageNew, allowNewMessagesFromUnfilteredChannels);
|
|
6727
|
+
useNotificationAddedToChannelListener(setChannels, onAddedToChannel, allowNewMessagesFromUnfilteredChannels);
|
|
6476
6728
|
useNotificationRemovedFromChannelListener(setChannels, onRemovedFromChannel);
|
|
6477
6729
|
useChannelDeletedListener(setChannels, onChannelDeleted);
|
|
6478
6730
|
useChannelHiddenListener(setChannels, onChannelHidden);
|
|
@@ -7149,7 +7401,7 @@ var Streami18n = /** @class */ (function () {
|
|
|
7149
7401
|
return Streami18n;
|
|
7150
7402
|
}());
|
|
7151
7403
|
|
|
7152
|
-
var version = '6.
|
|
7404
|
+
var version = '6.9.0';
|
|
7153
7405
|
|
|
7154
7406
|
var useChat = function (_a) {
|
|
7155
7407
|
var _b;
|
|
@@ -7162,7 +7414,7 @@ var useChat = function (_a) {
|
|
|
7162
7414
|
var _e = React.useState(), channel = _e[0], setChannel = _e[1];
|
|
7163
7415
|
var _f = React.useState([]), mutes = _f[0], setMutes = _f[1];
|
|
7164
7416
|
var _g = React.useState(initialNavOpen), navOpen = _g[0], setNavOpen = _g[1];
|
|
7165
|
-
var clientMutes = (_b = client
|
|
7417
|
+
var clientMutes = (_b = client.user) === null || _b === void 0 ? void 0 : _b.mutes;
|
|
7166
7418
|
var closeMobileNav = function () { return setNavOpen(false); };
|
|
7167
7419
|
var openMobileNav = function () { return setTimeout(function () { return setNavOpen(true); }, 100); };
|
|
7168
7420
|
React.useEffect(function () {
|
|
@@ -7232,6 +7484,27 @@ var useChat = function (_a) {
|
|
|
7232
7484
|
};
|
|
7233
7485
|
};
|
|
7234
7486
|
|
|
7487
|
+
var useCreateChatContext = function (value) {
|
|
7488
|
+
var _a;
|
|
7489
|
+
var channel = value.channel, client = value.client, closeMobileNav = value.closeMobileNav, customClasses = value.customClasses, mutes = value.mutes, navOpen = value.navOpen, openMobileNav = value.openMobileNav, setActiveChannel = value.setActiveChannel, theme = value.theme, useImageFlagEmojisOnWindows = value.useImageFlagEmojisOnWindows;
|
|
7490
|
+
var channelCid = channel === null || channel === void 0 ? void 0 : channel.cid;
|
|
7491
|
+
var clientValues = "" + client.clientID + Object.keys(client.activeChannels).length + Object.keys(client.listeners).length + client.mutedChannels.length + "\n " + ((_a = client.user) === null || _a === void 0 ? void 0 : _a.id);
|
|
7492
|
+
var mutedUsersLength = mutes.length;
|
|
7493
|
+
var chatContext = React.useMemo(function () { return ({
|
|
7494
|
+
channel: channel,
|
|
7495
|
+
client: client,
|
|
7496
|
+
closeMobileNav: closeMobileNav,
|
|
7497
|
+
customClasses: customClasses,
|
|
7498
|
+
mutes: mutes,
|
|
7499
|
+
navOpen: navOpen,
|
|
7500
|
+
openMobileNav: openMobileNav,
|
|
7501
|
+
setActiveChannel: setActiveChannel,
|
|
7502
|
+
theme: theme,
|
|
7503
|
+
useImageFlagEmojisOnWindows: useImageFlagEmojisOnWindows,
|
|
7504
|
+
}); }, [channelCid, clientValues, mutedUsersLength, navOpen]);
|
|
7505
|
+
return chatContext;
|
|
7506
|
+
};
|
|
7507
|
+
|
|
7235
7508
|
var darkModeTheme = {
|
|
7236
7509
|
'--bg-gradient-end': '#101214',
|
|
7237
7510
|
'--bg-gradient-start': '#070a0d',
|
|
@@ -7270,20 +7543,21 @@ var Chat = function (props) {
|
|
|
7270
7543
|
var children = props.children, client = props.client, customClasses = props.customClasses, customStyles = props.customStyles, _a = props.darkMode, darkMode = _a === void 0 ? false : _a, defaultLanguage = props.defaultLanguage, i18nInstance = props.i18nInstance, _b = props.initialNavOpen, initialNavOpen = _b === void 0 ? true : _b, _c = props.theme, theme = _c === void 0 ? 'messaging light' : _c, _d = props.useImageFlagEmojisOnWindows, useImageFlagEmojisOnWindows = _d === void 0 ? false : _d;
|
|
7271
7544
|
var _e = useChat({ client: client, defaultLanguage: defaultLanguage, i18nInstance: i18nInstance, initialNavOpen: initialNavOpen }), channel = _e.channel, closeMobileNav = _e.closeMobileNav, mutes = _e.mutes, navOpen = _e.navOpen, openMobileNav = _e.openMobileNav, setActiveChannel = _e.setActiveChannel, translators = _e.translators;
|
|
7272
7545
|
useCustomStyles(darkMode ? darkModeTheme : customStyles);
|
|
7546
|
+
var chatContextValue = useCreateChatContext({
|
|
7547
|
+
channel: channel,
|
|
7548
|
+
client: client,
|
|
7549
|
+
closeMobileNav: closeMobileNav,
|
|
7550
|
+
customClasses: customClasses,
|
|
7551
|
+
mutes: mutes,
|
|
7552
|
+
navOpen: navOpen,
|
|
7553
|
+
openMobileNav: openMobileNav,
|
|
7554
|
+
setActiveChannel: setActiveChannel,
|
|
7555
|
+
theme: theme,
|
|
7556
|
+
useImageFlagEmojisOnWindows: useImageFlagEmojisOnWindows,
|
|
7557
|
+
});
|
|
7273
7558
|
if (!translators.t)
|
|
7274
7559
|
return null;
|
|
7275
|
-
return (React__default['default'].createElement(ChatProvider, { value:
|
|
7276
|
-
channel: channel,
|
|
7277
|
-
client: client,
|
|
7278
|
-
closeMobileNav: closeMobileNav,
|
|
7279
|
-
customClasses: customClasses,
|
|
7280
|
-
mutes: mutes,
|
|
7281
|
-
navOpen: navOpen,
|
|
7282
|
-
openMobileNav: openMobileNav,
|
|
7283
|
-
setActiveChannel: setActiveChannel,
|
|
7284
|
-
theme: theme,
|
|
7285
|
-
useImageFlagEmojisOnWindows: useImageFlagEmojisOnWindows,
|
|
7286
|
-
} },
|
|
7560
|
+
return (React__default['default'].createElement(ChatProvider, { value: chatContextValue },
|
|
7287
7561
|
React__default['default'].createElement(TranslationProvider, { value: translators }, children)));
|
|
7288
7562
|
};
|
|
7289
7563
|
|
|
@@ -8551,7 +8825,7 @@ function useShouldForceScrollToBottom(messages, currentUserId) {
|
|
|
8551
8825
|
|
|
8552
8826
|
var PREPEND_OFFSET = Math.pow(10, 7);
|
|
8553
8827
|
var VirtualizedMessageListWithContext = function (props) {
|
|
8554
|
-
var channel = props.channel, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? true : _a, hasMore = props.hasMore, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, loadingMore = props.loadingMore, loadMore = props.loadMore, propMessage = props.Message, _d = props.messageLimit, messageLimit = _d === void 0 ? 100 : _d, messages = props.messages, _e = props.overscan, overscan = _e === void 0 ? 0 : _e,
|
|
8828
|
+
var additionalVirtuosoProps = props.additionalVirtuosoProps, channel = props.channel, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? true : _a, hasMore = props.hasMore, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, loadingMore = props.loadingMore, loadMore = props.loadMore, propMessage = props.Message, _d = props.messageLimit, messageLimit = _d === void 0 ? 100 : _d, messages = props.messages, _e = props.overscan, overscan = _e === void 0 ? 0 : _e,
|
|
8555
8829
|
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
8556
8830
|
scrollSeekPlaceHolder = props.scrollSeekPlaceHolder, _f = props.scrollToLatestMessageOnFocus, scrollToLatestMessageOnFocus = _f === void 0 ? false : _f, _g = props.separateGiphyPreview, separateGiphyPreview = _g === void 0 ? false : _g, _h = props.shouldGroupByUser, shouldGroupByUser = _h === void 0 ? false : _h, _j = props.stickToBottomScrollBehavior, stickToBottomScrollBehavior = _j === void 0 ? 'smooth' : _j;
|
|
8557
8831
|
var _k = useComponentContext(), _l = _k.DateSeparator, DateSeparator$1 = _l === void 0 ? DateSeparator : _l, _m = _k.EmptyStateIndicator, EmptyStateIndicator$1 = _m === void 0 ? EmptyStateIndicator : _m, _o = _k.GiphyPreviewMessage, GiphyPreviewMessage$1 = _o === void 0 ? GiphyPreviewMessage : _o, _p = _k.LoadingIndicator, LoadingIndicator$1 = _p === void 0 ? LoadingIndicator : _p, _q = _k.MessageNotification, MessageNotification$1 = _q === void 0 ? MessageNotification : _q, _r = _k.MessageSystem, MessageSystem = _r === void 0 ? EventComponent : _r, _s = _k.TypingIndicator, TypingIndicator = _s === void 0 ? null : _s, _t = _k.VirtualMessage, contextMessage = _t === void 0 ? MessageSimple : _t;
|
|
@@ -8679,7 +8953,7 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
8679
8953
|
var virtualizedMessageListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualizedMessageList) || 'str-chat__virtual-list';
|
|
8680
8954
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
8681
8955
|
React__default['default'].createElement("div", { className: virtualizedMessageListClass },
|
|
8682
|
-
React__default['default'].createElement(reactVirtuoso.Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, components: virtuosoComponents, firstItemIndex: PREPEND_OFFSET - numItemsPrepended, followOutput: followOutput, initialTopMostItemIndex: processedMessages.length ? processedMessages.length - 1 : 0, itemContent: function (i) { return messageRenderer(processedMessages, i); }, overscan: overscan, ref: virtuoso, startReached: startReached, style: { overflowX: 'hidden' }, totalCount: processedMessages.length }, (scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {}), (defaultItemHeight ? { defaultItemHeight: defaultItemHeight } : {}))),
|
|
8956
|
+
React__default['default'].createElement(reactVirtuoso.Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, components: virtuosoComponents, firstItemIndex: PREPEND_OFFSET - numItemsPrepended, followOutput: followOutput, initialTopMostItemIndex: processedMessages.length ? processedMessages.length - 1 : 0, itemContent: function (i) { return messageRenderer(processedMessages, i); }, overscan: overscan, ref: virtuoso, startReached: startReached, style: { overflowX: 'hidden' }, totalCount: processedMessages.length }, additionalVirtuosoProps, (scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {}), (defaultItemHeight ? { defaultItemHeight: defaultItemHeight } : {}))),
|
|
8683
8957
|
React__default['default'].createElement("div", { className: 'str-chat__list-notifications' },
|
|
8684
8958
|
React__default['default'].createElement(MessageNotification$1, { onClick: scrollToBottom, showNotification: newMessagesNotification }, t('New Messages!')))),
|
|
8685
8959
|
giphyPreviewMessage && React__default['default'].createElement(GiphyPreviewMessage$1, { message: giphyPreviewMessage })));
|
|
@@ -8916,6 +9190,7 @@ exports.getLatestMessagePreview = getLatestMessagePreview;
|
|
|
8916
9190
|
exports.getMessageActions = getMessageActions;
|
|
8917
9191
|
exports.getNonImageAttachments = getNonImageAttachments;
|
|
8918
9192
|
exports.getReadByTooltipText = getReadByTooltipText;
|
|
9193
|
+
exports.getWholeChar = getWholeChar;
|
|
8919
9194
|
exports.handleActionWarning = handleActionWarning;
|
|
8920
9195
|
exports.hiTranslations = hiTranslations;
|
|
8921
9196
|
exports.isAudioAttachment = isAudioAttachment;
|
|
@@ -8956,7 +9231,6 @@ exports.renderPreviewText = renderPreviewText;
|
|
|
8956
9231
|
exports.renderText = renderText;
|
|
8957
9232
|
exports.ruTranslations = ruTranslations;
|
|
8958
9233
|
exports.showMessageActionsBox = showMessageActionsBox;
|
|
8959
|
-
exports.smartRender = smartRender;
|
|
8960
9234
|
exports.trTranslations = trTranslations;
|
|
8961
9235
|
exports.useActionHandler = useActionHandler;
|
|
8962
9236
|
exports.useBreakpoint = useBreakpoint;
|