stream-chat-react 6.6.0 → 6.8.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 +2810 -336
- 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/Channel/Channel.d.ts +2 -0
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +17 -9
- 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 +10 -6
- 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 +3 -3
- 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 +3 -0
- package/dist/components/Chat/Chat.d.ts.map +1 -1
- package/dist/components/Chat/Chat.js +2 -1
- package/dist/components/Message/Message.d.ts.map +1 -1
- package/dist/components/Message/Message.js +1 -1
- package/dist/components/Message/MessageOptions.d.ts +3 -0
- package/dist/components/Message/MessageOptions.d.ts.map +1 -1
- package/dist/components/Message/MessageOptions.js +6 -6
- package/dist/components/Message/MessageSimple.d.ts.map +1 -1
- package/dist/components/Message/MessageSimple.js +4 -4
- package/dist/components/Message/MessageStatus.d.ts.map +1 -1
- package/dist/components/Message/MessageStatus.js +1 -1
- 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/Message/icons.d.ts +1 -0
- package/dist/components/Message/icons.d.ts.map +1 -1
- package/dist/components/Message/icons.js +2 -0
- package/dist/components/Message/types.d.ts +4 -0
- package/dist/components/Message/types.d.ts.map +1 -1
- package/dist/components/Message/utils.d.ts.map +1 -1
- package/dist/components/Message/utils.js +4 -0
- package/dist/components/MessageActions/MessageActions.d.ts +1 -0
- package/dist/components/MessageActions/MessageActions.d.ts.map +1 -1
- package/dist/components/MessageActions/MessageActions.js +6 -6
- 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 +2 -0
- package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
- 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/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList/MessageList.js +5 -1
- package/dist/components/MessageList/VirtualizedMessageList.d.ts +2 -2
- package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.js +20 -12
- package/dist/components/MessageList/hooks/useMessageListElements.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useMessageListElements.js +4 -3
- package/dist/components/Thread/Thread.d.ts.map +1 -1
- package/dist/components/Thread/Thread.js +4 -1
- package/dist/components/UserItem/UserItem.js +1 -1
- package/dist/context/ChatContext.d.ts +4 -0
- package/dist/context/ChatContext.d.ts.map +1 -1
- package/dist/context/MessageContext.d.ts +4 -0
- package/dist/context/MessageContext.d.ts.map +1 -1
- package/dist/css/index.css +1 -7261
- package/dist/index.cjs.js +214 -83
- 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 +82 -6
- 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 +121 -6
- package/dist/scss/_base.scss +17 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +9 -28
- package/CHANGELOG.md +0 -1520
- package/dist/css/index.js +0 -1
- package/dist/css/index.min.css +0 -1
package/dist/index.cjs.js
CHANGED
|
@@ -1377,7 +1377,7 @@ var ReactTextareaAutocomplete = /*#__PURE__*/function (_React$Component) {
|
|
|
1377
1377
|
};
|
|
1378
1378
|
}
|
|
1379
1379
|
|
|
1380
|
-
if (!textToReplace.text) {
|
|
1380
|
+
if (!textToReplace.text && currentTrigger !== ':') {
|
|
1381
1381
|
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
1382
|
}
|
|
1383
1383
|
|
|
@@ -2191,6 +2191,8 @@ var MessageDeleted = function (props) {
|
|
|
2191
2191
|
React__default['default'].createElement("div", { className: 'str-chat__message--deleted-inner' }, t('This message was deleted...'))));
|
|
2192
2192
|
};
|
|
2193
2193
|
|
|
2194
|
+
var ActionsIcon = function () { return (React__default['default'].createElement("svg", { height: '4', viewBox: '0 0 11 4', width: '11', xmlns: 'http://www.w3.org/2000/svg' },
|
|
2195
|
+
React__default['default'].createElement("path", { d: 'M1.5 3a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z', fillRule: 'nonzero' }))); };
|
|
2194
2196
|
var ReplyIcon = function () { return (React__default['default'].createElement("svg", { height: '15', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
|
|
2195
2197
|
React__default['default'].createElement("path", { d: 'M.56 10.946H.06l-.002-.498L.025.92a.5.5 0 1 1 1-.004l.032 9.029H9.06v-4l9 4.5-9 4.5v-4H.56z', fillRule: 'nonzero' }))); };
|
|
2196
2198
|
var DeliveredCheckIcon = function () { return (React__default['default'].createElement("svg", { height: '16', width: '16', xmlns: 'http://www.w3.org/2000/svg' },
|
|
@@ -2374,6 +2376,8 @@ var areMessagePropsEqual = function (prevProps, nextProps) {
|
|
|
2374
2376
|
var nextMessage = nextProps.message, nextMessageUI = nextProps.Message;
|
|
2375
2377
|
if (prevMessageUI !== nextMessageUI)
|
|
2376
2378
|
return false;
|
|
2379
|
+
if (prevProps.endOfGroup !== nextProps.endOfGroup)
|
|
2380
|
+
return false;
|
|
2377
2381
|
if (nextProps.showDetailedReactions !== prevProps.showDetailedReactions) {
|
|
2378
2382
|
return false;
|
|
2379
2383
|
}
|
|
@@ -2403,6 +2407,8 @@ var areMessageUIPropsEqual = function (prevProps, nextProps) {
|
|
|
2403
2407
|
var nextLastReceivedId = nextProps.lastReceivedId, nextMessage = nextProps.message;
|
|
2404
2408
|
if (prevProps.editing !== nextProps.editing)
|
|
2405
2409
|
return false;
|
|
2410
|
+
if (prevProps.endOfGroup !== nextProps.endOfGroup)
|
|
2411
|
+
return false;
|
|
2406
2412
|
if (((_a = prevProps.mutes) === null || _a === void 0 ? void 0 : _a.length) !== ((_b = nextProps.mutes) === null || _b === void 0 ? void 0 : _b.length))
|
|
2407
2413
|
return false;
|
|
2408
2414
|
if (((_c = prevProps.readBy) === null || _c === void 0 ? void 0 : _c.length) !== ((_d = nextProps.readBy) === null || _d === void 0 ? void 0 : _d.length))
|
|
@@ -2593,16 +2599,16 @@ var UnMemoizedMessageActionsBox = function (props) {
|
|
|
2593
2599
|
var MessageActionsBox = React__default['default'].memo(UnMemoizedMessageActionsBox);
|
|
2594
2600
|
|
|
2595
2601
|
var MessageActions = function (props) {
|
|
2596
|
-
var _a = props.customWrapperClass, customWrapperClass =
|
|
2602
|
+
var _a = props.ActionsIcon, ActionsIcon$1 = _a === void 0 ? ActionsIcon : _a, _b = props.customWrapperClass, customWrapperClass = _b === void 0 ? '' : _b, propGetMessageActions = props.getMessageActions, propHandleDelete = props.handleDelete, propHandleFlag = props.handleFlag, propHandleMute = props.handleMute, propHandlePin = props.handlePin, inline = props.inline, propMessage = props.message, messageWrapperRef = props.messageWrapperRef, mine = props.mine;
|
|
2597
2603
|
var mutes = useChatContext().mutes;
|
|
2598
|
-
var
|
|
2604
|
+
var _c = useMessageContext(), customMessageActions = _c.customMessageActions, contextGetMessageActions = _c.getMessageActions, contextHandleDelete = _c.handleDelete, contextHandleFlag = _c.handleFlag, contextHandleMute = _c.handleMute, contextHandlePin = _c.handlePin, isMyMessage = _c.isMyMessage, contextMessage = _c.message, setEditingState = _c.setEditingState;
|
|
2599
2605
|
var getMessageActions = propGetMessageActions || contextGetMessageActions;
|
|
2600
2606
|
var handleDelete = propHandleDelete || contextHandleDelete;
|
|
2601
2607
|
var handleFlag = propHandleFlag || contextHandleFlag;
|
|
2602
2608
|
var handleMute = propHandleMute || contextHandleMute;
|
|
2603
2609
|
var handlePin = propHandlePin || contextHandlePin;
|
|
2604
2610
|
var message = propMessage || contextMessage;
|
|
2605
|
-
var
|
|
2611
|
+
var _d = React.useState(false), actionsBoxOpen = _d[0], setActionsBoxOpen = _d[1];
|
|
2606
2612
|
var isMuted = React.useCallback(function () { return isUserMuted(message, mutes); }, [message, mutes]);
|
|
2607
2613
|
var hideOptions = React.useCallback(function () { return setActionsBoxOpen(false); }, []);
|
|
2608
2614
|
var messageActions = getMessageActions();
|
|
@@ -2626,12 +2632,11 @@ var MessageActions = function (props) {
|
|
|
2626
2632
|
}
|
|
2627
2633
|
return function () { return document.removeEventListener('click', hideOptions); };
|
|
2628
2634
|
}, [actionsBoxOpen, hideOptions]);
|
|
2629
|
-
if (messageActions.length
|
|
2635
|
+
if (!messageActions.length && !customMessageActions)
|
|
2630
2636
|
return null;
|
|
2631
2637
|
return (React__default['default'].createElement(MessageActionsWrapper, { customWrapperClass: customWrapperClass, inline: inline, setActionsBoxOpen: setActionsBoxOpen },
|
|
2632
2638
|
React__default['default'].createElement(MessageActionsBox, { getMessageActions: getMessageActions, handleDelete: handleDelete, handleEdit: setEditingState, handleFlag: handleFlag, handleMute: handleMute, handlePin: handlePin, isUserMuted: isMuted, mine: mine ? mine() : isMyMessage(), open: actionsBoxOpen }),
|
|
2633
|
-
React__default['default'].createElement(
|
|
2634
|
-
React__default['default'].createElement("path", { d: 'M1.5 3a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z', fillRule: 'nonzero' }))));
|
|
2639
|
+
React__default['default'].createElement(ActionsIcon$1, null)));
|
|
2635
2640
|
};
|
|
2636
2641
|
var MessageActionsWrapper = function (props) {
|
|
2637
2642
|
var children = props.children, customWrapperClass = props.customWrapperClass, inline = props.inline, setActionsBoxOpen = props.setActionsBoxOpen;
|
|
@@ -2652,11 +2657,11 @@ var MessageActionsWrapper = function (props) {
|
|
|
2652
2657
|
};
|
|
2653
2658
|
|
|
2654
2659
|
var UnMemoizedMessageOptions = function (props) {
|
|
2655
|
-
var _a = props.
|
|
2656
|
-
var
|
|
2660
|
+
var _a = props.ActionsIcon, ActionsIcon$1 = _a === void 0 ? ActionsIcon : _a, _b = props.displayLeft, displayLeft = _b === void 0 ? true : _b, _c = props.displayReplies, displayReplies = _c === void 0 ? true : _c, propHandleOpenThread = props.handleOpenThread, messageWrapperRef = props.messageWrapperRef, _d = props.ReactionIcon, ReactionIcon$1 = _d === void 0 ? ReactionIcon : _d, _e = props.theme, theme = _e === void 0 ? 'simple' : _e, _f = props.ThreadIcon, ThreadIcon$1 = _f === void 0 ? ThreadIcon : _f;
|
|
2661
|
+
var _g = useMessageContext(), customMessageActions = _g.customMessageActions, getMessageActions = _g.getMessageActions, contextHandleOpenThread = _g.handleOpenThread, initialMessage = _g.initialMessage, isMyMessage = _g.isMyMessage, message = _g.message, onReactionListClick = _g.onReactionListClick, threadList = _g.threadList;
|
|
2657
2662
|
var handleOpenThread = propHandleOpenThread || contextHandleOpenThread;
|
|
2658
2663
|
var messageActions = getMessageActions();
|
|
2659
|
-
var showActionsBox = showMessageActionsBox(messageActions);
|
|
2664
|
+
var showActionsBox = showMessageActionsBox(messageActions) || !!customMessageActions;
|
|
2660
2665
|
var shouldShowReactions = messageActions.indexOf(MESSAGE_ACTIONS.react) > -1;
|
|
2661
2666
|
var shouldShowReplies = messageActions.indexOf(MESSAGE_ACTIONS.reply) > -1 && displayReplies && !threadList;
|
|
2662
2667
|
if (!message.type ||
|
|
@@ -2670,18 +2675,18 @@ var UnMemoizedMessageOptions = function (props) {
|
|
|
2670
2675
|
}
|
|
2671
2676
|
if (isMyMessage() && displayLeft) {
|
|
2672
2677
|
return (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions", "data-testid": 'message-options-left' },
|
|
2673
|
-
showActionsBox && React__default['default'].createElement(MessageActions, { messageWrapperRef: messageWrapperRef }),
|
|
2678
|
+
showActionsBox && (React__default['default'].createElement(MessageActions, { ActionsIcon: ActionsIcon$1, messageWrapperRef: messageWrapperRef })),
|
|
2674
2679
|
shouldShowReplies && (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--thread", "data-testid": 'thread-action', onClick: handleOpenThread },
|
|
2675
|
-
React__default['default'].createElement(ThreadIcon, null))),
|
|
2680
|
+
React__default['default'].createElement(ThreadIcon$1, null))),
|
|
2676
2681
|
shouldShowReactions && (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--reactions", "data-testid": 'message-reaction-action', onClick: onReactionListClick },
|
|
2677
|
-
React__default['default'].createElement(ReactionIcon, null)))));
|
|
2682
|
+
React__default['default'].createElement(ReactionIcon$1, null)))));
|
|
2678
2683
|
}
|
|
2679
2684
|
return (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions", "data-testid": 'message-options' },
|
|
2680
2685
|
shouldShowReactions && (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--reactions", "data-testid": 'message-reaction-action', onClick: onReactionListClick },
|
|
2681
|
-
React__default['default'].createElement(ReactionIcon, null))),
|
|
2686
|
+
React__default['default'].createElement(ReactionIcon$1, null))),
|
|
2682
2687
|
shouldShowReplies && (React__default['default'].createElement("div", { className: "str-chat__message-" + theme + "__actions__action str-chat__message-" + theme + "__actions__action--thread", "data-testid": 'thread-action', onClick: handleOpenThread },
|
|
2683
|
-
React__default['default'].createElement(ThreadIcon, null))),
|
|
2684
|
-
showActionsBox && React__default['default'].createElement(MessageActions, { messageWrapperRef: messageWrapperRef })));
|
|
2688
|
+
React__default['default'].createElement(ThreadIcon$1, null))),
|
|
2689
|
+
showActionsBox && (React__default['default'].createElement(MessageActions, { ActionsIcon: ActionsIcon$1, messageWrapperRef: messageWrapperRef }))));
|
|
2685
2690
|
};
|
|
2686
2691
|
var MessageOptions = React__default['default'].memo(UnMemoizedMessageOptions);
|
|
2687
2692
|
|
|
@@ -2743,7 +2748,7 @@ var UnMemoizedMessageStatus = function (props) {
|
|
|
2743
2748
|
var lastReadUser = readBy.filter(function (item) { var _a; return item.id !== ((_a = client.user) === null || _a === void 0 ? void 0 : _a.id); })[0];
|
|
2744
2749
|
return (React__default['default'].createElement("span", { className: "str-chat__message-" + messageType + "-status", "data-testid": 'message-status-read-by' },
|
|
2745
2750
|
React__default['default'].createElement(Tooltip, null, getReadByTooltipText(readBy, t, client)),
|
|
2746
|
-
React__default['default'].createElement(Avatar$1, { image: lastReadUser.image, name: lastReadUser.name, size: 15, user: lastReadUser }),
|
|
2751
|
+
React__default['default'].createElement(Avatar$1, { image: lastReadUser.image, name: lastReadUser.name || lastReadUser.id, size: 15, user: lastReadUser }),
|
|
2747
2752
|
readBy.length > 2 && (React__default['default'].createElement("span", { className: "str-chat__message-" + messageType + "-status-number", "data-testid": 'message-status-read-by-many' }, readBy.length - 1))));
|
|
2748
2753
|
}
|
|
2749
2754
|
if (message.status === 'received' && message.id === lastReceivedId && !threadList) {
|
|
@@ -3106,7 +3111,7 @@ var usePinHandler = function (message, permissions, notifications) {
|
|
|
3106
3111
|
return { canPin: canPin(), handlePin: handlePin };
|
|
3107
3112
|
};
|
|
3108
3113
|
|
|
3109
|
-
var reactionHandlerWarning = "Reaction handler was called, but it is missing one of its required arguments
|
|
3114
|
+
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.";
|
|
3110
3115
|
var useReactionHandler = function (message) {
|
|
3111
3116
|
var updateMessage = useChannelActionContext().updateMessage;
|
|
3112
3117
|
var channel = useChannelStateContext().channel;
|
|
@@ -3245,14 +3250,12 @@ var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef
|
|
|
3245
3250
|
if (showDetailedReactions && !hasListener.current) {
|
|
3246
3251
|
hasListener.current = true;
|
|
3247
3252
|
document.addEventListener('click', closeDetailedReactions);
|
|
3248
|
-
document.addEventListener('touchend', closeDetailedReactions);
|
|
3249
3253
|
if (messageWrapper) {
|
|
3250
3254
|
messageWrapper.addEventListener('mouseleave', closeDetailedReactions);
|
|
3251
3255
|
}
|
|
3252
3256
|
}
|
|
3253
3257
|
if (!showDetailedReactions && hasListener.current) {
|
|
3254
3258
|
document.removeEventListener('click', closeDetailedReactions);
|
|
3255
|
-
document.removeEventListener('touchend', closeDetailedReactions);
|
|
3256
3259
|
if (messageWrapper) {
|
|
3257
3260
|
messageWrapper.removeEventListener('mouseleave', closeDetailedReactions);
|
|
3258
3261
|
}
|
|
@@ -3261,7 +3264,6 @@ var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef
|
|
|
3261
3264
|
return function () {
|
|
3262
3265
|
if (hasListener.current) {
|
|
3263
3266
|
document.removeEventListener('click', closeDetailedReactions);
|
|
3264
|
-
document.removeEventListener('touchend', closeDetailedReactions);
|
|
3265
3267
|
if (messageWrapper) {
|
|
3266
3268
|
messageWrapper.removeEventListener('mouseleave', closeDetailedReactions);
|
|
3267
3269
|
}
|
|
@@ -3273,7 +3275,6 @@ var useReactionClick = function (message, reactionSelectorRef, messageWrapperRef
|
|
|
3273
3275
|
var messageWrapper = messageWrapperRef === null || messageWrapperRef === void 0 ? void 0 : messageWrapperRef.current;
|
|
3274
3276
|
if (messageDeleted && hasListener.current) {
|
|
3275
3277
|
document.removeEventListener('click', closeDetailedReactions);
|
|
3276
|
-
document.removeEventListener('touchend', closeDetailedReactions);
|
|
3277
3278
|
if (messageWrapper) {
|
|
3278
3279
|
messageWrapper.removeEventListener('mouseleave', closeDetailedReactions);
|
|
3279
3280
|
}
|
|
@@ -3511,6 +3512,85 @@ var useEmojiTrigger = function (emojiIndex) { return ({
|
|
|
3511
3512
|
}); },
|
|
3512
3513
|
}); };
|
|
3513
3514
|
|
|
3515
|
+
var accentsMap = {
|
|
3516
|
+
a: 'á|à|ã|â|À|Á|Ã|Â',
|
|
3517
|
+
c: 'ç|Ç',
|
|
3518
|
+
e: 'é|è|ê|É|È|Ê',
|
|
3519
|
+
i: 'í|ì|î|Í|Ì|Î',
|
|
3520
|
+
n: 'ñ|Ñ',
|
|
3521
|
+
o: 'ó|ò|ô|õ|Ó|Ò|Ô|Õ',
|
|
3522
|
+
u: 'ú|ù|û|ü|Ú|Ù|Û|Ü',
|
|
3523
|
+
};
|
|
3524
|
+
var removeDiacritics = function (text) {
|
|
3525
|
+
if (!text)
|
|
3526
|
+
return '';
|
|
3527
|
+
return Object.keys(accentsMap).reduce(function (acc, current) { return acc.replace(new RegExp(accentsMap[current], 'g'), current); }, text);
|
|
3528
|
+
};
|
|
3529
|
+
var calculateLevenshtein = function (query, name) {
|
|
3530
|
+
if (query.length === 0)
|
|
3531
|
+
return name.length;
|
|
3532
|
+
if (name.length === 0)
|
|
3533
|
+
return query.length;
|
|
3534
|
+
var matrix = [];
|
|
3535
|
+
var i;
|
|
3536
|
+
for (i = 0; i <= name.length; i++) {
|
|
3537
|
+
matrix[i] = [i];
|
|
3538
|
+
}
|
|
3539
|
+
var j;
|
|
3540
|
+
for (j = 0; j <= query.length; j++) {
|
|
3541
|
+
matrix[0][j] = j;
|
|
3542
|
+
}
|
|
3543
|
+
for (i = 1; i <= name.length; i++) {
|
|
3544
|
+
for (j = 1; j <= query.length; j++) {
|
|
3545
|
+
if (name.charAt(i - 1) === query.charAt(j - 1)) {
|
|
3546
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
3547
|
+
}
|
|
3548
|
+
else {
|
|
3549
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
|
|
3550
|
+
Math.min(matrix[i][j - 1] + 1, // insertion
|
|
3551
|
+
matrix[i - 1][j] + 1)); // deletion
|
|
3552
|
+
}
|
|
3553
|
+
}
|
|
3554
|
+
}
|
|
3555
|
+
return matrix[name.length][query.length];
|
|
3556
|
+
};
|
|
3557
|
+
var searchLocalUsers = function (params) {
|
|
3558
|
+
var ownUserId = params.ownUserId, query = params.query, useMentionsTransliteration = params.useMentionsTransliteration, users = params.users;
|
|
3559
|
+
var matchingUsers = users.filter(function (user) {
|
|
3560
|
+
if (user.id === ownUserId)
|
|
3561
|
+
return false;
|
|
3562
|
+
if (!query)
|
|
3563
|
+
return true;
|
|
3564
|
+
var updatedId = removeDiacritics(user.id).toLowerCase();
|
|
3565
|
+
var updatedName = removeDiacritics(user.name).toLowerCase();
|
|
3566
|
+
var updatedQuery = removeDiacritics(query).toLowerCase();
|
|
3567
|
+
if (useMentionsTransliteration) {
|
|
3568
|
+
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
3569
|
+
var transliterate;
|
|
3570
|
+
return __generator(this, function (_a) {
|
|
3571
|
+
switch (_a.label) {
|
|
3572
|
+
case 0: return [4 /*yield*/, Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@sindresorhus/transliterate')); })];
|
|
3573
|
+
case 1:
|
|
3574
|
+
transliterate = (_a.sent()).default;
|
|
3575
|
+
updatedName = transliterate(user.name || '').toLowerCase();
|
|
3576
|
+
updatedQuery = transliterate(query).toLowerCase();
|
|
3577
|
+
updatedId = transliterate(user.id).toLowerCase();
|
|
3578
|
+
return [2 /*return*/];
|
|
3579
|
+
}
|
|
3580
|
+
});
|
|
3581
|
+
}); })();
|
|
3582
|
+
}
|
|
3583
|
+
if (updatedName) {
|
|
3584
|
+
var levenshtein_1 = calculateLevenshtein(updatedQuery, updatedName);
|
|
3585
|
+
if (updatedName.includes(updatedQuery) || levenshtein_1 <= 3)
|
|
3586
|
+
return true;
|
|
3587
|
+
}
|
|
3588
|
+
var levenshtein = calculateLevenshtein(updatedQuery, updatedId);
|
|
3589
|
+
return updatedId.includes(updatedQuery) || levenshtein <= 3;
|
|
3590
|
+
});
|
|
3591
|
+
return matchingUsers;
|
|
3592
|
+
};
|
|
3593
|
+
|
|
3514
3594
|
/**
|
|
3515
3595
|
* UI component for mentions rendered in suggestion list
|
|
3516
3596
|
*/
|
|
@@ -3527,13 +3607,13 @@ var UnMemoizedUserItem = function (props) {
|
|
|
3527
3607
|
}));
|
|
3528
3608
|
};
|
|
3529
3609
|
return (React__default['default'].createElement("div", { className: 'str-chat__user-item' },
|
|
3530
|
-
React__default['default'].createElement(Avatar$1, { image: entity.image, size: 20 }),
|
|
3610
|
+
React__default['default'].createElement(Avatar$1, { image: entity.image, name: entity.name || entity.id, size: 20 }),
|
|
3531
3611
|
React__default['default'].createElement("span", { className: 'str-chat__user-item--name', "data-testid": 'user-item-name' }, renderName())));
|
|
3532
3612
|
};
|
|
3533
3613
|
var UserItem = React__default['default'].memo(UnMemoizedUserItem);
|
|
3534
3614
|
|
|
3535
3615
|
var useUserTrigger = function (params) {
|
|
3536
|
-
var disableMentions = params.disableMentions, mentionAllAppUsers = params.mentionAllAppUsers, _a = params.mentionQueryParams, mentionQueryParams = _a === void 0 ? {} : _a, onSelectUser = params.onSelectUser;
|
|
3616
|
+
var disableMentions = params.disableMentions, mentionAllAppUsers = params.mentionAllAppUsers, _a = params.mentionQueryParams, mentionQueryParams = _a === void 0 ? {} : _a, onSelectUser = params.onSelectUser, useMentionsTransliteration = params.useMentionsTransliteration;
|
|
3537
3617
|
var _b = React.useState(false), searching = _b[0], setSearching = _b[1];
|
|
3538
3618
|
var _c = useChatContext(), client = _c.client, mutes = _c.mutes;
|
|
3539
3619
|
var channel = useChannelStateContext().channel;
|
|
@@ -3617,14 +3697,22 @@ var useUserTrigger = function (params) {
|
|
|
3617
3697
|
return {
|
|
3618
3698
|
callback: function (item) { return onSelectUser(item); },
|
|
3619
3699
|
component: UserItem,
|
|
3620
|
-
dataProvider: function (query,
|
|
3700
|
+
dataProvider: function (query, text, onReady) {
|
|
3621
3701
|
var _a;
|
|
3622
3702
|
if (disableMentions)
|
|
3623
3703
|
return;
|
|
3624
3704
|
var filterMutes = function (data) {
|
|
3705
|
+
if (text.includes('/unmute') && !mutes.length) {
|
|
3706
|
+
return [];
|
|
3707
|
+
}
|
|
3625
3708
|
if (!mutes.length)
|
|
3626
3709
|
return data;
|
|
3627
|
-
|
|
3710
|
+
if (text.includes('/unmute')) {
|
|
3711
|
+
return data.filter(function (suggestion) {
|
|
3712
|
+
return mutes.some(function (mute) { return mute.target.id === suggestion.id; });
|
|
3713
|
+
});
|
|
3714
|
+
}
|
|
3715
|
+
return data.filter(function (suggestion) { return mutes.every(function (mute) { return mute.target.id !== suggestion.id; }); });
|
|
3628
3716
|
};
|
|
3629
3717
|
if (mentionAllAppUsers) {
|
|
3630
3718
|
return queryUsersThrottled(query, function (data) {
|
|
@@ -3640,16 +3728,13 @@ var useUserTrigger = function (params) {
|
|
|
3640
3728
|
*/
|
|
3641
3729
|
if (!query || Object.values(members || {}).length < 100) {
|
|
3642
3730
|
var users = getMembersAndWatchers();
|
|
3643
|
-
var
|
|
3644
|
-
|
|
3645
|
-
|
|
3646
|
-
|
|
3647
|
-
|
|
3648
|
-
|
|
3649
|
-
|
|
3650
|
-
}
|
|
3651
|
-
return user.id.toLowerCase().includes(query.toLowerCase());
|
|
3652
|
-
});
|
|
3731
|
+
var params_1 = {
|
|
3732
|
+
ownUserId: client.userID,
|
|
3733
|
+
query: query,
|
|
3734
|
+
useMentionsTransliteration: useMentionsTransliteration,
|
|
3735
|
+
users: users,
|
|
3736
|
+
};
|
|
3737
|
+
var matchingUsers = searchLocalUsers(params_1);
|
|
3653
3738
|
var usersToShow = ((_a = mentionQueryParams.options) === null || _a === void 0 ? void 0 : _a.limit) || 10;
|
|
3654
3739
|
var data = matchingUsers.slice(0, usersToShow);
|
|
3655
3740
|
if (onReady)
|
|
@@ -3696,6 +3781,7 @@ var DefaultTriggerProvider = function (_a) {
|
|
|
3696
3781
|
mentionAllAppUsers: currentValue.mentionAllAppUsers,
|
|
3697
3782
|
mentionQueryParams: currentValue.mentionQueryParams,
|
|
3698
3783
|
onSelectUser: currentValue.onSelectUser,
|
|
3784
|
+
useMentionsTransliteration: currentValue.useMentionsTransliteration,
|
|
3699
3785
|
}),
|
|
3700
3786
|
};
|
|
3701
3787
|
var newValue = __assign(__assign({}, currentValue), { autocompleteTriggers: defaultAutocompleteTriggers });
|
|
@@ -4193,7 +4279,7 @@ var useAttachments = function (props, state, dispatch) {
|
|
|
4193
4279
|
|
|
4194
4280
|
var useMessageInputText = function (props, state, dispatch) {
|
|
4195
4281
|
var channel = useChannelStateContext().channel;
|
|
4196
|
-
var additionalTextareaProps = props.additionalTextareaProps, focus = props.focus, parent = props.parent,
|
|
4282
|
+
var additionalTextareaProps = props.additionalTextareaProps, focus = props.focus, parent = props.parent, _a = props.publishTypingEvent, publishTypingEvent = _a === void 0 ? true : _a;
|
|
4197
4283
|
var text = state.text;
|
|
4198
4284
|
var textareaRef = React.useRef();
|
|
4199
4285
|
// Focus
|
|
@@ -4394,10 +4480,11 @@ var useSubmitHandler = function (props, state, dispatch, numberOfUploads) {
|
|
|
4394
4480
|
text: text,
|
|
4395
4481
|
};
|
|
4396
4482
|
if (!message) return [3 /*break*/, 5];
|
|
4483
|
+
delete message.i18n;
|
|
4397
4484
|
_a.label = 1;
|
|
4398
4485
|
case 1:
|
|
4399
4486
|
_a.trys.push([1, 3, , 4]);
|
|
4400
|
-
return [4 /*yield*/, editMessage(__assign(__assign({},
|
|
4487
|
+
return [4 /*yield*/, editMessage(__assign(__assign({}, message), updatedMessage))];
|
|
4401
4488
|
case 2:
|
|
4402
4489
|
_a.sent();
|
|
4403
4490
|
if (clearEditingState)
|
|
@@ -4511,6 +4598,7 @@ var initState = function (message) {
|
|
|
4511
4598
|
imageOrder: [],
|
|
4512
4599
|
imageUploads: __assign({}, emptyImageUploads),
|
|
4513
4600
|
mentioned_users: [],
|
|
4601
|
+
setText: function () { return null; },
|
|
4514
4602
|
text: '',
|
|
4515
4603
|
};
|
|
4516
4604
|
}
|
|
@@ -4562,6 +4650,7 @@ var initState = function (message) {
|
|
|
4562
4650
|
imageOrder: imageOrder,
|
|
4563
4651
|
imageUploads: imageUploads,
|
|
4564
4652
|
mentioned_users: mentioned_users,
|
|
4653
|
+
setText: function () { return null; },
|
|
4565
4654
|
text: message.text || '',
|
|
4566
4655
|
};
|
|
4567
4656
|
};
|
|
@@ -4650,12 +4739,15 @@ var useMessageInputState = function (props) {
|
|
|
4650
4739
|
var onSelectUser = React.useCallback(function (item) {
|
|
4651
4740
|
dispatch({ type: 'addMentionedUser', user: item });
|
|
4652
4741
|
}, []);
|
|
4742
|
+
var setText = React.useCallback(function (text) {
|
|
4743
|
+
dispatch({ getNewText: function () { return text; }, type: 'setText' });
|
|
4744
|
+
}, []);
|
|
4653
4745
|
return __assign(__assign({}, state), { closeCommandsList: closeCommandsList,
|
|
4654
4746
|
/**
|
|
4655
4747
|
* TODO: fix the below at some point because this type casting is wrong
|
|
4656
4748
|
* and just forced to not have warnings currently with the unknown casting
|
|
4657
4749
|
*/
|
|
4658
|
-
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 });
|
|
4750
|
+
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 });
|
|
4659
4751
|
};
|
|
4660
4752
|
|
|
4661
4753
|
var QuotedMessagePreviewHeader = function () {
|
|
@@ -5037,7 +5129,7 @@ var SimpleReactionsList = React__default['default'].memo(UnMemoizedSimpleReactio
|
|
|
5037
5129
|
|
|
5038
5130
|
var MessageSimpleWithContext = function (props) {
|
|
5039
5131
|
var _a;
|
|
5040
|
-
var additionalMessageInputProps = props.additionalMessageInputProps, clearEditingState = props.clearEditingState, editing = props.editing, handleAction = props.handleAction, handleOpenThread = props.handleOpenThread, handleRetry = props.handleRetry, isMyMessage = props.isMyMessage, isReactionEnabled = props.isReactionEnabled, message = props.message, onUserClick = props.onUserClick, onUserHover = props.onUserHover, reactionSelectorRef = props.reactionSelectorRef, showDetailedReactions = props.showDetailedReactions, threadList = props.threadList;
|
|
5132
|
+
var additionalMessageInputProps = props.additionalMessageInputProps, clearEditingState = props.clearEditingState, editing = props.editing, endOfGroup = props.endOfGroup, firstOfGroup = props.firstOfGroup, groupedByUser = props.groupedByUser, handleAction = props.handleAction, handleOpenThread = props.handleOpenThread, handleRetry = props.handleRetry, isMyMessage = props.isMyMessage, isReactionEnabled = props.isReactionEnabled, message = props.message, onUserClick = props.onUserClick, onUserHover = props.onUserHover, reactionSelectorRef = props.reactionSelectorRef, showDetailedReactions = props.showDetailedReactions, threadList = props.threadList;
|
|
5041
5133
|
var _b = useComponentContext(), Attachment = _b.Attachment, _c = _b.Avatar, Avatar$1 = _c === void 0 ? Avatar : _c, _d = _b.EditMessageInput, EditMessageInput = _d === void 0 ? EditMessageForm : _d, _e = _b.MessageDeleted, MessageDeleted$1 = _e === void 0 ? MessageDeleted : _e, _f = _b.MessageOptions, MessageOptions$1 = _f === void 0 ? MessageOptions : _f, _g = _b.MessageRepliesCountButton, MessageRepliesCountButton$1 = _g === void 0 ? MessageRepliesCountButton : _g, _h = _b.MessageStatus, MessageStatus$1 = _h === void 0 ? MessageStatus : _h, _j = _b.MessageTimestamp, MessageTimestamp$1 = _j === void 0 ? MessageTimestamp : _j, _k = _b.ReactionSelector, ReactionSelector$1 = _k === void 0 ? ReactionSelector : _k, _l = _b.ReactionsList, ReactionsList$1 = _l === void 0 ? ReactionsList : _l;
|
|
5042
5134
|
var messageWrapperRef = React.useRef(null);
|
|
5043
5135
|
var hasAttachment = messageHasAttachments(message);
|
|
@@ -5054,7 +5146,7 @@ var MessageSimpleWithContext = function (props) {
|
|
|
5054
5146
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
5055
5147
|
editing && (React__default['default'].createElement(Modal, { onClose: clearEditingState, open: editing },
|
|
5056
5148
|
React__default['default'].createElement(MessageInput, __assign({ clearEditingState: clearEditingState, Input: EditMessageInput, message: message }, additionalMessageInputProps)))),
|
|
5057
|
-
React__default['default'].createElement("div", { className: ("\n\t\t\t\t\t\t" + messageClasses + "\n\t\t\t\t\t\tstr-chat__message--" + message.type + "\n\t\t\t\t\t\tstr-chat__message--" + message.status + "\n\t\t\t\t\t\t" + (message.text ? 'str-chat__message--has-text' : 'has-no-text') + "\n\t\t\t\t\t\t" + (hasAttachment ? 'str-chat__message--has-attachment' : '') + "\n " + (hasReactions && isReactionEnabled ? 'str-chat__message--with-reactions' : '') + "\n " + (message.pinned ? 'pinned-message' : '') + "\n\t\t\t\t\t").trim(), key: message.id, ref: messageWrapperRef },
|
|
5149
|
+
React__default['default'].createElement("div", { className: ("\n\t\t\t\t\t\t" + messageClasses + "\n\t\t\t\t\t\tstr-chat__message--" + message.type + "\n\t\t\t\t\t\tstr-chat__message--" + message.status + "\n\t\t\t\t\t\t" + (message.text ? 'str-chat__message--has-text' : 'has-no-text') + "\n\t\t\t\t\t\t" + (hasAttachment ? 'str-chat__message--has-attachment' : '') + "\n " + (hasReactions && isReactionEnabled ? 'str-chat__message--with-reactions' : '') + "\n " + (message.pinned ? 'pinned-message' : '') + "\n " + (groupedByUser ? 'str-chat__virtual-message__wrapper--group' : '') + "\n " + (firstOfGroup ? 'str-chat__virtual-message__wrapper--first' : '') + "\n " + (endOfGroup ? 'str-chat__virtual-message__wrapper--end' : '') + "\n\t\t\t\t\t").trim(), key: message.id, ref: messageWrapperRef },
|
|
5058
5150
|
React__default['default'].createElement(MessageStatus$1, null),
|
|
5059
5151
|
message.user && (React__default['default'].createElement(Avatar$1, { image: message.user.image, name: message.user.name || message.user.id, onClick: onUserClick, onMouseOver: onUserHover, user: message.user })),
|
|
5060
5152
|
React__default['default'].createElement("div", { className: 'str-chat__message-inner', "data-testid": 'message-inner', onClick: message.status === 'failed' && message.errorStatusCode !== 403
|
|
@@ -5069,9 +5161,9 @@ var MessageSimpleWithContext = function (props) {
|
|
|
5069
5161
|
message.mml && (React__default['default'].createElement(MML, { actionHandler: handleAction, align: isMyMessage() ? 'right' : 'left', source: message.mml })),
|
|
5070
5162
|
!threadList && !!message.reply_count && (React__default['default'].createElement("div", { className: 'str-chat__message-simple-reply-button' },
|
|
5071
5163
|
React__default['default'].createElement(MessageRepliesCountButton$1, { onClick: handleOpenThread, reply_count: message.reply_count }))),
|
|
5072
|
-
React__default['default'].createElement("div", { className: "str-chat__message-data str-chat__message-simple-data" },
|
|
5164
|
+
(!groupedByUser || endOfGroup) && (React__default['default'].createElement("div", { className: "str-chat__message-data str-chat__message-simple-data" },
|
|
5073
5165
|
!isMyMessage() && message.user ? (React__default['default'].createElement("span", { className: 'str-chat__message-simple-name' }, message.user.name || message.user.id)) : null,
|
|
5074
|
-
React__default['default'].createElement(MessageTimestamp$1, { calendar: true, customClass: 'str-chat__message-simple-timestamp' }))))));
|
|
5166
|
+
React__default['default'].createElement(MessageTimestamp$1, { calendar: true, customClass: 'str-chat__message-simple-timestamp' })))))));
|
|
5075
5167
|
};
|
|
5076
5168
|
var MemoizedMessageSimple = React__default['default'].memo(MessageSimpleWithContext, areMessageUIPropsEqual);
|
|
5077
5169
|
/**
|
|
@@ -5115,8 +5207,8 @@ var UnMemoizedChannel = function (props) {
|
|
|
5115
5207
|
return React__default['default'].createElement(ChannelInner, __assign({}, props, { channel: channel, key: channel.cid }));
|
|
5116
5208
|
};
|
|
5117
5209
|
var ChannelInner = function (props) {
|
|
5118
|
-
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;
|
|
5119
|
-
var _e = useChatContext(), client = _e.client, mutes = _e.mutes, theme = _e.theme, useImageFlagEmojisOnWindows = _e.useImageFlagEmojisOnWindows;
|
|
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;
|
|
5211
|
+
var _e = useChatContext(), client = _e.client, customClasses = _e.customClasses, mutes = _e.mutes, theme = _e.theme, useImageFlagEmojisOnWindows = _e.useImageFlagEmojisOnWindows;
|
|
5120
5212
|
var t = useTranslationContext().t;
|
|
5121
5213
|
var _f = React.useState([]), notifications = _f[0], setNotifications = _f[1];
|
|
5122
5214
|
var _g = React.useState(), quotedMessage = _g[0], setQuotedMessage = _g[1];
|
|
@@ -5185,7 +5277,12 @@ var ChannelInner = function (props) {
|
|
|
5185
5277
|
}
|
|
5186
5278
|
else if (((_e = channel.getConfig()) === null || _e === void 0 ? void 0 : _e.read_events) && !channel.muteStatus().muted) {
|
|
5187
5279
|
var unread = channel.countUnread(lastRead.current);
|
|
5188
|
-
|
|
5280
|
+
if (activeUnreadHandler) {
|
|
5281
|
+
activeUnreadHandler(unread, originalTitle.current);
|
|
5282
|
+
}
|
|
5283
|
+
else {
|
|
5284
|
+
document.title = "(" + unread + ") " + originalTitle.current;
|
|
5285
|
+
}
|
|
5189
5286
|
}
|
|
5190
5287
|
}
|
|
5191
5288
|
}
|
|
@@ -5569,21 +5666,24 @@ var ChannelInner = function (props) {
|
|
|
5569
5666
|
var typingContextValue = {
|
|
5570
5667
|
typing: typing,
|
|
5571
5668
|
};
|
|
5669
|
+
var chatClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) || 'str-chat';
|
|
5670
|
+
var channelClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.channel) || 'str-chat-channel';
|
|
5671
|
+
var windowsEmojiClass = useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/)
|
|
5672
|
+
? 'str-chat--windows-flags'
|
|
5673
|
+
: '';
|
|
5572
5674
|
if (state.error) {
|
|
5573
|
-
return (React__default['default'].createElement("div", { className: "
|
|
5675
|
+
return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
5574
5676
|
React__default['default'].createElement(LoadingErrorIndicator$1, { error: state.error })));
|
|
5575
5677
|
}
|
|
5576
5678
|
if (state.loading) {
|
|
5577
|
-
return (React__default['default'].createElement("div", { className: "
|
|
5679
|
+
return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
5578
5680
|
React__default['default'].createElement(LoadingIndicator$1, { size: 25 })));
|
|
5579
5681
|
}
|
|
5580
5682
|
if (!(channel === null || channel === void 0 ? void 0 : channel.watch)) {
|
|
5581
|
-
return (React__default['default'].createElement("div", { className: "
|
|
5683
|
+
return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme },
|
|
5582
5684
|
React__default['default'].createElement("div", null, t('Channel Missing'))));
|
|
5583
5685
|
}
|
|
5584
|
-
return (React__default['default'].createElement("div", { className: "
|
|
5585
|
-
? ' str-chat--windows-flags'
|
|
5586
|
-
: '') },
|
|
5686
|
+
return (React__default['default'].createElement("div", { className: chatClass + " " + channelClass + " " + theme + " " + windowsEmojiClass },
|
|
5587
5687
|
React__default['default'].createElement(ChannelStateProvider, { value: channelStateContextValue },
|
|
5588
5688
|
React__default['default'].createElement(ChannelActionProvider, { value: channelActionContextValue },
|
|
5589
5689
|
React__default['default'].createElement(ComponentProvider, { value: componentContextValue },
|
|
@@ -5873,7 +5973,8 @@ var useMobileNavigation = function (channelListRef, navOpen, closeMobileNav) {
|
|
|
5873
5973
|
}, [channelListRef, closeMobileNav, navOpen]);
|
|
5874
5974
|
};
|
|
5875
5975
|
|
|
5876
|
-
var useNotificationAddedToChannelListener = function (setChannels, customHandler) {
|
|
5976
|
+
var useNotificationAddedToChannelListener = function (setChannels, customHandler, allowNewMessagesFromUnfilteredChannels) {
|
|
5977
|
+
if (allowNewMessagesFromUnfilteredChannels === void 0) { allowNewMessagesFromUnfilteredChannels = true; }
|
|
5877
5978
|
var client = useChatContext().client;
|
|
5878
5979
|
React.useEffect(function () {
|
|
5879
5980
|
var handleEvent = function (event) { return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -5886,7 +5987,7 @@ var useNotificationAddedToChannelListener = function (setChannels, customHandler
|
|
|
5886
5987
|
customHandler(setChannels, event);
|
|
5887
5988
|
return [3 /*break*/, 3];
|
|
5888
5989
|
case 1:
|
|
5889
|
-
if (!((_a = event.channel) === null || _a === void 0 ? void 0 : _a.type)) return [3 /*break*/, 3];
|
|
5990
|
+
if (!(allowNewMessagesFromUnfilteredChannels && ((_a = event.channel) === null || _a === void 0 ? void 0 : _a.type))) return [3 /*break*/, 3];
|
|
5890
5991
|
return [4 /*yield*/, getChannel(client, event.channel.type, event.channel.id)];
|
|
5891
5992
|
case 2:
|
|
5892
5993
|
channel_1 = _b.sent();
|
|
@@ -5903,7 +6004,8 @@ var useNotificationAddedToChannelListener = function (setChannels, customHandler
|
|
|
5903
6004
|
}, [customHandler]);
|
|
5904
6005
|
};
|
|
5905
6006
|
|
|
5906
|
-
var useNotificationMessageNewListener = function (setChannels, customHandler, setOffset) {
|
|
6007
|
+
var useNotificationMessageNewListener = function (setChannels, customHandler, setOffset, allowNewMessagesFromUnfilteredChannels) {
|
|
6008
|
+
if (allowNewMessagesFromUnfilteredChannels === void 0) { allowNewMessagesFromUnfilteredChannels = true; }
|
|
5907
6009
|
var client = useChatContext().client;
|
|
5908
6010
|
React.useEffect(function () {
|
|
5909
6011
|
var handleEvent = function (event) { return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -5916,11 +6018,10 @@ var useNotificationMessageNewListener = function (setChannels, customHandler, se
|
|
|
5916
6018
|
customHandler(setChannels, event);
|
|
5917
6019
|
return [3 /*break*/, 3];
|
|
5918
6020
|
case 1:
|
|
5919
|
-
if (!((_a = event.channel) === null || _a === void 0 ? void 0 : _a.type)) return [3 /*break*/, 3];
|
|
6021
|
+
if (!(allowNewMessagesFromUnfilteredChannels && ((_a = event.channel) === null || _a === void 0 ? void 0 : _a.type))) return [3 /*break*/, 3];
|
|
5920
6022
|
return [4 /*yield*/, getChannel(client, event.channel.type, event.channel.id)];
|
|
5921
6023
|
case 2:
|
|
5922
6024
|
channel_1 = _b.sent();
|
|
5923
|
-
// move channel to starting position
|
|
5924
6025
|
setChannels(function (channels) { return uniqBy__default['default'](__spreadArray([channel_1], channels), 'cid'); });
|
|
5925
6026
|
_b.label = 3;
|
|
5926
6027
|
case 3:
|
|
@@ -6150,6 +6251,16 @@ var ChannelPreview = function (props) {
|
|
|
6150
6251
|
var _e = React.useState(0), unread = _e[0], setUnread = _e[1];
|
|
6151
6252
|
var isActive = (activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.cid) === channel.cid;
|
|
6152
6253
|
var muted = useIsChannelMuted(channel).muted;
|
|
6254
|
+
React.useEffect(function () {
|
|
6255
|
+
var handleEvent = function (event) {
|
|
6256
|
+
if (!event.cid)
|
|
6257
|
+
return setUnread(0);
|
|
6258
|
+
if (channel.cid === event.cid)
|
|
6259
|
+
setUnread(0);
|
|
6260
|
+
};
|
|
6261
|
+
client.on('notification.mark_read', handleEvent);
|
|
6262
|
+
return function () { return client.off('notification.mark_read', handleEvent); };
|
|
6263
|
+
}, []);
|
|
6153
6264
|
React.useEffect(function () {
|
|
6154
6265
|
if (isActive || muted) {
|
|
6155
6266
|
setUnread(0);
|
|
@@ -6412,7 +6523,7 @@ var DEFAULT_OPTIONS = {};
|
|
|
6412
6523
|
var DEFAULT_SORT = {};
|
|
6413
6524
|
var UnMemoizedChannelList = function (props) {
|
|
6414
6525
|
var additionalChannelSearchProps = props.additionalChannelSearchProps, _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, allowNewMessagesFromUnfilteredChannels = props.allowNewMessagesFromUnfilteredChannels, channelRenderFilterFn = props.channelRenderFilterFn, _b = props.ChannelSearch, ChannelSearch$1 = _b === void 0 ? ChannelSearch : _b, customActiveChannel = props.customActiveChannel, _c = props.EmptyStateIndicator, EmptyStateIndicator$1 = _c === void 0 ? EmptyStateIndicator : _c, filters = props.filters, _d = props.LoadingErrorIndicator, LoadingErrorIndicator = _d === void 0 ? ChatDown : _d, _e = props.LoadingIndicator, LoadingIndicator = _e === void 0 ? LoadingChannels : _e, _f = props.List, List = _f === void 0 ? ChannelListMessenger : _f, lockChannelOrder = props.lockChannelOrder, onAddedToChannel = props.onAddedToChannel, onChannelDeleted = props.onChannelDeleted, onChannelHidden = props.onChannelHidden, onChannelTruncated = props.onChannelTruncated, onChannelUpdated = props.onChannelUpdated, onChannelVisible = props.onChannelVisible, onMessageNew = props.onMessageNew, onRemovedFromChannel = props.onRemovedFromChannel, options = props.options, _g = props.Paginator, Paginator = _g === void 0 ? LoadMorePaginator : _g, Preview = props.Preview, _h = props.sendChannelsToList, sendChannelsToList = _h === void 0 ? false : _h, _j = props.setActiveChannelOnMount, setActiveChannelOnMount = _j === void 0 ? true : _j, _k = props.showChannelSearch, showChannelSearch = _k === void 0 ? false : _k, _l = props.sort, sort = _l === void 0 ? DEFAULT_SORT : _l, _m = props.watchers, watchers = _m === void 0 ? {} : _m;
|
|
6415
|
-
var _o = useChatContext(), channel = _o.channel, client = _o.client, closeMobileNav = _o.closeMobileNav, _p = _o.navOpen, navOpen = _p === void 0 ? false : _p, setActiveChannel = _o.setActiveChannel, theme = _o.theme, useImageFlagEmojisOnWindows = _o.useImageFlagEmojisOnWindows;
|
|
6526
|
+
var _o = useChatContext(), channel = _o.channel, client = _o.client, closeMobileNav = _o.closeMobileNav, customClasses = _o.customClasses, _p = _o.navOpen, navOpen = _p === void 0 ? false : _p, setActiveChannel = _o.setActiveChannel, theme = _o.theme, useImageFlagEmojisOnWindows = _o.useImageFlagEmojisOnWindows;
|
|
6416
6527
|
var channelListRef = React.useRef(null);
|
|
6417
6528
|
var _q = React.useState(0), channelUpdateCount = _q[0], setChannelUpdateCount = _q[1];
|
|
6418
6529
|
/**
|
|
@@ -6463,8 +6574,8 @@ var UnMemoizedChannelList = function (props) {
|
|
|
6463
6574
|
var loadedChannels = channelRenderFilterFn ? channelRenderFilterFn(channels) : channels;
|
|
6464
6575
|
useMobileNavigation(channelListRef, navOpen, closeMobileNav);
|
|
6465
6576
|
useMessageNewListener(setChannels, lockChannelOrder, allowNewMessagesFromUnfilteredChannels);
|
|
6466
|
-
useNotificationMessageNewListener(setChannels, onMessageNew, setOffset);
|
|
6467
|
-
useNotificationAddedToChannelListener(setChannels, onAddedToChannel);
|
|
6577
|
+
useNotificationMessageNewListener(setChannels, onMessageNew, setOffset, allowNewMessagesFromUnfilteredChannels);
|
|
6578
|
+
useNotificationAddedToChannelListener(setChannels, onAddedToChannel, allowNewMessagesFromUnfilteredChannels);
|
|
6468
6579
|
useNotificationRemovedFromChannelListener(setChannels, onRemovedFromChannel);
|
|
6469
6580
|
useChannelDeletedListener(setChannels, onChannelDeleted);
|
|
6470
6581
|
useChannelHiddenListener(setChannels, onChannelHidden);
|
|
@@ -6502,10 +6613,14 @@ var UnMemoizedChannelList = function (props) {
|
|
|
6502
6613
|
return React__default['default'].createElement(ChannelPreview, __assign({}, previewProps));
|
|
6503
6614
|
};
|
|
6504
6615
|
var renderList = function () { return (React__default['default'].createElement(List, { error: status.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: status.loadingChannels, LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator }, !loadedChannels || loadedChannels.length === 0 ? (React__default['default'].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default['default'].createElement(Paginator, { hasNextPage: hasNextPage, loadNextPage: loadNextPage, refreshing: status.refreshing }, loadedChannels.map(renderChannel))))); };
|
|
6616
|
+
var chatClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) || 'str-chat';
|
|
6617
|
+
var channelListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.channelList) || 'str-chat-channel-list';
|
|
6618
|
+
var navigationClass = navOpen ? 'str-chat-channel-list--open' : '';
|
|
6619
|
+
var windowsEmojiClass = useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/)
|
|
6620
|
+
? 'str-chat--windows-flags'
|
|
6621
|
+
: '';
|
|
6505
6622
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
6506
|
-
React__default['default'].createElement("div", { className:
|
|
6507
|
-
? 'str-chat--windows-flags'
|
|
6508
|
-
: ''), ref: channelListRef },
|
|
6623
|
+
React__default['default'].createElement("div", { className: chatClass + " " + channelListClass + " " + theme + " " + navigationClass + " " + windowsEmojiClass, ref: channelListRef },
|
|
6509
6624
|
showChannelSearch && React__default['default'].createElement(ChannelSearch$1, __assign({}, additionalChannelSearchProps)),
|
|
6510
6625
|
renderList())));
|
|
6511
6626
|
};
|
|
@@ -7137,7 +7252,7 @@ var Streami18n = /** @class */ (function () {
|
|
|
7137
7252
|
return Streami18n;
|
|
7138
7253
|
}());
|
|
7139
7254
|
|
|
7140
|
-
var version = '6.
|
|
7255
|
+
var version = '6.8.0';
|
|
7141
7256
|
|
|
7142
7257
|
var useChat = function (_a) {
|
|
7143
7258
|
var _b;
|
|
@@ -7255,7 +7370,7 @@ var useCustomStyles = function (customStyles) {
|
|
|
7255
7370
|
* as it provides the ChatContext.
|
|
7256
7371
|
*/
|
|
7257
7372
|
var Chat = function (props) {
|
|
7258
|
-
var children = props.children, client = props.client, 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;
|
|
7373
|
+
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;
|
|
7259
7374
|
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;
|
|
7260
7375
|
useCustomStyles(darkMode ? darkModeTheme : customStyles);
|
|
7261
7376
|
if (!translators.t)
|
|
@@ -7264,6 +7379,7 @@ var Chat = function (props) {
|
|
|
7264
7379
|
channel: channel,
|
|
7265
7380
|
client: client,
|
|
7266
7381
|
closeMobileNav: closeMobileNav,
|
|
7382
|
+
customClasses: customClasses,
|
|
7267
7383
|
mutes: mutes,
|
|
7268
7384
|
navOpen: navOpen,
|
|
7269
7385
|
openMobileNav: openMobileNav,
|
|
@@ -7576,7 +7692,7 @@ var Message = function (props) {
|
|
|
7576
7692
|
notify: addNotification,
|
|
7577
7693
|
}), canPin = _c.canPin, handlePin = _c.handlePin;
|
|
7578
7694
|
var _d = useReactionClick(message, reactionSelectorRef, undefined, closeReactionSelectorOnClick), isReactionEnabled = _d.isReactionEnabled, onReactionListClick = _d.onReactionListClick, showDetailedReactions = _d.showDetailedReactions;
|
|
7579
|
-
return (React__default['default'].createElement(MemoizedMessage, { additionalMessageInputProps: props.additionalMessageInputProps, canPin: canPin, customMessageActions: props.customMessageActions, disableQuotedMessages: props.disableQuotedMessages, formatDate: props.formatDate, groupedByUser: props.groupedByUser, groupStyles: props.groupStyles, handleAction: handleAction, handleDelete: handleDelete, handleFlag: handleFlag, handleMute: handleMute, handleOpenThread: handleOpenThread, handlePin: handlePin, handleReaction: handleReaction, handleRetry: handleRetry, initialMessage: props.initialMessage, isReactionEnabled: isReactionEnabled, lastReceivedId: props.lastReceivedId, message: message, Message: props.Message, messageActions: props.messageActions, messageListRect: props.messageListRect, mutes: mutes, onMentionsClickMessage: onMentionsClick, onMentionsHoverMessage: onMentionsHover, onReactionListClick: onReactionListClick, onUserClick: props.onUserClick, onUserHover: props.onUserHover, pinPermissions: props.pinPermissions, reactionSelectorRef: reactionSelectorRef, readBy: props.readBy, renderText: props.renderText, showDetailedReactions: showDetailedReactions, threadList: props.threadList, unsafeHTML: props.unsafeHTML, userRoles: userRoles }));
|
|
7695
|
+
return (React__default['default'].createElement(MemoizedMessage, { additionalMessageInputProps: props.additionalMessageInputProps, canPin: canPin, customMessageActions: props.customMessageActions, disableQuotedMessages: props.disableQuotedMessages, endOfGroup: props.endOfGroup, firstOfGroup: props.firstOfGroup, formatDate: props.formatDate, groupedByUser: props.groupedByUser, groupStyles: props.groupStyles, handleAction: handleAction, handleDelete: handleDelete, handleFlag: handleFlag, handleMute: handleMute, handleOpenThread: handleOpenThread, handlePin: handlePin, handleReaction: handleReaction, handleRetry: handleRetry, initialMessage: props.initialMessage, isReactionEnabled: isReactionEnabled, lastReceivedId: props.lastReceivedId, message: message, Message: props.Message, messageActions: props.messageActions, messageListRect: props.messageListRect, mutes: mutes, onMentionsClickMessage: onMentionsClick, onMentionsHoverMessage: onMentionsHover, onReactionListClick: onReactionListClick, onUserClick: props.onUserClick, onUserHover: props.onUserHover, pinPermissions: props.pinPermissions, reactionSelectorRef: reactionSelectorRef, readBy: props.readBy, renderText: props.renderText, showDetailedReactions: showDetailedReactions, threadList: props.threadList, unsafeHTML: props.unsafeHTML, userRoles: userRoles }));
|
|
7580
7696
|
};
|
|
7581
7697
|
|
|
7582
7698
|
var MessageCommerceWithContext = function (props) {
|
|
@@ -8111,8 +8227,8 @@ var useLastReadData = function (props) {
|
|
|
8111
8227
|
|
|
8112
8228
|
var useMessageListElements = function (props) {
|
|
8113
8229
|
var enrichedMessages = props.enrichedMessages, internalMessageProps = props.internalMessageProps, messageGroupStyles = props.messageGroupStyles, onMessageLoadCaptured = props.onMessageLoadCaptured, read = props.read, returnAllReadData = props.returnAllReadData, threadList = props.threadList;
|
|
8114
|
-
var
|
|
8115
|
-
var
|
|
8230
|
+
var _a = useChatContext(), client = _a.client, customClasses = _a.customClasses;
|
|
8231
|
+
var _b = useComponentContext(), _c = _b.DateSeparator, DateSeparator$1 = _c === void 0 ? DateSeparator : _c, HeaderComponent = _b.HeaderComponent, _d = _b.MessageSystem, MessageSystem = _d === void 0 ? EventComponent : _d;
|
|
8116
8232
|
// get the readData, but only for messages submitted by the user themselves
|
|
8117
8233
|
var readData = useLastReadData({
|
|
8118
8234
|
messages: enrichedMessages,
|
|
@@ -8139,7 +8255,8 @@ var useMessageListElements = function (props) {
|
|
|
8139
8255
|
React__default['default'].createElement(MessageSystem, { message: message })));
|
|
8140
8256
|
}
|
|
8141
8257
|
var groupStyles = messageGroupStyles[message.id] || '';
|
|
8142
|
-
|
|
8258
|
+
var messageClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.message) || "str-chat__li str-chat__li--" + groupStyles;
|
|
8259
|
+
return (React__default['default'].createElement("li", { className: messageClass, key: message.id || message.created_at, onLoadCapture: onMessageLoadCaptured },
|
|
8143
8260
|
React__default['default'].createElement(Message, __assign({ groupStyles: [groupStyles], lastReceivedId: lastReceivedId, message: message, readBy: readData[message.id] || [], threadList: threadList }, internalMessageProps))));
|
|
8144
8261
|
});
|
|
8145
8262
|
}, [
|
|
@@ -8352,6 +8469,7 @@ var useInternalInfiniteScrollProps = function (props) {
|
|
|
8352
8469
|
};
|
|
8353
8470
|
var MessageListWithContext = function (props) {
|
|
8354
8471
|
var channel = props.channel, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? false : _a, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, _d = props.messageActions, messageActions = _d === void 0 ? Object.keys(MESSAGE_ACTIONS) : _d, _e = props.messages, messages = _e === void 0 ? [] : _e, notifications = props.notifications, _f = props.noGroupByUser, noGroupByUser = _f === void 0 ? false : _f, _g = props.pinPermissions, pinPermissions = _g === void 0 ? defaultPinPermissions : _g, _h = props.returnAllReadData, returnAllReadData = _h === void 0 ? false : _h, _j = props.threadList, threadList = _j === void 0 ? false : _j, _k = props.unsafeHTML, unsafeHTML = _k === void 0 ? false : _k, headerPosition = props.headerPosition, read = props.read;
|
|
8472
|
+
var customClasses = useChatContext().customClasses;
|
|
8355
8473
|
var _l = useComponentContext(), _m = _l.EmptyStateIndicator, EmptyStateIndicator$1 = _m === void 0 ? EmptyStateIndicator : _m, _o = _l.MessageListNotifications, MessageListNotifications = _o === void 0 ? DefaultMessageListNotifications : _o, _p = _l.MessageNotification, MessageNotification$1 = _p === void 0 ? MessageNotification : _p, _q = _l.TypingIndicator, TypingIndicator$1 = _q === void 0 ? TypingIndicator : _q;
|
|
8356
8474
|
var _r = useScrollLocationLogic({
|
|
8357
8475
|
messages: messages,
|
|
@@ -8402,8 +8520,10 @@ var MessageListWithContext = function (props) {
|
|
|
8402
8520
|
threadList: threadList,
|
|
8403
8521
|
});
|
|
8404
8522
|
var finalInternalInfiniteScrollProps = useInternalInfiniteScrollProps(props);
|
|
8523
|
+
var messageListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.messageList) || 'str-chat__list';
|
|
8524
|
+
var threadListClass = threadList ? (customClasses === null || customClasses === void 0 ? void 0 : customClasses.threadList) || 'str-chat__list--thread' : '';
|
|
8405
8525
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
8406
|
-
React__default['default'].createElement("div", { className: "
|
|
8526
|
+
React__default['default'].createElement("div", { className: messageListClass + " " + threadListClass, onScroll: onScroll, ref: listRef }, !elements.length ? (React__default['default'].createElement(EmptyStateIndicator$1, { listType: 'message' })) : (React__default['default'].createElement(InfiniteScroll, __assign({ className: 'str-chat__reverse-infinite-scroll', "data-testid": 'reverse-infinite-scroll', isReverse: true, useWindow: false }, finalInternalInfiniteScrollProps),
|
|
8407
8527
|
React__default['default'].createElement("ul", { className: 'str-chat__ul' }, elements),
|
|
8408
8528
|
React__default['default'].createElement(TypingIndicator$1, { threadList: threadList }),
|
|
8409
8529
|
React__default['default'].createElement("div", { key: 'bottom' })))),
|
|
@@ -8536,12 +8656,13 @@ var PREPEND_OFFSET = Math.pow(10, 7);
|
|
|
8536
8656
|
var VirtualizedMessageListWithContext = function (props) {
|
|
8537
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,
|
|
8538
8658
|
// TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
|
|
8539
|
-
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
|
|
8659
|
+
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;
|
|
8540
8660
|
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;
|
|
8661
|
+
var _u = useChatContext(), client = _u.client, customClasses = _u.customClasses;
|
|
8541
8662
|
var t = useTranslationContext().t;
|
|
8542
8663
|
var lastRead = React.useMemo(function () { var _a; return (_a = channel.lastRead) === null || _a === void 0 ? void 0 : _a.call(channel); }, [channel]);
|
|
8543
8664
|
var MessageUIComponent = propMessage || contextMessage;
|
|
8544
|
-
var
|
|
8665
|
+
var _v = useGiphyPreview(separateGiphyPreview), giphyPreviewMessage = _v.giphyPreviewMessage, setGiphyPreviewMessage = _v.setGiphyPreviewMessage;
|
|
8545
8666
|
var processedMessages = React.useMemo(function () {
|
|
8546
8667
|
if (typeof messages === 'undefined') {
|
|
8547
8668
|
return [];
|
|
@@ -8560,7 +8681,7 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
8560
8681
|
messages: messages,
|
|
8561
8682
|
separateGiphyPreview: separateGiphyPreview,
|
|
8562
8683
|
setGiphyPreviewMessage: setGiphyPreviewMessage,
|
|
8563
|
-
userId:
|
|
8684
|
+
userId: client.userID || '',
|
|
8564
8685
|
});
|
|
8565
8686
|
}, [
|
|
8566
8687
|
disableDateSeparator,
|
|
@@ -8569,10 +8690,10 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
8569
8690
|
lastRead,
|
|
8570
8691
|
messages,
|
|
8571
8692
|
messages === null || messages === void 0 ? void 0 : messages.length,
|
|
8572
|
-
|
|
8693
|
+
client.userID,
|
|
8573
8694
|
]);
|
|
8574
8695
|
var virtuoso = React.useRef(null);
|
|
8575
|
-
var
|
|
8696
|
+
var _w = useNewMessageNotification(processedMessages, client.userID), atBottom = _w.atBottom, newMessagesNotification = _w.newMessagesNotification, setNewMessagesNotification = _w.setNewMessagesNotification;
|
|
8576
8697
|
var scrollToBottom = React.useCallback(function () {
|
|
8577
8698
|
if (virtuoso.current) {
|
|
8578
8699
|
virtuoso.current.scrollToIndex(processedMessages.length - 1);
|
|
@@ -8591,7 +8712,7 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
8591
8712
|
return function () { return window.removeEventListener('focus', scrollToBottomIfConfigured); };
|
|
8592
8713
|
}, [scrollToBottomIfConfigured]);
|
|
8593
8714
|
var numItemsPrepended = usePrependedMessagesCount(processedMessages);
|
|
8594
|
-
var shouldForceScrollToBottom = useShouldForceScrollToBottom(processedMessages,
|
|
8715
|
+
var shouldForceScrollToBottom = useShouldForceScrollToBottom(processedMessages, client.userID);
|
|
8595
8716
|
var followOutput = function (isAtBottom) {
|
|
8596
8717
|
if (shouldForceScrollToBottom()) {
|
|
8597
8718
|
return isAtBottom ? stickToBottomScrollBehavior : 'auto';
|
|
@@ -8600,7 +8721,7 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
8600
8721
|
return isAtBottom ? stickToBottomScrollBehavior : false;
|
|
8601
8722
|
};
|
|
8602
8723
|
var messageRenderer = React.useCallback(function (messageList, virtuosoIndex) {
|
|
8603
|
-
var _a, _b;
|
|
8724
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
8604
8725
|
var streamMessageIndex = virtuosoIndex + numItemsPrepended - PREPEND_OFFSET;
|
|
8605
8726
|
// use custom renderer supplied by client if present and skip the rest
|
|
8606
8727
|
if (customMessageRenderer) {
|
|
@@ -8618,7 +8739,13 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
8618
8739
|
var groupedByUser = shouldGroupByUser &&
|
|
8619
8740
|
streamMessageIndex > 0 &&
|
|
8620
8741
|
((_a = message.user) === null || _a === void 0 ? void 0 : _a.id) === ((_b = messageList[streamMessageIndex - 1].user) === null || _b === void 0 ? void 0 : _b.id);
|
|
8621
|
-
|
|
8742
|
+
var firstOfGroup = shouldGroupByUser &&
|
|
8743
|
+
streamMessageIndex > 0 &&
|
|
8744
|
+
((_c = message.user) === null || _c === void 0 ? void 0 : _c.id) !== ((_e = (_d = messageList[streamMessageIndex - 1]) === null || _d === void 0 ? void 0 : _d.user) === null || _e === void 0 ? void 0 : _e.id);
|
|
8745
|
+
var endOfGroup = shouldGroupByUser &&
|
|
8746
|
+
streamMessageIndex > 0 &&
|
|
8747
|
+
((_f = message.user) === null || _f === void 0 ? void 0 : _f.id) !== ((_h = (_g = messageList[streamMessageIndex + 1]) === null || _g === void 0 ? void 0 : _g.user) === null || _h === void 0 ? void 0 : _h.id);
|
|
8748
|
+
return (React__default['default'].createElement(Message, { closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: props.customMessageActions, endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, groupedByUser: groupedByUser, message: message, Message: MessageUIComponent, messageActions: props.messageActions }));
|
|
8622
8749
|
}, [customMessageRenderer, shouldGroupByUser, numItemsPrepended]);
|
|
8623
8750
|
var virtuosoComponents = React.useMemo(function () {
|
|
8624
8751
|
var EmptyPlaceholder = function () { return (React__default['default'].createElement(React__default['default'].Fragment, null, EmptyStateIndicator$1 && React__default['default'].createElement(EmptyStateIndicator$1, { listType: 'message' }))); };
|
|
@@ -8626,8 +8753,9 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
8626
8753
|
return loadingMore ? (React__default['default'].createElement("div", { className: 'str-chat__virtual-list__loading' },
|
|
8627
8754
|
React__default['default'].createElement(LoadingIndicator$1, { size: 20 }))) : (React__default['default'].createElement(React__default['default'].Fragment, null));
|
|
8628
8755
|
};
|
|
8756
|
+
var virtualMessageClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualMessage) || 'str-chat__virtual-list-message-wrapper';
|
|
8629
8757
|
// using 'display: inline-block' traps CSS margins of the item elements, preventing incorrect item measurements
|
|
8630
|
-
var Item = function (props) { return
|
|
8758
|
+
var Item = function (props) { return React__default['default'].createElement("div", __assign({}, props, { className: virtualMessageClass })); };
|
|
8631
8759
|
var Footer = function () {
|
|
8632
8760
|
return TypingIndicator ? React__default['default'].createElement(TypingIndicator, { avatarSize: 24 }) : React__default['default'].createElement(React__default['default'].Fragment, null);
|
|
8633
8761
|
};
|
|
@@ -8651,8 +8779,9 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
8651
8779
|
};
|
|
8652
8780
|
if (!processedMessages)
|
|
8653
8781
|
return null;
|
|
8782
|
+
var virtualizedMessageListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualizedMessageList) || 'str-chat__virtual-list';
|
|
8654
8783
|
return (React__default['default'].createElement(React__default['default'].Fragment, null,
|
|
8655
|
-
React__default['default'].createElement("div", { className:
|
|
8784
|
+
React__default['default'].createElement("div", { className: virtualizedMessageListClass },
|
|
8656
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 } : {}))),
|
|
8657
8786
|
React__default['default'].createElement("div", { className: 'str-chat__list-notifications' },
|
|
8658
8787
|
React__default['default'].createElement(MessageNotification$1, { onClick: scrollToBottom, showNotification: newMessagesNotification }, t('New Messages!')))),
|
|
@@ -8667,9 +8796,8 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
8667
8796
|
function VirtualizedMessageList(props) {
|
|
8668
8797
|
var loadMore = useChannelActionContext().loadMore;
|
|
8669
8798
|
var _a = useChannelStateContext(), channel = _a.channel, hasMore = _a.hasMore, loadingMore = _a.loadingMore, contextMessages = _a.messages;
|
|
8670
|
-
var client = useChatContext().client;
|
|
8671
8799
|
var messages = props.messages || contextMessages;
|
|
8672
|
-
return (React__default['default'].createElement(VirtualizedMessageListWithContext, __assign({ channel: channel, hasMore: !!hasMore, loadingMore: !!loadingMore, loadMore: loadMore, messages: messages
|
|
8800
|
+
return (React__default['default'].createElement(VirtualizedMessageListWithContext, __assign({ channel: channel, hasMore: !!hasMore, loadingMore: !!loadingMore, loadMore: loadMore, messages: messages }, props)));
|
|
8673
8801
|
}
|
|
8674
8802
|
|
|
8675
8803
|
/**
|
|
@@ -8711,6 +8839,7 @@ var ThreadInner = function (props) {
|
|
|
8711
8839
|
var additionalMessageInputProps = props.additionalMessageInputProps, additionalMessageListProps = props.additionalMessageListProps, additionalParentMessageProps = props.additionalParentMessageProps, additionalVirtualizedMessageListProps = props.additionalVirtualizedMessageListProps, _a = props.autoFocus, autoFocus = _a === void 0 ? true : _a, _b = props.fullWidth, fullWidth = _b === void 0 ? false : _b, PropInput = props.Input, PropMessage = props.Message, virtualized = props.virtualized;
|
|
8712
8840
|
var _c = useChannelStateContext(), thread = _c.thread, threadHasMore = _c.threadHasMore, threadLoadingMore = _c.threadLoadingMore, threadMessages = _c.threadMessages;
|
|
8713
8841
|
var _d = useChannelActionContext(), closeThread = _d.closeThread, loadMoreThread = _d.loadMoreThread;
|
|
8842
|
+
var customClasses = useChatContext().customClasses;
|
|
8714
8843
|
var _e = useComponentContext(), ContextInput = _e.ThreadInput, ContextMessage = _e.Message, _f = _e.ThreadHeader, ThreadHeader = _f === void 0 ? DefaultThreadHeader : _f, _g = _e.ThreadStart, ThreadStart = _g === void 0 ? DefaultThreadStart : _g, _h = _e.VirtualMessage, VirtualMessage = _h === void 0 ? FixedHeightMessage : _h;
|
|
8715
8844
|
var messageList = React.useRef(null);
|
|
8716
8845
|
var ThreadInput = PropInput || (additionalMessageInputProps === null || additionalMessageInputProps === void 0 ? void 0 : additionalMessageInputProps.Input) || ContextInput || MessageInputSmall;
|
|
@@ -8733,7 +8862,8 @@ var ThreadInner = function (props) {
|
|
|
8733
8862
|
}, [threadMessages === null || threadMessages === void 0 ? void 0 : threadMessages.length]);
|
|
8734
8863
|
if (!thread)
|
|
8735
8864
|
return null;
|
|
8736
|
-
|
|
8865
|
+
var threadClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.thread) || 'str-chat__thread';
|
|
8866
|
+
return (React__default['default'].createElement("div", { className: threadClass + " " + (fullWidth ? 'str-chat__thread--full' : '') },
|
|
8737
8867
|
React__default['default'].createElement(ThreadHeader, { closeThread: closeThread, thread: thread }),
|
|
8738
8868
|
React__default['default'].createElement("div", { className: 'str-chat__thread-list', ref: messageList },
|
|
8739
8869
|
React__default['default'].createElement(Message, __assign({ initialMessage: true, message: thread, Message: ThreadMessage || FallbackMessage, threadList: true }, additionalParentMessageProps)),
|
|
@@ -8755,6 +8885,7 @@ var UnMemoizedWindow = function (props) {
|
|
|
8755
8885
|
*/
|
|
8756
8886
|
var Window = React__default['default'].memo(UnMemoizedWindow);
|
|
8757
8887
|
|
|
8888
|
+
exports.ActionsIcon = ActionsIcon;
|
|
8758
8889
|
exports.Attachment = Attachment;
|
|
8759
8890
|
exports.AttachmentActions = AttachmentActions;
|
|
8760
8891
|
exports.Audio = Audio;
|