stream-chat-react 10.4.2 → 10.4.3

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.
Files changed (29) hide show
  1. package/dist/browser.full-bundle.js +27 -18
  2. package/dist/browser.full-bundle.js.map +1 -1
  3. package/dist/browser.full-bundle.min.js +2 -2
  4. package/dist/browser.full-bundle.min.js.map +1 -1
  5. package/dist/components/Chat/Chat.d.ts.map +1 -1
  6. package/dist/components/Chat/Chat.js +6 -3
  7. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts +0 -1
  8. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts.map +1 -1
  9. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.js +9 -7
  10. package/dist/components/MessageList/MessageList.d.ts +5 -1
  11. package/dist/components/MessageList/MessageList.d.ts.map +1 -1
  12. package/dist/components/MessageList/MessageList.js +4 -2
  13. package/dist/components/MessageList/hooks/useMessageListScrollManager.d.ts +1 -0
  14. package/dist/components/MessageList/hooks/useMessageListScrollManager.d.ts.map +1 -1
  15. package/dist/components/MessageList/hooks/useMessageListScrollManager.js +6 -5
  16. package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts +1 -1
  17. package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts.map +1 -1
  18. package/dist/components/MessageList/hooks/useScrollLocationLogic.js +2 -1
  19. package/dist/css/index.css +1 -1
  20. package/dist/index.cjs.js +26 -17
  21. package/dist/index.cjs.js.map +1 -1
  22. package/dist/scss/Card.scss +1 -1
  23. package/dist/scss/ChannelHeader.scss +1 -1
  24. package/dist/scss/MessageInput.scss +1 -1
  25. package/dist/scss/TypingIndicator.scss +1 -1
  26. package/dist/scss/_variables.scss +1 -1
  27. package/dist/version.d.ts +1 -1
  28. package/dist/version.js +1 -1
  29. package/package.json +5 -5
package/dist/index.cjs.js CHANGED
@@ -33776,7 +33776,7 @@ var UnMemoizedChannelList = function (props) {
33776
33776
  */
33777
33777
  var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
33778
33778
 
33779
- var version = '10.4.2';
33779
+ var version = '10.4.3';
33780
33780
 
33781
33781
  var useChat = function (_a) {
33782
33782
  var _b, _c;
@@ -33962,9 +33962,12 @@ var Chat = function (props) {
33962
33962
  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;
33963
33963
  var _e = useChat({ client: client, defaultLanguage: defaultLanguage, i18nInstance: i18nInstance, initialNavOpen: initialNavOpen }), channel = _e.channel, closeMobileNav = _e.closeMobileNav, getAppSettings = _e.getAppSettings, latestMessageDatesByChannels = _e.latestMessageDatesByChannels, mutes = _e.mutes, navOpen = _e.navOpen, openMobileNav = _e.openMobileNav, setActiveChannel = _e.setActiveChannel, translators = _e.translators;
33964
33964
  var channelsQueryState = useChannelsQueryState();
33965
- var themeVersion = (getComputedStyle(document.documentElement)
33966
- .getPropertyValue('--str-chat__theme-version')
33967
- .replace(' ', '') || '1');
33965
+ var themeVersion = typeof window !== 'undefined'
33966
+ ? (window
33967
+ .getComputedStyle(document.documentElement)
33968
+ .getPropertyValue('--str-chat__theme-version')
33969
+ .replace(' ', '') || '1')
33970
+ : '1';
33968
33971
  useCustomStyles(darkMode ? darkModeTheme : customStyles);
33969
33972
  var chatContextValue = useCreateChatContext({
33970
33973
  channel: channel,
@@ -34069,6 +34072,8 @@ var InfiniteScroll = function (props) {
34069
34072
  if (listenToScroll) {
34070
34073
  listenToScroll(offset, reverseOffset, threshold);
34071
34074
  }
34075
+ if (isLoading)
34076
+ return;
34072
34077
  if (reverseOffset < Number(threshold) &&
34073
34078
  typeof loadPreviousPageFn === 'function' &&
34074
34079
  hasPreviousPageFlag) {
@@ -34080,10 +34085,11 @@ var InfiniteScroll = function (props) {
34080
34085
  }, [
34081
34086
  hasPreviousPageFlag,
34082
34087
  hasNextPageFlag,
34083
- threshold,
34088
+ isLoading,
34084
34089
  listenToScroll,
34085
34090
  loadPreviousPageFn,
34086
34091
  loadNextPageFn,
34092
+ threshold,
34087
34093
  ]);
34088
34094
  React.useEffect(function () {
34089
34095
  deprecationAndReplacementWarning([
@@ -34093,19 +34099,18 @@ var InfiniteScroll = function (props) {
34093
34099
  [{ loadMore: loadMore }, { loadPreviousPage: loadPreviousPage }],
34094
34100
  ], 'InfiniteScroll');
34095
34101
  }, []);
34096
- React.useEffect(function () {
34102
+ React.useLayoutEffect(function () {
34097
34103
  var _a;
34098
34104
  var scrollElement = (_a = scrollComponent.current) === null || _a === void 0 ? void 0 : _a.parentNode;
34099
- if (isLoading || !scrollElement) {
34100
- return function () { return undefined; };
34101
- }
34105
+ if (!scrollElement)
34106
+ return;
34102
34107
  scrollElement.addEventListener('scroll', scrollListener, useCapture);
34103
34108
  scrollElement.addEventListener('resize', scrollListener, useCapture);
34104
34109
  return function () {
34105
34110
  scrollElement.removeEventListener('scroll', scrollListener, useCapture);
34106
34111
  scrollElement.removeEventListener('resize', scrollListener, useCapture);
34107
34112
  };
34108
- }, [initialLoad, isLoading, scrollListener, useCapture]);
34113
+ }, [initialLoad, scrollListener, useCapture]);
34109
34114
  React.useEffect(function () {
34110
34115
  var _a;
34111
34116
  var scrollElement = (_a = scrollComponent.current) === null || _a === void 0 ? void 0 : _a.parentNode;
@@ -34896,8 +34901,9 @@ var useMessageListElements = function (props) {
34896
34901
  return elements;
34897
34902
  };
34898
34903
 
34904
+ // FIXME: change this generic name to something like useAdjustScrollPositionToListSize
34899
34905
  function useMessageListScrollManager(params) {
34900
- var onScrollBy = params.onScrollBy, scrollContainerMeasures = params.scrollContainerMeasures, scrolledUpThreshold = params.scrolledUpThreshold, scrollToBottom = params.scrollToBottom, showNewMessages = params.showNewMessages;
34906
+ var loadMoreScrollThreshold = params.loadMoreScrollThreshold, onScrollBy = params.onScrollBy, scrollContainerMeasures = params.scrollContainerMeasures, scrolledUpThreshold = params.scrolledUpThreshold, scrollToBottom = params.scrollToBottom, showNewMessages = params.showNewMessages;
34901
34907
  var client = useChatContext('useMessageListScrollManager').client;
34902
34908
  var measures = React.useRef({
34903
34909
  offsetHeight: 0,
@@ -34905,7 +34911,7 @@ function useMessageListScrollManager(params) {
34905
34911
  });
34906
34912
  var messages = React.useRef();
34907
34913
  var scrollTop = React.useRef(0);
34908
- React.useEffect(function () {
34914
+ React.useLayoutEffect(function () {
34909
34915
  var _a, _b, _c;
34910
34916
  var prevMeasures = measures.current;
34911
34917
  var prevMessages = messages.current;
@@ -34919,8 +34925,8 @@ function useMessageListScrollManager(params) {
34919
34925
  if (prevMessages.length < newMessages.length) {
34920
34926
  // messages added to the top
34921
34927
  if ((lastPrevMessage === null || lastPrevMessage === void 0 ? void 0 : lastPrevMessage.id) === lastNewMessage.id) {
34922
- var listHeightDelta = newMeasures.scrollHeight - prevMeasures.scrollHeight;
34923
- if (scrollTop.current === 0) {
34928
+ if (scrollTop.current < loadMoreScrollThreshold) {
34929
+ var listHeightDelta = newMeasures.scrollHeight - prevMeasures.scrollHeight;
34924
34930
  onScrollBy(listHeightDelta);
34925
34931
  }
34926
34932
  }
@@ -34953,7 +34959,7 @@ function useMessageListScrollManager(params) {
34953
34959
  }
34954
34960
 
34955
34961
  var useScrollLocationLogic = function (params) {
34956
- var _a = params.messages, messages = _a === void 0 ? [] : _a, _b = params.scrolledUpThreshold, scrolledUpThreshold = _b === void 0 ? 200 : _b, hasMoreNewer = params.hasMoreNewer, suppressAutoscroll = params.suppressAutoscroll, listElement = params.listElement;
34962
+ var loadMoreScrollThreshold = params.loadMoreScrollThreshold, _a = params.messages, messages = _a === void 0 ? [] : _a, _b = params.scrolledUpThreshold, scrolledUpThreshold = _b === void 0 ? 200 : _b, hasMoreNewer = params.hasMoreNewer, suppressAutoscroll = params.suppressAutoscroll, listElement = params.listElement;
34957
34963
  var _c = React.useState(false), hasNewMessages = _c[0], setHasNewMessages = _c[1];
34958
34964
  var _d = React.useState(), wrapperRect = _d[0], setWrapperRect = _d[1];
34959
34965
  var _e = React.useState(true), isMessageListScrolledToBottom = _e[0], setIsMessageListScrolledToBottom = _e[1];
@@ -34977,6 +34983,7 @@ var useScrollLocationLogic = function (params) {
34977
34983
  }
34978
34984
  }, [listElement, hasMoreNewer]);
34979
34985
  var updateScrollTop = useMessageListScrollManager({
34986
+ loadMoreScrollThreshold: loadMoreScrollThreshold,
34980
34987
  messages: messages,
34981
34988
  onScrollBy: function (scrollBy) {
34982
34989
  listElement === null || listElement === void 0 ? void 0 : listElement.scrollBy({ top: scrollBy });
@@ -35125,16 +35132,18 @@ var MessageListMainPanel = function (_a) {
35125
35132
  };
35126
35133
 
35127
35134
  var MessageListWithContext = function (props) {
35128
- var channel = props.channel, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? false : _a, groupStyles = props.groupStyles, _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, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
35135
+ var channel = props.channel, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? false : _a, groupStyles = props.groupStyles, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, internalInfiniteScrollProps = props.internalInfiniteScrollProps, _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, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
35129
35136
  _h = props.returnAllReadData, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
35130
35137
  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, _l = props.messageLimit, messageLimit = _l === void 0 ? 100 : _l, loadMoreCallback = props.loadMore, loadMoreNewerCallback = props.loadMoreNewer, _m = props.hasMoreNewer, hasMoreNewer = _m === void 0 ? false : _m, suppressAutoscroll = props.suppressAutoscroll, highlightedMessageId = props.highlightedMessageId, _o = props.jumpToLatestMessage, jumpToLatestMessage = _o === void 0 ? function () { return Promise.resolve(); } : _o;
35131
35138
  var _p = React__default["default"].useState(null), listElement = _p[0], setListElement = _p[1];
35132
35139
  var _q = React__default["default"].useState(null), ulElement = _q[0], setUlElement = _q[1];
35133
35140
  var customClasses = useChatContext('MessageList').customClasses;
35134
35141
  var _r = useComponentContext('MessageList'), _s = _r.EmptyStateIndicator, EmptyStateIndicator$1 = _s === void 0 ? EmptyStateIndicator : _s, _t = _r.LoadingIndicator, LoadingIndicator$1 = _t === void 0 ? LoadingIndicator : _t, _u = _r.MessageListNotifications, MessageListNotifications$1 = _u === void 0 ? MessageListNotifications : _u, _v = _r.MessageNotification, MessageNotification$1 = _v === void 0 ? MessageNotification : _v, _w = _r.TypingIndicator, TypingIndicator$1 = _w === void 0 ? TypingIndicator : _w;
35142
+ var loadMoreScrollThreshold = (internalInfiniteScrollProps === null || internalInfiniteScrollProps === void 0 ? void 0 : internalInfiniteScrollProps.threshold) || 250;
35135
35143
  var _x = useScrollLocationLogic({
35136
35144
  hasMoreNewer: hasMoreNewer,
35137
35145
  listElement: listElement,
35146
+ loadMoreScrollThreshold: loadMoreScrollThreshold,
35138
35147
  messages: messages,
35139
35148
  scrolledUpThreshold: props.scrolledUpThreshold,
35140
35149
  suppressAutoscroll: suppressAutoscroll,
@@ -35221,7 +35230,7 @@ var MessageListWithContext = function (props) {
35221
35230
  var showEmptyStateIndicator = elements.length === 0 && !threadList;
35222
35231
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
35223
35232
  React__default["default"].createElement(MessageListMainPanel, null,
35224
- 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),
35233
+ 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, { threshold: loadMoreScrollThreshold }),
35225
35234
  React__default["default"].createElement("ul", { className: 'str-chat__ul', ref: setUlElement }, elements),
35226
35235
  React__default["default"].createElement(TypingIndicator$1, { threadList: threadList }),
35227
35236
  React__default["default"].createElement("div", { key: 'bottom' }))))),