stream-chat-react 11.6.0 → 11.7.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.
@@ -51259,12 +51259,10 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, streamChat, React
51259
51259
  var _e = React$2.useState(true), isMessageListScrolledToBottom = _e[0], setIsMessageListScrolledToBottom = _e[1];
51260
51260
  var closeToBottom = React$2.useRef(false);
51261
51261
  var closeToTop = React$2.useRef(false);
51262
- var scrollCounter = React$2.useRef({ autoScroll: 0, scroll: 0 });
51263
51262
  var scrollToBottom = React$2.useCallback(function () {
51264
51263
  if (!(listElement === null || listElement === void 0 ? void 0 : listElement.scrollTo) || hasMoreNewer || suppressAutoscroll) {
51265
51264
  return;
51266
51265
  }
51267
- scrollCounter.current.autoScroll += 1;
51268
51266
  listElement.scrollTo({
51269
51267
  top: listElement.scrollHeight,
51270
51268
  });
@@ -51343,9 +51341,10 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, streamChat, React
51343
51341
  return 0 <= targetMessageY && targetMessageY <= msgListHeight;
51344
51342
  };
51345
51343
  var useUnreadMessagesNotification = function (_a) {
51346
- var unreadCount = _a.unreadCount;
51344
+ var isMessageListScrolledToBottom = _a.isMessageListScrolledToBottom, unreadCount = _a.unreadCount;
51347
51345
  var messages = useChannelStateContext('UnreadMessagesNotification').messages;
51348
51346
  var _b = React$2.useState(false), show = _b[0], setShow = _b[1];
51347
+ var isScrolledAboveTargetTop = React$2.useRef(false);
51349
51348
  var intersectionObserverIsSupported = typeof IntersectionObserver !== 'undefined';
51350
51349
  React$2.useEffect(function () {
51351
51350
  if (!(unreadCount && intersectionObserverIsSupported)) {
@@ -51365,14 +51364,28 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, streamChat, React
51365
51364
  if (!elements.length)
51366
51365
  return;
51367
51366
  var _a = elements[0], boundingClientRect = _a.boundingClientRect, isIntersecting = _a.isIntersecting, rootBounds = _a.rootBounds;
51368
- var isScrolledAboveTargetTop = rootBounds && boundingClientRect && rootBounds.bottom < boundingClientRect.top;
51369
- setShow(!isIntersecting && !isScrolledAboveTargetTop);
51367
+ var isScrolledAboveTargetTopCurrent = !!(rootBounds &&
51368
+ boundingClientRect &&
51369
+ rootBounds.bottom < boundingClientRect.top);
51370
+ setShow(!isIntersecting && !isScrolledAboveTargetTopCurrent);
51371
+ isScrolledAboveTargetTop.current = isScrolledAboveTargetTopCurrent;
51370
51372
  }, { root: msgListPanel });
51371
51373
  observer.observe(observedTarget);
51372
51374
  return function () {
51373
51375
  observer.disconnect();
51374
51376
  };
51375
51377
  }, [intersectionObserverIsSupported, messages, unreadCount]);
51378
+ React$2.useEffect(function () {
51379
+ /**
51380
+ * Handle situation when scrollToBottom is called from another component when the msg list is scrolled above the observed target (unread separator).
51381
+ * The intersection observer is not triggered when Element.scrollTo() is called. So we end up in a situation when we are scrolled to the bottom
51382
+ * and at the same time scrolled above the observed target.
51383
+ */
51384
+ if (unreadCount && isMessageListScrolledToBottom && isScrolledAboveTargetTop.current) {
51385
+ setShow(true);
51386
+ isScrolledAboveTargetTop.current = false;
51387
+ }
51388
+ }, [isMessageListScrolledToBottom, unreadCount]);
51376
51389
  return { show: show && intersectionObserverIsSupported };
51377
51390
  };
51378
51391
 
@@ -51708,9 +51721,6 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, streamChat, React
51708
51721
  var _u = useComponentContext('MessageList'), _v = _u.EmptyStateIndicator, EmptyStateIndicator$1 = _v === void 0 ? EmptyStateIndicator : _v, _w = _u.LoadingIndicator, LoadingIndicator$1 = _w === void 0 ? LoadingIndicator : _w, _x = _u.MessageListNotifications, MessageListNotifications$1 = _x === void 0 ? MessageListNotifications : _x, _y = _u.MessageNotification, MessageNotification$1 = _y === void 0 ? MessageNotification : _y, _z = _u.TypingIndicator, TypingIndicator$1 = _z === void 0 ? TypingIndicator : _z, _0 = _u.UnreadMessagesNotification, UnreadMessagesNotification$1 = _0 === void 0 ? UnreadMessagesNotification : _0;
51709
51722
  var loadMoreScrollThreshold = (internalInfiniteScrollProps === null || internalInfiniteScrollProps === void 0 ? void 0 : internalInfiniteScrollProps.threshold) || 250;
51710
51723
  var currentUserChannelReadState = client.user && (read === null || read === void 0 ? void 0 : read[client.user.id]);
51711
- var showUnreadMessagesNotification = useUnreadMessagesNotification({
51712
- unreadCount: currentUserChannelReadState === null || currentUserChannelReadState === void 0 ? void 0 : currentUserChannelReadState.unread_messages,
51713
- }).show;
51714
51724
  var _1 = useScrollLocationLogic({
51715
51725
  hasMoreNewer: hasMoreNewer,
51716
51726
  listElement: listElement,
@@ -51719,6 +51729,10 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, streamChat, React
51719
51729
  scrolledUpThreshold: props.scrolledUpThreshold,
51720
51730
  suppressAutoscroll: suppressAutoscroll,
51721
51731
  }), hasNewMessages = _1.hasNewMessages, isMessageListScrolledToBottom = _1.isMessageListScrolledToBottom, onScroll = _1.onScroll, scrollToBottom = _1.scrollToBottom, wrapperRect = _1.wrapperRect;
51732
+ var showUnreadMessagesNotification = useUnreadMessagesNotification({
51733
+ isMessageListScrolledToBottom: isMessageListScrolledToBottom,
51734
+ unreadCount: currentUserChannelReadState === null || currentUserChannelReadState === void 0 ? void 0 : currentUserChannelReadState.unread_messages,
51735
+ }).show;
51722
51736
  useMarkRead({
51723
51737
  isMessageListScrolledToBottom: isMessageListScrolledToBottom,
51724
51738
  markReadOnScrolledToBottom: markReadOnScrolledToBottom,
@@ -55113,7 +55127,7 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, streamChat, React
55113
55127
 
55114
55128
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS = 5000;
55115
55129
  var MIN_RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS = 2000;
55116
- var usePaginatedChannels = function (client, filters, sort, options, activeChannelHandler, recoveryThrottleIntervalMs) {
55130
+ var usePaginatedChannels = function (client, filters, sort, options, activeChannelHandler, recoveryThrottleIntervalMs, customQueryChannels) {
55117
55131
  if (recoveryThrottleIntervalMs === void 0) { recoveryThrottleIntervalMs = RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS; }
55118
55132
  var _a = useChatContext('usePaginatedChannels').channelsQueryState, error = _a.error, setError = _a.setError, setQueryInProgress = _a.setQueryInProgress;
55119
55133
  var _b = React$2.useState([]), channels = _b[0], setChannels = _b[1];
@@ -55128,49 +55142,61 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, streamChat, React
55128
55142
  var filterString = React$2.useMemo(function () { return JSON.stringify(filters); }, [filters]);
55129
55143
  var sortString = React$2.useMemo(function () { return JSON.stringify(sort); }, [sort]);
55130
55144
  // eslint-disable-next-line react-hooks/exhaustive-deps
55131
- var queryChannels = function (queryType) { return __awaiter(void 0, void 0, void 0, function () {
55132
- var offset, newOptions, channelQueryResponse, newChannels, err_1;
55133
- var _a;
55134
- return __generator(this, function (_b) {
55135
- switch (_b.label) {
55136
- case 0:
55137
- setError(null);
55138
- if (queryType === 'reload') {
55139
- setChannels([]);
55140
- setQueryInProgress('reload');
55141
- }
55142
- else {
55143
- setQueryInProgress('load-more');
55144
- }
55145
- offset = queryType === 'reload' ? 0 : channels.length;
55146
- newOptions = __assign({ limit: (_a = options === null || options === void 0 ? void 0 : options.limit) !== null && _a !== void 0 ? _a : MAX_QUERY_CHANNELS_LIMIT, offset: offset }, options);
55147
- _b.label = 1;
55148
- case 1:
55149
- _b.trys.push([1, 3, , 4]);
55150
- return [4 /*yield*/, client.queryChannels(filters, sort || {}, newOptions)];
55151
- case 2:
55152
- channelQueryResponse = _b.sent();
55153
- newChannels = queryType === 'reload'
55154
- ? channelQueryResponse
55155
- : uniqBy(__spreadArray(__spreadArray([], channels, true), channelQueryResponse, true), 'cid');
55156
- setChannels(newChannels);
55157
- setHasNextPage(channelQueryResponse.length >= newOptions.limit);
55158
- // Set active channel only on load of first page
55159
- if (!offset && activeChannelHandler) {
55160
- activeChannelHandler(newChannels, setChannels);
55161
- }
55162
- return [3 /*break*/, 4];
55163
- case 3:
55164
- err_1 = _b.sent();
55165
- console.warn(err_1);
55166
- setError(err_1);
55167
- return [3 /*break*/, 4];
55168
- case 4:
55169
- setQueryInProgress(null);
55170
- return [2 /*return*/];
55171
- }
55145
+ var queryChannels = function (queryType) {
55146
+ if (queryType === void 0) { queryType = 'load-more'; }
55147
+ return __awaiter(void 0, void 0, void 0, function () {
55148
+ var offset, newOptions, channelQueryResponse, newChannels, err_1;
55149
+ var _a;
55150
+ return __generator(this, function (_b) {
55151
+ switch (_b.label) {
55152
+ case 0:
55153
+ setError(null);
55154
+ if (queryType === 'reload') {
55155
+ setChannels([]);
55156
+ }
55157
+ setQueryInProgress(queryType);
55158
+ _b.label = 1;
55159
+ case 1:
55160
+ _b.trys.push([1, 6, , 7]);
55161
+ if (!customQueryChannels) return [3 /*break*/, 3];
55162
+ return [4 /*yield*/, customQueryChannels({
55163
+ currentChannels: channels,
55164
+ queryType: queryType,
55165
+ setChannels: setChannels,
55166
+ setHasNextPage: setHasNextPage,
55167
+ })];
55168
+ case 2:
55169
+ _b.sent();
55170
+ return [3 /*break*/, 5];
55171
+ case 3:
55172
+ offset = queryType === 'reload' ? 0 : channels.length;
55173
+ newOptions = __assign({ limit: (_a = options === null || options === void 0 ? void 0 : options.limit) !== null && _a !== void 0 ? _a : MAX_QUERY_CHANNELS_LIMIT, offset: offset }, options);
55174
+ return [4 /*yield*/, client.queryChannels(filters, sort || {}, newOptions)];
55175
+ case 4:
55176
+ channelQueryResponse = _b.sent();
55177
+ newChannels = queryType === 'reload'
55178
+ ? channelQueryResponse
55179
+ : uniqBy(__spreadArray(__spreadArray([], channels, true), channelQueryResponse, true), 'cid');
55180
+ setChannels(newChannels);
55181
+ setHasNextPage(channelQueryResponse.length >= newOptions.limit);
55182
+ // Set active channel only on load of first page
55183
+ if (!offset && activeChannelHandler) {
55184
+ activeChannelHandler(newChannels, setChannels);
55185
+ }
55186
+ _b.label = 5;
55187
+ case 5: return [3 /*break*/, 7];
55188
+ case 6:
55189
+ err_1 = _b.sent();
55190
+ console.warn(err_1);
55191
+ setError(err_1);
55192
+ return [3 /*break*/, 7];
55193
+ case 7:
55194
+ setQueryInProgress(null);
55195
+ return [2 /*return*/];
55196
+ }
55197
+ });
55172
55198
  });
55173
- }); };
55199
+ };
55174
55200
  var throttleRecover = React$2.useCallback(function () {
55175
55201
  var now = Date.now();
55176
55202
  var isFirstRecovery = !lastRecoveryTimestamp.current;
@@ -55883,7 +55909,7 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, streamChat, React
55883
55909
  var DEFAULT_SORT = {};
55884
55910
  var UnMemoizedChannelList = function (props) {
55885
55911
  var _a, _b;
55886
- var additionalChannelSearchProps = props.additionalChannelSearchProps, _c = props.Avatar, Avatar$1 = _c === void 0 ? Avatar : _c, allowNewMessagesFromUnfilteredChannels = props.allowNewMessagesFromUnfilteredChannels, channelRenderFilterFn = props.channelRenderFilterFn, _d = props.ChannelSearch, ChannelSearch$1 = _d === void 0 ? ChannelSearch : _d, customActiveChannel = props.customActiveChannel, _e = props.EmptyStateIndicator, EmptyStateIndicator$1 = _e === void 0 ? EmptyStateIndicator : _e, filters = props.filters, _f = props.LoadingErrorIndicator, LoadingErrorIndicator = _f === void 0 ? ChatDown : _f, _g = props.LoadingIndicator, LoadingIndicator = _g === void 0 ? LoadingChannels : _g, _h = props.List, List = _h === void 0 ? ChannelListMessenger : _h, lockChannelOrder = props.lockChannelOrder, onAddedToChannel = props.onAddedToChannel, onChannelDeleted = props.onChannelDeleted, onChannelHidden = props.onChannelHidden, onChannelTruncated = props.onChannelTruncated, onChannelUpdated = props.onChannelUpdated, onChannelVisible = props.onChannelVisible, onMessageNew = props.onMessageNew, onMessageNewHandler = props.onMessageNewHandler, onRemovedFromChannel = props.onRemovedFromChannel, options = props.options, _j = props.Paginator, Paginator = _j === void 0 ? LoadMorePaginator : _j, Preview = props.Preview, recoveryThrottleIntervalMs = props.recoveryThrottleIntervalMs, renderChannels = props.renderChannels, _k = props.sendChannelsToList, sendChannelsToList = _k === void 0 ? false : _k, _l = props.setActiveChannelOnMount, setActiveChannelOnMount = _l === void 0 ? true : _l, _m = props.showChannelSearch, showChannelSearch = _m === void 0 ? false : _m, _o = props.sort, sort = _o === void 0 ? DEFAULT_SORT : _o, _p = props.watchers, watchers = _p === void 0 ? {} : _p;
55912
+ var additionalChannelSearchProps = props.additionalChannelSearchProps, _c = props.Avatar, Avatar$1 = _c === void 0 ? Avatar : _c, allowNewMessagesFromUnfilteredChannels = props.allowNewMessagesFromUnfilteredChannels, channelRenderFilterFn = props.channelRenderFilterFn, _d = props.ChannelSearch, ChannelSearch$1 = _d === void 0 ? ChannelSearch : _d, customActiveChannel = props.customActiveChannel, customQueryChannels = props.customQueryChannels, _e = props.EmptyStateIndicator, EmptyStateIndicator$1 = _e === void 0 ? EmptyStateIndicator : _e, filters = props.filters, _f = props.LoadingErrorIndicator, LoadingErrorIndicator = _f === void 0 ? ChatDown : _f, _g = props.LoadingIndicator, LoadingIndicator = _g === void 0 ? LoadingChannels : _g, _h = props.List, List = _h === void 0 ? ChannelListMessenger : _h, lockChannelOrder = props.lockChannelOrder, onAddedToChannel = props.onAddedToChannel, onChannelDeleted = props.onChannelDeleted, onChannelHidden = props.onChannelHidden, onChannelTruncated = props.onChannelTruncated, onChannelUpdated = props.onChannelUpdated, onChannelVisible = props.onChannelVisible, onMessageNew = props.onMessageNew, onMessageNewHandler = props.onMessageNewHandler, onRemovedFromChannel = props.onRemovedFromChannel, options = props.options, _j = props.Paginator, Paginator = _j === void 0 ? LoadMorePaginator : _j, Preview = props.Preview, recoveryThrottleIntervalMs = props.recoveryThrottleIntervalMs, renderChannels = props.renderChannels, _k = props.sendChannelsToList, sendChannelsToList = _k === void 0 ? false : _k, _l = props.setActiveChannelOnMount, setActiveChannelOnMount = _l === void 0 ? true : _l, _m = props.showChannelSearch, showChannelSearch = _m === void 0 ? false : _m, _o = props.sort, sort = _o === void 0 ? DEFAULT_SORT : _o, _p = props.watchers, watchers = _p === void 0 ? {} : _p;
55887
55913
  var _q = useChatContext('ChannelList'), channel = _q.channel, channelsQueryState = _q.channelsQueryState, client = _q.client, closeMobileNav = _q.closeMobileNav, customClasses = _q.customClasses, _r = _q.navOpen, navOpen = _r === void 0 ? false : _r, setActiveChannel = _q.setActiveChannel, theme = _q.theme, useImageFlagEmojisOnWindows = _q.useImageFlagEmojisOnWindows;
55888
55914
  var channelListRef = React$2.useRef(null);
55889
55915
  var _s = React$2.useState(0), channelUpdateCount = _s[0], setChannelUpdateCount = _s[1];
@@ -55949,7 +55975,7 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, streamChat, React
55949
55975
  (_a = additionalChannelSearchProps === null || additionalChannelSearchProps === void 0 ? void 0 : additionalChannelSearchProps.onSearchExit) === null || _a === void 0 ? void 0 : _a.call(additionalChannelSearchProps);
55950
55976
  // eslint-disable-next-line react-hooks/exhaustive-deps
55951
55977
  }, []);
55952
- var _u = usePaginatedChannels(client, filters || DEFAULT_FILTERS, sort || DEFAULT_SORT, options || DEFAULT_OPTIONS, activeChannelHandler, recoveryThrottleIntervalMs), channels = _u.channels, hasNextPage = _u.hasNextPage, loadNextPage = _u.loadNextPage, setChannels = _u.setChannels;
55978
+ var _u = usePaginatedChannels(client, filters || DEFAULT_FILTERS, sort || DEFAULT_SORT, options || DEFAULT_OPTIONS, activeChannelHandler, recoveryThrottleIntervalMs, customQueryChannels), channels = _u.channels, hasNextPage = _u.hasNextPage, loadNextPage = _u.loadNextPage, setChannels = _u.setChannels;
55953
55979
  var loadedChannels = channelRenderFilterFn ? channelRenderFilterFn(channels) : channels;
55954
55980
  useMobileNavigation(channelListRef, navOpen, closeMobileNav);
55955
55981
  useMessageNewListener(setChannels, onMessageNewHandler, lockChannelOrder, allowNewMessagesFromUnfilteredChannels);
@@ -56015,7 +56041,7 @@ var StreamChatReact = (function (exports, React$2, jsxRuntime, streamChat, React
56015
56041
 
56016
56042
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};
56017
56043
 
56018
- window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var version$1 = '11.6.0';
56044
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var version$1 = '11.7.0';
56019
56045
 
56020
56046
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useChat = function (_a) {
56021
56047
  var _b, _c;