stream-chat-react 10.19.0 → 10.20.1

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 (40) hide show
  1. package/README.md +1 -1
  2. package/dist/browser.full-bundle.js +36 -25
  3. package/dist/browser.full-bundle.js.map +1 -1
  4. package/dist/browser.full-bundle.min.js +3 -3
  5. package/dist/browser.full-bundle.min.js.map +1 -1
  6. package/dist/components/Channel/Channel.d.ts +74 -62
  7. package/dist/components/Channel/Channel.d.ts.map +1 -1
  8. package/dist/components/Channel/Channel.js +27 -20
  9. package/dist/components/Channel/channelState.d.ts +1 -0
  10. package/dist/components/Channel/channelState.d.ts.map +1 -1
  11. package/dist/components/Channel/channelState.js +2 -2
  12. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.js +1 -0
  13. package/dist/components/MessageList/CustomNotification.d.ts.map +1 -1
  14. package/dist/components/MessageList/CustomNotification.js +1 -1
  15. package/dist/components/MessageList/utils.d.ts.map +1 -1
  16. package/dist/components/MessageList/utils.js +1 -0
  17. package/dist/components/Thread/Thread.js +1 -0
  18. package/dist/css/index.css +1 -1
  19. package/dist/css/v2/index.css +1 -1
  20. package/dist/css/v2/index.layout.css +1 -1
  21. package/dist/index.cjs.js +36 -25
  22. package/dist/index.cjs.js.map +1 -1
  23. package/dist/scss/MessageInput.scss +6 -0
  24. package/dist/scss/v2/Autocomplete/Autocomplete-layout.scss +7 -0
  25. package/dist/scss/v2/ChannelHeader/ChannelHeader-layout.scss +4 -0
  26. package/dist/scss/v2/ChannelPreview/ChannelPreview-layout.scss +1 -0
  27. package/dist/scss/v2/ChannelSearch/ChannelSearch-layout.scss +5 -0
  28. package/dist/scss/v2/Message/Message-layout.scss +8 -0
  29. package/dist/scss/v2/MessageList/MessageList-layout.scss +1 -0
  30. package/dist/scss/v2/MessageList/VirtualizedMessageList-layout.scss +4 -0
  31. package/dist/scss/v2/Notification/Notification-layout.scss +4 -0
  32. package/dist/scss/v2/Thread/Thread-layout.scss +4 -0
  33. package/dist/scss/v2/Tooltip/Tooltip-layout.scss +1 -0
  34. package/dist/scss/v2/_utils.scss +5 -0
  35. package/dist/utils/getChannel.d.ts +4 -2
  36. package/dist/utils/getChannel.d.ts.map +1 -1
  37. package/dist/utils/getChannel.js +3 -2
  38. package/dist/version.d.ts +1 -1
  39. package/dist/version.js +1 -1
  40. package/package.json +2 -2
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
  > building chat applications.
9
9
 
10
10
  [![NPM](https://img.shields.io/npm/v/stream-chat-react.svg)](https://www.npmjs.com/package/stream-chat-react)
11
- [![build](https://github.com/GetStream/stream-chat-react/workflows/test/badge.svg)](https://github.com/GetStream/stream-chat-react/actions)
11
+ [![build](https://github.com/GetStream/stream-chat-react/actions/workflows/ci.yml/badge.svg)](https://github.com/GetStream/stream-chat-react/actions)
12
12
  [![Component Reference](https://img.shields.io/badge/docs-component%20reference-blue.svg)](https://getstream.io/chat/docs/sdk/react/)
13
13
  [![codecov](https://codecov.io/gh/GetStream/stream-chat-react/branch/master/graph/badge.svg)](https://codecov.io/gh/GetStream/stream-chat-react)
14
14
 
@@ -39627,8 +39627,8 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
39627
39627
  return __assign(__assign({}, state), { members: __assign({}, channel.state.members), messages: __spreadArray([], channel.state.messages, true), pinnedMessages: __spreadArray([], channel.state.pinnedMessages, true), read: __assign({}, channel.state.read), watcherCount: channel.state.watcher_count, watchers: __assign({}, channel.state.watchers) });
39628
39628
  }
39629
39629
  case 'initStateFromChannel': {
39630
- var channel = action.channel;
39631
- return __assign(__assign({}, state), { loading: false, members: __assign({}, channel.state.members), messages: __spreadArray([], channel.state.messages, true), pinnedMessages: __spreadArray([], channel.state.pinnedMessages, true), read: __assign({}, channel.state.read), watcherCount: channel.state.watcher_count, watchers: __assign({}, channel.state.watchers) });
39630
+ var channel = action.channel, hasMore = action.hasMore;
39631
+ return __assign(__assign({}, state), { hasMore: hasMore, loading: false, members: __assign({}, channel.state.members), messages: __spreadArray([], channel.state.messages, true), pinnedMessages: __spreadArray([], channel.state.pinnedMessages, true), read: __assign({}, channel.state.read), watcherCount: channel.state.watcher_count, watchers: __assign({}, channel.state.watchers) });
39632
39632
  }
39633
39633
  case 'jumpToLatestMessage': {
39634
39634
  return __assign(__assign({}, state), { hasMoreNewer: false, highlightedMessageId: undefined, loading: false, suppressAutoscroll: false });
@@ -45570,6 +45570,7 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
45570
45570
  var hasMoreMessagesProbably = function (returnedCountMessages, limit) {
45571
45571
  return returnedCountMessages === limit;
45572
45572
  };
45573
+ // @deprecated
45573
45574
  var hasNotMoreMessages = function (returnedCountMessages, limit) {
45574
45575
  return returnedCountMessages < limit;
45575
45576
  };
@@ -45599,12 +45600,13 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
45599
45600
  * Calls channel.watch() if it was not already recently called. Waits for watch promise to resolve even if it was invoked previously.
45600
45601
  * @param client
45601
45602
  * @param members
45603
+ * @param options
45602
45604
  * @param type
45603
45605
  * @param id
45604
45606
  * @param channel
45605
45607
  */
45606
45608
  var getChannel = function (_a) {
45607
- var channel = _a.channel, client = _a.client, id = _a.id, members = _a.members, type = _a.type;
45609
+ var channel = _a.channel, client = _a.client, id = _a.id, members = _a.members, options = _a.options, type = _a.type;
45608
45610
  return __awaiter(void 0, void 0, void 0, function () {
45609
45611
  var theChannel, originalCid, queryPromise;
45610
45612
  return __generator(this, function (_b) {
@@ -45629,7 +45631,7 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
45629
45631
  _b.sent();
45630
45632
  return [3 /*break*/, 4];
45631
45633
  case 2:
45632
- WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[originalCid] = theChannel.watch();
45634
+ WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[originalCid] = theChannel.watch(options);
45633
45635
  return [4 /*yield*/, WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[originalCid]];
45634
45636
  case 3:
45635
45637
  _b.sent();
@@ -45761,12 +45763,11 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
45761
45763
  if (!(channel === null || channel === void 0 ? void 0 : channel.cid)) {
45762
45764
  return React__default["default"].createElement("div", { className: className }, EmptyPlaceholder);
45763
45765
  }
45764
- // @ts-ignore
45765
45766
  return React__default["default"].createElement(ChannelInner, __assign({}, props, { channel: channel, key: channel.cid }));
45766
45767
  };
45767
45768
  var ChannelInner = function (props) {
45768
45769
  var _a;
45769
- var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, children = props.children, doDeleteMessageRequest = props.doDeleteMessageRequest, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _b = props.dragAndDropWindow, dragAndDropWindow = _b === void 0 ? false : _b, _c = props.emojiData, emojiData = _c === void 0 ? defaultEmojiData : _c, enrichURLForPreviewConfig = props.enrichURLForPreviewConfig, _d = props.initializeOnMount, initializeOnMount = _d === void 0 ? true : _d, _e = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _e === void 0 ? LoadingErrorIndicator : _e, _f = props.LoadingIndicator, LoadingIndicator = _f === void 0 ? LoadingChannel : _f, maxNumberOfFiles = props.maxNumberOfFiles, _g = props.multipleUploads, multipleUploads = _g === void 0 ? true : _g, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, _h = props.optionalMessageInputProps, optionalMessageInputProps = _h === void 0 ? {} : _h, skipMessageDataMemoization = props.skipMessageDataMemoization;
45770
+ var acceptedFiles = props.acceptedFiles, activeUnreadHandler = props.activeUnreadHandler, channel = props.channel, channelQueryOptions = props.channelQueryOptions, children = props.children, doDeleteMessageRequest = props.doDeleteMessageRequest, doMarkReadRequest = props.doMarkReadRequest, doSendMessageRequest = props.doSendMessageRequest, doUpdateMessageRequest = props.doUpdateMessageRequest, _b = props.dragAndDropWindow, dragAndDropWindow = _b === void 0 ? false : _b, _c = props.emojiData, emojiData = _c === void 0 ? defaultEmojiData : _c, enrichURLForPreviewConfig = props.enrichURLForPreviewConfig, _d = props.initializeOnMount, initializeOnMount = _d === void 0 ? true : _d, _e = props.LoadingErrorIndicator, LoadingErrorIndicator$1 = _e === void 0 ? LoadingErrorIndicator : _e, _f = props.LoadingIndicator, LoadingIndicator = _f === void 0 ? LoadingChannel : _f, maxNumberOfFiles = props.maxNumberOfFiles, _g = props.multipleUploads, multipleUploads = _g === void 0 ? true : _g, onMentionsClick = props.onMentionsClick, onMentionsHover = props.onMentionsHover, _h = props.optionalMessageInputProps, optionalMessageInputProps = _h === void 0 ? {} : _h, skipMessageDataMemoization = props.skipMessageDataMemoization;
45770
45771
  var _j = useChatContext('Channel'), client = _j.client, customClasses = _j.customClasses, latestMessageDatesByChannels = _j.latestMessageDatesByChannels, mutes = _j.mutes, theme = _j.theme;
45771
45772
  var t = useTranslationContext('Channel').t;
45772
45773
  var _k = useChannelContainerClasses({ customClasses: customClasses }), channelClass = _k.channelClass, chatClass = _k.chatClass, chatContainerClass = _k.chatContainerClass, windowsEmojiClass = _k.windowsEmojiClass;
@@ -45865,6 +45866,7 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
45865
45866
  /**
45866
45867
  * As the channel state is not normalized we re-fetch the channel data. Thus, we avoid having to search for user references in the channel state.
45867
45868
  */
45869
+ // FIXME: we should use channelQueryOptions if they are available
45868
45870
  return [4 /*yield*/, channel.query({
45869
45871
  messages: { id_lt: oldestID, limit: DEFAULT_NEXT_CHANNEL_PAGE_SIZE },
45870
45872
  watchers: { limit: DEFAULT_NEXT_CHANNEL_PAGE_SIZE },
@@ -45873,6 +45875,7 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
45873
45875
  /**
45874
45876
  * As the channel state is not normalized we re-fetch the channel data. Thus, we avoid having to search for user references in the channel state.
45875
45877
  */
45878
+ // FIXME: we should use channelQueryOptions if they are available
45876
45879
  _m.sent();
45877
45880
  _m.label = 2;
45878
45881
  case 2:
@@ -45891,14 +45894,14 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
45891
45894
  };
45892
45895
  (function () { return __awaiter(void 0, void 0, void 0, function () {
45893
45896
  var members, _i, _a, member, userId, _b, user, user_id, config, e_1;
45894
- var _c;
45895
- return __generator(this, function (_d) {
45896
- switch (_d.label) {
45897
+ var _c, _d, _e;
45898
+ return __generator(this, function (_f) {
45899
+ switch (_f.label) {
45897
45900
  case 0:
45898
45901
  if (!(!channel.initialized && initializeOnMount)) return [3 /*break*/, 4];
45899
- _d.label = 1;
45902
+ _f.label = 1;
45900
45903
  case 1:
45901
- _d.trys.push([1, 3, , 4]);
45904
+ _f.trys.push([1, 3, , 4]);
45902
45905
  members = [];
45903
45906
  if (!channel.id && ((_c = channel.data) === null || _c === void 0 ? void 0 : _c.members)) {
45904
45907
  for (_i = 0, _a = channel.data.members; _i < _a.length; _i++) {
@@ -45916,14 +45919,14 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
45916
45919
  }
45917
45920
  }
45918
45921
  }
45919
- return [4 /*yield*/, getChannel({ channel: channel, client: client, members: members })];
45922
+ return [4 /*yield*/, getChannel({ channel: channel, client: client, members: members, options: channelQueryOptions })];
45920
45923
  case 2:
45921
- _d.sent();
45924
+ _f.sent();
45922
45925
  config = channel.getConfig();
45923
45926
  setChannelConfig(config);
45924
45927
  return [3 /*break*/, 4];
45925
45928
  case 3:
45926
- e_1 = _d.sent();
45929
+ e_1 = _f.sent();
45927
45930
  dispatch({ error: e_1, type: 'setError' });
45928
45931
  errored = true;
45929
45932
  return [3 /*break*/, 4];
@@ -45931,7 +45934,11 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
45931
45934
  done = true;
45932
45935
  originalTitle.current = document.title;
45933
45936
  if (!errored) {
45934
- dispatch({ channel: channel, type: 'initStateFromChannel' });
45937
+ dispatch({
45938
+ channel: channel,
45939
+ hasMore: hasMoreMessagesProbably(channel.state.messages.length, (_e = (_d = channelQueryOptions === null || channelQueryOptions === void 0 ? void 0 : channelQueryOptions.messages) === null || _d === void 0 ? void 0 : _d.limit) !== null && _e !== void 0 ? _e : DEFAULT_INITIAL_CHANNEL_PAGE_SIZE),
45940
+ type: 'initStateFromChannel',
45941
+ });
45935
45942
  if (channel.countUnread() > 0)
45936
45943
  markRead();
45937
45944
  // The more complex sync logic is done in Chat
@@ -45957,7 +45964,13 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
45957
45964
  client.off('user.deleted', handleEvent);
45958
45965
  notificationTimeouts.forEach(clearTimeout);
45959
45966
  };
45960
- }, [channel.cid, doMarkReadRequest, channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events, initializeOnMount]);
45967
+ }, [
45968
+ channel.cid,
45969
+ channelQueryOptions,
45970
+ doMarkReadRequest,
45971
+ channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.read_events,
45972
+ initializeOnMount,
45973
+ ]);
45961
45974
  React$2.useEffect(function () {
45962
45975
  var _a;
45963
45976
  if (!state.thread)
@@ -45980,22 +45993,17 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
45980
45993
  var loadMore = function (limit) {
45981
45994
  if (limit === void 0) { limit = DEFAULT_NEXT_CHANNEL_PAGE_SIZE; }
45982
45995
  return __awaiter(void 0, void 0, void 0, function () {
45983
- var oldestMessage, notHasMore, oldestID, perPage, queryResponse, e_2, hasMoreMessages;
45996
+ var oldestMessage, oldestID, perPage, queryResponse, e_2, hasMoreMessages;
45984
45997
  var _a;
45985
45998
  return __generator(this, function (_b) {
45986
45999
  switch (_b.label) {
45987
46000
  case 0:
45988
- if (!online.current || !window.navigator.onLine)
46001
+ if (!online.current || !window.navigator.onLine || !state.hasMore)
45989
46002
  return [2 /*return*/, 0];
45990
46003
  oldestMessage = (_a = state === null || state === void 0 ? void 0 : state.messages) === null || _a === void 0 ? void 0 : _a[0];
45991
46004
  if (state.loadingMore || state.loadingMoreNewer || (oldestMessage === null || oldestMessage === void 0 ? void 0 : oldestMessage.status) !== 'received') {
45992
46005
  return [2 /*return*/, 0];
45993
46006
  }
45994
- notHasMore = hasNotMoreMessages(channel.state.messages.length, DEFAULT_INITIAL_CHANNEL_PAGE_SIZE);
45995
- if (notHasMore) {
45996
- loadMoreFinished(false, channel.state.messages);
45997
- return [2 /*return*/, channel.state.messages.length];
45998
- }
45999
46007
  dispatch({ loadingMore: true, type: 'setLoadingMore' });
46000
46008
  oldestID = oldestMessage === null || oldestMessage === void 0 ? void 0 : oldestMessage.id;
46001
46009
  perPage = limit;
@@ -46275,6 +46283,7 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
46275
46283
  return __generator(this, function (_b) {
46276
46284
  switch (_b.label) {
46277
46285
  case 0:
46286
+ // FIXME: should prevent loading more, if state.thread.reply_count === channel.state.threads[parentID].length
46278
46287
  if (state.threadLoadingMore || !state.thread)
46279
46288
  return [2 /*return*/];
46280
46289
  dispatch({ type: 'startLoadingThread' });
@@ -47731,7 +47740,7 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
47731
47740
 
47732
47741
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};
47733
47742
 
47734
- window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var version$1 = '10.19.0';
47743
+ window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var version$1 = '10.20.1';
47735
47744
 
47736
47745
  window.StreamChat.StreamChat=StreamChat;window.StreamChat.logChatPromiseExecution=logChatPromiseExecution;window.StreamChat.Channel=Channel;window.ICAL=window.ICAL||{};var useChat = function (_a) {
47737
47746
  var _b, _c;
@@ -48050,6 +48059,7 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
48050
48059
  }
48051
48060
  if (isLoading)
48052
48061
  return;
48062
+ // FIXME: this triggers loadMore call when a user types messages in thread and the scroll container container expands
48053
48063
  if (reverseOffset < Number(threshold) &&
48054
48064
  typeof loadPreviousPageFn === 'function' &&
48055
48065
  hasPreviousPageFlag) {
@@ -48767,7 +48777,7 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
48767
48777
  var active = props.active, children = props.children, className = props.className, type = props.type;
48768
48778
  if (!active)
48769
48779
  return null;
48770
- return (React__default["default"].createElement("div", { "aria-live": 'polite', className: clsx("str-chat__custom-notification notification-".concat(type), "str-chat__notification", className), "data-testid": 'custom-notification' }, children));
48780
+ return (React__default["default"].createElement("div", { "aria-live": 'polite', className: clsx("str-chat__custom-notification notification-".concat(type), "str-chat__notification", "str-chat-react__notification", className), "data-testid": 'custom-notification' }, children));
48771
48781
  };
48772
48782
  var CustomNotification = React__default["default"].memo(UnMemoizedCustomNotification);
48773
48783
 
@@ -51027,6 +51037,7 @@ var StreamChatReact = (function (exports, React$2, streamChat, ReactDOM) {
51027
51037
  var ThreadMessageList = virtualized ? VirtualizedMessageList : MessageList;
51028
51038
  React$2.useEffect(function () {
51029
51039
  if ((thread === null || thread === void 0 ? void 0 : thread.id) && (thread === null || thread === void 0 ? void 0 : thread.reply_count)) {
51040
+ // FIXME: integrators can customize channel query options but cannot customize channel.getReplies() options
51030
51041
  loadMoreThread();
51031
51042
  }
51032
51043
  }, []);