stream-chat-react 6.8.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/dist/browser.full-bundle.js +1372 -1201
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +2 -2
- package/dist/browser.full-bundle.min.js.map +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 +2 -0
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +62 -92
- 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.map +1 -1
- package/dist/components/ChannelList/ChannelList.js +2 -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 +2 -4
- 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/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/MessageInput/MessageInput.d.ts +1 -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/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/index.cjs.js +317 -146
- package/dist/index.cjs.js.map +1 -1
- 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 +2 -2
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) {
|
|
@@ -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;
|
|
@@ -4809,13 +4912,101 @@ var MessageInputFlat = function () {
|
|
|
4809
4912
|
!cooldownRemaining && React__default['default'].createElement(SendButton$1, { sendMessage: handleSubmit })))));
|
|
4810
4913
|
};
|
|
4811
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
|
+
|
|
4812
5003
|
var UnMemoizedMessageInput = function (props) {
|
|
4813
5004
|
var PropInput = props.Input;
|
|
4814
5005
|
var _a = useComponentContext(), ContextInput = _a.Input, _b = _a.TriggerProvider, TriggerProvider = _b === void 0 ? DefaultTriggerProvider : _b;
|
|
4815
5006
|
var Input = PropInput || ContextInput || MessageInputFlat;
|
|
4816
5007
|
var messageInputState = useMessageInputState(props);
|
|
4817
5008
|
var cooldownTimerState = useCooldownTimer();
|
|
4818
|
-
var messageInputContextValue = __assign(__assign(__assign({}, cooldownTimerState), messageInputState), props);
|
|
5009
|
+
var messageInputContextValue = useCreateMessageInputContext(__assign(__assign(__assign({}, cooldownTimerState), messageInputState), props));
|
|
4819
5010
|
return (React__default['default'].createElement(MessageInputContextProvider, { value: messageInputContextValue },
|
|
4820
5011
|
React__default['default'].createElement(TriggerProvider, null,
|
|
4821
5012
|
React__default['default'].createElement(Input, null))));
|
|
@@ -5207,7 +5398,7 @@ var UnMemoizedChannel = function (props) {
|
|
|
5207
5398
|
return React__default['default'].createElement(ChannelInner, __assign({}, props, { channel: channel, key: channel.cid }));
|
|
5208
5399
|
};
|
|
5209
5400
|
var ChannelInner = function (props) {
|
|
5210
|
-
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;
|
|
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;
|
|
5211
5402
|
var _e = useChatContext(), client = _e.client, customClasses = _e.customClasses, mutes = _e.mutes, theme = _e.theme, useImageFlagEmojisOnWindows = _e.useImageFlagEmojisOnWindows;
|
|
5212
5403
|
var t = useTranslationContext().t;
|
|
5213
5404
|
var _f = React.useState([]), notifications = _f[0], setNotifications = _f[1];
|
|
@@ -5225,14 +5416,12 @@ var ChannelInner = function (props) {
|
|
|
5225
5416
|
emojiData: emojiData,
|
|
5226
5417
|
emojiSetDef: emojiSetDef,
|
|
5227
5418
|
};
|
|
5228
|
-
var throttledCopyStateFromChannel =
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
|
|
5232
|
-
|
|
5233
|
-
|
|
5234
|
-
var _a;
|
|
5235
|
-
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)) {
|
|
5236
5425
|
return;
|
|
5237
5426
|
}
|
|
5238
5427
|
lastRead.current = new Date();
|
|
@@ -5245,10 +5434,10 @@ var ChannelInner = function (props) {
|
|
|
5245
5434
|
if (originalTitle.current) {
|
|
5246
5435
|
document.title = originalTitle.current;
|
|
5247
5436
|
}
|
|
5248
|
-
}
|
|
5249
|
-
var markReadThrottled =
|
|
5250
|
-
var handleEvent =
|
|
5251
|
-
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;
|
|
5252
5441
|
if (event.message) {
|
|
5253
5442
|
dispatch({
|
|
5254
5443
|
channel: channel,
|
|
@@ -5257,11 +5446,7 @@ var ChannelInner = function (props) {
|
|
|
5257
5446
|
});
|
|
5258
5447
|
}
|
|
5259
5448
|
if (event.type === 'typing.start' || event.type === 'typing.stop') {
|
|
5260
|
-
dispatch({
|
|
5261
|
-
channel: channel,
|
|
5262
|
-
type: 'setTyping',
|
|
5263
|
-
});
|
|
5264
|
-
return;
|
|
5449
|
+
return dispatch({ channel: channel, type: 'setTyping' });
|
|
5265
5450
|
}
|
|
5266
5451
|
if (event.type === 'connection.changed' && typeof event.online === 'boolean') {
|
|
5267
5452
|
online.current = event.online;
|
|
@@ -5275,7 +5460,7 @@ var ChannelInner = function (props) {
|
|
|
5275
5460
|
if (!document.hidden) {
|
|
5276
5461
|
markReadThrottled();
|
|
5277
5462
|
}
|
|
5278
|
-
else if ((
|
|
5463
|
+
else if ((channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events) && !channel.muteStatus().muted) {
|
|
5279
5464
|
var unread = channel.countUnread(lastRead.current);
|
|
5280
5465
|
if (activeUnreadHandler) {
|
|
5281
5466
|
activeUnreadHandler(unread, originalTitle.current);
|
|
@@ -5287,22 +5472,21 @@ var ChannelInner = function (props) {
|
|
|
5287
5472
|
}
|
|
5288
5473
|
}
|
|
5289
5474
|
throttledCopyStateFromChannel();
|
|
5290
|
-
}
|
|
5475
|
+
};
|
|
5291
5476
|
// useLayoutEffect here to prevent spinner. Use Suspense when it is available in stable release
|
|
5292
5477
|
React.useLayoutEffect(function () {
|
|
5293
5478
|
var errored = false;
|
|
5294
5479
|
var done = false;
|
|
5295
5480
|
var onVisibilityChange = function () {
|
|
5296
|
-
if (!document.hidden)
|
|
5481
|
+
if (!document.hidden)
|
|
5297
5482
|
markRead();
|
|
5298
|
-
}
|
|
5299
5483
|
};
|
|
5300
5484
|
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
5301
5485
|
var e_1;
|
|
5302
5486
|
return __generator(this, function (_a) {
|
|
5303
5487
|
switch (_a.label) {
|
|
5304
5488
|
case 0:
|
|
5305
|
-
if (
|
|
5489
|
+
if (!!channel.initialized) return [3 /*break*/, 4];
|
|
5306
5490
|
_a.label = 1;
|
|
5307
5491
|
case 1:
|
|
5308
5492
|
_a.trys.push([1, 3, , 4]);
|
|
@@ -5318,7 +5502,7 @@ var ChannelInner = function (props) {
|
|
|
5318
5502
|
case 4:
|
|
5319
5503
|
done = true;
|
|
5320
5504
|
originalTitle.current = document.title;
|
|
5321
|
-
if (
|
|
5505
|
+
if (!errored) {
|
|
5322
5506
|
dispatch({ channel: channel, type: 'initStateFromChannel' });
|
|
5323
5507
|
if (channel.countUnread() > 0)
|
|
5324
5508
|
markRead();
|
|
@@ -5338,15 +5522,14 @@ var ChannelInner = function (props) {
|
|
|
5338
5522
|
if (errored || !done)
|
|
5339
5523
|
return;
|
|
5340
5524
|
document.removeEventListener('visibilitychange', onVisibilityChange);
|
|
5341
|
-
|
|
5342
|
-
channel.off(handleEvent);
|
|
5525
|
+
channel === null || channel === void 0 ? void 0 : channel.off(handleEvent);
|
|
5343
5526
|
client.off('connection.changed', handleEvent);
|
|
5344
5527
|
client.off('connection.recovered', handleEvent);
|
|
5345
5528
|
client.off('user.updated', handleEvent);
|
|
5346
5529
|
client.off('user.deleted', handleEvent);
|
|
5347
5530
|
notificationTimeouts.forEach(clearTimeout);
|
|
5348
5531
|
};
|
|
5349
|
-
}, [channel
|
|
5532
|
+
}, [channel.cid]);
|
|
5350
5533
|
React.useEffect(function () {
|
|
5351
5534
|
var _a;
|
|
5352
5535
|
if (state.thread && ((_a = state.messages) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
@@ -5373,17 +5556,15 @@ var ChannelInner = function (props) {
|
|
|
5373
5556
|
}, 5000);
|
|
5374
5557
|
notificationTimeouts.push(timeout);
|
|
5375
5558
|
};
|
|
5376
|
-
var loadMoreFinished =
|
|
5559
|
+
var loadMoreFinished = debounce__default['default'](function (hasMore, messages) {
|
|
5377
5560
|
if (!isMounted.current)
|
|
5378
5561
|
return;
|
|
5379
5562
|
dispatch({ hasMore: hasMore, messages: messages, type: 'loadMoreFinished' });
|
|
5380
5563
|
}, 2000, {
|
|
5381
5564
|
leading: true,
|
|
5382
5565
|
trailing: true,
|
|
5383
|
-
})
|
|
5384
|
-
var loadMore =
|
|
5385
|
-
// eslint-disable-next-line @typescript-eslint/no-inferrable-types
|
|
5386
|
-
function (limit) {
|
|
5566
|
+
});
|
|
5567
|
+
var loadMore = function (limit) {
|
|
5387
5568
|
if (limit === void 0) { limit = 100; }
|
|
5388
5569
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
5389
5570
|
var oldestMessage, oldestID, perPage, queryResponse, e_2, hasMoreMessages;
|
|
@@ -5391,7 +5572,7 @@ var ChannelInner = function (props) {
|
|
|
5391
5572
|
return __generator(this, function (_b) {
|
|
5392
5573
|
switch (_b.label) {
|
|
5393
5574
|
case 0:
|
|
5394
|
-
if (!online.current || !window.navigator.onLine
|
|
5575
|
+
if (!online.current || !window.navigator.onLine)
|
|
5395
5576
|
return [2 /*return*/, 0];
|
|
5396
5577
|
oldestMessage = (_a = state === null || state === void 0 ? void 0 : state.messages) === null || _a === void 0 ? void 0 : _a[0];
|
|
5397
5578
|
if (state.loadingMore || (oldestMessage === null || oldestMessage === void 0 ? void 0 : oldestMessage.status) !== 'received')
|
|
@@ -5426,27 +5607,22 @@ var ChannelInner = function (props) {
|
|
|
5426
5607
|
}
|
|
5427
5608
|
});
|
|
5428
5609
|
});
|
|
5429
|
-
}
|
|
5430
|
-
var updateMessage =
|
|
5431
|
-
|
|
5432
|
-
return;
|
|
5433
|
-
// adds the message to the local channel state..
|
|
5434
|
-
// 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
|
|
5435
5613
|
channel.state.addMessageSorted(updatedMessage, true);
|
|
5436
5614
|
dispatch({
|
|
5437
5615
|
channel: channel,
|
|
5438
5616
|
parentId: state.thread && updatedMessage.parent_id,
|
|
5439
5617
|
type: 'copyMessagesFromChannel',
|
|
5440
5618
|
});
|
|
5441
|
-
}
|
|
5619
|
+
};
|
|
5442
5620
|
var isUserResponseArray = function (output) { var _a; return ((_a = output[0]) === null || _a === void 0 ? void 0 : _a.id) != null; };
|
|
5443
|
-
var doSendMessage =
|
|
5621
|
+
var doSendMessage = function (message, customMessageData) { return __awaiter(void 0, void 0, void 0, function () {
|
|
5444
5622
|
var attachments, id, _a, mentioned_users, parent_id, text, mentions, messageData, messageResponse, error_1, stringError, parsedError;
|
|
5445
5623
|
return __generator(this, function (_b) {
|
|
5446
5624
|
switch (_b.label) {
|
|
5447
5625
|
case 0:
|
|
5448
|
-
if (!channel)
|
|
5449
|
-
return [2 /*return*/];
|
|
5450
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;
|
|
5451
5627
|
mentions = isUserResponseArray(mentioned_users)
|
|
5452
5628
|
? mentioned_users.map(function (_a) {
|
|
@@ -5470,7 +5646,7 @@ var ChannelInner = function (props) {
|
|
|
5470
5646
|
_b.label = 5;
|
|
5471
5647
|
case 5:
|
|
5472
5648
|
// replace it after send is completed
|
|
5473
|
-
if (messageResponse
|
|
5649
|
+
if (messageResponse === null || messageResponse === void 0 ? void 0 : messageResponse.message) {
|
|
5474
5650
|
updateMessage(__assign(__assign({}, messageResponse.message), { status: 'received' }));
|
|
5475
5651
|
}
|
|
5476
5652
|
if (quotedMessage)
|
|
@@ -5485,25 +5661,20 @@ var ChannelInner = function (props) {
|
|
|
5485
5661
|
case 7: return [2 /*return*/];
|
|
5486
5662
|
}
|
|
5487
5663
|
});
|
|
5488
|
-
}); }
|
|
5489
|
-
var createMessagePreview =
|
|
5490
|
-
// create a preview of the message
|
|
5664
|
+
}); };
|
|
5665
|
+
var createMessagePreview = function (text, attachments, parent, mentioned_users) {
|
|
5491
5666
|
var clientSideID = client.userID + "-" + uuid.v4();
|
|
5492
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));
|
|
5493
|
-
}
|
|
5494
|
-
var sendMessage =
|
|
5668
|
+
};
|
|
5669
|
+
var sendMessage = function (_a, customMessageData) {
|
|
5495
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;
|
|
5496
5671
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
5497
5672
|
var messagePreview;
|
|
5498
5673
|
return __generator(this, function (_f) {
|
|
5499
5674
|
switch (_f.label) {
|
|
5500
5675
|
case 0:
|
|
5501
|
-
if (!channel)
|
|
5502
|
-
return [2 /*return*/];
|
|
5503
|
-
// remove error messages upon submit
|
|
5504
5676
|
channel.state.filterErrorMessages();
|
|
5505
5677
|
messagePreview = createMessagePreview(text, attachments, parent, mentioned_users);
|
|
5506
|
-
// first we add the message to the UI
|
|
5507
5678
|
updateMessage(messagePreview);
|
|
5508
5679
|
return [4 /*yield*/, doSendMessage(messagePreview, customMessageData)];
|
|
5509
5680
|
case 1:
|
|
@@ -5512,62 +5683,55 @@ var ChannelInner = function (props) {
|
|
|
5512
5683
|
}
|
|
5513
5684
|
});
|
|
5514
5685
|
});
|
|
5515
|
-
}
|
|
5516
|
-
var retrySendMessage =
|
|
5686
|
+
};
|
|
5687
|
+
var retrySendMessage = function (message) { return __awaiter(void 0, void 0, void 0, function () {
|
|
5517
5688
|
return __generator(this, function (_a) {
|
|
5518
5689
|
switch (_a.label) {
|
|
5519
5690
|
case 0:
|
|
5520
|
-
// set the message status to sending
|
|
5521
5691
|
updateMessage(__assign(__assign({}, message), { errorStatusCode: undefined, status: 'sending' }));
|
|
5522
|
-
// actually try to send the message...
|
|
5523
5692
|
return [4 /*yield*/, doSendMessage(message)];
|
|
5524
5693
|
case 1:
|
|
5525
|
-
// actually try to send the message...
|
|
5526
5694
|
_a.sent();
|
|
5527
5695
|
return [2 /*return*/];
|
|
5528
5696
|
}
|
|
5529
5697
|
});
|
|
5530
|
-
}); }
|
|
5531
|
-
var removeMessage =
|
|
5532
|
-
if (!channel)
|
|
5533
|
-
return;
|
|
5698
|
+
}); };
|
|
5699
|
+
var removeMessage = function (message) {
|
|
5534
5700
|
channel.state.removeMessage(message);
|
|
5535
5701
|
dispatch({
|
|
5536
5702
|
channel: channel,
|
|
5537
5703
|
parentId: state.thread && message.parent_id,
|
|
5538
5704
|
type: 'copyMessagesFromChannel',
|
|
5539
5705
|
});
|
|
5540
|
-
}
|
|
5706
|
+
};
|
|
5541
5707
|
/** THREAD */
|
|
5542
|
-
var openThread =
|
|
5543
|
-
|
|
5544
|
-
return;
|
|
5545
|
-
if (event && event.preventDefault) {
|
|
5546
|
-
event.preventDefault();
|
|
5547
|
-
}
|
|
5708
|
+
var openThread = function (message, event) {
|
|
5709
|
+
event.preventDefault();
|
|
5548
5710
|
dispatch({ channel: channel, message: message, type: 'openThread' });
|
|
5549
|
-
}
|
|
5550
|
-
var
|
|
5711
|
+
};
|
|
5712
|
+
var closeThread = function (event) {
|
|
5713
|
+
event.preventDefault();
|
|
5714
|
+
dispatch({ type: 'closeThread' });
|
|
5715
|
+
};
|
|
5716
|
+
var loadMoreThreadFinished = debounce__default['default'](function (threadHasMore, threadMessages) {
|
|
5551
5717
|
dispatch({
|
|
5552
5718
|
threadHasMore: threadHasMore,
|
|
5553
5719
|
threadMessages: threadMessages,
|
|
5554
5720
|
type: 'loadMoreThreadFinished',
|
|
5555
5721
|
});
|
|
5556
|
-
}, 2000, { leading: true, trailing: true })
|
|
5557
|
-
var loadMoreThread =
|
|
5722
|
+
}, 2000, { leading: true, trailing: true });
|
|
5723
|
+
var loadMoreThread = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
5558
5724
|
var parentID, oldMessages, oldestMessageID, limit, queryResponse, threadHasMoreMessages, newThreadMessages;
|
|
5559
5725
|
var _a;
|
|
5560
5726
|
return __generator(this, function (_b) {
|
|
5561
5727
|
switch (_b.label) {
|
|
5562
5728
|
case 0:
|
|
5563
|
-
|
|
5564
|
-
if (!channel || state.threadLoadingMore || !state.thread)
|
|
5729
|
+
if (state.threadLoadingMore || !state.thread)
|
|
5565
5730
|
return [2 /*return*/];
|
|
5566
5731
|
dispatch({ type: 'startLoadingThread' });
|
|
5567
5732
|
parentID = state.thread.id;
|
|
5568
5733
|
if (!parentID) {
|
|
5569
|
-
dispatch({ type: 'closeThread' });
|
|
5570
|
-
return [2 /*return*/];
|
|
5734
|
+
return [2 /*return*/, dispatch({ type: 'closeThread' })];
|
|
5571
5735
|
}
|
|
5572
5736
|
oldMessages = channel.state.threads[parentID] || [];
|
|
5573
5737
|
oldestMessageID = (_a = oldMessages[0]) === null || _a === void 0 ? void 0 : _a.id;
|
|
@@ -5583,7 +5747,7 @@ var ChannelInner = function (props) {
|
|
|
5583
5747
|
queryResponse = _b.sent();
|
|
5584
5748
|
threadHasMoreMessages = queryResponse.messages.length === limit;
|
|
5585
5749
|
newThreadMessages = channel.state.threads[parentID] || [];
|
|
5586
|
-
// 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
|
|
5587
5751
|
loadMoreThreadFinished(threadHasMoreMessages, newThreadMessages);
|
|
5588
5752
|
return [3 /*break*/, 4];
|
|
5589
5753
|
case 3:
|
|
@@ -5593,18 +5757,12 @@ var ChannelInner = function (props) {
|
|
|
5593
5757
|
case 4: return [2 /*return*/];
|
|
5594
5758
|
}
|
|
5595
5759
|
});
|
|
5596
|
-
}); }
|
|
5597
|
-
var closeThread = React.useCallback(function (event) {
|
|
5598
|
-
if (event && event.preventDefault) {
|
|
5599
|
-
event.preventDefault();
|
|
5600
|
-
}
|
|
5601
|
-
dispatch({ type: 'closeThread' });
|
|
5602
|
-
}, []);
|
|
5760
|
+
}); };
|
|
5603
5761
|
var onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);
|
|
5604
5762
|
var editMessage = useEditMessageHandler(doUpdateMessageRequest);
|
|
5605
5763
|
var typing = state.typing, restState = __rest(state, ["typing"]);
|
|
5606
|
-
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 });
|
|
5607
|
-
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 ({
|
|
5608
5766
|
addNotification: addNotification,
|
|
5609
5767
|
closeThread: closeThread,
|
|
5610
5768
|
dispatch: dispatch,
|
|
@@ -5618,8 +5776,9 @@ var ChannelInner = function (props) {
|
|
|
5618
5776
|
retrySendMessage: retrySendMessage,
|
|
5619
5777
|
sendMessage: sendMessage,
|
|
5620
5778
|
setQuotedMessage: setQuotedMessage,
|
|
5779
|
+
skipMessageDataMemoization: skipMessageDataMemoization,
|
|
5621
5780
|
updateMessage: updateMessage,
|
|
5622
|
-
};
|
|
5781
|
+
}); }, [channel.cid, loadMore, quotedMessage]);
|
|
5623
5782
|
var componentContextValue = React.useMemo(function () { return ({
|
|
5624
5783
|
Attachment: props.Attachment || Attachment,
|
|
5625
5784
|
AutocompleteSuggestionHeader: props.AutocompleteSuggestionHeader,
|
|
@@ -5663,9 +5822,9 @@ var ChannelInner = function (props) {
|
|
|
5663
5822
|
EmojiIndex: props.EmojiIndex,
|
|
5664
5823
|
EmojiPicker: props.EmojiPicker,
|
|
5665
5824
|
}); }, []);
|
|
5666
|
-
var typingContextValue = {
|
|
5825
|
+
var typingContextValue = useCreateTypingContext({
|
|
5667
5826
|
typing: typing,
|
|
5668
|
-
};
|
|
5827
|
+
});
|
|
5669
5828
|
var chatClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) || 'str-chat';
|
|
5670
5829
|
var channelClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.channel) || 'str-chat-channel';
|
|
5671
5830
|
var windowsEmojiClass = useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/)
|
|
@@ -5679,7 +5838,7 @@ var ChannelInner = function (props) {
|
|
|
5679
5838
|
return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
5680
5839
|
React__default['default'].createElement(LoadingIndicator$1, { size: 25 })));
|
|
5681
5840
|
}
|
|
5682
|
-
if (!
|
|
5841
|
+
if (!channel.watch) {
|
|
5683
5842
|
return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
5684
5843
|
React__default['default'].createElement("div", null, t('Channel Missing'))));
|
|
5685
5844
|
}
|
|
@@ -6004,7 +6163,7 @@ var useNotificationAddedToChannelListener = function (setChannels, customHandler
|
|
|
6004
6163
|
}, [customHandler]);
|
|
6005
6164
|
};
|
|
6006
6165
|
|
|
6007
|
-
var useNotificationMessageNewListener = function (setChannels, customHandler,
|
|
6166
|
+
var useNotificationMessageNewListener = function (setChannels, customHandler, allowNewMessagesFromUnfilteredChannels) {
|
|
6008
6167
|
if (allowNewMessagesFromUnfilteredChannels === void 0) { allowNewMessagesFromUnfilteredChannels = true; }
|
|
6009
6168
|
var client = useChatContext().client;
|
|
6010
6169
|
React.useEffect(function () {
|
|
@@ -6024,9 +6183,7 @@ var useNotificationMessageNewListener = function (setChannels, customHandler, se
|
|
|
6024
6183
|
channel_1 = _b.sent();
|
|
6025
6184
|
setChannels(function (channels) { return uniqBy__default['default'](__spreadArray([channel_1], channels), 'cid'); });
|
|
6026
6185
|
_b.label = 3;
|
|
6027
|
-
case 3:
|
|
6028
|
-
setOffset === null || setOffset === void 0 ? void 0 : setOffset(function (prevOffset) { return prevOffset + 1; });
|
|
6029
|
-
return [2 /*return*/];
|
|
6186
|
+
case 3: return [2 /*return*/];
|
|
6030
6187
|
}
|
|
6031
6188
|
});
|
|
6032
6189
|
}); };
|
|
@@ -6060,12 +6217,11 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
|
|
|
6060
6217
|
var _b = React.useState(false), error = _b[0], setError = _b[1];
|
|
6061
6218
|
var _c = React.useState(true), hasNextPage = _c[0], setHasNextPage = _c[1];
|
|
6062
6219
|
var _d = React.useState(true), loadingChannels = _d[0], setLoadingChannels = _d[1];
|
|
6063
|
-
var _e = React.useState(
|
|
6064
|
-
var _f = React.useState(true), refreshing = _f[0], setRefreshing = _f[1];
|
|
6220
|
+
var _e = React.useState(true), refreshing = _e[0], setRefreshing = _e[1];
|
|
6065
6221
|
var filterString = React.useMemo(function () { return JSON.stringify(filters); }, [filters]);
|
|
6066
6222
|
var sortString = React.useMemo(function () { return JSON.stringify(sort); }, [sort]);
|
|
6067
6223
|
var queryChannels = function (queryType) { return __awaiter(void 0, void 0, void 0, function () {
|
|
6068
|
-
var newOptions, channelQueryResponse, newChannels, err_1;
|
|
6224
|
+
var offset, newOptions, channelQueryResponse, newChannels, err_1;
|
|
6069
6225
|
var _a;
|
|
6070
6226
|
return __generator(this, function (_b) {
|
|
6071
6227
|
switch (_b.label) {
|
|
@@ -6075,27 +6231,21 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
|
|
|
6075
6231
|
setLoadingChannels(true);
|
|
6076
6232
|
}
|
|
6077
6233
|
setRefreshing(true);
|
|
6078
|
-
|
|
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);
|
|
6079
6236
|
_b.label = 1;
|
|
6080
6237
|
case 1:
|
|
6081
6238
|
_b.trys.push([1, 3, , 4]);
|
|
6082
6239
|
return [4 /*yield*/, client.queryChannels(filters, sort || {}, newOptions)];
|
|
6083
6240
|
case 2:
|
|
6084
6241
|
channelQueryResponse = _b.sent();
|
|
6085
|
-
newChannels =
|
|
6086
|
-
if (queryType === 'reload') {
|
|
6087
|
-
newChannels = channelQueryResponse;
|
|
6088
|
-
}
|
|
6089
|
-
else {
|
|
6090
|
-
newChannels = __spreadArray(__spreadArray([], channels), channelQueryResponse);
|
|
6091
|
-
}
|
|
6242
|
+
newChannels = queryType === 'reload' ? channelQueryResponse : __spreadArray(__spreadArray([], channels), channelQueryResponse);
|
|
6092
6243
|
setChannels(newChannels);
|
|
6093
6244
|
setHasNextPage(channelQueryResponse.length >= newOptions.limit);
|
|
6094
|
-
// Set active channel only
|
|
6095
|
-
if (offset
|
|
6245
|
+
// Set active channel only on load of first page
|
|
6246
|
+
if (!offset && activeChannelHandler) {
|
|
6096
6247
|
activeChannelHandler(newChannels, setChannels);
|
|
6097
6248
|
}
|
|
6098
|
-
setOffset(newChannels.length);
|
|
6099
6249
|
return [3 /*break*/, 4];
|
|
6100
6250
|
case 3:
|
|
6101
6251
|
err_1 = _b.sent();
|
|
@@ -6120,7 +6270,6 @@ var usePaginatedChannels = function (client, filters, sort, options, activeChann
|
|
|
6120
6270
|
hasNextPage: hasNextPage,
|
|
6121
6271
|
loadNextPage: loadNextPage,
|
|
6122
6272
|
setChannels: setChannels,
|
|
6123
|
-
setOffset: setOffset,
|
|
6124
6273
|
status: {
|
|
6125
6274
|
error: error,
|
|
6126
6275
|
loadingChannels: loadingChannels,
|
|
@@ -6570,11 +6719,11 @@ var UnMemoizedChannelList = function (props) {
|
|
|
6570
6719
|
* force a re-render. Incrementing this dummy variable ensures the channel previews update.
|
|
6571
6720
|
*/
|
|
6572
6721
|
var forceUpdate = function () { return setChannelUpdateCount(function (count) { return count + 1; }); };
|
|
6573
|
-
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;
|
|
6574
6723
|
var loadedChannels = channelRenderFilterFn ? channelRenderFilterFn(channels) : channels;
|
|
6575
6724
|
useMobileNavigation(channelListRef, navOpen, closeMobileNav);
|
|
6576
6725
|
useMessageNewListener(setChannels, lockChannelOrder, allowNewMessagesFromUnfilteredChannels);
|
|
6577
|
-
useNotificationMessageNewListener(setChannels, onMessageNew,
|
|
6726
|
+
useNotificationMessageNewListener(setChannels, onMessageNew, allowNewMessagesFromUnfilteredChannels);
|
|
6578
6727
|
useNotificationAddedToChannelListener(setChannels, onAddedToChannel, allowNewMessagesFromUnfilteredChannels);
|
|
6579
6728
|
useNotificationRemovedFromChannelListener(setChannels, onRemovedFromChannel);
|
|
6580
6729
|
useChannelDeletedListener(setChannels, onChannelDeleted);
|
|
@@ -7252,7 +7401,7 @@ var Streami18n = /** @class */ (function () {
|
|
|
7252
7401
|
return Streami18n;
|
|
7253
7402
|
}());
|
|
7254
7403
|
|
|
7255
|
-
var version = '6.
|
|
7404
|
+
var version = '6.9.0';
|
|
7256
7405
|
|
|
7257
7406
|
var useChat = function (_a) {
|
|
7258
7407
|
var _b;
|
|
@@ -7265,7 +7414,7 @@ var useChat = function (_a) {
|
|
|
7265
7414
|
var _e = React.useState(), channel = _e[0], setChannel = _e[1];
|
|
7266
7415
|
var _f = React.useState([]), mutes = _f[0], setMutes = _f[1];
|
|
7267
7416
|
var _g = React.useState(initialNavOpen), navOpen = _g[0], setNavOpen = _g[1];
|
|
7268
|
-
var clientMutes = (_b = client
|
|
7417
|
+
var clientMutes = (_b = client.user) === null || _b === void 0 ? void 0 : _b.mutes;
|
|
7269
7418
|
var closeMobileNav = function () { return setNavOpen(false); };
|
|
7270
7419
|
var openMobileNav = function () { return setTimeout(function () { return setNavOpen(true); }, 100); };
|
|
7271
7420
|
React.useEffect(function () {
|
|
@@ -7335,6 +7484,27 @@ var useChat = function (_a) {
|
|
|
7335
7484
|
};
|
|
7336
7485
|
};
|
|
7337
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
|
+
|
|
7338
7508
|
var darkModeTheme = {
|
|
7339
7509
|
'--bg-gradient-end': '#101214',
|
|
7340
7510
|
'--bg-gradient-start': '#070a0d',
|
|
@@ -7373,20 +7543,21 @@ var Chat = function (props) {
|
|
|
7373
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;
|
|
7374
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;
|
|
7375
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
|
+
});
|
|
7376
7558
|
if (!translators.t)
|
|
7377
7559
|
return null;
|
|
7378
|
-
return (React__default['default'].createElement(ChatProvider, { value:
|
|
7379
|
-
channel: channel,
|
|
7380
|
-
client: client,
|
|
7381
|
-
closeMobileNav: closeMobileNav,
|
|
7382
|
-
customClasses: customClasses,
|
|
7383
|
-
mutes: mutes,
|
|
7384
|
-
navOpen: navOpen,
|
|
7385
|
-
openMobileNav: openMobileNav,
|
|
7386
|
-
setActiveChannel: setActiveChannel,
|
|
7387
|
-
theme: theme,
|
|
7388
|
-
useImageFlagEmojisOnWindows: useImageFlagEmojisOnWindows,
|
|
7389
|
-
} },
|
|
7560
|
+
return (React__default['default'].createElement(ChatProvider, { value: chatContextValue },
|
|
7390
7561
|
React__default['default'].createElement(TranslationProvider, { value: translators }, children)));
|
|
7391
7562
|
};
|
|
7392
7563
|
|
|
@@ -8654,7 +8825,7 @@ function useShouldForceScrollToBottom(messages, currentUserId) {
|
|
|
8654
8825
|
|
|
8655
8826
|
var PREPEND_OFFSET = Math.pow(10, 7);
|
|
8656
8827
|
var VirtualizedMessageListWithContext = function (props) {
|
|
8657
|
-
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,
|
|
8658
8829
|
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
8659
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;
|
|
8660
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;
|
|
@@ -8782,7 +8953,7 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
8782
8953
|
var virtualizedMessageListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualizedMessageList) || 'str-chat__virtual-list';
|
|
8783
8954
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
8784
8955
|
React__default['default'].createElement("div", { className: virtualizedMessageListClass },
|
|
8785
|
-
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 } : {}))),
|
|
8786
8957
|
React__default['default'].createElement("div", { className: 'str-chat__list-notifications' },
|
|
8787
8958
|
React__default['default'].createElement(MessageNotification$1, { onClick: scrollToBottom, showNotification: newMessagesNotification }, t('New Messages!')))),
|
|
8788
8959
|
giphyPreviewMessage && React__default['default'].createElement(GiphyPreviewMessage$1, { message: giphyPreviewMessage })));
|
|
@@ -9019,6 +9190,7 @@ exports.getLatestMessagePreview = getLatestMessagePreview;
|
|
|
9019
9190
|
exports.getMessageActions = getMessageActions;
|
|
9020
9191
|
exports.getNonImageAttachments = getNonImageAttachments;
|
|
9021
9192
|
exports.getReadByTooltipText = getReadByTooltipText;
|
|
9193
|
+
exports.getWholeChar = getWholeChar;
|
|
9022
9194
|
exports.handleActionWarning = handleActionWarning;
|
|
9023
9195
|
exports.hiTranslations = hiTranslations;
|
|
9024
9196
|
exports.isAudioAttachment = isAudioAttachment;
|
|
@@ -9059,7 +9231,6 @@ exports.renderPreviewText = renderPreviewText;
|
|
|
9059
9231
|
exports.renderText = renderText;
|
|
9060
9232
|
exports.ruTranslations = ruTranslations;
|
|
9061
9233
|
exports.showMessageActionsBox = showMessageActionsBox;
|
|
9062
|
-
exports.smartRender = smartRender;
|
|
9063
9234
|
exports.trTranslations = trTranslations;
|
|
9064
9235
|
exports.useActionHandler = useActionHandler;
|
|
9065
9236
|
exports.useBreakpoint = useBreakpoint;
|