stream-chat-react 10.1.2 → 10.3.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 +253 -72
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +5 -5
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/Attachment/AttachmentContainer.d.ts.map +1 -1
- package/dist/components/Attachment/AttachmentContainer.js +67 -15
- package/dist/components/Attachment/attachment-sizing.d.ts +9 -0
- package/dist/components/Attachment/attachment-sizing.d.ts.map +1 -0
- package/dist/components/Attachment/attachment-sizing.js +72 -0
- package/dist/components/Channel/Channel.d.ts +7 -1
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +2 -1
- package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -1
- package/dist/components/Channel/hooks/useCreateChannelStateContext.js +5 -1
- package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
- package/dist/components/ChannelList/ChannelList.js +2 -2
- package/dist/components/ChannelList/ChannelListMessenger.js +2 -2
- package/dist/components/Gallery/Gallery.d.ts +7 -2
- package/dist/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/components/Gallery/Gallery.js +16 -5
- package/dist/components/Gallery/Image.d.ts +4 -0
- package/dist/components/Gallery/Image.d.ts.map +1 -1
- package/dist/components/Gallery/Image.js +3 -3
- package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts +19 -4
- package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts.map +1 -1
- package/dist/components/InfiniteScrollPaginator/InfiniteScroll.js +28 -6
- package/dist/components/LoadMore/LoadMoreButton.d.ts +7 -2
- package/dist/components/LoadMore/LoadMoreButton.d.ts.map +1 -1
- package/dist/components/LoadMore/LoadMoreButton.js +9 -4
- package/dist/components/LoadMore/LoadMorePaginator.d.ts +2 -7
- package/dist/components/LoadMore/LoadMorePaginator.d.ts.map +1 -1
- package/dist/components/LoadMore/LoadMorePaginator.js +8 -3
- package/dist/components/Message/hooks/useUserRole.d.ts +1 -1
- package/dist/components/Message/hooks/useUserRole.d.ts.map +1 -1
- package/dist/components/Message/hooks/useUserRole.js +5 -5
- package/dist/components/MessageInput/hooks/useFileUploads.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useFileUploads.js +1 -0
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +2 -0
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useMessageInputState.js +2 -1
- package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useSubmitHandler.js +1 -0
- package/dist/components/MessageList/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList/MessageList.js +2 -3
- package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.js +0 -1
- package/dist/components/MessageList/hooks/useMessageListElements.d.ts +0 -1
- package/dist/components/MessageList/hooks/useMessageListElements.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useMessageListElements.js +2 -3
- package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts +0 -1
- package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/useScrollLocationLogic.js +0 -10
- package/dist/components/Reactions/SimpleReactionsList.d.ts.map +1 -1
- package/dist/components/Reactions/SimpleReactionsList.js +26 -6
- package/dist/components/Thread/Thread.d.ts.map +1 -1
- package/dist/components/Thread/Thread.js +7 -2
- package/dist/context/ChannelStateContext.d.ts +5 -2
- package/dist/context/ChannelStateContext.d.ts.map +1 -1
- package/dist/css/index.css +1 -1
- package/dist/css/index.css.map +1 -1
- package/dist/css/v2/index.css +1 -1
- package/dist/css/v2/index.css.map +1 -1
- package/dist/css/v2/index.layout.css +1 -1
- package/dist/css/v2/index.layout.css.map +1 -1
- package/dist/index.cjs.js +252 -71
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/scss/Attachment.scss +44 -17
- package/dist/scss/Audio.scss +1 -0
- package/dist/scss/ChannelList.scss +14 -0
- package/dist/scss/ChannelSearch.scss +8 -8
- package/dist/scss/Message.scss +28 -11
- package/dist/scss/v2/AttachmentList/AttachmentList-layout.scss +33 -19
- package/dist/scss/v2/ChannelList/ChannelList-layout.scss +14 -0
- package/dist/scss/v2/ChannelSearch/ChannelSearch-layout.scss +68 -51
- package/dist/scss/v2/ChannelSearch/ChannelSearch-theme.scss +48 -0
- package/dist/scss/v2/Message/Message-layout.scss +12 -0
- package/dist/scss/v2/Message/Message-theme.scss +20 -0
- package/dist/scss/v2/MessageList/MessageList-layout.scss +1 -4
- package/dist/scss/v2/MessageList/VirtualizedMessageList-layout.scss +21 -0
- package/dist/scss/v2/MessageList/VirtualizedMessageList-theme.scss +9 -0
- package/dist/scss/v2/Notification/NotificationList-theme.scss +2 -2
- package/dist/scss/v2/Tooltip/Tooltip-layout.scss +1 -1
- package/dist/scss/v2/_utils.scss +8 -0
- package/dist/stories/attachment-sizing.stories.d.ts +2 -0
- package/dist/stories/attachment-sizing.stories.d.ts.map +1 -0
- package/dist/stories/attachment-sizing.stories.js +179 -0
- package/dist/types/types.d.ts +19 -2
- package/dist/types/types.d.ts.map +1 -1
- package/dist/utils/deprecationWarning.d.ts +2 -0
- package/dist/utils/deprecationWarning.d.ts.map +1 -0
- package/dist/utils/deprecationWarning.js +12 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
package/dist/index.cjs.js
CHANGED
|
@@ -1345,7 +1345,7 @@ var ModalGallery = function (props) {
|
|
|
1345
1345
|
};
|
|
1346
1346
|
|
|
1347
1347
|
var UnMemoizedGallery = function (props) {
|
|
1348
|
-
var images = props.images;
|
|
1348
|
+
var images = props.images, innerRefs = props.innerRefs;
|
|
1349
1349
|
var _a = React.useState(0), index = _a[0], setIndex = _a[1];
|
|
1350
1350
|
var _b = React.useState(false), modalOpen = _b[0], setModalOpen = _b[1];
|
|
1351
1351
|
var _c = useComponentContext('Gallery').ModalGallery, ModalGallery$1 = _c === void 0 ? ModalGallery : _c;
|
|
@@ -1362,13 +1362,13 @@ var UnMemoizedGallery = function (props) {
|
|
|
1362
1362
|
}
|
|
1363
1363
|
};
|
|
1364
1364
|
var renderImages = images.slice(0, countImagesDisplayedInPreview).map(function (image, i) {
|
|
1365
|
-
return i === lastImageIndexInPreview && images.length > countImagesDisplayedInPreview ? (React__default["default"].createElement("button", { className: 'str-chat__gallery-placeholder', key: "gallery-image-".concat(i), onClick: function () { return toggleModal(i); }, style: {
|
|
1366
|
-
|
|
1367
|
-
|
|
1365
|
+
return i === lastImageIndexInPreview && images.length > countImagesDisplayedInPreview ? (React__default["default"].createElement("button", __assign({ className: 'str-chat__gallery-placeholder', "data-testid": 'gallery-image-last', key: "gallery-image-".concat(i), onClick: function () { return toggleModal(i); }, style: __assign({ backgroundImage: "url(".concat(images[lastImageIndexInPreview].previewUrl ||
|
|
1366
|
+
images[lastImageIndexInPreview].image_url ||
|
|
1367
|
+
images[lastImageIndexInPreview].thumb_url, ")") }, image.style) }, ((innerRefs === null || innerRefs === void 0 ? void 0 : innerRefs.current) && { ref: function (r) { return (innerRefs.current[i] = r); } })),
|
|
1368
1368
|
React__default["default"].createElement("p", null, t('{{ imageCount }} more', {
|
|
1369
1369
|
imageCount: images.length - countImagesDisplayedInPreview,
|
|
1370
1370
|
})))) : (React__default["default"].createElement("button", { className: 'str-chat__gallery-image', "data-testid": 'gallery-image', key: "gallery-image-".concat(i), onClick: function () { return toggleModal(i); } },
|
|
1371
|
-
React__default["default"].createElement("img", { alt: 'User uploaded content', src: image.image_url || image.thumb_url })));
|
|
1371
|
+
React__default["default"].createElement("img", __assign({ alt: 'User uploaded content', src: image.previewUrl || image.image_url || image.thumb_url, style: image.style }, ((innerRefs === null || innerRefs === void 0 ? void 0 : innerRefs.current) && { ref: function (r) { return (innerRefs.current[i] = r); } })))));
|
|
1372
1372
|
});
|
|
1373
1373
|
var className = clsx('str-chat__gallery', {
|
|
1374
1374
|
'str-chat__gallery--square': images.length > lastImageIndexInPreview,
|
|
@@ -1388,13 +1388,13 @@ var Gallery = React__default["default"].memo(UnMemoizedGallery);
|
|
|
1388
1388
|
* A simple component that displays an image.
|
|
1389
1389
|
*/
|
|
1390
1390
|
var ImageComponent = function (props) {
|
|
1391
|
-
var _a = props.dimensions, dimensions = _a === void 0 ? {} : _a, fallback = props.fallback, image_url = props.image_url, thumb_url = props.thumb_url;
|
|
1391
|
+
var _a = props.dimensions, dimensions = _a === void 0 ? {} : _a, fallback = props.fallback, image_url = props.image_url, thumb_url = props.thumb_url, innerRef = props.innerRef, previewUrl = props.previewUrl, style = props.style;
|
|
1392
1392
|
var _b = React.useState(false), modalIsOpen = _b[0], setModalIsOpen = _b[1];
|
|
1393
1393
|
var _c = useComponentContext('ImageComponent').ModalGallery, ModalGallery$1 = _c === void 0 ? ModalGallery : _c;
|
|
1394
|
-
var imageSrc = sanitizeUrl.sanitizeUrl(image_url || thumb_url);
|
|
1394
|
+
var imageSrc = sanitizeUrl.sanitizeUrl(previewUrl || image_url || thumb_url);
|
|
1395
1395
|
var toggleModal = function () { return setModalIsOpen(function (modalIsOpen) { return !modalIsOpen; }); };
|
|
1396
1396
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
1397
|
-
React__default["default"].createElement("img", __assign({ alt: fallback, className: 'str-chat__message-attachment--img', "data-testid": 'image-test', onClick: toggleModal, src: imageSrc, tabIndex: 0 }, dimensions)),
|
|
1397
|
+
React__default["default"].createElement("img", __assign({ alt: fallback, className: 'str-chat__message-attachment--img', "data-testid": 'image-test', onClick: toggleModal, src: imageSrc, style: style, tabIndex: 0 }, dimensions, (innerRef && { ref: innerRef }))),
|
|
1398
1398
|
React__default["default"].createElement(Modal, { onClose: toggleModal, open: modalIsOpen },
|
|
1399
1399
|
React__default["default"].createElement(ModalGallery$1, { images: [props], index: 0 }))));
|
|
1400
1400
|
};
|
|
@@ -1713,7 +1713,7 @@ var AttachmentWithinContainer = function (_a) {
|
|
|
1713
1713
|
? 'actions'
|
|
1714
1714
|
: '';
|
|
1715
1715
|
}
|
|
1716
|
-
var classNames = clsx('str-chat__message-attachment', (_b = {},
|
|
1716
|
+
var classNames = clsx('str-chat__message-attachment str-chat__message-attachment-dynamic-size', (_b = {},
|
|
1717
1717
|
_b["str-chat__message-attachment--".concat(componentType)] = componentType,
|
|
1718
1718
|
_b["str-chat__message-attachment--".concat(attachment === null || attachment === void 0 ? void 0 : attachment.type)] = attachment === null || attachment === void 0 ? void 0 : attachment.type,
|
|
1719
1719
|
_b["str-chat__message-attachment--".concat(componentType, "--").concat(extra)] = componentType && extra,
|
|
@@ -1729,22 +1729,68 @@ var AttachmentActionsContainer = function (_a) {
|
|
|
1729
1729
|
return null;
|
|
1730
1730
|
return (React__default["default"].createElement(AttachmentActions$1, __assign({}, attachment, { actionHandler: actionHandler, actions: attachment.actions, id: attachment.id || '', text: attachment.text || '' })));
|
|
1731
1731
|
};
|
|
1732
|
+
function getCssDimensionsVariables(url) {
|
|
1733
|
+
var _a;
|
|
1734
|
+
var cssVars = (_a = {},
|
|
1735
|
+
_a['--original-height'] = 1000000,
|
|
1736
|
+
_a['--original-width'] = 1000000,
|
|
1737
|
+
_a);
|
|
1738
|
+
if (url) {
|
|
1739
|
+
var urlParams = new URL(url).searchParams;
|
|
1740
|
+
var oh = Number(urlParams.get('oh'));
|
|
1741
|
+
var ow = Number(urlParams.get('ow'));
|
|
1742
|
+
var originalHeight = oh > 1 ? oh : 1000000;
|
|
1743
|
+
var originalWidth = ow > 1 ? ow : 1000000;
|
|
1744
|
+
cssVars['--original-width'] = originalWidth;
|
|
1745
|
+
cssVars['--original-height'] = originalHeight;
|
|
1746
|
+
}
|
|
1747
|
+
return cssVars;
|
|
1748
|
+
}
|
|
1732
1749
|
var GalleryContainer = function (_a) {
|
|
1733
1750
|
var attachment = _a.attachment, _b = _a.Gallery, Gallery$1 = _b === void 0 ? Gallery : _b;
|
|
1751
|
+
var imageElements = React.useRef([]);
|
|
1752
|
+
var imageAttachmentSizeHandler = useChannelStateContext().imageAttachmentSizeHandler;
|
|
1753
|
+
var _c = React.useState([]), attachmentConfigurations = _c[0], setAttachmentConfigurations = _c[1];
|
|
1754
|
+
React.useLayoutEffect(function () {
|
|
1755
|
+
if (imageElements.current &&
|
|
1756
|
+
imageElements.current.every(function (element) { return !!element; }) &&
|
|
1757
|
+
imageAttachmentSizeHandler) {
|
|
1758
|
+
var newConfigurations_1 = [];
|
|
1759
|
+
imageElements.current.forEach(function (element, i) {
|
|
1760
|
+
var config = imageAttachmentSizeHandler(attachment.images[i], element);
|
|
1761
|
+
newConfigurations_1.push(config);
|
|
1762
|
+
});
|
|
1763
|
+
setAttachmentConfigurations(newConfigurations_1);
|
|
1764
|
+
}
|
|
1765
|
+
}, [imageElements, imageAttachmentSizeHandler, attachment]);
|
|
1766
|
+
var images = attachment.images.map(function (image, i) {
|
|
1767
|
+
var _a, _b, _c;
|
|
1768
|
+
return (__assign(__assign({}, image), { previewUrl: ((_a = attachmentConfigurations[i]) === null || _a === void 0 ? void 0 : _a.url) || 'about:blank', style: getCssDimensionsVariables(((_b = attachment.images[i]) === null || _b === void 0 ? void 0 : _b.image_url) || ((_c = attachment.images[i]) === null || _c === void 0 ? void 0 : _c.thumb_url) || '') }));
|
|
1769
|
+
});
|
|
1734
1770
|
return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: 'gallery' },
|
|
1735
|
-
React__default["default"].createElement(Gallery$1, { images:
|
|
1771
|
+
React__default["default"].createElement(Gallery$1, { images: images || [], innerRefs: imageElements, key: 'gallery' })));
|
|
1736
1772
|
};
|
|
1737
1773
|
var ImageContainer = function (props) {
|
|
1738
1774
|
var attachment = props.attachment, _a = props.Image, Image = _a === void 0 ? ImageComponent : _a;
|
|
1739
1775
|
var componentType = 'image';
|
|
1776
|
+
var imageElement = React.useRef(null);
|
|
1777
|
+
var imageAttachmentSizeHandler = useChannelStateContext().imageAttachmentSizeHandler;
|
|
1778
|
+
var _b = React.useState(undefined), attachmentConfiguration = _b[0], setAttachmentConfiguration = _b[1];
|
|
1779
|
+
React.useLayoutEffect(function () {
|
|
1780
|
+
if (imageElement.current && imageAttachmentSizeHandler) {
|
|
1781
|
+
var config = imageAttachmentSizeHandler(attachment, imageElement.current);
|
|
1782
|
+
setAttachmentConfiguration(config);
|
|
1783
|
+
}
|
|
1784
|
+
}, [imageElement, imageAttachmentSizeHandler, attachment]);
|
|
1785
|
+
var imageConfig = __assign(__assign({}, attachment), { previewUrl: (attachmentConfiguration === null || attachmentConfiguration === void 0 ? void 0 : attachmentConfiguration.url) || 'about:blank', style: getCssDimensionsVariables(attachment.image_url || attachment.thumb_url || '') });
|
|
1740
1786
|
if (attachment.actions && attachment.actions.length) {
|
|
1741
1787
|
return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
|
|
1742
1788
|
React__default["default"].createElement("div", { className: 'str-chat__attachment' },
|
|
1743
|
-
React__default["default"].createElement(Image, __assign({},
|
|
1789
|
+
React__default["default"].createElement(Image, __assign({}, imageConfig, { innerRef: imageElement })),
|
|
1744
1790
|
React__default["default"].createElement(AttachmentActionsContainer, __assign({}, props)))));
|
|
1745
1791
|
}
|
|
1746
1792
|
return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
|
|
1747
|
-
React__default["default"].createElement(Image, __assign({},
|
|
1793
|
+
React__default["default"].createElement(Image, __assign({}, imageConfig, { innerRef: imageElement }))));
|
|
1748
1794
|
};
|
|
1749
1795
|
var CardContainer = function (props) {
|
|
1750
1796
|
var attachment = props.attachment, _a = props.Card, Card$1 = _a === void 0 ? Card : _a;
|
|
@@ -1775,16 +1821,21 @@ var MediaContainer = function (props) {
|
|
|
1775
1821
|
var _a;
|
|
1776
1822
|
var attachment = props.attachment, _b = props.Media, Media = _b === void 0 ? ReactPlayer__default["default"] : _b;
|
|
1777
1823
|
var componentType = 'media';
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1824
|
+
var _c = useChannelStateContext(), shouldGenerateVideoThumbnail = _c.shouldGenerateVideoThumbnail, videoAttachmentSizeHandler = _c.videoAttachmentSizeHandler;
|
|
1825
|
+
var videoElement = React.useRef(null);
|
|
1826
|
+
var _d = React.useState(), attachmentConfiguration = _d[0], setAttachmentConfiguration = _d[1];
|
|
1827
|
+
React.useLayoutEffect(function () {
|
|
1828
|
+
if (videoElement.current && videoAttachmentSizeHandler) {
|
|
1829
|
+
var config = videoAttachmentSizeHandler(attachment, videoElement.current, shouldGenerateVideoThumbnail);
|
|
1830
|
+
setAttachmentConfiguration(config);
|
|
1831
|
+
}
|
|
1832
|
+
}, [videoElement, videoAttachmentSizeHandler, attachment]);
|
|
1833
|
+
var content = (React__default["default"].createElement("div", { className: 'str-chat__player-wrapper', "data-testid": 'video-wrapper', ref: videoElement, style: getCssDimensionsVariables(attachment.thumb_url || '') },
|
|
1834
|
+
React__default["default"].createElement(Media, { className: 'react-player', config: { file: { attributes: { poster: attachmentConfiguration === null || attachmentConfiguration === void 0 ? void 0 : attachmentConfiguration.thumbUrl } } }, controls: true, height: '100%', url: attachmentConfiguration === null || attachmentConfiguration === void 0 ? void 0 : attachmentConfiguration.url, width: '100%' })));
|
|
1835
|
+
return ((_a = attachment.actions) === null || _a === void 0 ? void 0 : _a.length) ? (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
|
|
1836
|
+
React__default["default"].createElement("div", { className: 'str-chat__attachment str-chat__attachment-media' },
|
|
1837
|
+
content,
|
|
1838
|
+
React__default["default"].createElement(AttachmentActionsContainer, __assign({}, props))))) : (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType }, content));
|
|
1788
1839
|
};
|
|
1789
1840
|
|
|
1790
1841
|
var CONTAINER_MAP = {
|
|
@@ -3961,7 +4012,7 @@ var getStrippedEmojiData = function (data) { return (__assign(__assign({}, data)
|
|
|
3961
4012
|
|
|
3962
4013
|
var useCreateChannelStateContext = function (value) {
|
|
3963
4014
|
var _a;
|
|
3964
|
-
var acceptedFiles = value.acceptedFiles, channel = value.channel, _b = value.channelCapabilitiesArray, channelCapabilitiesArray = _b === void 0 ? [] : _b, channelConfig = value.channelConfig, dragAndDropWindow = value.dragAndDropWindow, giphyVersion = value.giphyVersion, error = value.error, hasMore = value.hasMore, hasMoreNewer = value.hasMoreNewer, suppressAutoscroll = value.suppressAutoscroll, highlightedMessageId = value.highlightedMessageId, loading = value.loading, loadingMore = value.loadingMore, maxNumberOfFiles = value.maxNumberOfFiles, members = value.members, _c = value.messages, messages = _c === void 0 ? [] : _c, multipleUploads = value.multipleUploads, mutes = value.mutes, notifications = value.notifications, pinnedMessages = value.pinnedMessages, quotedMessage = value.quotedMessage, _d = value.read, read = _d === void 0 ? {} : _d, skipMessageDataMemoization = value.skipMessageDataMemoization, thread = value.thread, threadHasMore = value.threadHasMore, threadLoadingMore = value.threadLoadingMore, _e = value.threadMessages, threadMessages = _e === void 0 ? [] : _e, watcherCount = value.watcherCount, watcher_count = value.watcher_count, watchers = value.watchers;
|
|
4015
|
+
var acceptedFiles = value.acceptedFiles, channel = value.channel, _b = value.channelCapabilitiesArray, channelCapabilitiesArray = _b === void 0 ? [] : _b, channelConfig = value.channelConfig, dragAndDropWindow = value.dragAndDropWindow, giphyVersion = value.giphyVersion, error = value.error, hasMore = value.hasMore, hasMoreNewer = value.hasMoreNewer, imageAttachmentSizeHandler = value.imageAttachmentSizeHandler, suppressAutoscroll = value.suppressAutoscroll, highlightedMessageId = value.highlightedMessageId, loading = value.loading, loadingMore = value.loadingMore, maxNumberOfFiles = value.maxNumberOfFiles, members = value.members, _c = value.messages, messages = _c === void 0 ? [] : _c, multipleUploads = value.multipleUploads, mutes = value.mutes, notifications = value.notifications, pinnedMessages = value.pinnedMessages, quotedMessage = value.quotedMessage, _d = value.read, read = _d === void 0 ? {} : _d, shouldGenerateVideoThumbnail = value.shouldGenerateVideoThumbnail, skipMessageDataMemoization = value.skipMessageDataMemoization, thread = value.thread, threadHasMore = value.threadHasMore, threadLoadingMore = value.threadLoadingMore, _e = value.threadMessages, threadMessages = _e === void 0 ? [] : _e, videoAttachmentSizeHandler = value.videoAttachmentSizeHandler, watcherCount = value.watcherCount, watcher_count = value.watcher_count, watchers = value.watchers;
|
|
3965
4016
|
var channelId = channel.cid;
|
|
3966
4017
|
var lastRead = channel.initialized && ((_a = channel.lastRead()) === null || _a === void 0 ? void 0 : _a.getTime());
|
|
3967
4018
|
var membersLength = Object.keys(members || []).length;
|
|
@@ -4012,6 +4063,7 @@ var useCreateChannelStateContext = function (value) {
|
|
|
4012
4063
|
hasMore: hasMore,
|
|
4013
4064
|
hasMoreNewer: hasMoreNewer,
|
|
4014
4065
|
highlightedMessageId: highlightedMessageId,
|
|
4066
|
+
imageAttachmentSizeHandler: imageAttachmentSizeHandler,
|
|
4015
4067
|
loading: loading,
|
|
4016
4068
|
loadingMore: loadingMore,
|
|
4017
4069
|
maxNumberOfFiles: maxNumberOfFiles,
|
|
@@ -4023,11 +4075,13 @@ var useCreateChannelStateContext = function (value) {
|
|
|
4023
4075
|
pinnedMessages: pinnedMessages,
|
|
4024
4076
|
quotedMessage: quotedMessage,
|
|
4025
4077
|
read: read,
|
|
4078
|
+
shouldGenerateVideoThumbnail: shouldGenerateVideoThumbnail,
|
|
4026
4079
|
suppressAutoscroll: suppressAutoscroll,
|
|
4027
4080
|
thread: thread,
|
|
4028
4081
|
threadHasMore: threadHasMore,
|
|
4029
4082
|
threadLoadingMore: threadLoadingMore,
|
|
4030
4083
|
threadMessages: threadMessages,
|
|
4084
|
+
videoAttachmentSizeHandler: videoAttachmentSizeHandler,
|
|
4031
4085
|
watcher_count: watcher_count,
|
|
4032
4086
|
watcherCount: watcherCount,
|
|
4033
4087
|
watchers: watchers,
|
|
@@ -4047,6 +4101,7 @@ var useCreateChannelStateContext = function (value) {
|
|
|
4047
4101
|
quotedMessage,
|
|
4048
4102
|
readUsersLength,
|
|
4049
4103
|
readUsersLastReads,
|
|
4104
|
+
shouldGenerateVideoThumbnail,
|
|
4050
4105
|
skipMessageDataMemoization,
|
|
4051
4106
|
suppressAutoscroll,
|
|
4052
4107
|
thread,
|
|
@@ -4226,7 +4281,7 @@ var MessageErrorIcon = function () { return (React__default["default"].createEle
|
|
|
4226
4281
|
|
|
4227
4282
|
var useUserRole = function (message, onlySenderCanEdit, disableQuotedMessages) {
|
|
4228
4283
|
var _a, _b, _c;
|
|
4229
|
-
var _d = useChannelStateContext('useUserRole'), channel = _d.channel, _e = _d.channelCapabilities, channelCapabilities = _e === void 0 ? {} : _e
|
|
4284
|
+
var _d = useChannelStateContext('useUserRole'), channel = _d.channel, _e = _d.channelCapabilities, channelCapabilities = _e === void 0 ? {} : _e;
|
|
4230
4285
|
var client = useChatContext('useUserRole').client;
|
|
4231
4286
|
/**
|
|
4232
4287
|
* @deprecated as it relies on `membership.role` check which is already deprecated and shouldn't be used anymore.
|
|
@@ -4252,11 +4307,11 @@ var useUserRole = function (message, onlySenderCanEdit, disableQuotedMessages) {
|
|
|
4252
4307
|
(isMyMessage && channelCapabilities['update-own-message']);
|
|
4253
4308
|
var canDelete = channelCapabilities['delete-any-message'] ||
|
|
4254
4309
|
(isMyMessage && channelCapabilities['delete-own-message']);
|
|
4255
|
-
var canFlag = !isMyMessage;
|
|
4256
|
-
var canMute = !isMyMessage &&
|
|
4310
|
+
var canFlag = !isMyMessage && channelCapabilities['flag-message'];
|
|
4311
|
+
var canMute = !isMyMessage && channelCapabilities['mute-channel'];
|
|
4257
4312
|
var canQuote = !disableQuotedMessages && channelCapabilities['quote-message'];
|
|
4258
|
-
var canReact =
|
|
4259
|
-
var canReply =
|
|
4313
|
+
var canReact = channelCapabilities['send-reaction'];
|
|
4314
|
+
var canReply = channelCapabilities['send-reply'];
|
|
4260
4315
|
return {
|
|
4261
4316
|
canDelete: canDelete,
|
|
4262
4317
|
canEdit: canEdit,
|
|
@@ -9552,6 +9607,7 @@ var useFileUploads = function (props, state, dispatch) {
|
|
|
9552
9607
|
dispatch({
|
|
9553
9608
|
id: id,
|
|
9554
9609
|
state: 'finished',
|
|
9610
|
+
thumb_url: response.thumb_url,
|
|
9555
9611
|
type: 'setFileUpload',
|
|
9556
9612
|
url: response.file,
|
|
9557
9613
|
});
|
|
@@ -9816,6 +9872,7 @@ var useSubmitHandler = function (props, state, dispatch, numberOfUploads) {
|
|
|
9816
9872
|
asset_url: upload.url,
|
|
9817
9873
|
file_size: upload.file.size,
|
|
9818
9874
|
mime_type: upload.file.type,
|
|
9875
|
+
thumb_url: upload.thumb_url,
|
|
9819
9876
|
title: upload.file.name,
|
|
9820
9877
|
type: getAttachmentTypeFromMime(upload.file.type || ''),
|
|
9821
9878
|
}); });
|
|
@@ -10002,7 +10059,7 @@ var initState = function (message) {
|
|
|
10002
10059
|
var type = _a.type;
|
|
10003
10060
|
return type === 'file';
|
|
10004
10061
|
}).reduce(function (acc, _a) {
|
|
10005
|
-
var asset_url = _a.asset_url, file_size = _a.file_size, mime_type = _a.mime_type, _b = _a.title, title = _b === void 0 ? '' : _b;
|
|
10062
|
+
var asset_url = _a.asset_url, file_size = _a.file_size, mime_type = _a.mime_type, thumb_url = _a.thumb_url, _b = _a.title, title = _b === void 0 ? '' : _b;
|
|
10006
10063
|
var id = nanoid.nanoid();
|
|
10007
10064
|
acc[id] = {
|
|
10008
10065
|
file: {
|
|
@@ -10012,6 +10069,7 @@ var initState = function (message) {
|
|
|
10012
10069
|
},
|
|
10013
10070
|
id: id,
|
|
10014
10071
|
state: 'finished',
|
|
10072
|
+
thumb_url: thumb_url,
|
|
10015
10073
|
url: asset_url,
|
|
10016
10074
|
};
|
|
10017
10075
|
return acc;
|
|
@@ -10538,12 +10596,27 @@ var UnMemoizedReactionsList = function (props) {
|
|
|
10538
10596
|
*/
|
|
10539
10597
|
var ReactionsList = React__default["default"].memo(UnMemoizedReactionsList);
|
|
10540
10598
|
|
|
10599
|
+
// todo: merge with ReactionsList/ButtonWithTooltip
|
|
10600
|
+
// avoiding breaking change of replacing <span> with <button>
|
|
10601
|
+
var WithTooltip = function (_a) {
|
|
10602
|
+
var children = _a.children, onMouseEnter = _a.onMouseEnter, onMouseLeave = _a.onMouseLeave, title = _a.title;
|
|
10603
|
+
var _b = React.useState(null), referenceElement = _b[0], setReferenceElement = _b[1];
|
|
10604
|
+
var _c = useEnterLeaveHandlers({
|
|
10605
|
+
onMouseEnter: onMouseEnter,
|
|
10606
|
+
onMouseLeave: onMouseLeave,
|
|
10607
|
+
}), handleEnter = _c.handleEnter, handleLeave = _c.handleLeave, tooltipVisible = _c.tooltipVisible;
|
|
10608
|
+
var themeVersion = useChatContext('WithTooltip').themeVersion;
|
|
10609
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
10610
|
+
themeVersion === '2' && (React__default["default"].createElement(PopperTooltip, { referenceElement: referenceElement, visible: tooltipVisible }, title)),
|
|
10611
|
+
React__default["default"].createElement("span", { onMouseEnter: handleEnter, onMouseLeave: handleLeave, ref: setReferenceElement }, children)));
|
|
10612
|
+
};
|
|
10541
10613
|
var UnMemoizedSimpleReactionsList = function (props) {
|
|
10542
10614
|
var propHandleReaction = props.handleReaction, rest = __rest(props, ["handleReaction"]);
|
|
10543
10615
|
var _a = useEmojiContext('SimpleReactionsList'), Emoji = _a.Emoji, emojiConfig = _a.emojiConfig;
|
|
10544
10616
|
var contextHandleReaction = useMessageContext('SimpleReactionsList').handleReaction;
|
|
10545
10617
|
var _b = useProcessReactions(__assign({ emojiConfig: emojiConfig }, rest)), additionalEmojiProps = _b.additionalEmojiProps, emojiData = _b.emojiData, getEmojiByReactionType = _b.getEmojiByReactionType, iHaveReactedWithReaction = _b.iHaveReactedWithReaction, latestReactions = _b.latestReactions, latestReactionTypes = _b.latestReactionTypes, supportedReactionsArePresent = _b.supportedReactionsArePresent, totalReactionCount = _b.totalReactionCount;
|
|
10546
10618
|
var _c = React.useState(undefined), tooltipReactionType = _c[0], setTooltipReactionType = _c[1];
|
|
10619
|
+
var themeVersion = useChatContext('SimpleReactionsList').themeVersion;
|
|
10547
10620
|
var handleReaction = propHandleReaction || contextHandleReaction;
|
|
10548
10621
|
if (!latestReactions.length)
|
|
10549
10622
|
return null;
|
|
@@ -10553,7 +10626,7 @@ var UnMemoizedSimpleReactionsList = function (props) {
|
|
|
10553
10626
|
return latestReactions
|
|
10554
10627
|
.map(function (reaction) {
|
|
10555
10628
|
var _a, _b;
|
|
10556
|
-
if (reaction.type === type) {
|
|
10629
|
+
if (type && reaction.type === type) {
|
|
10557
10630
|
return ((_a = reaction.user) === null || _a === void 0 ? void 0 : _a.name) || ((_b = reaction.user) === null || _b === void 0 ? void 0 : _b.id);
|
|
10558
10631
|
}
|
|
10559
10632
|
return null;
|
|
@@ -10566,16 +10639,18 @@ var UnMemoizedSimpleReactionsList = function (props) {
|
|
|
10566
10639
|
var _a;
|
|
10567
10640
|
var emojiObject = getEmojiByReactionType(reactionType);
|
|
10568
10641
|
var isOwnReaction = iHaveReactedWithReaction(reactionType);
|
|
10642
|
+
var tooltipVisible = emojiObject && tooltipReactionType === (emojiObject === null || emojiObject === void 0 ? void 0 : emojiObject.id);
|
|
10643
|
+
var tooltipContent = (_a = getUsersPerReactionType(tooltipReactionType)) === null || _a === void 0 ? void 0 : _a.join(', ');
|
|
10569
10644
|
return emojiObject ? (React__default["default"].createElement("li", { className: clsx('str-chat__simple-reactions-list-item', {
|
|
10570
10645
|
'str-chat__message-reaction-own': isOwnReaction,
|
|
10571
10646
|
}), key: "".concat(emojiObject.id, "-").concat(i), onClick: function (event) { return handleReaction(reactionType, event); }, onKeyUp: function (event) { return handleReaction(reactionType, event); } },
|
|
10572
|
-
React__default["default"].createElement(
|
|
10647
|
+
React__default["default"].createElement(WithTooltip, { onMouseEnter: function () { return setTooltipReactionType(reactionType); }, onMouseLeave: function () { return setTooltipReactionType(undefined); }, title: tooltipContent },
|
|
10573
10648
|
React__default["default"].createElement(React.Suspense, { fallback: null },
|
|
10574
10649
|
React__default["default"].createElement(Emoji, __assign({ data: emojiData, emoji: emojiObject, size: 13 }, additionalEmojiProps))),
|
|
10575
|
-
"\u00A0"
|
|
10576
|
-
|
|
10577
|
-
|
|
10578
|
-
|
|
10650
|
+
"\u00A0",
|
|
10651
|
+
tooltipVisible && themeVersion === '1' && (React__default["default"].createElement("div", { className: 'str-chat__simple-reactions-list-tooltip' },
|
|
10652
|
+
React__default["default"].createElement("div", { className: 'arrow' }),
|
|
10653
|
+
tooltipContent))))) : null;
|
|
10579
10654
|
}),
|
|
10580
10655
|
React__default["default"].createElement("li", { className: 'str-chat__simple-reactions-list-item--last-number' }, totalReactionCount))));
|
|
10581
10656
|
};
|
|
@@ -10916,6 +10991,79 @@ var useChannelContainerClasses = function (_a) {
|
|
|
10916
10991
|
};
|
|
10917
10992
|
};
|
|
10918
10993
|
|
|
10994
|
+
var getImageAttachmentConfiguration = function (attachment, element) {
|
|
10995
|
+
var url = new URL((attachment.image_url || attachment.thumb_url || ''));
|
|
10996
|
+
var resizeDimensions = getSizingRestrictions(url, element);
|
|
10997
|
+
if (resizeDimensions) {
|
|
10998
|
+
// Apply 2x for retina displays
|
|
10999
|
+
resizeDimensions.height *= 2;
|
|
11000
|
+
resizeDimensions.width *= 2;
|
|
11001
|
+
addResizingParamsToUrl(resizeDimensions, url);
|
|
11002
|
+
}
|
|
11003
|
+
return {
|
|
11004
|
+
url: url.href,
|
|
11005
|
+
};
|
|
11006
|
+
};
|
|
11007
|
+
var getVideoAttachmentConfiguration = function (attachment, element, shouldGenerateVideoThumbnail) {
|
|
11008
|
+
var thumbUrl = undefined;
|
|
11009
|
+
if (attachment.thumb_url && shouldGenerateVideoThumbnail) {
|
|
11010
|
+
var url = new URL(attachment.thumb_url);
|
|
11011
|
+
var resizeDimensions = getSizingRestrictions(url, element);
|
|
11012
|
+
if (resizeDimensions) {
|
|
11013
|
+
// Apply 2x for retina displays
|
|
11014
|
+
resizeDimensions.height *= 2;
|
|
11015
|
+
resizeDimensions.width *= 2;
|
|
11016
|
+
addResizingParamsToUrl(resizeDimensions, url);
|
|
11017
|
+
}
|
|
11018
|
+
thumbUrl = url.href;
|
|
11019
|
+
}
|
|
11020
|
+
return {
|
|
11021
|
+
thumbUrl: thumbUrl,
|
|
11022
|
+
url: attachment.asset_url || '',
|
|
11023
|
+
};
|
|
11024
|
+
};
|
|
11025
|
+
var getSizingRestrictions = function (url, htmlElement) {
|
|
11026
|
+
var urlParams = url.searchParams;
|
|
11027
|
+
var originalHeight = Number(urlParams.get('oh')) || 1;
|
|
11028
|
+
var originalWidth = Number(urlParams.get('ow')) || 1;
|
|
11029
|
+
var cssSizeRestriction = getCSSSizeRestrictions(htmlElement);
|
|
11030
|
+
var resizeDimensions;
|
|
11031
|
+
if ((cssSizeRestriction.maxHeight || cssSizeRestriction.height) && cssSizeRestriction.maxWidth) {
|
|
11032
|
+
resizeDimensions = getResizeDimensions(originalHeight, originalWidth,
|
|
11033
|
+
/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
|
|
11034
|
+
cssSizeRestriction.maxHeight || cssSizeRestriction.height, cssSizeRestriction.maxWidth);
|
|
11035
|
+
}
|
|
11036
|
+
else {
|
|
11037
|
+
resizeDimensions = undefined;
|
|
11038
|
+
}
|
|
11039
|
+
return resizeDimensions;
|
|
11040
|
+
};
|
|
11041
|
+
var getResizeDimensions = function (originalHeight, originalWidth, maxHeight, maxWidth) { return ({
|
|
11042
|
+
height: Math.round(Math.max(maxHeight, (maxWidth / originalWidth) * originalHeight)),
|
|
11043
|
+
width: Math.round(Math.max(maxHeight, (maxWidth / originalHeight) * originalWidth)),
|
|
11044
|
+
}); };
|
|
11045
|
+
var getCSSSizeRestrictions = function (htmlElement) {
|
|
11046
|
+
var computedStylesheet = getComputedStyle(htmlElement);
|
|
11047
|
+
var height = getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('height'));
|
|
11048
|
+
var maxHeight = getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('max-height'));
|
|
11049
|
+
var maxWidth = getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('max-width'));
|
|
11050
|
+
if (!((height || maxHeight) && maxWidth)) {
|
|
11051
|
+
console.warn("Invalid value set for height/max-height and/or max-width for HTML element, this can cause scrolling issues inside the message list, more info https://getstream.io/chat/docs/sdk/react/message-components/attachment/#image-and-video-sizing");
|
|
11052
|
+
}
|
|
11053
|
+
return { height: height, maxHeight: maxHeight, maxWidth: maxWidth };
|
|
11054
|
+
};
|
|
11055
|
+
var getValueRepresentationOfCSSProperty = function (property) {
|
|
11056
|
+
if (!property.endsWith('px')) {
|
|
11057
|
+
return undefined;
|
|
11058
|
+
}
|
|
11059
|
+
var number = parseFloat(property);
|
|
11060
|
+
return isNaN(number) ? undefined : number;
|
|
11061
|
+
};
|
|
11062
|
+
var addResizingParamsToUrl = function (resizeDimensions, url) {
|
|
11063
|
+
url.searchParams.set('h', resizeDimensions.height.toString());
|
|
11064
|
+
url.searchParams.set('w', resizeDimensions.width.toString());
|
|
11065
|
+
};
|
|
11066
|
+
|
|
10919
11067
|
var UnMemoizedChannel = function (props) {
|
|
10920
11068
|
var propsChannel = props.channel, _a = props.EmptyPlaceholder, EmptyPlaceholder = _a === void 0 ? null : _a, LoadingErrorIndicator = props.LoadingErrorIndicator, _b = props.LoadingIndicator, LoadingIndicator = _b === void 0 ? LoadingChannel : _b;
|
|
10921
11069
|
var _c = useChatContext('Channel'), contextChannel = _c.channel, channelsQueryState = _c.channelsQueryState, customClasses = _c.customClasses, theme = _c.theme;
|
|
@@ -11402,7 +11550,7 @@ var ChannelInner = function (props) {
|
|
|
11402
11550
|
var onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);
|
|
11403
11551
|
var editMessage = useEditMessageHandler(doUpdateMessageRequest);
|
|
11404
11552
|
var typing = state.typing, restState = __rest(state, ["typing"]);
|
|
11405
|
-
var channelStateContextValue = useCreateChannelStateContext(__assign(__assign({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelCapabilitiesArray: channelCapabilitiesArray, channelConfig: channelConfig, dragAndDropWindow: dragAndDropWindow, giphyVersion: props.giphyVersion || 'fixed_height', maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, watcher_count: state.watcherCount }));
|
|
11553
|
+
var channelStateContextValue = useCreateChannelStateContext(__assign(__assign({}, restState), { acceptedFiles: acceptedFiles, channel: channel, channelCapabilitiesArray: channelCapabilitiesArray, channelConfig: channelConfig, dragAndDropWindow: dragAndDropWindow, giphyVersion: props.giphyVersion || 'fixed_height', imageAttachmentSizeHandler: props.imageAttachmentSizeHandler || getImageAttachmentConfiguration, maxNumberOfFiles: maxNumberOfFiles, multipleUploads: multipleUploads, mutes: mutes, notifications: notifications, quotedMessage: quotedMessage, shouldGenerateVideoThumbnail: props.shouldGenerateVideoThumbnail || true, videoAttachmentSizeHandler: props.videoAttachmentSizeHandler || getVideoAttachmentConfiguration, watcher_count: state.watcherCount }));
|
|
11406
11554
|
var channelActionContextValue = React.useMemo(function () { return ({
|
|
11407
11555
|
addNotification: addNotification,
|
|
11408
11556
|
closeThread: closeThread,
|
|
@@ -11657,8 +11805,8 @@ var ChannelListMessenger = function (props) {
|
|
|
11657
11805
|
if (loading) {
|
|
11658
11806
|
return React__default["default"].createElement(LoadingIndicator, null);
|
|
11659
11807
|
}
|
|
11660
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__channel-list-messenger' },
|
|
11661
|
-
React__default["default"].createElement("div", { "aria-label": 'Channel list', className: 'str-chat__channel-list-messenger__main', role: 'listbox' }, children)));
|
|
11808
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__channel-list-messenger str-chat__channel-list-messenger-react' },
|
|
11809
|
+
React__default["default"].createElement("div", { "aria-label": 'Channel list', className: 'str-chat__channel-list-messenger__main str-chat__channel-list-messenger-react__main', role: 'listbox' }, children)));
|
|
11662
11810
|
};
|
|
11663
11811
|
|
|
11664
11812
|
var useChannelDeletedListener = function (setChannels, customHandler) {
|
|
@@ -12505,18 +12653,39 @@ var UnMemoizedEmptyStateIndicator = function (props) {
|
|
|
12505
12653
|
};
|
|
12506
12654
|
var EmptyStateIndicator = React__default["default"].memo(UnMemoizedEmptyStateIndicator);
|
|
12507
12655
|
|
|
12508
|
-
var
|
|
12509
|
-
|
|
12656
|
+
var deprecationAndReplacementWarning = function (pairs, component) {
|
|
12657
|
+
pairs.forEach(function (data) {
|
|
12658
|
+
var _a = [
|
|
12659
|
+
Object.entries(data[0])[0],
|
|
12660
|
+
Object.entries(data[1])[0],
|
|
12661
|
+
], _b = _a[0], oldName = _b[0], oldValue = _b[1], _c = _a[1], newName = _c[0], newValue = _c[1];
|
|
12662
|
+
if ((typeof oldValue !== 'undefined' && typeof newValue === 'undefined') ||
|
|
12663
|
+
(typeof oldValue !== 'undefined' && typeof newValue !== 'undefined')) {
|
|
12664
|
+
console.warn("[Deprecation notice (".concat(component, ")]: prefer using prop ").concat(newName, " instead of ").concat(oldName));
|
|
12665
|
+
}
|
|
12666
|
+
});
|
|
12667
|
+
};
|
|
12668
|
+
|
|
12669
|
+
var UnMemoizedLoadMoreButton = function (_a) {
|
|
12670
|
+
var _b = _a.children, children = _b === void 0 ? 'Load more' : _b, isLoading = _a.isLoading, onClick = _a.onClick, refreshing = _a.refreshing;
|
|
12671
|
+
var loading = typeof isLoading !== 'undefined' ? isLoading : refreshing;
|
|
12672
|
+
React.useEffect(function () {
|
|
12673
|
+
deprecationAndReplacementWarning([[{ refreshing: refreshing }, { isLoading: isLoading }]], 'LoadMoreButton');
|
|
12674
|
+
}, []);
|
|
12510
12675
|
return (React__default["default"].createElement("div", { className: 'str-chat__load-more-button' },
|
|
12511
|
-
React__default["default"].createElement("button", { "aria-label": 'Load More Channels', className: 'str-chat__load-more-button__button str-chat__cta-button', "data-testid": 'load-more-button', disabled:
|
|
12676
|
+
React__default["default"].createElement("button", { "aria-label": 'Load More Channels', className: 'str-chat__load-more-button__button str-chat__cta-button', "data-testid": 'load-more-button', disabled: loading, onClick: onClick }, loading ? React__default["default"].createElement(LoadingIndicator, null) : children)));
|
|
12512
12677
|
};
|
|
12513
12678
|
var LoadMoreButton = React__default["default"].memo(UnMemoizedLoadMoreButton);
|
|
12514
12679
|
|
|
12515
12680
|
var UnMemoizedLoadMorePaginator = function (props) {
|
|
12516
|
-
var children = props.children, hasNextPage = props.hasNextPage, _a = props.LoadMoreButton, LoadMoreButton$1 = _a === void 0 ? LoadMoreButton : _a, loadNextPage = props.loadNextPage, refreshing = props.refreshing, reverse = props.reverse;
|
|
12681
|
+
var children = props.children, hasNextPage = props.hasNextPage, isLoading = props.isLoading, _a = props.LoadMoreButton, LoadMoreButton$1 = _a === void 0 ? LoadMoreButton : _a, loadNextPage = props.loadNextPage, refreshing = props.refreshing, reverse = props.reverse;
|
|
12682
|
+
var loadingState = typeof isLoading !== 'undefined' ? isLoading : refreshing;
|
|
12683
|
+
React.useEffect(function () {
|
|
12684
|
+
deprecationAndReplacementWarning([[{ refreshing: refreshing }, { isLoading: isLoading }]], 'LoadMorePaginator');
|
|
12685
|
+
}, []);
|
|
12517
12686
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
12518
12687
|
!reverse && children,
|
|
12519
|
-
hasNextPage && React__default["default"].createElement(LoadMoreButton$1, {
|
|
12688
|
+
hasNextPage && React__default["default"].createElement(LoadMoreButton$1, { isLoading: loadingState, onClick: loadNextPage }),
|
|
12520
12689
|
reverse && children));
|
|
12521
12690
|
};
|
|
12522
12691
|
var LoadMorePaginator = React__default["default"].memo(UnMemoizedLoadMorePaginator);
|
|
@@ -12631,7 +12800,7 @@ var UnMemoizedChannelList = function (props) {
|
|
|
12631
12800
|
};
|
|
12632
12801
|
return React__default["default"].createElement(ChannelPreview, __assign({}, previewProps));
|
|
12633
12802
|
};
|
|
12634
|
-
var className = clsx((_a = customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) !== null && _a !== void 0 ? _a : 'str-chat', theme, (_b = customClasses === null || customClasses === void 0 ? void 0 : customClasses.channelList) !== null && _b !== void 0 ? _b : 'str-chat-channel-list str-chat__channel-list', {
|
|
12803
|
+
var className = clsx((_a = customClasses === null || customClasses === void 0 ? void 0 : customClasses.chat) !== null && _a !== void 0 ? _a : 'str-chat', theme, (_b = customClasses === null || customClasses === void 0 ? void 0 : customClasses.channelList) !== null && _b !== void 0 ? _b : 'str-chat-channel-list str-chat__channel-list str-chat__channel-list-react', {
|
|
12635
12804
|
'str-chat--windows-flags': useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/),
|
|
12636
12805
|
'str-chat-channel-list--open': navOpen,
|
|
12637
12806
|
});
|
|
@@ -12639,7 +12808,7 @@ var UnMemoizedChannelList = function (props) {
|
|
|
12639
12808
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
12640
12809
|
React__default["default"].createElement("div", { className: className, ref: channelListRef },
|
|
12641
12810
|
showChannelSearch && (React__default["default"].createElement(ChannelSearch$1, __assign({ onSearch: onSearch, onSearchExit: onSearchExit, setChannels: setChannels }, additionalChannelSearchProps))),
|
|
12642
|
-
showChannelList && (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: channelsQueryState.queryInProgress === 'reload', LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator, setChannels: setChannels }, !(loadedChannels === null || loadedChannels === void 0 ? void 0 : loadedChannels.length) ? (React__default["default"].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default["default"].createElement(Paginator, { hasNextPage: hasNextPage,
|
|
12811
|
+
showChannelList && (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: channelsQueryState.queryInProgress === 'reload', LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator, setChannels: setChannels }, !(loadedChannels === null || loadedChannels === void 0 ? void 0 : loadedChannels.length) ? (React__default["default"].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default["default"].createElement(Paginator, { hasNextPage: hasNextPage, isLoading: channelsQueryState.queryInProgress === 'load-more', loadNextPage: loadNextPage }, renderChannels
|
|
12643
12812
|
? renderChannels(loadedChannels, renderChannel)
|
|
12644
12813
|
: loadedChannels.map(function (channel) { return renderChannel(channel); }))))))));
|
|
12645
12814
|
};
|
|
@@ -12648,7 +12817,7 @@ var UnMemoizedChannelList = function (props) {
|
|
|
12648
12817
|
*/
|
|
12649
12818
|
var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
|
|
12650
12819
|
|
|
12651
|
-
var version = '10.
|
|
12820
|
+
var version = '10.3.0';
|
|
12652
12821
|
|
|
12653
12822
|
var useChat = function (_a) {
|
|
12654
12823
|
var _b, _c;
|
|
@@ -12923,7 +13092,11 @@ var mousewheelListener = function (event) {
|
|
|
12923
13092
|
}
|
|
12924
13093
|
};
|
|
12925
13094
|
var InfiniteScroll = function (props) {
|
|
12926
|
-
var children = props.children, _a = props.element, element = _a === void 0 ? 'div' : _a,
|
|
13095
|
+
var children = props.children, _a = props.element, element = _a === void 0 ? 'div' : _a, hasMore = props.hasMore, hasMoreNewer = props.hasMoreNewer, hasNextPage = props.hasNextPage, hasPreviousPage = props.hasPreviousPage, head = props.head, _b = props.initialLoad, initialLoad = _b === void 0 ? true : _b, isLoading = props.isLoading, listenToScroll = props.listenToScroll, loader = props.loader, loadMore = props.loadMore, loadMoreNewer = props.loadMoreNewer, loadNextPage = props.loadNextPage, loadPreviousPage = props.loadPreviousPage, _c = props.threshold, threshold = _c === void 0 ? 250 : _c, _d = props.useCapture, useCapture = _d === void 0 ? false : _d, elementProps = __rest(props, ["children", "element", "hasMore", "hasMoreNewer", "hasNextPage", "hasPreviousPage", "head", "initialLoad", "isLoading", "listenToScroll", "loader", "loadMore", "loadMoreNewer", "loadNextPage", "loadPreviousPage", "threshold", "useCapture"]);
|
|
13096
|
+
var loadNextPageFn = loadNextPage || loadMoreNewer;
|
|
13097
|
+
var loadPreviousPageFn = loadPreviousPage || loadMore;
|
|
13098
|
+
var hasNextPageFlag = hasNextPage || hasMoreNewer;
|
|
13099
|
+
var hasPreviousPageFlag = hasPreviousPage || hasMore;
|
|
12927
13100
|
var scrollComponent = React.useRef();
|
|
12928
13101
|
var scrollListener = React.useCallback(function () {
|
|
12929
13102
|
var element = scrollComponent.current;
|
|
@@ -12937,13 +13110,30 @@ var InfiniteScroll = function (props) {
|
|
|
12937
13110
|
if (listenToScroll) {
|
|
12938
13111
|
listenToScroll(offset, reverseOffset, threshold);
|
|
12939
13112
|
}
|
|
12940
|
-
if (reverseOffset < Number(threshold) &&
|
|
12941
|
-
|
|
13113
|
+
if (reverseOffset < Number(threshold) &&
|
|
13114
|
+
typeof loadPreviousPageFn === 'function' &&
|
|
13115
|
+
hasPreviousPageFlag) {
|
|
13116
|
+
loadPreviousPageFn();
|
|
12942
13117
|
}
|
|
12943
|
-
if (offset < Number(threshold) && typeof
|
|
12944
|
-
|
|
13118
|
+
if (offset < Number(threshold) && typeof loadNextPageFn === 'function' && hasNextPageFlag) {
|
|
13119
|
+
loadNextPageFn();
|
|
12945
13120
|
}
|
|
12946
|
-
}, [
|
|
13121
|
+
}, [
|
|
13122
|
+
hasPreviousPageFlag,
|
|
13123
|
+
hasNextPageFlag,
|
|
13124
|
+
threshold,
|
|
13125
|
+
listenToScroll,
|
|
13126
|
+
loadPreviousPageFn,
|
|
13127
|
+
loadNextPageFn,
|
|
13128
|
+
]);
|
|
13129
|
+
React.useEffect(function () {
|
|
13130
|
+
deprecationAndReplacementWarning([
|
|
13131
|
+
[{ hasMoreNewer: hasMoreNewer }, { hasNextPage: hasNextPage }],
|
|
13132
|
+
[{ loadMoreNewer: loadMoreNewer }, { loadNextPage: loadNextPage }],
|
|
13133
|
+
[{ hasMore: hasMore }, { hasPreviousPage: hasPreviousPage }],
|
|
13134
|
+
[{ loadMore: loadMore }, { loadPreviousPage: loadPreviousPage }],
|
|
13135
|
+
], 'InfiniteScroll');
|
|
13136
|
+
}, []);
|
|
12947
13137
|
React.useEffect(function () {
|
|
12948
13138
|
var _a;
|
|
12949
13139
|
var scrollElement = (_a = scrollComponent.current) === null || _a === void 0 ? void 0 : _a.parentNode;
|
|
@@ -13701,7 +13891,7 @@ var useLastReadData = function (props) {
|
|
|
13701
13891
|
};
|
|
13702
13892
|
|
|
13703
13893
|
var useMessageListElements = function (props) {
|
|
13704
|
-
var enrichedMessages = props.enrichedMessages, internalMessageProps = props.internalMessageProps, messageGroupStyles = props.messageGroupStyles,
|
|
13894
|
+
var enrichedMessages = props.enrichedMessages, internalMessageProps = props.internalMessageProps, messageGroupStyles = props.messageGroupStyles, read = props.read, returnAllReadData = props.returnAllReadData, threadList = props.threadList;
|
|
13705
13895
|
var _a = useChatContext('useMessageListElements'), client = _a.client, customClasses = _a.customClasses;
|
|
13706
13896
|
var _b = useComponentContext('useMessageListElements'), _c = _b.DateSeparator, DateSeparator$1 = _c === void 0 ? DateSeparator : _c, HeaderComponent = _b.HeaderComponent, _d = _b.MessageSystem, MessageSystem = _d === void 0 ? EventComponent : _d;
|
|
13707
13897
|
// get the readData, but only for messages submitted by the user themselves
|
|
@@ -13733,7 +13923,7 @@ var useMessageListElements = function (props) {
|
|
|
13733
13923
|
}
|
|
13734
13924
|
var groupStyles = messageGroupStyles[message.id] || '';
|
|
13735
13925
|
var messageClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.message) || "str-chat__li str-chat__li--".concat(groupStyles);
|
|
13736
|
-
return (React__default["default"].createElement("li", { className: messageClass, "data-message-id": message.id, "data-testid": messageClass, key: message.id || message.created_at
|
|
13926
|
+
return (React__default["default"].createElement("li", { className: messageClass, "data-message-id": message.id, "data-testid": messageClass, key: message.id || message.created_at },
|
|
13737
13927
|
React__default["default"].createElement(Message, __assign({ groupStyles: [groupStyles], lastReceivedId: lastReceivedId, message: message, readBy: readData[message.id] || [], threadList: threadList }, internalMessageProps))));
|
|
13738
13928
|
});
|
|
13739
13929
|
}, [
|
|
@@ -13741,7 +13931,6 @@ var useMessageListElements = function (props) {
|
|
|
13741
13931
|
internalMessageProps,
|
|
13742
13932
|
lastReceivedId,
|
|
13743
13933
|
messageGroupStyles,
|
|
13744
|
-
onMessageLoadCaptured,
|
|
13745
13934
|
readData,
|
|
13746
13935
|
threadList,
|
|
13747
13936
|
]);
|
|
@@ -13860,19 +14049,9 @@ var useScrollLocationLogic = function (params) {
|
|
|
13860
14049
|
setIsMessageListScrolledToBottom(true);
|
|
13861
14050
|
}
|
|
13862
14051
|
}, [updateScrollTop, closeToTop, closeToBottom, scrolledUpThreshold]);
|
|
13863
|
-
var onMessageLoadCaptured = React.useCallback(function () {
|
|
13864
|
-
/**
|
|
13865
|
-
* A load event (emitted by e.g. an <img>) was captured on a message.
|
|
13866
|
-
* In some cases, the loaded asset is larger than the placeholder, which means we have to scroll down.
|
|
13867
|
-
*/
|
|
13868
|
-
if (closeToBottom.current) {
|
|
13869
|
-
scrollToBottom();
|
|
13870
|
-
}
|
|
13871
|
-
}, [closeToTop, closeToBottom, scrollToBottom]);
|
|
13872
14052
|
return {
|
|
13873
14053
|
hasNewMessages: hasNewMessages,
|
|
13874
14054
|
isMessageListScrolledToBottom: isMessageListScrolledToBottom,
|
|
13875
|
-
onMessageLoadCaptured: onMessageLoadCaptured,
|
|
13876
14055
|
onScroll: onScroll,
|
|
13877
14056
|
scrollToBottom: scrollToBottom,
|
|
13878
14057
|
wrapperRect: wrapperRect,
|
|
@@ -14000,7 +14179,7 @@ var MessageListWithContext = function (props) {
|
|
|
14000
14179
|
messages: messages,
|
|
14001
14180
|
scrolledUpThreshold: props.scrolledUpThreshold,
|
|
14002
14181
|
suppressAutoscroll: suppressAutoscroll,
|
|
14003
|
-
}), hasNewMessages = _x.hasNewMessages, isMessageListScrolledToBottom = _x.isMessageListScrolledToBottom,
|
|
14182
|
+
}), hasNewMessages = _x.hasNewMessages, isMessageListScrolledToBottom = _x.isMessageListScrolledToBottom, onScroll = _x.onScroll, scrollToBottom = _x.scrollToBottom, wrapperRect = _x.wrapperRect;
|
|
14004
14183
|
var _y = useEnrichedMessages({
|
|
14005
14184
|
channel: channel,
|
|
14006
14185
|
disableDateSeparator: disableDateSeparator,
|
|
@@ -14040,7 +14219,6 @@ var MessageListWithContext = function (props) {
|
|
|
14040
14219
|
unsafeHTML: unsafeHTML,
|
|
14041
14220
|
},
|
|
14042
14221
|
messageGroupStyles: messageGroupStyles,
|
|
14043
|
-
onMessageLoadCaptured: onMessageLoadCaptured,
|
|
14044
14222
|
read: read,
|
|
14045
14223
|
returnAllReadData: returnAllReadData,
|
|
14046
14224
|
threadList: threadList,
|
|
@@ -14084,7 +14262,7 @@ var MessageListWithContext = function (props) {
|
|
|
14084
14262
|
var showEmptyStateIndicator = elements.length === 0 && !threadList;
|
|
14085
14263
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14086
14264
|
React__default["default"].createElement(MessageListMainPanel, null,
|
|
14087
|
-
React__default["default"].createElement("div", { className: "".concat(messageListClass, " ").concat(threadListClass), onScroll: onScroll, ref: setListElement, tabIndex: 0 }, showEmptyStateIndicator ? (React__default["default"].createElement(EmptyStateIndicator$1, { key: 'empty-state-indicator', listType: threadList ? 'thread' : 'message' })) : (React__default["default"].createElement(InfiniteScroll, __assign({ className: 'str-chat__reverse-infinite-scroll str-chat__message-list-scroll', "data-testid": 'reverse-infinite-scroll',
|
|
14265
|
+
React__default["default"].createElement("div", { className: "".concat(messageListClass, " ").concat(threadListClass), onScroll: onScroll, ref: setListElement, tabIndex: 0 }, showEmptyStateIndicator ? (React__default["default"].createElement(EmptyStateIndicator$1, { key: 'empty-state-indicator', listType: threadList ? 'thread' : 'message' })) : (React__default["default"].createElement(InfiniteScroll, __assign({ className: 'str-chat__reverse-infinite-scroll str-chat__message-list-scroll', "data-testid": 'reverse-infinite-scroll', hasNextPage: props.hasMoreNewer, hasPreviousPage: props.hasMore, head: props.head, isLoading: props.loadingMore, loader: React__default["default"].createElement("div", { className: 'str-chat__list__loading', key: 'loading-indicator' }, props.loadingMore && React__default["default"].createElement(LoadingIndicator$1, { size: 20 })), loadNextPage: loadMoreNewer, loadPreviousPage: loadMore }, props.internalInfiniteScrollProps),
|
|
14088
14266
|
React__default["default"].createElement("ul", { className: 'str-chat__ul', ref: setUlElement }, elements),
|
|
14089
14267
|
React__default["default"].createElement(TypingIndicator$1, { threadList: threadList }),
|
|
14090
14268
|
React__default["default"].createElement("div", { key: 'bottom' }))))),
|
|
@@ -14484,7 +14662,6 @@ var VirtualizedMessageListWithContext = function (props) {
|
|
|
14484
14662
|
return Item;
|
|
14485
14663
|
}, [
|
|
14486
14664
|
customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualMessage,
|
|
14487
|
-
messageGroupStyles,
|
|
14488
14665
|
numItemsPrepended,
|
|
14489
14666
|
// processedMessages were incorrectly rebuilt with a new object identity at some point, hence the .length usage
|
|
14490
14667
|
processedMessages.length,
|
|
@@ -14622,9 +14799,13 @@ var ThreadInner = function (props) {
|
|
|
14622
14799
|
}, []);
|
|
14623
14800
|
if (!thread)
|
|
14624
14801
|
return null;
|
|
14625
|
-
var threadClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.thread) ||
|
|
14802
|
+
var threadClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.thread) ||
|
|
14803
|
+
clsx('str-chat__thread-container str-chat__thread', {
|
|
14804
|
+
'str-chat__thread--full': fullWidth,
|
|
14805
|
+
'str-chat__thread--virtualized': virtualized,
|
|
14806
|
+
});
|
|
14626
14807
|
var head = (React__default["default"].createElement(ThreadHead$1, __assign({ key: thread.id, message: thread, Message: MessageUIComponent }, additionalParentMessageProps)));
|
|
14627
|
-
return (React__default["default"].createElement("div", { className:
|
|
14808
|
+
return (React__default["default"].createElement("div", { className: threadClass },
|
|
14628
14809
|
React__default["default"].createElement(ThreadHeader$1, { closeThread: closeThread, thread: thread }),
|
|
14629
14810
|
React__default["default"].createElement(ThreadMessageList, __assign({ disableDateSeparator: !enableDateSeparator, hasMore: threadHasMore, head: head, loadingMore: threadLoadingMore, loadMore: loadMoreThread, Message: MessageUIComponent, messageActions: messageActions, messages: threadMessages || [], suppressAutoscroll: threadSuppressAutoscroll, threadList: true }, (virtualized ? additionalVirtualizedMessageListProps : additionalMessageListProps))),
|
|
14630
14811
|
React__default["default"].createElement(MessageInput, __assign({ focus: autoFocus, Input: ThreadInput, parent: thread, publishTypingEvent: false }, additionalMessageInputProps))));
|