stream-chat-react 11.9.0 → 11.11.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.
Files changed (51) hide show
  1. package/dist/{Window-5e0717c0.js → Window-194c5448.js} +2094 -33
  2. package/dist/browser.full-bundle.js +2150 -65
  3. package/dist/browser.full-bundle.js.map +1 -1
  4. package/dist/browser.full-bundle.min.js +4 -4
  5. package/dist/browser.full-bundle.min.js.map +1 -1
  6. package/dist/components/Channel/Channel.d.ts.map +1 -1
  7. package/dist/components/Channel/Channel.js +19 -10
  8. package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
  9. package/dist/components/ChannelList/hooks/usePaginatedChannels.js +11 -10
  10. package/dist/components/Chat/hooks/useCreateChatClient.d.ts +10 -0
  11. package/dist/components/Chat/hooks/useCreateChatClient.d.ts.map +1 -0
  12. package/dist/components/Chat/hooks/useCreateChatClient.js +31 -0
  13. package/dist/components/Chat/index.d.ts +1 -0
  14. package/dist/components/Chat/index.d.ts.map +1 -1
  15. package/dist/components/Chat/index.js +1 -0
  16. package/dist/components/Emojis/index.cjs.js +1 -1
  17. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts.map +1 -1
  18. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.js +9 -13
  19. package/dist/components/Message/Message.d.ts.map +1 -1
  20. package/dist/components/Message/Message.js +2 -2
  21. package/dist/components/Message/types.d.ts +5 -0
  22. package/dist/components/Message/types.d.ts.map +1 -1
  23. package/dist/components/MessageList/MessageList.d.ts +2 -2
  24. package/dist/components/MessageList/MessageList.d.ts.map +1 -1
  25. package/dist/components/MessageList/MessageList.js +12 -12
  26. package/dist/components/MessageList/VirtualizedMessageList.d.ts +2 -2
  27. package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
  28. package/dist/components/MessageList/VirtualizedMessageList.js +7 -3
  29. package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts.map +1 -1
  30. package/dist/components/MessageList/VirtualizedMessageListComponents.js +2 -2
  31. package/dist/components/Reactions/ReactionsList.d.ts +5 -0
  32. package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
  33. package/dist/components/Reactions/ReactionsList.js +2 -2
  34. package/dist/components/Reactions/ReactionsListModal.d.ts +3 -2
  35. package/dist/components/Reactions/ReactionsListModal.d.ts.map +1 -1
  36. package/dist/components/Reactions/ReactionsListModal.js +16 -6
  37. package/dist/components/Reactions/hooks/useProcessReactions.d.ts +5 -2
  38. package/dist/components/Reactions/hooks/useProcessReactions.d.ts.map +1 -1
  39. package/dist/components/Reactions/hooks/useProcessReactions.js +10 -3
  40. package/dist/components/Reactions/types.d.ts +4 -1
  41. package/dist/components/Reactions/types.d.ts.map +1 -1
  42. package/dist/constants/limits.d.ts +1 -0
  43. package/dist/constants/limits.d.ts.map +1 -1
  44. package/dist/constants/limits.js +1 -0
  45. package/dist/context/MessageContext.d.ts +5 -0
  46. package/dist/context/MessageContext.d.ts.map +1 -1
  47. package/dist/index.cjs.js +60 -32
  48. package/dist/version.d.ts +1 -1
  49. package/dist/version.d.ts.map +1 -1
  50. package/dist/version.js +1 -1
  51. package/package.json +5 -3
@@ -16,6 +16,7 @@ import { useChannelActionContext, } from '../../context/ChannelActionContext';
16
16
  import { useChannelStateContext, } from '../../context/ChannelStateContext';
17
17
  import { useChatContext } from '../../context/ChatContext';
18
18
  import { useComponentContext } from '../../context/ComponentContext';
19
+ import { DEFAULT_NEXT_CHANNEL_PAGE_SIZE } from '../../constants/limits';
19
20
  function captureResizeObserverExceededError(e) {
20
21
  if (e.message === 'ResizeObserver loop completed with undelivered notifications.' ||
21
22
  e.message === 'ResizeObserver loop limit exceeded') {
@@ -47,11 +48,11 @@ function calculateInitialTopMostItemIndex(messages, highlightedMessageId) {
47
48
  }
48
49
  var VirtualizedMessageListWithContext = function (props) {
49
50
  var _a, _b;
50
- var additionalMessageInputProps = props.additionalMessageInputProps, _c = props.additionalVirtuosoProps, additionalVirtuosoProps = _c === void 0 ? {} : _c, channel = props.channel, channelUnreadUiState = props.channelUnreadUiState, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageActions = props.customMessageActions, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _d = props.disableDateSeparator, disableDateSeparator = _d === void 0 ? true : _d, groupStyles = props.groupStyles, hasMoreNewer = props.hasMoreNewer, head = props.head, _e = props.hideDeletedMessages, hideDeletedMessages = _e === void 0 ? false : _e, _f = props.hideNewMessageSeparator, hideNewMessageSeparator = _f === void 0 ? false : _f, highlightedMessageId = props.highlightedMessageId, jumpToLatestMessage = props.jumpToLatestMessage, loadingMore = props.loadingMore, loadMore = props.loadMore, loadMoreNewer = props.loadMoreNewer, MessageUIComponentFromProps = props.Message, messageActions = props.messageActions, _g = props.messageLimit, messageLimit = _g === void 0 ? 100 : _g, messages = props.messages, notifications = props.notifications,
51
+ var additionalMessageInputProps = props.additionalMessageInputProps, _c = props.additionalVirtuosoProps, additionalVirtuosoProps = _c === void 0 ? {} : _c, channel = props.channel, channelUnreadUiState = props.channelUnreadUiState, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageActions = props.customMessageActions, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _d = props.disableDateSeparator, disableDateSeparator = _d === void 0 ? true : _d, groupStyles = props.groupStyles, hasMoreNewer = props.hasMoreNewer, head = props.head, _e = props.hideDeletedMessages, hideDeletedMessages = _e === void 0 ? false : _e, _f = props.hideNewMessageSeparator, hideNewMessageSeparator = _f === void 0 ? false : _f, highlightedMessageId = props.highlightedMessageId, jumpToLatestMessage = props.jumpToLatestMessage, loadingMore = props.loadingMore, loadMore = props.loadMore, loadMoreNewer = props.loadMoreNewer, MessageUIComponentFromProps = props.Message, messageActions = props.messageActions, _g = props.messageLimit, messageLimit = _g === void 0 ? DEFAULT_NEXT_CHANNEL_PAGE_SIZE : _g, messages = props.messages, notifications = props.notifications,
51
52
  // TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
52
53
  _h = props.overscan,
53
54
  // TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
54
- overscan = _h === void 0 ? 0 : _h, read = props.read, _j = props.returnAllReadData, returnAllReadData = _j === void 0 ? false : _j, scrollSeekPlaceHolder = props.scrollSeekPlaceHolder, _k = props.scrollToLatestMessageOnFocus, scrollToLatestMessageOnFocus = _k === void 0 ? false : _k, _l = props.separateGiphyPreview, separateGiphyPreview = _l === void 0 ? false : _l, _m = props.shouldGroupByUser, shouldGroupByUser = _m === void 0 ? false : _m, showUnreadNotificationAlways = props.showUnreadNotificationAlways, _o = props.stickToBottomScrollBehavior, stickToBottomScrollBehavior = _o === void 0 ? 'smooth' : _o, suppressAutoscroll = props.suppressAutoscroll, threadList = props.threadList;
55
+ overscan = _h === void 0 ? 0 : _h, read = props.read, _j = props.returnAllReadData, returnAllReadData = _j === void 0 ? false : _j, scrollSeekPlaceHolder = props.scrollSeekPlaceHolder, _k = props.scrollToLatestMessageOnFocus, scrollToLatestMessageOnFocus = _k === void 0 ? false : _k, _l = props.separateGiphyPreview, separateGiphyPreview = _l === void 0 ? false : _l, _m = props.shouldGroupByUser, shouldGroupByUser = _m === void 0 ? false : _m, showUnreadNotificationAlways = props.showUnreadNotificationAlways, sortReactionDetails = props.sortReactionDetails, sortReactions = props.sortReactions, _o = props.stickToBottomScrollBehavior, stickToBottomScrollBehavior = _o === void 0 ? 'smooth' : _o, suppressAutoscroll = props.suppressAutoscroll, threadList = props.threadList;
55
56
  var virtuosoComponentsFromProps = additionalVirtuosoProps.components, overridingVirtuosoProps = __rest(additionalVirtuosoProps, ["components"]);
56
57
  // Stops errors generated from react-virtuoso to bubble up
57
58
  // to Sentry or other tracking tools.
@@ -179,8 +180,9 @@ var VirtualizedMessageListWithContext = function (props) {
179
180
  }
180
181
  };
181
182
  var atTopStateChange = function (isAtTop) {
182
- if (isAtTop)
183
+ if (isAtTop) {
183
184
  loadMore === null || loadMore === void 0 ? void 0 : loadMore(messageLimit);
185
+ }
184
186
  };
185
187
  useEffect(function () {
186
188
  var scrollTimeout;
@@ -223,6 +225,8 @@ var VirtualizedMessageListWithContext = function (props) {
223
225
  ownMessagesReadByOthers: ownMessagesReadByOthers,
224
226
  processedMessages: processedMessages,
225
227
  shouldGroupByUser: shouldGroupByUser,
228
+ sortReactionDetails: sortReactionDetails,
229
+ sortReactions: sortReactions,
226
230
  threadList: threadList,
227
231
  unreadMessageCount: channelUnreadUiState === null || channelUnreadUiState === void 0 ? void 0 : channelUnreadUiState.unread_messages,
228
232
  UnreadMessagesSeparator: UnreadMessagesSeparator,
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualizedMessageListComponents.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/VirtualizedMessageListComponents.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAMrD,OAAO,EAAU,aAAa,EAAuB,MAAM,eAAe,CAAC;AAI3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhF,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,UAElF;AAED,wBAAgB,uBAAuB,CAAC,iBAAiB,EAAE,MAAM,UAEhE;AAED,eAAO,MAAM,wBAAwB,0JAGuC,IAAI,uGAG7D,SAAS,WAAW,CAAC,EAAE,UAUjC,CAAC;AAEV,KAAK,4BAA4B,CAC/B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,OAAO,CAAC,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;CAC/C,CAAC;AAGF,eAAO,MAAM,IAAI;;;;;;;0EAyBhB,CAAC;AACF,eAAO,MAAM,MAAM,gLAgBlB,CAAC;AACF,eAAO,MAAM,gBAAgB,yKAe5B,CAAC;AACF,eAAO,MAAM,MAAM,kHAKlB,CAAC;AACF,eAAO,MAAM,eAAe,oGAGX,MAAM,SACd,WAAW,mFA+EnB,CAAC"}
1
+ {"version":3,"file":"VirtualizedMessageListComponents.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/VirtualizedMessageListComponents.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAMrD,OAAO,EAAU,aAAa,EAAuB,MAAM,eAAe,CAAC;AAI3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhF,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,UAElF;AAED,wBAAgB,uBAAuB,CAAC,iBAAiB,EAAE,MAAM,UAEhE;AAED,eAAO,MAAM,wBAAwB,0JAGuC,IAAI,uGAG7D,SAAS,WAAW,CAAC,EAAE,UAUjC,CAAC;AAEV,KAAK,4BAA4B,CAC/B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,OAAO,CAAC,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;CAC/C,CAAC;AAGF,eAAO,MAAM,IAAI;;;;;;;0EAyBhB,CAAC;AACF,eAAO,MAAM,MAAM,gLAgBlB,CAAC;AACF,eAAO,MAAM,gBAAgB,yKAe5B,CAAC;AACF,eAAO,MAAM,MAAM,kHAKlB,CAAC;AACF,eAAO,MAAM,eAAe,oGAGX,MAAM,SACd,WAAW,mFAmFnB,CAAC"}
@@ -62,7 +62,7 @@ export var Footer = function () {
62
62
  };
63
63
  export var messageRenderer = function (virtuosoIndex, _data, virtuosoContext) {
64
64
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
65
- var additionalMessageInputProps = virtuosoContext.additionalMessageInputProps, closeReactionSelectorOnClick = virtuosoContext.closeReactionSelectorOnClick, customMessageActions = virtuosoContext.customMessageActions, customMessageRenderer = virtuosoContext.customMessageRenderer, DateSeparator = virtuosoContext.DateSeparator, firstUnreadMessageId = virtuosoContext.firstUnreadMessageId, lastReadMessageId = virtuosoContext.lastReadMessageId, lastReceivedMessageId = virtuosoContext.lastReceivedMessageId, MessageUIComponent = virtuosoContext.Message, messageActions = virtuosoContext.messageActions, MessageSystem = virtuosoContext.MessageSystem, numItemsPrepended = virtuosoContext.numItemsPrepended, ownMessagesReadByOthers = virtuosoContext.ownMessagesReadByOthers, messageList = virtuosoContext.processedMessages, shouldGroupByUser = virtuosoContext.shouldGroupByUser, _k = virtuosoContext.unreadMessageCount, unreadMessageCount = _k === void 0 ? 0 : _k, UnreadMessagesSeparator = virtuosoContext.UnreadMessagesSeparator, virtuosoRef = virtuosoContext.virtuosoRef;
65
+ var additionalMessageInputProps = virtuosoContext.additionalMessageInputProps, closeReactionSelectorOnClick = virtuosoContext.closeReactionSelectorOnClick, customMessageActions = virtuosoContext.customMessageActions, customMessageRenderer = virtuosoContext.customMessageRenderer, DateSeparator = virtuosoContext.DateSeparator, firstUnreadMessageId = virtuosoContext.firstUnreadMessageId, lastReadMessageId = virtuosoContext.lastReadMessageId, lastReceivedMessageId = virtuosoContext.lastReceivedMessageId, MessageUIComponent = virtuosoContext.Message, messageActions = virtuosoContext.messageActions, MessageSystem = virtuosoContext.MessageSystem, numItemsPrepended = virtuosoContext.numItemsPrepended, ownMessagesReadByOthers = virtuosoContext.ownMessagesReadByOthers, messageList = virtuosoContext.processedMessages, shouldGroupByUser = virtuosoContext.shouldGroupByUser, sortReactionDetails = virtuosoContext.sortReactionDetails, sortReactions = virtuosoContext.sortReactions, _k = virtuosoContext.unreadMessageCount, unreadMessageCount = _k === void 0 ? 0 : _k, UnreadMessagesSeparator = virtuosoContext.UnreadMessagesSeparator, virtuosoRef = virtuosoContext.virtuosoRef;
66
66
  var streamMessageIndex = calculateItemIndex(virtuosoIndex, numItemsPrepended);
67
67
  if (customMessageRenderer) {
68
68
  return customMessageRenderer(messageList, streamMessageIndex);
@@ -85,7 +85,7 @@ export var messageRenderer = function (virtuosoIndex, _data, virtuosoContext) {
85
85
  var isLastReadMessage = message.id === lastReadMessageId;
86
86
  var showUnreadSeparator = isLastReadMessage && !isNewestMessage && (firstUnreadMessageId || unreadMessageCount > 0); // unread count can be 0 if the user marks unread only own messages
87
87
  return (React.createElement(React.Fragment, null,
88
- React.createElement(Message, { additionalMessageInputProps: additionalMessageInputProps, autoscrollToBottom: (_j = virtuosoRef.current) === null || _j === void 0 ? void 0 : _j.autoscrollToBottom, closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: customMessageActions, endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, groupedByUser: groupedByUser, lastReceivedId: lastReceivedMessageId, message: message, Message: MessageUIComponent, messageActions: messageActions, readBy: ownMessagesReadByOthers[message.id] || [] }),
88
+ React.createElement(Message, { additionalMessageInputProps: additionalMessageInputProps, autoscrollToBottom: (_j = virtuosoRef.current) === null || _j === void 0 ? void 0 : _j.autoscrollToBottom, closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: customMessageActions, endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, groupedByUser: groupedByUser, lastReceivedId: lastReceivedMessageId, message: message, Message: MessageUIComponent, messageActions: messageActions, readBy: ownMessagesReadByOthers[message.id] || [], sortReactionDetails: sortReactionDetails, sortReactions: sortReactions }),
89
89
  showUnreadSeparator && (React.createElement("div", { className: 'str-chat__unread-messages-separator-wrapper' },
90
90
  React.createElement(UnreadMessagesSeparator, { unreadCount: unreadMessageCount })))));
91
91
  };
@@ -3,6 +3,7 @@ import type { ReactionResponse } from 'stream-chat';
3
3
  import type { ReactEventHandler } from '../Message/types';
4
4
  import type { DefaultStreamChatGenerics } from '../../types/types';
5
5
  import type { ReactionOptions } from './reactionOptions';
6
+ import type { ReactionDetailsComparator, ReactionsComparator } from './types';
6
7
  import { MessageContextValue } from '../../context';
7
8
  export type ReactionsListProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Partial<Pick<MessageContextValue<StreamChatGenerics>, 'handleFetchReactions'>> & {
8
9
  /** Custom on click handler for an individual reaction, defaults to `onReactionListClick` from the `MessageContext` */
@@ -17,6 +18,10 @@ export type ReactionsListProps<StreamChatGenerics extends DefaultStreamChatGener
17
18
  reactions?: ReactionResponse<StreamChatGenerics>[];
18
19
  /** Display the reactions in the list in reverse order, defaults to false */
19
20
  reverse?: boolean;
21
+ /** Comparator function to sort the list of reacted users, defaults to alphabetical order */
22
+ sortReactionDetails?: ReactionDetailsComparator;
23
+ /** Comparator function to sort reactions, defaults to alphabetical order */
24
+ sortReactions?: ReactionsComparator;
20
25
  };
21
26
  /**
22
27
  * Component that displays a list of reactions on a message.
@@ -1 +1 @@
1
- {"version":3,"file":"ReactionsList.d.ts","sourceRoot":"","sources":["../../../src/components/Reactions/ReactionsList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAyB,MAAM,eAAe,CAAC;AAG3E,MAAM,MAAM,kBAAkB,CAC5B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,EAAE,sBAAsB,CAAC,CAAC,GAAG;IACnF,sHAAsH;IACtH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,iFAAiF;IACjF,aAAa,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,CAAC;IACvD,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,+DAA+D;IAC/D,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,8DAA8D;IAC9D,SAAS,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,CAAC;IACnD,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AA+EF;;GAEG;AACH,eAAO,MAAM,aAAa,+JAAwE,CAAC"}
1
+ {"version":3,"file":"ReactionsList.d.ts","sourceRoot":"","sources":["../../../src/components/Reactions/ReactionsList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9E,OAAO,EAAE,mBAAmB,EAAyB,MAAM,eAAe,CAAC;AAG3E,MAAM,MAAM,kBAAkB,CAC5B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,EAAE,sBAAsB,CAAC,CAAC,GAAG;IACnF,sHAAsH;IACtH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,iFAAiF;IACjF,aAAa,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,CAAC;IACvD,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,+DAA+D;IAC/D,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,8DAA8D;IAC9D,SAAS,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,CAAC;IACnD,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4FAA4F;IAC5F,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;IAChD,4EAA4E;IAC5E,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC,CAAC;AAgFF;;GAEG;AACH,eAAO,MAAM,aAAa,+JAAwE,CAAC"}
@@ -6,7 +6,7 @@ import { ReactionsListModal } from './ReactionsListModal';
6
6
  import { useTranslationContext } from '../../context';
7
7
  import { MAX_MESSAGE_REACTIONS_TO_FETCH } from '../Message/hooks';
8
8
  var UnMemoizedReactionsList = function (props) {
9
- var handleFetchReactions = props.handleFetchReactions, _a = props.reverse, reverse = _a === void 0 ? false : _a, rest = __rest(props, ["handleFetchReactions", "reverse"]);
9
+ var handleFetchReactions = props.handleFetchReactions, _a = props.reverse, reverse = _a === void 0 ? false : _a, sortReactionDetails = props.sortReactionDetails, rest = __rest(props, ["handleFetchReactions", "reverse", "sortReactionDetails"]);
10
10
  var _b = useProcessReactions(rest), existingReactions = _b.existingReactions, hasReactions = _b.hasReactions, totalReactionCount = _b.totalReactionCount;
11
11
  var _c = useState(null), selectedReactionType = _c[0], setSelectedReactionType = _c[1];
12
12
  var t = useTranslationContext('ReactionsList').t;
@@ -36,7 +36,7 @@ var UnMemoizedReactionsList = function (props) {
36
36
  }),
37
37
  React.createElement("li", null,
38
38
  React.createElement("span", { className: 'str-chat__reaction-list--counter' }, totalReactionCount)))),
39
- React.createElement(ReactionsListModal, { handleFetchReactions: handleFetchReactions, onClose: function () { return setSelectedReactionType(null); }, onSelectedReactionTypeChange: setSelectedReactionType, open: selectedReactionType !== null, reactions: existingReactions, selectedReactionType: selectedReactionType })));
39
+ React.createElement(ReactionsListModal, { handleFetchReactions: handleFetchReactions, onClose: function () { return setSelectedReactionType(null); }, onSelectedReactionTypeChange: setSelectedReactionType, open: selectedReactionType !== null, reactions: existingReactions, selectedReactionType: selectedReactionType, sortReactionDetails: sortReactionDetails })));
40
40
  };
41
41
  /**
42
42
  * Component that displays a list of reactions on a message.
@@ -1,13 +1,14 @@
1
1
  import React from 'react';
2
+ import type { ReactionDetailsComparator, ReactionSummary } from './types';
2
3
  import { ModalProps } from '../Modal';
3
- import { ReactionSummary } from './types';
4
4
  import { MessageContextValue } from '../../context';
5
5
  import { DefaultStreamChatGenerics } from '../../types/types';
6
6
  type ReactionsListModalProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = ModalProps & Partial<Pick<MessageContextValue<StreamChatGenerics>, 'handleFetchReactions'>> & {
7
7
  reactions: ReactionSummary[];
8
8
  selectedReactionType: string | null;
9
9
  onSelectedReactionTypeChange?: (reactionType: string) => void;
10
+ sortReactionDetails?: ReactionDetailsComparator;
10
11
  };
11
- export declare function ReactionsListModal({ handleFetchReactions, onSelectedReactionTypeChange, reactions, selectedReactionType, ...modalProps }: ReactionsListModalProps): React.JSX.Element;
12
+ export declare function ReactionsListModal({ handleFetchReactions, onSelectedReactionTypeChange, reactions, selectedReactionType, sortReactionDetails: propSortReactionDetails, ...modalProps }: ReactionsListModalProps): React.JSX.Element;
12
13
  export {};
13
14
  //# sourceMappingURL=ReactionsListModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReactionsListModal.d.ts","sourceRoot":"","sources":["../../../src/components/Reactions/ReactionsListModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAS,UAAU,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,KAAK,uBAAuB,CAC1B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,UAAU,GACZ,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,EAAE,sBAAsB,CAAC,CAAC,GAAG;IAC/E,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,4BAA4B,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/D,CAAC;AAEJ,wBAAgB,kBAAkB,CAAC,EACjC,oBAAoB,EACpB,4BAA4B,EAC5B,SAAS,EACT,oBAAoB,EACpB,GAAG,UAAU,EACd,EAAE,uBAAuB,qBAyEzB"}
1
+ {"version":3,"file":"ReactionsListModal.d.ts","sourceRoot":"","sources":["../../../src/components/Reactions/ReactionsListModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1E,OAAO,EAAS,UAAU,EAAE,MAAM,UAAU,CAAC;AAI7C,OAAO,EAAE,mBAAmB,EAAqB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,KAAK,uBAAuB,CAC1B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,UAAU,GACZ,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,EAAE,sBAAsB,CAAC,CAAC,GAAG;IAC/E,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,4BAA4B,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;CACjD,CAAC;AAQJ,wBAAgB,kBAAkB,CAAC,EACjC,oBAAoB,EACpB,4BAA4B,EAC5B,SAAS,EACT,oBAAoB,EACpB,mBAAmB,EAAE,uBAAuB,EAC5C,GAAG,UAAU,EACd,EAAE,uBAAuB,qBAgFzB"}
@@ -5,24 +5,34 @@ import { Modal } from '../Modal';
5
5
  import { useFetchReactions } from './hooks/useFetchReactions';
6
6
  import { LoadingIndicator } from '../Loading';
7
7
  import { Avatar } from '../Avatar';
8
+ import { useMessageContext } from '../../context';
9
+ var defaultSortReactionDetails = function (a, b) {
10
+ var _a, _b, _c, _d, _e, _f;
11
+ var aName = (_b = (_a = a.user) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : (_c = a.user) === null || _c === void 0 ? void 0 : _c.id;
12
+ var bName = (_e = (_d = b.user) === null || _d === void 0 ? void 0 : _d.name) !== null && _e !== void 0 ? _e : (_f = b.user) === null || _f === void 0 ? void 0 : _f.id;
13
+ return aName ? (bName ? aName.localeCompare(bName, 'en') : -1) : 1;
14
+ };
8
15
  export function ReactionsListModal(_a) {
9
- var _b;
10
- var handleFetchReactions = _a.handleFetchReactions, onSelectedReactionTypeChange = _a.onSelectedReactionTypeChange, reactions = _a.reactions, selectedReactionType = _a.selectedReactionType, modalProps = __rest(_a, ["handleFetchReactions", "onSelectedReactionTypeChange", "reactions", "selectedReactionType"]);
16
+ var _b, _c;
17
+ var handleFetchReactions = _a.handleFetchReactions, onSelectedReactionTypeChange = _a.onSelectedReactionTypeChange, reactions = _a.reactions, selectedReactionType = _a.selectedReactionType, propSortReactionDetails = _a.sortReactionDetails, modalProps = __rest(_a, ["handleFetchReactions", "onSelectedReactionTypeChange", "reactions", "selectedReactionType", "sortReactionDetails"]);
11
18
  var selectedReaction = reactions.find(function (_a) {
12
19
  var reactionType = _a.reactionType;
13
20
  return reactionType === selectedReactionType;
14
21
  });
15
22
  var SelectedEmojiComponent = (_b = selectedReaction === null || selectedReaction === void 0 ? void 0 : selectedReaction.EmojiComponent) !== null && _b !== void 0 ? _b : null;
16
- var _c = useFetchReactions({
23
+ var _d = useFetchReactions({
17
24
  handleFetchReactions: handleFetchReactions,
18
25
  shouldFetch: modalProps.open,
19
- }), areReactionsLoading = _c.isLoading, allReactions = _c.reactions;
26
+ }), areReactionsLoading = _d.isLoading, allReactions = _d.reactions;
27
+ var contextSortReactionDetails = useMessageContext('ReactionsListModal').sortReactionDetails;
28
+ var sortReactionDetails = (_c = propSortReactionDetails !== null && propSortReactionDetails !== void 0 ? propSortReactionDetails : contextSortReactionDetails) !== null && _c !== void 0 ? _c : defaultSortReactionDetails;
20
29
  var currentReactions = useMemo(function () {
21
30
  if (!selectedReactionType) {
22
31
  return [];
23
32
  }
24
- return allReactions.filter(function (reaction) { return reaction.type === selectedReactionType && reaction.user; });
25
- }, [allReactions, selectedReactionType]);
33
+ var unsortedCurrentReactions = allReactions.filter(function (reaction) { return reaction.type === selectedReactionType && reaction.user; });
34
+ return unsortedCurrentReactions.sort(sortReactionDetails);
35
+ }, [allReactions, selectedReactionType, sortReactionDetails]);
26
36
  return (React.createElement(Modal, __assign({}, modalProps),
27
37
  React.createElement("div", { className: 'str-chat__message-reactions-details', "data-testid": 'reactions-list-modal' },
28
38
  React.createElement("div", { className: 'str-chat__message-reactions-details-reaction-types' }, reactions.map(function (_a) {
@@ -1,8 +1,11 @@
1
1
  import type { ReactionsListProps } from '../ReactionsList';
2
2
  import type { DefaultStreamChatGenerics } from '../../../types/types';
3
- import { ReactionSummary } from '../types';
3
+ import type { ReactionsComparator, ReactionSummary } from '../types';
4
4
  type SharedReactionListProps = 'own_reactions' | 'reaction_counts' | 'reactionOptions' | 'reactions';
5
- type UseProcessReactionsParams = Pick<ReactionsListProps, SharedReactionListProps>;
5
+ type UseProcessReactionsParams = Pick<ReactionsListProps, SharedReactionListProps> & {
6
+ sortReactions?: ReactionsComparator;
7
+ };
8
+ export declare const defaultReactionsSort: ReactionsComparator;
6
9
  export declare const useProcessReactions: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(params: UseProcessReactionsParams) => {
7
10
  existingReactions: ReactionSummary[];
8
11
  hasReactions: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useProcessReactions.d.ts","sourceRoot":"","sources":["../../../../src/components/Reactions/hooks/useProcessReactions.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,KAAK,uBAAuB,GACxB,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,WAAW,CAAC;AAEhB,KAAK,yBAAyB,GAAG,IAAI,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;AAEnF,eAAO,MAAM,mBAAmB,6FAGtB,yBAAyB;;;;CAwFlC,CAAC"}
1
+ {"version":3,"file":"useProcessReactions.d.ts","sourceRoot":"","sources":["../../../../src/components/Reactions/hooks/useProcessReactions.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAErE,KAAK,uBAAuB,GACxB,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,WAAW,CAAC;AAEhB,KAAK,yBAAyB,GAAG,IAAI,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,GAAG;IACnF,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,mBACiB,CAAC;AAErD,eAAO,MAAM,mBAAmB,6FAGtB,yBAAyB;;;;CAiGlC,CAAC"}
@@ -1,10 +1,15 @@
1
1
  import { useCallback, useMemo } from 'react';
2
2
  import { useComponentContext, useMessageContext } from '../../../context';
3
+ export var defaultReactionsSort = function (a, b) {
4
+ return a.reactionType.localeCompare(b.reactionType, 'en');
5
+ };
3
6
  export var useProcessReactions = function (params) {
4
- var propOwnReactions = params.own_reactions, propReactionCounts = params.reaction_counts, propReactionOptions = params.reactionOptions, propReactions = params.reactions;
5
- var message = useMessageContext('useProcessReactions').message;
7
+ var _a;
8
+ var propOwnReactions = params.own_reactions, propReactionCounts = params.reaction_counts, propReactionOptions = params.reactionOptions, propReactions = params.reactions, propSortReactions = params.sortReactions;
9
+ var _b = useMessageContext('useProcessReactions'), message = _b.message, contextSortReactions = _b.sortReactions;
6
10
  var contextReactionOptions = useComponentContext('useProcessReactions').reactionOptions;
7
11
  var reactionOptions = propReactionOptions !== null && propReactionOptions !== void 0 ? propReactionOptions : contextReactionOptions;
12
+ var sortReactions = (_a = propSortReactions !== null && propSortReactions !== void 0 ? propSortReactions : contextSortReactions) !== null && _a !== void 0 ? _a : defaultReactionsSort;
8
13
  var latestReactions = propReactions || message.latest_reactions;
9
14
  var ownReactions = propOwnReactions || (message === null || message === void 0 ? void 0 : message.own_reactions);
10
15
  var reactionCounts = propReactionCounts || message.reaction_counts;
@@ -31,7 +36,7 @@ export var useProcessReactions = function (params) {
31
36
  if (!reactionCounts) {
32
37
  return [];
33
38
  }
34
- return Object.entries(reactionCounts).flatMap(function (_a) {
39
+ var unsortedReactions = Object.entries(reactionCounts).flatMap(function (_a) {
35
40
  var reactionType = _a[0], reactionCount = _a[1];
36
41
  if (reactionCount === 0 || !isSupportedReaction(reactionType)) {
37
42
  return [];
@@ -46,12 +51,14 @@ export var useProcessReactions = function (params) {
46
51
  },
47
52
  ];
48
53
  });
54
+ return unsortedReactions.sort(sortReactions);
49
55
  }, [
50
56
  getEmojiByReactionType,
51
57
  getLatestReactedUserNames,
52
58
  isOwnReaction,
53
59
  isSupportedReaction,
54
60
  reactionCounts,
61
+ sortReactions,
55
62
  ]);
56
63
  var hasReactions = existingReactions.length > 0;
57
64
  var totalReactionCount = useMemo(function () { return existingReactions.reduce(function (total, _a) {
@@ -1,4 +1,5 @@
1
- import { ComponentType } from 'react';
1
+ import type { ComponentType } from 'react';
2
+ import type { ReactionResponse } from 'stream-chat';
2
3
  export interface ReactionSummary {
3
4
  EmojiComponent: ComponentType | null;
4
5
  isOwnReaction: boolean;
@@ -6,4 +7,6 @@ export interface ReactionSummary {
6
7
  reactionCount: number;
7
8
  reactionType: string;
8
9
  }
10
+ export type ReactionsComparator = (a: ReactionSummary, b: ReactionSummary) => number;
11
+ export type ReactionDetailsComparator = (a: ReactionResponse, b: ReactionResponse) => number;
9
12
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Reactions/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Reactions/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,KAAK,MAAM,CAAC;AAErF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export declare const DEFAULT_INITIAL_CHANNEL_PAGE_SIZE = 25;
2
2
  export declare const DEFAULT_NEXT_CHANNEL_PAGE_SIZE = 100;
3
3
  export declare const DEFAULT_THREAD_PAGE_SIZE = 50;
4
+ export declare const DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD = 250;
4
5
  //# sourceMappingURL=limits.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/constants/limits.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iCAAiC,KAAK,CAAC;AACpD,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,eAAO,MAAM,wBAAwB,KAAK,CAAC"}
1
+ {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/constants/limits.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iCAAiC,KAAK,CAAC;AACpD,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,kCAAkC,MAAM,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export var DEFAULT_INITIAL_CHANNEL_PAGE_SIZE = 25;
2
2
  export var DEFAULT_NEXT_CHANNEL_PAGE_SIZE = 100;
3
3
  export var DEFAULT_THREAD_PAGE_SIZE = 50;
4
+ export var DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD = 250;
@@ -8,6 +8,7 @@ import type { ReactEventHandler } from '../components/Message/types';
8
8
  import type { MessageActionsArray } from '../components/Message/utils';
9
9
  import type { MessageInputProps } from '../components/MessageInput/MessageInput';
10
10
  import type { GroupStyle } from '../components/MessageList/utils';
11
+ import type { ReactionDetailsComparator, ReactionsComparator } from '../components/Reactions/types';
11
12
  import type { RenderTextOptions } from '../components/Message/renderText';
12
13
  import type { DefaultStreamChatGenerics, UnknownType } from '../types/types';
13
14
  export type CustomMessageActions<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
@@ -105,6 +106,10 @@ export type MessageContextValue<StreamChatGenerics extends DefaultStreamChatGene
105
106
  readBy?: UserResponse<StreamChatGenerics>[];
106
107
  /** Custom function to render message text content, defaults to the renderText function: [utils](https://github.com/GetStream/stream-chat-react/blob/master/src/utils.tsx) */
107
108
  renderText?: (text?: string, mentioned_users?: UserResponse<StreamChatGenerics>[], options?: RenderTextOptions) => JSX.Element | null;
109
+ /** Comparator function to sort the list of reacted users, defaults to alphabetical order */
110
+ sortReactionDetails?: ReactionDetailsComparator;
111
+ /** Comparator function to sort reactions, defaults to alphabetical order */
112
+ sortReactions?: ReactionsComparator;
108
113
  /** Whether or not the Message is in a Thread */
109
114
  threadList?: boolean;
110
115
  /** render HTML instead of markdown. Posting HTML is only allowed server-side */
@@ -1 +1 @@
1
- {"version":3,"file":"MessageContext.d.ts","sourceRoot":"","sources":["../../src/context/MessageContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MessageContext.d.ts","sourceRoot":"","sources":["../../src/context/MessageContext.tsx"],"names":[],"mappings":"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"}
package/dist/index.cjs.js CHANGED
@@ -2,8 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var Window = require('./Window-5e0717c0.js');
5
+ var Window = require('./Window-194c5448.js');
6
6
  var React = require('react');
7
+ var streamChat = require('stream-chat');
7
8
  var reactVirtuoso = require('react-virtuoso');
8
9
  var throttle = require('lodash.throttle');
9
10
  require('emoji-regex');
@@ -13,7 +14,6 @@ require('@braintree/sanitize-url');
13
14
  require('react-image-gallery');
14
15
  require('react-dom');
15
16
  require('react-fast-compare');
16
- require('stream-chat');
17
17
  require('lodash.debounce');
18
18
  require('dayjs');
19
19
  require('dayjs/plugin/calendar');
@@ -521,13 +521,14 @@ var mousewheelListener = function (event) {
521
521
  }
522
522
  };
523
523
  var InfiniteScroll = function (props) {
524
- 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 = Window.__rest(props, ["children", "element", "hasMore", "hasMoreNewer", "hasNextPage", "hasPreviousPage", "head", "initialLoad", "isLoading", "listenToScroll", "loader", "loadMore", "loadMoreNewer", "loadNextPage", "loadPreviousPage", "threshold", "useCapture"]);
524
+ 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 ? Window.DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD : _c, _d = props.useCapture, useCapture = _d === void 0 ? false : _d, elementProps = Window.__rest(props, ["children", "element", "hasMore", "hasMoreNewer", "hasNextPage", "hasPreviousPage", "head", "initialLoad", "isLoading", "listenToScroll", "loader", "loadMore", "loadMoreNewer", "loadNextPage", "loadPreviousPage", "threshold", "useCapture"]);
525
525
  var loadNextPageFn = loadNextPage || loadMoreNewer;
526
526
  var loadPreviousPageFn = loadPreviousPage || loadMore;
527
527
  var hasNextPageFlag = hasNextPage || hasMoreNewer;
528
528
  var hasPreviousPageFlag = hasPreviousPage || hasMore;
529
529
  var scrollComponent = React.useRef();
530
- var scrollListener = React.useCallback(function () {
530
+ var scrollListenerRef = React.useRef();
531
+ scrollListenerRef.current = function () {
531
532
  var element = scrollComponent.current;
532
533
  if (!element || element.offsetParent === null) {
533
534
  return;
@@ -550,15 +551,7 @@ var InfiniteScroll = function (props) {
550
551
  if (offset < Number(threshold) && typeof loadNextPageFn === 'function' && hasNextPageFlag) {
551
552
  loadNextPageFn();
552
553
  }
553
- }, [
554
- hasPreviousPageFlag,
555
- hasNextPageFlag,
556
- isLoading,
557
- listenToScroll,
558
- loadPreviousPageFn,
559
- loadNextPageFn,
560
- threshold,
561
- ]);
554
+ };
562
555
  React.useEffect(function () {
563
556
  Window.deprecationAndReplacementWarning([
564
557
  [{ hasMoreNewer: hasMoreNewer }, { hasNextPage: hasNextPage }],
@@ -573,13 +566,15 @@ var InfiniteScroll = function (props) {
573
566
  var scrollElement = (_a = scrollComponent.current) === null || _a === void 0 ? void 0 : _a.parentNode;
574
567
  if (!scrollElement)
575
568
  return;
569
+ var scrollListener = function () { var _a; return (_a = scrollListenerRef.current) === null || _a === void 0 ? void 0 : _a.call(scrollListenerRef); };
576
570
  scrollElement.addEventListener('scroll', scrollListener, useCapture);
577
571
  scrollElement.addEventListener('resize', scrollListener, useCapture);
572
+ scrollListener();
578
573
  return function () {
579
574
  scrollElement.removeEventListener('scroll', scrollListener, useCapture);
580
575
  scrollElement.removeEventListener('resize', scrollListener, useCapture);
581
576
  };
582
- }, [initialLoad, scrollListener, useCapture]);
577
+ }, [initialLoad, useCapture]);
583
578
  React.useEffect(function () {
584
579
  var _a;
585
580
  var scrollElement = (_a = scrollComponent.current) === null || _a === void 0 ? void 0 : _a.parentNode;
@@ -635,22 +630,21 @@ function defaultRenderMessages(_a) {
635
630
 
636
631
  var MessageListWithContext = function (props) {
637
632
  var _a;
638
- var channel = props.channel, channelUnreadUiState = props.channelUnreadUiState, _b = props.disableDateSeparator, disableDateSeparator = _b === void 0 ? false : _b, groupStyles = props.groupStyles, _c = props.hideDeletedMessages, hideDeletedMessages = _c === void 0 ? false : _c, _d = props.hideNewMessageSeparator, hideNewMessageSeparator = _d === void 0 ? false : _d, internalInfiniteScrollProps = props.internalInfiniteScrollProps, _e = props.messageActions, messageActions = _e === void 0 ? Object.keys(Window.MESSAGE_ACTIONS) : _e, _f = props.messages, messages = _f === void 0 ? [] : _f, notifications = props.notifications, _g = props.noGroupByUser, noGroupByUser = _g === void 0 ? false : _g, _h = props.pinPermissions, pinPermissions = _h === void 0 ? Window.defaultPinPermissions : _h, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
639
- _j = props.returnAllReadData, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
640
- returnAllReadData = _j === void 0 ? false : _j, _k = props.threadList, threadList = _k === void 0 ? false : _k, _l = props.unsafeHTML, unsafeHTML = _l === void 0 ? false : _l, headerPosition = props.headerPosition, read = props.read, _m = props.renderMessages, renderMessages = _m === void 0 ? defaultRenderMessages : _m, _o = props.messageLimit, messageLimit = _o === void 0 ? 100 : _o, loadMoreCallback = props.loadMore, loadMoreNewerCallback = props.loadMoreNewer, _p = props.hasMoreNewer, hasMoreNewer = _p === void 0 ? false : _p, showUnreadNotificationAlways = props.showUnreadNotificationAlways, suppressAutoscroll = props.suppressAutoscroll, highlightedMessageId = props.highlightedMessageId, _q = props.jumpToLatestMessage, jumpToLatestMessage = _q === void 0 ? function () { return Promise.resolve(); } : _q;
641
- var _r = React__default["default"].useState(null), listElement = _r[0], setListElement = _r[1];
642
- var _s = React__default["default"].useState(null), ulElement = _s[0], setUlElement = _s[1];
633
+ var channel = props.channel, channelUnreadUiState = props.channelUnreadUiState, _b = props.disableDateSeparator, disableDateSeparator = _b === void 0 ? false : _b, groupStyles = props.groupStyles, _c = props.hideDeletedMessages, hideDeletedMessages = _c === void 0 ? false : _c, _d = props.hideNewMessageSeparator, hideNewMessageSeparator = _d === void 0 ? false : _d, _e = props.internalInfiniteScrollProps, _f = _e === void 0 ? {} : _e, _g = _f.threshold, loadMoreScrollThreshold = _g === void 0 ? Window.DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD : _g, restInternalInfiniteScrollProps = Window.__rest(_f, ["threshold"]), _h = props.messageActions, messageActions = _h === void 0 ? Object.keys(Window.MESSAGE_ACTIONS) : _h, _j = props.messages, messages = _j === void 0 ? [] : _j, notifications = props.notifications, _k = props.noGroupByUser, noGroupByUser = _k === void 0 ? false : _k, _l = props.pinPermissions, pinPermissions = _l === void 0 ? Window.defaultPinPermissions : _l, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
634
+ _m = props.returnAllReadData, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
635
+ returnAllReadData = _m === void 0 ? false : _m, _o = props.threadList, threadList = _o === void 0 ? false : _o, _p = props.unsafeHTML, unsafeHTML = _p === void 0 ? false : _p, headerPosition = props.headerPosition, read = props.read, _q = props.renderMessages, renderMessages = _q === void 0 ? defaultRenderMessages : _q, _r = props.messageLimit, messageLimit = _r === void 0 ? Window.DEFAULT_NEXT_CHANNEL_PAGE_SIZE : _r, loadMoreCallback = props.loadMore, loadMoreNewerCallback = props.loadMoreNewer, _s = props.hasMoreNewer, hasMoreNewer = _s === void 0 ? false : _s, showUnreadNotificationAlways = props.showUnreadNotificationAlways, suppressAutoscroll = props.suppressAutoscroll, highlightedMessageId = props.highlightedMessageId, _t = props.jumpToLatestMessage, jumpToLatestMessage = _t === void 0 ? function () { return Promise.resolve(); } : _t;
636
+ var _u = React__default["default"].useState(null), listElement = _u[0], setListElement = _u[1];
637
+ var _v = React__default["default"].useState(null), ulElement = _v[0], setUlElement = _v[1];
643
638
  var customClasses = Window.useChatContext('MessageList').customClasses;
644
- var _t = Window.useComponentContext('MessageList'), _u = _t.EmptyStateIndicator, EmptyStateIndicator = _u === void 0 ? Window.EmptyStateIndicator : _u, _v = _t.LoadingIndicator, LoadingIndicator = _v === void 0 ? Window.LoadingIndicator : _v, _w = _t.MessageListNotifications, MessageListNotifications$1 = _w === void 0 ? MessageListNotifications : _w, _x = _t.MessageNotification, MessageNotification = _x === void 0 ? Window.MessageNotification : _x, _y = _t.TypingIndicator, TypingIndicator = _y === void 0 ? Window.TypingIndicator : _y, _z = _t.UnreadMessagesNotification, UnreadMessagesNotification$1 = _z === void 0 ? UnreadMessagesNotification : _z;
645
- var loadMoreScrollThreshold = (internalInfiniteScrollProps === null || internalInfiniteScrollProps === void 0 ? void 0 : internalInfiniteScrollProps.threshold) || 250;
646
- var _0 = useScrollLocationLogic({
639
+ var _w = Window.useComponentContext('MessageList'), _x = _w.EmptyStateIndicator, EmptyStateIndicator = _x === void 0 ? Window.EmptyStateIndicator : _x, _y = _w.LoadingIndicator, LoadingIndicator = _y === void 0 ? Window.LoadingIndicator : _y, _z = _w.MessageListNotifications, MessageListNotifications$1 = _z === void 0 ? MessageListNotifications : _z, _0 = _w.MessageNotification, MessageNotification = _0 === void 0 ? Window.MessageNotification : _0, _1 = _w.TypingIndicator, TypingIndicator = _1 === void 0 ? Window.TypingIndicator : _1, _2 = _w.UnreadMessagesNotification, UnreadMessagesNotification$1 = _2 === void 0 ? UnreadMessagesNotification : _2;
640
+ var _3 = useScrollLocationLogic({
647
641
  hasMoreNewer: hasMoreNewer,
648
642
  listElement: listElement,
649
643
  loadMoreScrollThreshold: loadMoreScrollThreshold,
650
644
  messages: messages,
651
645
  scrolledUpThreshold: props.scrolledUpThreshold,
652
646
  suppressAutoscroll: suppressAutoscroll,
653
- }), hasNewMessages = _0.hasNewMessages, isMessageListScrolledToBottom = _0.isMessageListScrolledToBottom, onScroll = _0.onScroll, scrollToBottom = _0.scrollToBottom, wrapperRect = _0.wrapperRect;
647
+ }), hasNewMessages = _3.hasNewMessages, isMessageListScrolledToBottom = _3.isMessageListScrolledToBottom, onScroll = _3.onScroll, scrollToBottom = _3.scrollToBottom, wrapperRect = _3.wrapperRect;
654
648
  var showUnreadMessagesNotification = useUnreadMessagesNotification({
655
649
  isMessageListScrolledToBottom: isMessageListScrolledToBottom,
656
650
  showAlways: !!showUnreadNotificationAlways,
@@ -662,7 +656,7 @@ var MessageListWithContext = function (props) {
662
656
  unreadCount: (_a = channelUnreadUiState === null || channelUnreadUiState === void 0 ? void 0 : channelUnreadUiState.unread_messages) !== null && _a !== void 0 ? _a : 0,
663
657
  wasMarkedUnread: !!(channelUnreadUiState === null || channelUnreadUiState === void 0 ? void 0 : channelUnreadUiState.first_unread_message_id),
664
658
  });
665
- var _1 = useEnrichedMessages({
659
+ var _4 = useEnrichedMessages({
666
660
  channel: channel,
667
661
  disableDateSeparator: disableDateSeparator,
668
662
  groupStyles: groupStyles,
@@ -671,7 +665,7 @@ var MessageListWithContext = function (props) {
671
665
  hideNewMessageSeparator: hideNewMessageSeparator,
672
666
  messages: messages,
673
667
  noGroupByUser: noGroupByUser,
674
- }), messageGroupStyles = _1.messageGroupStyles, enrichedMessages = _1.messages;
668
+ }), messageGroupStyles = _4.messageGroupStyles, enrichedMessages = _4.messages;
675
669
  var elements = useMessageListElements({
676
670
  channelUnreadUiState: channelUnreadUiState,
677
671
  enrichedMessages: enrichedMessages,
@@ -750,7 +744,7 @@ var MessageListWithContext = function (props) {
750
744
  return (React__default["default"].createElement(Window.MessageListContextProvider, { value: { listElement: listElement, scrollToBottom: scrollToBottom } },
751
745
  React__default["default"].createElement(MessageListMainPanel, null,
752
746
  !threadList && showUnreadMessagesNotification && (React__default["default"].createElement(UnreadMessagesNotification$1, { unreadCount: channelUnreadUiState === null || channelUnreadUiState === void 0 ? void 0 : channelUnreadUiState.unread_messages })),
753
- React__default["default"].createElement("div", { className: "".concat(messageListClass, " ").concat(threadListClass), onScroll: onScroll, ref: setListElement, tabIndex: 0 }, showEmptyStateIndicator ? (React__default["default"].createElement(EmptyStateIndicator, { key: 'empty-state-indicator', listType: threadList ? 'thread' : 'message' })) : (React__default["default"].createElement(InfiniteScroll, Window.__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, { size: 20 })), loadNextPage: loadMoreNewer, loadPreviousPage: loadMore }, props.internalInfiniteScrollProps, { threshold: loadMoreScrollThreshold }),
747
+ React__default["default"].createElement("div", { className: "".concat(messageListClass, " ").concat(threadListClass), onScroll: onScroll, ref: setListElement, tabIndex: 0 }, showEmptyStateIndicator ? (React__default["default"].createElement(EmptyStateIndicator, { key: 'empty-state-indicator', listType: threadList ? 'thread' : 'message' })) : (React__default["default"].createElement(InfiniteScroll, Window.__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, { size: 20 })), loadNextPage: loadMoreNewer, loadPreviousPage: loadMore, threshold: loadMoreScrollThreshold }, restInternalInfiniteScrollProps),
754
748
  React__default["default"].createElement("ul", { className: 'str-chat__ul', ref: setUlElement }, elements),
755
749
  React__default["default"].createElement(TypingIndicator, { threadList: threadList }),
756
750
  React__default["default"].createElement("div", { key: 'bottom' }))))),
@@ -1054,7 +1048,7 @@ var Footer = function () {
1054
1048
  };
1055
1049
  var messageRenderer = function (virtuosoIndex, _data, virtuosoContext) {
1056
1050
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
1057
- var additionalMessageInputProps = virtuosoContext.additionalMessageInputProps, closeReactionSelectorOnClick = virtuosoContext.closeReactionSelectorOnClick, customMessageActions = virtuosoContext.customMessageActions, customMessageRenderer = virtuosoContext.customMessageRenderer, DateSeparator = virtuosoContext.DateSeparator, firstUnreadMessageId = virtuosoContext.firstUnreadMessageId, lastReadMessageId = virtuosoContext.lastReadMessageId, lastReceivedMessageId = virtuosoContext.lastReceivedMessageId, MessageUIComponent = virtuosoContext.Message, messageActions = virtuosoContext.messageActions, MessageSystem = virtuosoContext.MessageSystem, numItemsPrepended = virtuosoContext.numItemsPrepended, ownMessagesReadByOthers = virtuosoContext.ownMessagesReadByOthers, messageList = virtuosoContext.processedMessages, shouldGroupByUser = virtuosoContext.shouldGroupByUser, _k = virtuosoContext.unreadMessageCount, unreadMessageCount = _k === void 0 ? 0 : _k, UnreadMessagesSeparator = virtuosoContext.UnreadMessagesSeparator, virtuosoRef = virtuosoContext.virtuosoRef;
1051
+ var additionalMessageInputProps = virtuosoContext.additionalMessageInputProps, closeReactionSelectorOnClick = virtuosoContext.closeReactionSelectorOnClick, customMessageActions = virtuosoContext.customMessageActions, customMessageRenderer = virtuosoContext.customMessageRenderer, DateSeparator = virtuosoContext.DateSeparator, firstUnreadMessageId = virtuosoContext.firstUnreadMessageId, lastReadMessageId = virtuosoContext.lastReadMessageId, lastReceivedMessageId = virtuosoContext.lastReceivedMessageId, MessageUIComponent = virtuosoContext.Message, messageActions = virtuosoContext.messageActions, MessageSystem = virtuosoContext.MessageSystem, numItemsPrepended = virtuosoContext.numItemsPrepended, ownMessagesReadByOthers = virtuosoContext.ownMessagesReadByOthers, messageList = virtuosoContext.processedMessages, shouldGroupByUser = virtuosoContext.shouldGroupByUser, sortReactionDetails = virtuosoContext.sortReactionDetails, sortReactions = virtuosoContext.sortReactions, _k = virtuosoContext.unreadMessageCount, unreadMessageCount = _k === void 0 ? 0 : _k, UnreadMessagesSeparator = virtuosoContext.UnreadMessagesSeparator, virtuosoRef = virtuosoContext.virtuosoRef;
1058
1052
  var streamMessageIndex = calculateItemIndex(virtuosoIndex, numItemsPrepended);
1059
1053
  if (customMessageRenderer) {
1060
1054
  return customMessageRenderer(messageList, streamMessageIndex);
@@ -1077,7 +1071,7 @@ var messageRenderer = function (virtuosoIndex, _data, virtuosoContext) {
1077
1071
  var isLastReadMessage = message.id === lastReadMessageId;
1078
1072
  var showUnreadSeparator = isLastReadMessage && !isNewestMessage && (firstUnreadMessageId || unreadMessageCount > 0); // unread count can be 0 if the user marks unread only own messages
1079
1073
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
1080
- React__default["default"].createElement(Window.Message, { additionalMessageInputProps: additionalMessageInputProps, autoscrollToBottom: (_j = virtuosoRef.current) === null || _j === void 0 ? void 0 : _j.autoscrollToBottom, closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: customMessageActions, endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, groupedByUser: groupedByUser, lastReceivedId: lastReceivedMessageId, message: message, Message: MessageUIComponent, messageActions: messageActions, readBy: ownMessagesReadByOthers[message.id] || [] }),
1074
+ React__default["default"].createElement(Window.Message, { additionalMessageInputProps: additionalMessageInputProps, autoscrollToBottom: (_j = virtuosoRef.current) === null || _j === void 0 ? void 0 : _j.autoscrollToBottom, closeReactionSelectorOnClick: closeReactionSelectorOnClick, customMessageActions: customMessageActions, endOfGroup: endOfGroup, firstOfGroup: firstOfGroup, groupedByUser: groupedByUser, lastReceivedId: lastReceivedMessageId, message: message, Message: MessageUIComponent, messageActions: messageActions, readBy: ownMessagesReadByOthers[message.id] || [], sortReactionDetails: sortReactionDetails, sortReactions: sortReactions }),
1081
1075
  showUnreadSeparator && (React__default["default"].createElement("div", { className: 'str-chat__unread-messages-separator-wrapper' },
1082
1076
  React__default["default"].createElement(UnreadMessagesSeparator, { unreadCount: unreadMessageCount })))));
1083
1077
  };
@@ -1113,11 +1107,11 @@ function calculateInitialTopMostItemIndex(messages, highlightedMessageId) {
1113
1107
  }
1114
1108
  var VirtualizedMessageListWithContext = function (props) {
1115
1109
  var _a, _b;
1116
- var additionalMessageInputProps = props.additionalMessageInputProps, _c = props.additionalVirtuosoProps, additionalVirtuosoProps = _c === void 0 ? {} : _c, channel = props.channel, channelUnreadUiState = props.channelUnreadUiState, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageActions = props.customMessageActions, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _d = props.disableDateSeparator, disableDateSeparator = _d === void 0 ? true : _d, groupStyles = props.groupStyles, hasMoreNewer = props.hasMoreNewer, head = props.head, _e = props.hideDeletedMessages, hideDeletedMessages = _e === void 0 ? false : _e, _f = props.hideNewMessageSeparator, hideNewMessageSeparator = _f === void 0 ? false : _f, highlightedMessageId = props.highlightedMessageId, jumpToLatestMessage = props.jumpToLatestMessage, loadingMore = props.loadingMore, loadMore = props.loadMore, loadMoreNewer = props.loadMoreNewer, MessageUIComponentFromProps = props.Message, messageActions = props.messageActions, _g = props.messageLimit, messageLimit = _g === void 0 ? 100 : _g, messages = props.messages, notifications = props.notifications,
1110
+ var additionalMessageInputProps = props.additionalMessageInputProps, _c = props.additionalVirtuosoProps, additionalVirtuosoProps = _c === void 0 ? {} : _c, channel = props.channel, channelUnreadUiState = props.channelUnreadUiState, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageActions = props.customMessageActions, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _d = props.disableDateSeparator, disableDateSeparator = _d === void 0 ? true : _d, groupStyles = props.groupStyles, hasMoreNewer = props.hasMoreNewer, head = props.head, _e = props.hideDeletedMessages, hideDeletedMessages = _e === void 0 ? false : _e, _f = props.hideNewMessageSeparator, hideNewMessageSeparator = _f === void 0 ? false : _f, highlightedMessageId = props.highlightedMessageId, jumpToLatestMessage = props.jumpToLatestMessage, loadingMore = props.loadingMore, loadMore = props.loadMore, loadMoreNewer = props.loadMoreNewer, MessageUIComponentFromProps = props.Message, messageActions = props.messageActions, _g = props.messageLimit, messageLimit = _g === void 0 ? Window.DEFAULT_NEXT_CHANNEL_PAGE_SIZE : _g, messages = props.messages, notifications = props.notifications,
1117
1111
  // TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
1118
1112
  _h = props.overscan,
1119
1113
  // TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
1120
- overscan = _h === void 0 ? 0 : _h, read = props.read, _j = props.returnAllReadData, returnAllReadData = _j === void 0 ? false : _j, scrollSeekPlaceHolder = props.scrollSeekPlaceHolder, _k = props.scrollToLatestMessageOnFocus, scrollToLatestMessageOnFocus = _k === void 0 ? false : _k, _l = props.separateGiphyPreview, separateGiphyPreview = _l === void 0 ? false : _l, _m = props.shouldGroupByUser, shouldGroupByUser = _m === void 0 ? false : _m, showUnreadNotificationAlways = props.showUnreadNotificationAlways, _o = props.stickToBottomScrollBehavior, stickToBottomScrollBehavior = _o === void 0 ? 'smooth' : _o, suppressAutoscroll = props.suppressAutoscroll, threadList = props.threadList;
1114
+ overscan = _h === void 0 ? 0 : _h, read = props.read, _j = props.returnAllReadData, returnAllReadData = _j === void 0 ? false : _j, scrollSeekPlaceHolder = props.scrollSeekPlaceHolder, _k = props.scrollToLatestMessageOnFocus, scrollToLatestMessageOnFocus = _k === void 0 ? false : _k, _l = props.separateGiphyPreview, separateGiphyPreview = _l === void 0 ? false : _l, _m = props.shouldGroupByUser, shouldGroupByUser = _m === void 0 ? false : _m, showUnreadNotificationAlways = props.showUnreadNotificationAlways, sortReactionDetails = props.sortReactionDetails, sortReactions = props.sortReactions, _o = props.stickToBottomScrollBehavior, stickToBottomScrollBehavior = _o === void 0 ? 'smooth' : _o, suppressAutoscroll = props.suppressAutoscroll, threadList = props.threadList;
1121
1115
  var virtuosoComponentsFromProps = additionalVirtuosoProps.components, overridingVirtuosoProps = Window.__rest(additionalVirtuosoProps, ["components"]);
1122
1116
  // Stops errors generated from react-virtuoso to bubble up
1123
1117
  // to Sentry or other tracking tools.
@@ -1245,8 +1239,9 @@ var VirtualizedMessageListWithContext = function (props) {
1245
1239
  }
1246
1240
  };
1247
1241
  var atTopStateChange = function (isAtTop) {
1248
- if (isAtTop)
1242
+ if (isAtTop) {
1249
1243
  loadMore === null || loadMore === void 0 ? void 0 : loadMore(messageLimit);
1244
+ }
1250
1245
  };
1251
1246
  React.useEffect(function () {
1252
1247
  var scrollTimeout;
@@ -1289,6 +1284,8 @@ var VirtualizedMessageListWithContext = function (props) {
1289
1284
  ownMessagesReadByOthers: ownMessagesReadByOthers,
1290
1285
  processedMessages: processedMessages,
1291
1286
  shouldGroupByUser: shouldGroupByUser,
1287
+ sortReactionDetails: sortReactionDetails,
1288
+ sortReactions: sortReactions,
1292
1289
  threadList: threadList,
1293
1290
  unreadMessageCount: channelUnreadUiState === null || channelUnreadUiState === void 0 ? void 0 : channelUnreadUiState.unread_messages,
1294
1291
  UnreadMessagesSeparator: UnreadMessagesSeparator,
@@ -1308,7 +1305,7 @@ function VirtualizedMessageList(props) {
1308
1305
  return (React__default["default"].createElement(VirtualizedMessageListWithContext, Window.__assign({ channel: channel, channelUnreadUiState: channelUnreadUiState, hasMore: !!hasMore, hasMoreNewer: !!hasMoreNewer, highlightedMessageId: highlightedMessageId, jumpToLatestMessage: jumpToLatestMessage, loadingMore: !!loadingMore, loadingMoreNewer: !!loadingMoreNewer, loadMore: loadMore, loadMoreNewer: loadMoreNewer, messages: messages, notifications: notifications, read: read, suppressAutoscroll: suppressAutoscroll }, props)));
1309
1306
  }
1310
1307
 
1311
- var version = '11.9.0';
1308
+ var version = '11.11.0';
1312
1309
 
1313
1310
  var useChat = function (_a) {
1314
1311
  var _b, _c;
@@ -1527,6 +1524,36 @@ var Chat = function (props) {
1527
1524
  React__default["default"].createElement(Window.TranslationProvider, { value: translators }, children)));
1528
1525
  };
1529
1526
 
1527
+ /**
1528
+ * React hook to create, connect and return `StreamChat` client.
1529
+ */
1530
+ var useCreateChatClient = function (_a) {
1531
+ var apiKey = _a.apiKey, tokenOrProvider = _a.tokenOrProvider, userData = _a.userData;
1532
+ var _b = React.useState(null), chatClient = _b[0], setChatClient = _b[1];
1533
+ var _c = React.useState(userData), cachedUserData = _c[0], setCachedUserData = _c[1];
1534
+ if (userData.id !== cachedUserData.id) {
1535
+ setCachedUserData(userData);
1536
+ }
1537
+ React.useEffect(function () {
1538
+ var client = new streamChat.StreamChat(apiKey);
1539
+ var didUserConnectInterrupt = false;
1540
+ var connectionPromise = client.connectUser(cachedUserData, tokenOrProvider).then(function () {
1541
+ if (!didUserConnectInterrupt)
1542
+ setChatClient(client);
1543
+ });
1544
+ return function () {
1545
+ didUserConnectInterrupt = true;
1546
+ setChatClient(null);
1547
+ connectionPromise
1548
+ .then(function () { return client.disconnectUser(); })
1549
+ .then(function () {
1550
+ console.log("Connection for user \"".concat(cachedUserData.id, "\" has been closed"));
1551
+ });
1552
+ };
1553
+ }, [apiKey, cachedUserData, tokenOrProvider]);
1554
+ return chatClient;
1555
+ };
1556
+
1530
1557
  var CloseIcon = function (_a) {
1531
1558
  var title = _a.title;
1532
1559
  var t = Window.useTranslationContext('CloseIcon').t;
@@ -1914,6 +1941,7 @@ exports.VirtualizedMessageList = VirtualizedMessageList;
1914
1941
  exports.darkModeTheme = darkModeTheme;
1915
1942
  exports.defaultRenderMessages = defaultRenderMessages;
1916
1943
  exports.useChat = useChat;
1944
+ exports.useCreateChatClient = useCreateChatClient;
1917
1945
  exports.useCustomStyles = useCustomStyles;
1918
1946
  exports.useEnrichedMessages = useEnrichedMessages;
1919
1947
  exports.useLastReadData = useLastReadData;