stream-chat-react 11.3.0 → 11.5.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 (254) hide show
  1. package/dist/browser.full-bundle.js +5791 -5143
  2. package/dist/browser.full-bundle.js.map +1 -1
  3. package/dist/browser.full-bundle.min.js +4 -4
  4. package/dist/browser.full-bundle.min.js.map +1 -1
  5. package/dist/components/Attachment/Attachment.d.ts.map +1 -1
  6. package/dist/components/Attachment/Attachment.js +1 -0
  7. package/dist/components/Attachment/AttachmentContainer.d.ts.map +1 -1
  8. package/dist/components/Attachment/AttachmentContainer.js +1 -0
  9. package/dist/components/Attachment/hooks/useAudioController.d.ts.map +1 -1
  10. package/dist/components/Attachment/hooks/useAudioController.js +1 -0
  11. package/dist/components/Channel/Channel.d.ts +9 -2
  12. package/dist/components/Channel/Channel.d.ts.map +1 -1
  13. package/dist/components/Channel/Channel.js +119 -45
  14. package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -1
  15. package/dist/components/Channel/hooks/useCreateChannelStateContext.js +3 -1
  16. package/dist/components/Channel/hooks/useCreateTypingContext.d.ts.map +1 -1
  17. package/dist/components/Channel/hooks/useCreateTypingContext.js +3 -1
  18. package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
  19. package/dist/components/ChannelList/ChannelList.js +3 -0
  20. package/dist/components/ChannelList/hooks/useChannelDeletedListener.d.ts.map +1 -1
  21. package/dist/components/ChannelList/hooks/useChannelDeletedListener.js +1 -0
  22. package/dist/components/ChannelList/hooks/useChannelHiddenListener.d.ts.map +1 -1
  23. package/dist/components/ChannelList/hooks/useChannelHiddenListener.js +1 -0
  24. package/dist/components/ChannelList/hooks/useChannelTruncatedListener.d.ts.map +1 -1
  25. package/dist/components/ChannelList/hooks/useChannelTruncatedListener.js +1 -0
  26. package/dist/components/ChannelList/hooks/useChannelUpdatedListener.d.ts.map +1 -1
  27. package/dist/components/ChannelList/hooks/useChannelUpdatedListener.js +1 -0
  28. package/dist/components/ChannelList/hooks/useChannelVisibleListener.d.ts.map +1 -1
  29. package/dist/components/ChannelList/hooks/useChannelVisibleListener.js +1 -0
  30. package/dist/components/ChannelList/hooks/useConnectionRecoveredListener.d.ts.map +1 -1
  31. package/dist/components/ChannelList/hooks/useConnectionRecoveredListener.js +1 -0
  32. package/dist/components/ChannelList/hooks/useMessageNewListener.d.ts.map +1 -1
  33. package/dist/components/ChannelList/hooks/useMessageNewListener.js +1 -0
  34. package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts.map +1 -1
  35. package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.js +1 -0
  36. package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts.map +1 -1
  37. package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.js +1 -0
  38. package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.d.ts.map +1 -1
  39. package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.js +1 -0
  40. package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
  41. package/dist/components/ChannelList/hooks/usePaginatedChannels.js +2 -0
  42. package/dist/components/ChannelList/hooks/useUserPresenceChangedListener.d.ts.map +1 -1
  43. package/dist/components/ChannelList/hooks/useUserPresenceChangedListener.js +1 -0
  44. package/dist/components/ChannelPreview/ChannelPreview.d.ts +16 -0
  45. package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
  46. package/dist/components/ChannelPreview/ChannelPreview.js +18 -2
  47. package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts +5 -0
  48. package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts.map +1 -1
  49. package/dist/components/ChannelPreview/ChannelPreviewMessenger.js +62 -2
  50. package/dist/components/ChannelPreview/hooks/useChannelPreviewInfo.d.ts.map +1 -1
  51. package/dist/components/ChannelPreview/hooks/useChannelPreviewInfo.js +1 -0
  52. package/dist/components/ChannelPreview/hooks/useIsChannelMuted.d.ts.map +1 -1
  53. package/dist/components/ChannelPreview/hooks/useIsChannelMuted.js +1 -0
  54. package/dist/components/ChannelSearch/SearchBar.d.ts.map +1 -1
  55. package/dist/components/ChannelSearch/SearchBar.js +2 -0
  56. package/dist/components/ChannelSearch/SearchResults.d.ts.map +1 -1
  57. package/dist/components/ChannelSearch/SearchResults.js +3 -1
  58. package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts.map +1 -1
  59. package/dist/components/ChannelSearch/hooks/useChannelSearch.js +7 -1
  60. package/dist/components/Chat/hooks/useChat.d.ts.map +1 -1
  61. package/dist/components/Chat/hooks/useChat.js +2 -0
  62. package/dist/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
  63. package/dist/components/Chat/hooks/useCreateChatContext.js +3 -1
  64. package/dist/components/Emojis/index.cjs.js +1 -1
  65. package/dist/components/Gallery/ModalGallery.d.ts.map +1 -1
  66. package/dist/components/Gallery/ModalGallery.js +3 -1
  67. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts.map +1 -1
  68. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.js +1 -0
  69. package/dist/components/LoadMore/LoadMoreButton.d.ts.map +1 -1
  70. package/dist/components/LoadMore/LoadMoreButton.js +1 -0
  71. package/dist/components/LoadMore/LoadMorePaginator.d.ts.map +1 -1
  72. package/dist/components/LoadMore/LoadMorePaginator.js +1 -0
  73. package/dist/components/Message/Message.d.ts.map +1 -1
  74. package/dist/components/Message/Message.js +40 -8
  75. package/dist/components/Message/MessageText.d.ts.map +1 -1
  76. package/dist/components/Message/MessageText.js +1 -0
  77. package/dist/components/Message/hooks/index.d.ts +2 -0
  78. package/dist/components/Message/hooks/index.d.ts.map +1 -1
  79. package/dist/components/Message/hooks/index.js +2 -0
  80. package/dist/components/Message/hooks/useMarkUnreadHandler.d.ts +10 -0
  81. package/dist/components/Message/hooks/useMarkUnreadHandler.d.ts.map +1 -0
  82. package/dist/components/Message/hooks/useMarkUnreadHandler.js +45 -0
  83. package/dist/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
  84. package/dist/components/Message/hooks/useReactionHandler.js +6 -2
  85. package/dist/components/Message/hooks/useReactionsFetcher.d.ts +11 -0
  86. package/dist/components/Message/hooks/useReactionsFetcher.d.ts.map +1 -0
  87. package/dist/components/Message/hooks/useReactionsFetcher.js +58 -0
  88. package/dist/components/Message/hooks/useUserRole.d.ts +1 -0
  89. package/dist/components/Message/hooks/useUserRole.d.ts.map +1 -1
  90. package/dist/components/Message/hooks/useUserRole.js +2 -0
  91. package/dist/components/Message/types.d.ts +7 -1
  92. package/dist/components/Message/types.d.ts.map +1 -1
  93. package/dist/components/Message/utils.d.ts +4 -1
  94. package/dist/components/Message/utils.d.ts.map +1 -1
  95. package/dist/components/Message/utils.js +12 -3
  96. package/dist/components/MessageActions/MessageActions.d.ts +1 -1
  97. package/dist/components/MessageActions/MessageActions.d.ts.map +1 -1
  98. package/dist/components/MessageActions/MessageActions.js +14 -5
  99. package/dist/components/MessageActions/MessageActionsBox.d.ts +4 -3
  100. package/dist/components/MessageActions/MessageActionsBox.d.ts.map +1 -1
  101. package/dist/components/MessageActions/MessageActionsBox.js +8 -24
  102. package/dist/components/MessageActions/hooks/index.d.ts +2 -0
  103. package/dist/components/MessageActions/hooks/index.d.ts.map +1 -0
  104. package/dist/components/MessageActions/hooks/index.js +1 -0
  105. package/dist/components/MessageActions/hooks/useMessageActionsBoxPopper.d.ts +18 -0
  106. package/dist/components/MessageActions/hooks/useMessageActionsBoxPopper.d.ts.map +1 -0
  107. package/dist/components/MessageActions/hooks/useMessageActionsBoxPopper.js +32 -0
  108. package/dist/components/MessageInput/MessageInputFlat.d.ts.map +1 -1
  109. package/dist/components/MessageInput/MessageInputFlat.js +1 -0
  110. package/dist/components/MessageInput/MessageInputSmall.d.ts.map +1 -1
  111. package/dist/components/MessageInput/MessageInputSmall.js +1 -0
  112. package/dist/components/MessageInput/hooks/useAttachments.d.ts.map +1 -1
  113. package/dist/components/MessageInput/hooks/useAttachments.js +3 -1
  114. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  115. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.js +3 -1
  116. package/dist/components/MessageInput/hooks/useFileUploads.d.ts.map +1 -1
  117. package/dist/components/MessageInput/hooks/useFileUploads.js +3 -0
  118. package/dist/components/MessageInput/hooks/useImageUploads.d.ts.map +1 -1
  119. package/dist/components/MessageInput/hooks/useImageUploads.js +4 -1
  120. package/dist/components/MessageInput/hooks/useLinkPreviews.d.ts.map +1 -1
  121. package/dist/components/MessageInput/hooks/useLinkPreviews.js +5 -1
  122. package/dist/components/MessageInput/hooks/useMessageInputText.d.ts.map +1 -1
  123. package/dist/components/MessageInput/hooks/useMessageInputText.js +6 -2
  124. package/dist/components/MessageInput/hooks/usePasteHandler.d.ts.map +1 -1
  125. package/dist/components/MessageInput/hooks/usePasteHandler.js +3 -1
  126. package/dist/components/MessageInput/hooks/useUserTrigger.d.ts.map +1 -1
  127. package/dist/components/MessageInput/hooks/useUserTrigger.js +1 -0
  128. package/dist/components/MessageList/MessageList.d.ts +6 -1
  129. package/dist/components/MessageList/MessageList.d.ts.map +1 -1
  130. package/dist/components/MessageList/MessageList.js +32 -13
  131. package/dist/components/MessageList/MessageListMainPanel.d.ts +1 -0
  132. package/dist/components/MessageList/MessageListMainPanel.d.ts.map +1 -1
  133. package/dist/components/MessageList/MessageListMainPanel.js +2 -1
  134. package/dist/components/MessageList/MessageListNotifications.d.ts +1 -0
  135. package/dist/components/MessageList/MessageListNotifications.d.ts.map +1 -1
  136. package/dist/components/MessageList/MessageListNotifications.js +2 -2
  137. package/dist/components/MessageList/MessageNotification.d.ts +2 -0
  138. package/dist/components/MessageList/MessageNotification.d.ts.map +1 -1
  139. package/dist/components/MessageList/ScrollToBottomButton.d.ts +1 -1
  140. package/dist/components/MessageList/ScrollToBottomButton.d.ts.map +1 -1
  141. package/dist/components/MessageList/ScrollToBottomButton.js +3 -43
  142. package/dist/components/MessageList/UnreadMessagesNotification.d.ts +6 -0
  143. package/dist/components/MessageList/UnreadMessagesNotification.d.ts.map +1 -0
  144. package/dist/components/MessageList/UnreadMessagesNotification.js +12 -0
  145. package/dist/components/MessageList/UnreadMessagesSeparator.d.ts +6 -0
  146. package/dist/components/MessageList/UnreadMessagesSeparator.d.ts.map +1 -0
  147. package/dist/components/MessageList/UnreadMessagesSeparator.js +10 -0
  148. package/dist/components/MessageList/VirtualizedMessageList.d.ts +12 -1
  149. package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
  150. package/dist/components/MessageList/VirtualizedMessageList.js +51 -30
  151. package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +5 -3
  152. package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts.map +1 -1
  153. package/dist/components/MessageList/VirtualizedMessageListComponents.js +27 -6
  154. package/dist/components/MessageList/hooks/MessageList/index.d.ts +1 -0
  155. package/dist/components/MessageList/hooks/MessageList/index.d.ts.map +1 -1
  156. package/dist/components/MessageList/hooks/MessageList/index.js +1 -0
  157. package/dist/components/MessageList/hooks/MessageList/useEnrichedMessages.d.ts.map +1 -1
  158. package/dist/components/MessageList/hooks/MessageList/useEnrichedMessages.js +3 -1
  159. package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts +5 -8
  160. package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts.map +1 -1
  161. package/dist/components/MessageList/hooks/MessageList/useMessageListElements.js +22 -31
  162. package/dist/components/MessageList/hooks/MessageList/useMessageListScrollManager.d.ts.map +1 -1
  163. package/dist/components/MessageList/hooks/MessageList/useMessageListScrollManager.js +1 -0
  164. package/dist/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts.map +1 -1
  165. package/dist/components/MessageList/hooks/MessageList/useScrollLocationLogic.js +1 -0
  166. package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts +7 -0
  167. package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts.map +1 -0
  168. package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.js +42 -0
  169. package/dist/components/MessageList/hooks/VirtualizedMessageList/index.d.ts +1 -0
  170. package/dist/components/MessageList/hooks/VirtualizedMessageList/index.d.ts.map +1 -1
  171. package/dist/components/MessageList/hooks/VirtualizedMessageList/index.js +1 -0
  172. package/dist/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.d.ts.map +1 -1
  173. package/dist/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.js +1 -0
  174. package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.d.ts.map +1 -1
  175. package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.js +1 -0
  176. package/dist/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.d.ts.map +1 -1
  177. package/dist/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.js +1 -0
  178. package/dist/components/MessageList/hooks/VirtualizedMessageList/useShouldForceScrollToBottom.d.ts.map +1 -1
  179. package/dist/components/MessageList/hooks/VirtualizedMessageList/useShouldForceScrollToBottom.js +1 -0
  180. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts +22 -0
  181. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts.map +1 -0
  182. package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.js +29 -0
  183. package/dist/components/MessageList/hooks/useMarkRead.d.ts +19 -0
  184. package/dist/components/MessageList/hooks/useMarkRead.d.ts.map +1 -0
  185. package/dist/components/MessageList/hooks/useMarkRead.js +38 -0
  186. package/dist/components/MessageList/icons.d.ts +1 -0
  187. package/dist/components/MessageList/icons.d.ts.map +1 -1
  188. package/dist/components/MessageList/icons.js +2 -0
  189. package/dist/components/MessageList/index.d.ts +3 -0
  190. package/dist/components/MessageList/index.d.ts.map +1 -1
  191. package/dist/components/MessageList/index.js +3 -0
  192. package/dist/components/MessageList/renderMessages.d.ts +33 -0
  193. package/dist/components/MessageList/renderMessages.d.ts.map +1 -0
  194. package/dist/components/MessageList/renderMessages.js +35 -0
  195. package/dist/components/MessageList/utils.d.ts.map +1 -1
  196. package/dist/components/MessageList/utils.js +1 -1
  197. package/dist/components/Reactions/ReactionsList.d.ts +2 -1
  198. package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
  199. package/dist/components/Reactions/ReactionsList.js +32 -41
  200. package/dist/components/Reactions/ReactionsListModal.d.ts +13 -0
  201. package/dist/components/Reactions/ReactionsListModal.d.ts.map +1 -0
  202. package/dist/components/Reactions/ReactionsListModal.js +46 -0
  203. package/dist/components/Reactions/SimpleReactionsList.d.ts +2 -4
  204. package/dist/components/Reactions/SimpleReactionsList.d.ts.map +1 -1
  205. package/dist/components/Reactions/SimpleReactionsList.js +7 -24
  206. package/dist/components/Reactions/hooks/useFetchReactions.d.ts +12 -0
  207. package/dist/components/Reactions/hooks/useFetchReactions.d.ts.map +1 -0
  208. package/dist/components/Reactions/hooks/useFetchReactions.js +50 -0
  209. package/dist/components/Reactions/hooks/useProcessReactions.d.ts +3 -13
  210. package/dist/components/Reactions/hooks/useProcessReactions.d.ts.map +1 -1
  211. package/dist/components/Reactions/hooks/useProcessReactions.js +51 -43
  212. package/dist/components/Reactions/types.d.ts +9 -0
  213. package/dist/components/Reactions/types.d.ts.map +1 -0
  214. package/dist/components/Reactions/types.js +1 -0
  215. package/dist/components/Thread/Thread.js +1 -0
  216. package/dist/context/ChannelActionContext.d.ts +2 -0
  217. package/dist/context/ChannelActionContext.d.ts.map +1 -1
  218. package/dist/context/ComponentContext.d.ts +6 -2
  219. package/dist/context/ComponentContext.d.ts.map +1 -1
  220. package/dist/context/MessageContext.d.ts +8 -2
  221. package/dist/context/MessageContext.d.ts.map +1 -1
  222. package/dist/css/v2/index.css +1 -1
  223. package/dist/css/v2/index.layout.css +1 -1
  224. package/dist/i18n/Streami18n.d.ts +10 -0
  225. package/dist/i18n/Streami18n.d.ts.map +1 -1
  226. package/dist/i18n/de.json +10 -0
  227. package/dist/i18n/en.json +10 -0
  228. package/dist/i18n/es.json +12 -0
  229. package/dist/i18n/fr.json +12 -0
  230. package/dist/i18n/hi.json +11 -0
  231. package/dist/i18n/it.json +12 -0
  232. package/dist/i18n/ja.json +8 -0
  233. package/dist/i18n/ko.json +8 -0
  234. package/dist/i18n/nl.json +10 -0
  235. package/dist/i18n/pt.json +12 -0
  236. package/dist/i18n/ru.json +14 -0
  237. package/dist/i18n/tr.json +10 -0
  238. package/dist/{icons-b84cd102.js → icons-7ead3d97.js} +12 -12
  239. package/dist/index.cjs.js +4911 -4265
  240. package/dist/scss/v2/AttachmentPreviewList/AttachmentPreviewList-layout.scss +1 -0
  241. package/dist/scss/v2/Message/Message-layout.scss +68 -10
  242. package/dist/scss/v2/Message/Message-theme.scss +34 -2
  243. package/dist/scss/v2/MessageActionsBox/MessageActionsBox-layout.scss +0 -11
  244. package/dist/scss/v2/MessageBounceOptions/MessageBounceOptions-layout.scss +18 -0
  245. package/dist/scss/v2/MessageBounceOptions/MessageBounceOptions-theme.scss +51 -0
  246. package/dist/scss/v2/MessageReactions/MessageReactions-layout.scss +74 -0
  247. package/dist/scss/v2/MessageReactions/MessageReactions-theme.scss +17 -0
  248. package/dist/scss/v2/_base.scss +3 -20
  249. package/dist/scss/v2/_global-theme-variables.scss +3 -0
  250. package/dist/scss/v2/index.layout.scss +1 -0
  251. package/dist/scss/v2/index.scss +1 -1
  252. package/dist/version.d.ts +1 -1
  253. package/dist/version.js +1 -1
  254. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollLocationLogic.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/MessageList/useScrollLocationLogic.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAC;AAI9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,MAAM,MAAM,4BAA4B,CACtC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC/C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;sBA0DvB,aAAa,CAAC,cAAc,CAAC;;;CAgCxC,CAAC"}
1
+ {"version":3,"file":"useScrollLocationLogic.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/MessageList/useScrollLocationLogic.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAC;AAI9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,MAAM,MAAM,4BAA4B,CACtC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC/C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;sBA2DvB,aAAa,CAAC,cAAc,CAAC;;;CAgCxC,CAAC"}
@@ -23,6 +23,7 @@ export var useScrollLocationLogic = function (params) {
23
23
  setWrapperRect(listElement.getBoundingClientRect());
24
24
  scrollToBottom();
25
25
  }
26
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
27
  }, [listElement, hasMoreNewer]);
27
28
  var updateScrollTop = useMessageListScrollManager({
28
29
  loadMoreScrollThreshold: loadMoreScrollThreshold,
@@ -0,0 +1,7 @@
1
+ export type UseUnreadMessagesNotificationParams = {
2
+ unreadCount?: number;
3
+ };
4
+ export declare const useUnreadMessagesNotification: ({ unreadCount, }: UseUnreadMessagesNotificationParams) => {
5
+ show: boolean;
6
+ };
7
+ //# sourceMappingURL=useUnreadMessagesNotification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUnreadMessagesNotification.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,mCAAmC,GAAG;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,6BAA6B,qBAEvC,mCAAmC;;CAwCrC,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { useChannelStateContext } from '../../../../context';
2
+ import { useEffect, useState } from 'react';
3
+ import { MESSAGE_LIST_MAIN_PANEL_CLASS } from '../../MessageListMainPanel';
4
+ import { UNREAD_MESSAGE_SEPARATOR_CLASS } from '../../UnreadMessagesSeparator';
5
+ var targetIsVisibleInContainer = function (element, container) {
6
+ var msgListHeight = container.getBoundingClientRect().height;
7
+ var targetMessageY = element.getBoundingClientRect().y;
8
+ return 0 <= targetMessageY && targetMessageY <= msgListHeight;
9
+ };
10
+ export var useUnreadMessagesNotification = function (_a) {
11
+ var unreadCount = _a.unreadCount;
12
+ var messages = useChannelStateContext('UnreadMessagesNotification').messages;
13
+ var _b = useState(false), show = _b[0], setShow = _b[1];
14
+ var intersectionObserverIsSupported = typeof IntersectionObserver !== 'undefined';
15
+ useEffect(function () {
16
+ if (!(unreadCount && intersectionObserverIsSupported)) {
17
+ setShow(false);
18
+ return;
19
+ }
20
+ var msgListPanel = document.querySelector(".".concat(MESSAGE_LIST_MAIN_PANEL_CLASS));
21
+ if (!msgListPanel)
22
+ return;
23
+ var observedTarget = document.querySelector(".".concat(UNREAD_MESSAGE_SEPARATOR_CLASS));
24
+ if (!observedTarget) {
25
+ setShow(true);
26
+ return;
27
+ }
28
+ setShow(!targetIsVisibleInContainer(observedTarget, msgListPanel));
29
+ var observer = new IntersectionObserver(function (elements) {
30
+ if (!elements.length)
31
+ return;
32
+ var _a = elements[0], boundingClientRect = _a.boundingClientRect, isIntersecting = _a.isIntersecting, rootBounds = _a.rootBounds;
33
+ var isScrolledAboveTargetTop = rootBounds && boundingClientRect && rootBounds.bottom < boundingClientRect.top;
34
+ setShow(!isIntersecting && !isScrolledAboveTargetTop);
35
+ }, { root: msgListPanel });
36
+ observer.observe(observedTarget);
37
+ return function () {
38
+ observer.disconnect();
39
+ };
40
+ }, [intersectionObserverIsSupported, messages, unreadCount]);
41
+ return { show: show && intersectionObserverIsSupported };
42
+ };
@@ -4,4 +4,5 @@ export * from './useNewMessageNotification';
4
4
  export * from './usePrependMessagesCount';
5
5
  export * from './useScrollToBottomOnNewMessage';
6
6
  export * from './useShouldForceScrollToBottom';
7
+ export * from './useUnreadMessagesNotificationVirtualized';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4CAA4C,CAAC"}
@@ -4,3 +4,4 @@ export * from './useNewMessageNotification';
4
4
  export * from './usePrependMessagesCount';
5
5
  export * from './useScrollToBottomOnNewMessage';
6
6
  export * from './useShouldForceScrollToBottom';
7
+ export * from './useUnreadMessagesNotificationVirtualized';
@@ -1 +1 @@
1
- {"version":3,"file":"useGiphyPreview.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,eAAO,MAAM,eAAe,2GAGJ,OAAO;;;CAsB9B,CAAC"}
1
+ {"version":3,"file":"useGiphyPreview.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,eAAO,MAAM,eAAe,2GAGJ,OAAO;;;CAuB9B,CAAC"}
@@ -13,6 +13,7 @@ export var useGiphyPreview = function (separateGiphyPreview) {
13
13
  if (separateGiphyPreview)
14
14
  client.on('message.new', handleEvent);
15
15
  return function () { return client.off('message.new', handleEvent); };
16
+ // eslint-disable-next-line react-hooks/exhaustive-deps
16
17
  }, [separateGiphyPreview]);
17
18
  return { giphyPreviewMessage: giphyPreviewMessage, setGiphyPreviewMessage: setGiphyPreviewMessage };
18
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"usePrependMessagesCount.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAOzE,wBAAgB,yBAAyB,CACvC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAChF,QAAQ,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,UAgEzE"}
1
+ {"version":3,"file":"usePrependMessagesCount.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAOzE,wBAAgB,yBAAyB,CACvC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAChF,QAAQ,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,UAiEzE"}
@@ -50,6 +50,7 @@ export function usePrependedMessagesCount(messages, hasDateSeparator) {
50
50
  return 0;
51
51
  // TODO: there's a bug here, the messages prop is the same array instance (something mutates it)
52
52
  // that's why the second dependency is necessary
53
+ // eslint-disable-next-line react-hooks/exhaustive-deps
53
54
  }, [firstRealMessageIndex, messages, messages === null || messages === void 0 ? void 0 : messages.length]);
54
55
  return numItemsPrepended;
55
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollToBottomOnNewMessage.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,KAAK,mCAAmC,CACtC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,MAAM;IACN,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC/C,4FAA4F;IAC5F,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,6BAA6B,kNA2CzC,CAAC"}
1
+ {"version":3,"file":"useScrollToBottomOnNewMessage.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,KAAK,mCAAmC,CACtC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,MAAM;IACN,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC/C,4FAA4F;IAC5F,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,6BAA6B,kNA4CzC,CAAC"}
@@ -24,5 +24,6 @@ export var useScrollToBottomOnNewMessage = function (_a) {
24
24
  window.removeEventListener('focus', scrollToBottomIfConfigured);
25
25
  window.removeEventListener('blur', resetNewMessagesReceivedInBackground);
26
26
  };
27
+ // eslint-disable-next-line react-hooks/exhaustive-deps
27
28
  }, [scrollToBottomIfConfigured]);
28
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useShouldForceScrollToBottom.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/useShouldForceScrollToBottom.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,wBAAgB,4BAA4B,CAC1C,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAChF,QAAQ,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,iBA2BtE"}
1
+ {"version":3,"file":"useShouldForceScrollToBottom.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/useShouldForceScrollToBottom.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,wBAAgB,4BAA4B,CAC1C,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAChF,QAAQ,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,iBA4BtE"}
@@ -19,6 +19,7 @@ export function useShouldForceScrollToBottom(messages, currentUserId) {
19
19
  initialFocusRegistered.current = true;
20
20
  recheckForNewOwnMessage();
21
21
  }
22
+ // eslint-disable-next-line react-hooks/exhaustive-deps
22
23
  }, [messages, messages === null || messages === void 0 ? void 0 : messages.length]);
23
24
  return recheckForNewOwnMessage;
24
25
  }
@@ -0,0 +1,22 @@
1
+ import { StreamMessage } from '../../../../context';
2
+ import type { DefaultStreamChatGenerics } from '../../../../types/types';
3
+ export type UseUnreadMessagesNotificationParams = {
4
+ unreadCount: number;
5
+ lastRead?: Date | null;
6
+ };
7
+ /**
8
+ * Controls the logic when an `UnreadMessagesNotification` component should be shown.
9
+ * In virtualized message list there is no notion of being scrolled below or above `UnreadMessagesSeparator`.
10
+ * Therefore, the `UnreadMessagesNotification` component is rendered based on timestamps.
11
+ * If the there are unread messages in the channel and the `VirtualizedMessageList` renders
12
+ * messages created later than the last read message in the channel, then the
13
+ * `UnreadMessagesNotification` component is rendered. This is an approximate equivalent to being
14
+ * scrolled below the `UnreadMessagesNotification` component.
15
+ * @param lastRead
16
+ * @param unreadCount
17
+ */
18
+ export declare const useUnreadMessagesNotificationVirtualized: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ lastRead, unreadCount, }: UseUnreadMessagesNotificationParams) => {
19
+ show: boolean;
20
+ toggleShowUnreadMessagesNotification: (renderedMessages: StreamMessage<StreamChatGenerics>[]) => void;
21
+ };
22
+ //# sourceMappingURL=useUnreadMessagesNotificationVirtualized.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUnreadMessagesNotificationVirtualized.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,MAAM,MAAM,mCAAmC,GAAG;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wCAAwC,iHAKlD,mCAAmC;;;CAmBrC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+ /**
3
+ * Controls the logic when an `UnreadMessagesNotification` component should be shown.
4
+ * In virtualized message list there is no notion of being scrolled below or above `UnreadMessagesSeparator`.
5
+ * Therefore, the `UnreadMessagesNotification` component is rendered based on timestamps.
6
+ * If the there are unread messages in the channel and the `VirtualizedMessageList` renders
7
+ * messages created later than the last read message in the channel, then the
8
+ * `UnreadMessagesNotification` component is rendered. This is an approximate equivalent to being
9
+ * scrolled below the `UnreadMessagesNotification` component.
10
+ * @param lastRead
11
+ * @param unreadCount
12
+ */
13
+ export var useUnreadMessagesNotificationVirtualized = function (_a) {
14
+ var lastRead = _a.lastRead, unreadCount = _a.unreadCount;
15
+ var _b = useState(false), show = _b[0], setShow = _b[1];
16
+ var toggleShowUnreadMessagesNotification = useCallback(function (renderedMessages) {
17
+ if (!renderedMessages.length)
18
+ return;
19
+ var firstRenderedMessageTimestamp = renderedMessages[0].created_at
20
+ ? new Date(renderedMessages[0].created_at).getTime()
21
+ : 0;
22
+ setShow(unreadCount > 0 && !!lastRead && firstRenderedMessageTimestamp > lastRead.getTime());
23
+ }, [unreadCount, lastRead]);
24
+ useEffect(function () {
25
+ if (!unreadCount)
26
+ setShow(false);
27
+ }, [unreadCount]);
28
+ return { show: show, toggleShowUnreadMessagesNotification: toggleShowUnreadMessagesNotification };
29
+ };
@@ -0,0 +1,19 @@
1
+ type UseMarkReadParams = {
2
+ isMessageListScrolledToBottom: boolean;
3
+ messageListIsThread: boolean;
4
+ unreadCount: number;
5
+ markReadOnScrolledToBottom?: boolean;
6
+ };
7
+ /**
8
+ * Takes care of marking a channel read. The channel is read only if all the following applies:
9
+ * 1. the message list is not rendered in a thread
10
+ * 2. the message list is scrolled to the bottom
11
+ * 3. the channel was not marked unread by the user
12
+ * @param isMessageListScrolledToBottom
13
+ * @param messageListIsThread
14
+ * @param unreadCount
15
+ * @param wasChannelMarkedUnread
16
+ */
17
+ export declare const useMarkRead: ({ isMessageListScrolledToBottom, markReadOnScrolledToBottom, messageListIsThread, unreadCount, }: UseMarkReadParams) => void;
18
+ export {};
19
+ //# sourceMappingURL=useMarkRead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMarkRead.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageList/hooks/useMarkRead.ts"],"names":[],"mappings":"AAGA,KAAK,iBAAiB,GAAG;IACvB,6BAA6B,EAAE,OAAO,CAAC;IACvC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,qGAKrB,iBAAiB,SA4BnB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { useEffect } from 'react';
2
+ import { useChannelActionContext } from '../../../context';
3
+ /**
4
+ * Takes care of marking a channel read. The channel is read only if all the following applies:
5
+ * 1. the message list is not rendered in a thread
6
+ * 2. the message list is scrolled to the bottom
7
+ * 3. the channel was not marked unread by the user
8
+ * @param isMessageListScrolledToBottom
9
+ * @param messageListIsThread
10
+ * @param unreadCount
11
+ * @param wasChannelMarkedUnread
12
+ */
13
+ export var useMarkRead = function (_a) {
14
+ var isMessageListScrolledToBottom = _a.isMessageListScrolledToBottom, markReadOnScrolledToBottom = _a.markReadOnScrolledToBottom, messageListIsThread = _a.messageListIsThread, unreadCount = _a.unreadCount;
15
+ var markRead = useChannelActionContext('useMarkRead').markRead;
16
+ useEffect(function () {
17
+ var shouldMarkRead = !messageListIsThread &&
18
+ isMessageListScrolledToBottom &&
19
+ markReadOnScrolledToBottom &&
20
+ unreadCount > 0;
21
+ var onVisibilityChange = function () {
22
+ if (!document.hidden && shouldMarkRead)
23
+ markRead();
24
+ };
25
+ document.addEventListener('visibilitychange', onVisibilityChange);
26
+ if (shouldMarkRead)
27
+ markRead();
28
+ return function () {
29
+ document.removeEventListener('visibilitychange', onVisibilityChange);
30
+ };
31
+ }, [
32
+ isMessageListScrolledToBottom,
33
+ markRead,
34
+ messageListIsThread,
35
+ unreadCount,
36
+ markReadOnScrolledToBottom,
37
+ ]);
38
+ };
@@ -4,5 +4,6 @@ interface ArrowProps {
4
4
  }
5
5
  export declare const ArrowUp: ({ className, color }: ArrowProps) => JSX.Element;
6
6
  export declare const ArrowDown: ({ className, color }: ArrowProps) => JSX.Element;
7
+ export declare const CloseIcon: () => JSX.Element;
7
8
  export {};
8
9
  //# sourceMappingURL=icons.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/icons.tsx"],"names":[],"mappings":"AAEA,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,OAAO,yBAA0B,UAAU,gBAevD,CAAC;AAEF,eAAO,MAAM,SAAS,yBAA0B,UAAU,gBAezD,CAAC"}
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/icons.tsx"],"names":[],"mappings":"AAEA,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,OAAO,yBAA0B,UAAU,gBAevD,CAAC;AAEF,eAAO,MAAM,SAAS,yBAA0B,UAAU,gBAezD,CAAC;AAEF,eAAO,MAAM,SAAS,mBAIrB,CAAC"}
@@ -9,3 +9,5 @@ export var ArrowDown = function (_a) {
9
9
  return (React.createElement("svg", { className: className, "data-testid": 'arrow-down', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
10
10
  React.createElement("path", { d: 'M7.41 8.29504L12 12.875L16.59 8.29504L18 9.70504L12 15.705L6 9.70504L7.41 8.29504Z', fill: color || 'var(--primary-color)' })));
11
11
  };
12
+ export var CloseIcon = function () { return (React.createElement("svg", { fill: 'currentColor', viewBox: '0 0 14 13', xmlns: 'http://www.w3.org/2000/svg' },
13
+ React.createElement("path", { d: 'M1.32227 12.3408C0.944336 11.9629 0.953125 11.3213 1.32227 10.9521L5.60254 6.66309L1.32227 2.38281C0.953125 2.01367 0.944336 1.37207 1.32227 0.994141C1.7002 0.616211 2.3418 0.625 2.71094 0.985352L7 5.27441L11.2803 0.994141C11.6494 0.625 12.291 0.616211 12.6689 0.994141C13.0469 1.37207 13.0381 2.01367 12.6689 2.38281L8.38867 6.66309L12.6689 10.9521C13.0381 11.3213 13.0469 11.9629 12.6689 12.3408C12.291 12.7188 11.6494 12.71 11.2803 12.3408L7 8.06055L2.71094 12.3408C2.3418 12.71 1.7002 12.7188 1.32227 12.3408Z' }))); };
@@ -4,7 +4,10 @@ export * from './MessageList';
4
4
  export * from './MessageListNotifications';
5
5
  export * from './MessageNotification';
6
6
  export * from './ScrollToBottomButton';
7
+ export * from './UnreadMessagesNotification';
8
+ export * from './UnreadMessagesSeparator';
7
9
  export * from './VirtualizedMessageList';
8
10
  export * from './hooks';
11
+ export * from './renderMessages';
9
12
  export * from './utils';
10
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
@@ -4,6 +4,9 @@ export * from './MessageList';
4
4
  export * from './MessageListNotifications';
5
5
  export * from './MessageNotification';
6
6
  export * from './ScrollToBottomButton';
7
+ export * from './UnreadMessagesNotification';
8
+ export * from './UnreadMessagesSeparator';
7
9
  export * from './VirtualizedMessageList';
8
10
  export * from './hooks';
11
+ export * from './renderMessages';
9
12
  export * from './utils';
@@ -0,0 +1,33 @@
1
+ import { ReactNode } from 'react';
2
+ import { MessageProps } from '../Message/types';
3
+ import { StreamMessage } from '../../context/ChannelStateContext';
4
+ import { DefaultStreamChatGenerics } from '../../types/types';
5
+ import { ComponentContextValue, CustomClasses } from '../../context';
6
+ import { GroupStyle } from './utils';
7
+ import { ChannelState as StreamChannelState, UserResponse } from 'stream-chat';
8
+ export interface RenderMessagesOptions<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> {
9
+ components: ComponentContextValue<StreamChatGenerics>;
10
+ lastReceivedMessageId: string | null;
11
+ messageGroupStyles: Record<string, GroupStyle>;
12
+ messages: Array<StreamMessage<StreamChatGenerics>>;
13
+ /**
14
+ * Object mapping message IDs of own messages to the users who read those messages.
15
+ */
16
+ readData: Record<string, Array<UserResponse<StreamChatGenerics>>>;
17
+ /**
18
+ * Props forwarded to the Message component.
19
+ */
20
+ sharedMessageProps: SharedMessageProps<StreamChatGenerics>;
21
+ customClasses?: CustomClasses;
22
+ /**
23
+ * Current user's read status.
24
+ * Useful to determine, when a channel has been marked read the last time, the last read message, count of unread messages.
25
+ */
26
+ ownReadState?: StreamChannelState<StreamChatGenerics>['read'][keyof StreamChannelState<StreamChatGenerics>['read']];
27
+ }
28
+ export type SharedMessageProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Omit<MessageProps<StreamChatGenerics>, MessagePropsToOmit>;
29
+ export type MessageRenderer<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = (options: RenderMessagesOptions<StreamChatGenerics>) => Array<ReactNode>;
30
+ type MessagePropsToOmit = 'channel' | 'groupStyles' | 'initialMessage' | 'lastReceivedId' | 'message' | 'readBy';
31
+ export declare function defaultRenderMessages<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ components, customClasses, lastReceivedMessageId: lastReceivedId, messageGroupStyles, messages, ownReadState, readData, sharedMessageProps: messageProps, }: RenderMessagesOptions<StreamChatGenerics>): JSX.Element[];
32
+ export {};
33
+ //# sourceMappingURL=renderMessages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderMessages.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/renderMessages.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAY,SAAS,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAU,MAAM,eAAe,CAAC;AAE7E,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/E,MAAM,WAAW,qBAAqB,CACpC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB;IAEhF,UAAU,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IACtD,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/C,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnD;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAClE;;OAEG;IACH,kBAAkB,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;CACrH;AAED,MAAM,MAAM,kBAAkB,CAC5B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAE/D,MAAM,MAAM,eAAe,CACzB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,CAAC,OAAO,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;AAE7E,KAAK,kBAAkB,GACnB,SAAS,GACT,aAAa,GACb,gBAAgB,GAChB,gBAAgB,GAChB,SAAS,GACT,QAAQ,CAAC;AAEb,wBAAgB,qBAAqB,CACnC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAChF,EACA,UAAU,EACV,aAAa,EACb,qBAAqB,EAAE,cAAc,EACrC,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,kBAAkB,EAAE,YAAY,GACjC,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,iBA6D3C"}
@@ -0,0 +1,35 @@
1
+ import { __assign } from "tslib";
2
+ import React, { Fragment } from 'react';
3
+ import { isDate } from '../../context';
4
+ import { CUSTOM_MESSAGE_TYPE } from '../../constants/messageTypes';
5
+ import { Message } from '../Message/Message';
6
+ export function defaultRenderMessages(_a) {
7
+ var components = _a.components, customClasses = _a.customClasses, lastReceivedId = _a.lastReceivedMessageId, messageGroupStyles = _a.messageGroupStyles, messages = _a.messages, ownReadState = _a.ownReadState, readData = _a.readData, messageProps = _a.sharedMessageProps;
8
+ var DateSeparator = components.DateSeparator, HeaderComponent = components.HeaderComponent, MessageSystem = components.MessageSystem, UnreadMessagesSeparator = components.UnreadMessagesSeparator;
9
+ return messages.map(function (message, index) {
10
+ if (message.customType === CUSTOM_MESSAGE_TYPE.date && message.date && isDate(message.date)) {
11
+ return (React.createElement("li", { key: "".concat(message.date.toISOString(), "-i") },
12
+ React.createElement(DateSeparator, { date: message.date, formatDate: messageProps.formatDate, unread: message.unread })));
13
+ }
14
+ if (message.customType === CUSTOM_MESSAGE_TYPE.intro && HeaderComponent) {
15
+ return (React.createElement("li", { key: 'intro' },
16
+ React.createElement(HeaderComponent, null)));
17
+ }
18
+ if (message.type === 'system') {
19
+ return (React.createElement("li", { key: message.id || message.created_at },
20
+ React.createElement(MessageSystem, { message: message })));
21
+ }
22
+ var groupStyles = messageGroupStyles[message.id] || '';
23
+ var messageClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.message) || "str-chat__li str-chat__li--".concat(groupStyles);
24
+ var isNewestMessage = index === messages.length - 1;
25
+ var isLastReadMessage = (ownReadState === null || ownReadState === void 0 ? void 0 : ownReadState.last_read_message_id) === message.id;
26
+ var showUnreadSeparator = isLastReadMessage &&
27
+ !isNewestMessage &&
28
+ ((ownReadState === null || ownReadState === void 0 ? void 0 : ownReadState.first_unread_message_id) || (ownReadState === null || ownReadState === void 0 ? void 0 : ownReadState.unread_messages) > 0); // unread count can be 0 if the user marks unread only own messages
29
+ return (React.createElement(Fragment, { key: message.id || message.created_at },
30
+ React.createElement("li", { className: messageClass, "data-message-id": message.id, "data-testid": messageClass },
31
+ React.createElement(Message, __assign({ groupStyles: [groupStyles], lastReceivedId: lastReceivedId, message: message, readBy: readData[message.id] || [] }, messageProps))),
32
+ showUnreadSeparator && UnreadMessagesSeparator && (React.createElement("li", { className: 'str-chat__li str-chat__unread-messages-separator-wrapper' },
33
+ React.createElement(UnreadMessagesSeparator, { unreadCount: ownReadState.unread_messages })))));
34
+ });
35
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/utils.ts"],"names":[],"mappings":";AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,KAAK,qBAAqB,CACxB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,QAAQ,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kEAAkE;IAClE,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,+FAA+F;IAC/F,sBAAsB,CAAC,EAAE,KAAK,CAAC,QAAQ,CACrC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,CACpE,CAAC;CACH,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,8KAuF3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAAW,MAAM,GAAG,IAAI,WAQrD,CAAC;AAGF,eAAO,MAAM,eAAe,oJAY3B,CAAC;AAEF,eAAO,MAAM,aAAa;eAIU,IAAI;;mCACnB,OAAO,uDAqC3B,CAAC;AAEF,eAAO,MAAM,WAAW,qJAIL,MAAM,wCAgDxB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,EAAE,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,eAAO,MAAM,cAAc,oPAMV,OAAO,KACrB,UAyCF,CAAC;AAOF,eAAO,MAAM,uBAAuB,0BAA2B,MAAM,SAAS,MAAM,YACnD,CAAC;AAGlC,eAAO,MAAM,kBAAkB,0BAA2B,MAAM,SAAS,MAAM,YAChD,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/utils.ts"],"names":[],"mappings":";AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,KAAK,qBAAqB,CACxB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,QAAQ,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kEAAkE;IAClE,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,+FAA+F;IAC/F,sBAAsB,CAAC,EAAE,KAAK,CAAC,QAAQ,CACrC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,CACpE,CAAC;CACH,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,8KAuF3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAAW,MAAM,GAAG,IAAI,WAQrD,CAAC;AAGF,eAAO,MAAM,eAAe,oJAY3B,CAAC;AAEF,eAAO,MAAM,aAAa;eAIU,IAAI;;mCACnB,OAAO,uDAqC3B,CAAC;AAEF,eAAO,MAAM,WAAW,qJAIL,MAAM,wCAgDxB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,EAAE,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,eAAO,MAAM,cAAc,oPAMV,OAAO,KACrB,UAyCF,CAAC;AAOF,eAAO,MAAM,uBAAuB,0BAA2B,MAAM,SAAS,MAAM,YACpD,CAAC;AAGjC,eAAO,MAAM,kBAAkB,0BAA2B,MAAM,SAAS,MAAM,YAChD,CAAC"}
@@ -217,7 +217,7 @@ export var getGroupStyles = function (message, previousMessage, nextMessage, noG
217
217
  // The MessageList should have configurable the limit for performing the requests.
218
218
  // This parameter would then be used within these functions
219
219
  export var hasMoreMessagesProbably = function (returnedCountMessages, limit) {
220
- return returnedCountMessages === limit;
220
+ return returnedCountMessages >= limit;
221
221
  };
222
222
  // @deprecated
223
223
  export var hasNotMoreMessages = function (returnedCountMessages, limit) {
@@ -2,7 +2,8 @@ import type { ReactionResponse } from 'stream-chat';
2
2
  import type { ReactEventHandler } from '../Message/types';
3
3
  import type { DefaultStreamChatGenerics } from '../../types/types';
4
4
  import type { ReactionOptions } from './reactionOptions';
5
- export type ReactionsListProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
5
+ import { MessageContextValue } from '../../context';
6
+ export type ReactionsListProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Partial<Pick<MessageContextValue<StreamChatGenerics>, 'handleFetchReactions'>> & {
6
7
  /** Custom on click handler for an individual reaction, defaults to `onReactionListClick` from the `MessageContext` */
7
8
  onClick?: ReactEventHandler;
8
9
  /** An array of the own reaction objects to distinguish own reactions visually */
@@ -1 +1 @@
1
- {"version":3,"file":"ReactionsList.d.ts","sourceRoot":"","sources":["../../../src/components/Reactions/ReactionsList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAQpD,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,MAAM,MAAM,kBAAkB,CAC5B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,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;AAgHF;;GAEG;AACH,eAAO,MAAM,aAAa,yJAAwE,CAAC"}
1
+ {"version":3,"file":"ReactionsList.d.ts","sourceRoot":"","sources":["../../../src/components/Reactions/ReactionsList.tsx"],"names":[],"mappings":"AAGA,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,EAAE,MAAM,eAAe,CAAC;AAGpD,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;AA8EF;;GAEG;AACH,eAAO,MAAM,aAAa,yJAAwE,CAAC"}
@@ -1,49 +1,40 @@
1
- import { __assign, __rest } from "tslib";
1
+ import { __rest } from "tslib";
2
2
  import React, { useState } from 'react';
3
3
  import clsx from 'clsx';
4
- import { useMessageContext } from '../../context/MessageContext';
5
- import { useChatContext } from '../../context/ChatContext';
6
4
  import { useProcessReactions } from './hooks/useProcessReactions';
7
- import { PopperTooltip } from '../Tooltip';
8
- import { useEnterLeaveHandlers } from '../Tooltip/hooks';
9
- var ButtonWithTooltip = function (_a) {
10
- var children = _a.children, onMouseEnter = _a.onMouseEnter, onMouseLeave = _a.onMouseLeave, rest = __rest(_a, ["children", "onMouseEnter", "onMouseLeave"]);
11
- var _b = useState(null), referenceElement = _b[0], setReferenceElement = _b[1];
12
- var _c = useEnterLeaveHandlers({
13
- onMouseEnter: onMouseEnter,
14
- onMouseLeave: onMouseLeave,
15
- }), handleEnter = _c.handleEnter, handleLeave = _c.handleLeave, tooltipVisible = _c.tooltipVisible;
16
- var themeVersion = useChatContext('ButtonWithTooltip').themeVersion;
17
- return (React.createElement(React.Fragment, null,
18
- themeVersion === '2' && (React.createElement(PopperTooltip, { referenceElement: referenceElement, visible: tooltipVisible }, rest.title)),
19
- React.createElement("button", __assign({ onMouseEnter: handleEnter, onMouseLeave: handleLeave, ref: setReferenceElement }, rest), children)));
20
- };
5
+ import { ReactionsListModal } from './ReactionsListModal';
6
+ import { MAX_MESSAGE_REACTIONS_TO_FETCH } from '../Message/hooks';
21
7
  var UnMemoizedReactionsList = function (props) {
22
- var onClick = props.onClick, _a = props.reverse, reverse = _a === void 0 ? false : _a, rest = __rest(props, ["onClick", "reverse"]);
23
- var onReactionListClick = useMessageContext('ReactionsList').onReactionListClick;
24
- var _b = useProcessReactions(rest), aggregatedUserNamesByType = _b.aggregatedUserNamesByType, getEmojiByReactionType = _b.getEmojiByReactionType, iHaveReactedWithReaction = _b.iHaveReactedWithReaction, latestReactions = _b.latestReactions, latestReactionTypes = _b.latestReactionTypes, reactionCounts = _b.reactionCounts, supportedReactionsArePresent = _b.supportedReactionsArePresent, totalReactionCount = _b.totalReactionCount;
25
- if (!latestReactions.length)
8
+ var handleFetchReactions = props.handleFetchReactions, _a = props.reverse, reverse = _a === void 0 ? false : _a, rest = __rest(props, ["handleFetchReactions", "reverse"]);
9
+ var _b = useProcessReactions(rest), existingReactions = _b.existingReactions, hasReactions = _b.hasReactions, totalReactionCount = _b.totalReactionCount;
10
+ var _c = useState(null), selectedReactionType = _c[0], setSelectedReactionType = _c[1];
11
+ var handleReactionButtonClick = function (reactionType) {
12
+ if (totalReactionCount > MAX_MESSAGE_REACTIONS_TO_FETCH) {
13
+ return;
14
+ }
15
+ setSelectedReactionType(reactionType);
16
+ };
17
+ if (!hasReactions)
26
18
  return null;
27
- if (!supportedReactionsArePresent)
28
- return null;
29
- return (React.createElement("div", { "aria-label": 'Reaction list', className: clsx('str-chat__reaction-list str-chat__message-reactions-container', {
30
- 'str-chat__reaction-list--reverse': reverse,
31
- }), "data-testid": 'reaction-list', onClick: onClick || onReactionListClick, onKeyUp: onClick || onReactionListClick, role: 'figure' },
32
- React.createElement("ul", { className: 'str-chat__message-reactions' },
33
- latestReactionTypes.map(function (reactionType) {
34
- var ReactionOption = getEmojiByReactionType(reactionType);
35
- var isOwnReaction = iHaveReactedWithReaction(reactionType);
36
- return (ReactionOption && (React.createElement("li", { className: clsx('str-chat__message-reaction', {
37
- 'str-chat__message-reaction-own': isOwnReaction,
38
- }), key: reactionType },
39
- React.createElement(ButtonWithTooltip, { "aria-label": "Reactions: ".concat(reactionType), "data-testid": "reactions-list-button-".concat(reactionType), title: aggregatedUserNamesByType[reactionType].join(', '), type: 'button' },
40
- React.createElement("span", { className: 'str-chat__message-reaction-emoji' },
41
- React.createElement(ReactionOption.Component, null)),
42
- "\u00A0",
43
- React.createElement("span", { className: 'str-chat__message-reaction-count', "data-testclass": 'reaction-list-reaction-count' }, reactionCounts[reactionType])))));
44
- }),
45
- React.createElement("li", null,
46
- React.createElement("span", { className: 'str-chat__reaction-list--counter' }, totalReactionCount)))));
19
+ return (React.createElement(React.Fragment, null,
20
+ React.createElement("div", { "aria-label": 'Reaction list', className: clsx('str-chat__reaction-list str-chat__message-reactions-container', {
21
+ 'str-chat__reaction-list--reverse': reverse,
22
+ }), "data-testid": 'reaction-list', role: 'figure' },
23
+ React.createElement("ul", { className: 'str-chat__message-reactions' },
24
+ existingReactions.map(function (_a) {
25
+ var EmojiComponent = _a.EmojiComponent, isOwnReaction = _a.isOwnReaction, reactionCount = _a.reactionCount, reactionType = _a.reactionType;
26
+ return EmojiComponent && (React.createElement("li", { className: clsx('str-chat__message-reaction', {
27
+ 'str-chat__message-reaction-own': isOwnReaction,
28
+ }), key: reactionType },
29
+ React.createElement("button", { "aria-label": "Reactions: ".concat(reactionType), "data-testid": "reactions-list-button-".concat(reactionType), onClick: function () { return handleReactionButtonClick(reactionType); }, type: 'button' },
30
+ React.createElement("span", { className: 'str-chat__message-reaction-emoji' },
31
+ React.createElement(EmojiComponent, null)),
32
+ "\u00A0",
33
+ React.createElement("span", { className: 'str-chat__message-reaction-count', "data-testclass": 'reaction-list-reaction-count' }, reactionCount))));
34
+ }),
35
+ React.createElement("li", null,
36
+ React.createElement("span", { className: 'str-chat__reaction-list--counter' }, totalReactionCount)))),
37
+ React.createElement(ReactionsListModal, { handleFetchReactions: handleFetchReactions, onClose: function () { return setSelectedReactionType(null); }, onSelectedReactionTypeChange: setSelectedReactionType, open: selectedReactionType !== null, reactions: existingReactions, selectedReactionType: selectedReactionType })));
47
38
  };
48
39
  /**
49
40
  * Component that displays a list of reactions on a message.
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ import { ModalProps } from '../Modal';
3
+ import { ReactionSummary } from './types';
4
+ import { MessageContextValue } from '../../context';
5
+ import { DefaultStreamChatGenerics } from '../../types/types';
6
+ type ReactionsListModalProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = ModalProps & Partial<Pick<MessageContextValue<StreamChatGenerics>, 'handleFetchReactions'>> & {
7
+ reactions: ReactionSummary[];
8
+ selectedReactionType: string | null;
9
+ onSelectedReactionTypeChange?: (reactionType: string) => void;
10
+ };
11
+ export declare function ReactionsListModal({ handleFetchReactions, onSelectedReactionTypeChange, reactions, selectedReactionType, ...modalProps }: ReactionsListModalProps): JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=ReactionsListModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReactionsListModal.d.ts","sourceRoot":"","sources":["../../../src/components/Reactions/ReactionsListModal.tsx"],"names":[],"mappings":";AAGA,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,eAyEzB"}
@@ -0,0 +1,46 @@
1
+ import { __assign, __rest } from "tslib";
2
+ import React, { useMemo } from 'react';
3
+ import clsx from 'clsx';
4
+ import { Modal } from '../Modal';
5
+ import { useFetchReactions } from './hooks/useFetchReactions';
6
+ import { LoadingIndicator } from '../Loading';
7
+ import { Avatar } from '../Avatar';
8
+ 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"]);
11
+ var selectedReaction = reactions.find(function (_a) {
12
+ var reactionType = _a.reactionType;
13
+ return reactionType === selectedReactionType;
14
+ });
15
+ var SelectedEmojiComponent = (_b = selectedReaction === null || selectedReaction === void 0 ? void 0 : selectedReaction.EmojiComponent) !== null && _b !== void 0 ? _b : null;
16
+ var _c = useFetchReactions({
17
+ handleFetchReactions: handleFetchReactions,
18
+ shouldFetch: modalProps.open,
19
+ }), areReactionsLoading = _c.isLoading, allReactions = _c.reactions;
20
+ var currentReactions = useMemo(function () {
21
+ if (!selectedReactionType) {
22
+ return [];
23
+ }
24
+ return allReactions.filter(function (reaction) { return reaction.type === selectedReactionType && reaction.user; });
25
+ }, [allReactions, selectedReactionType]);
26
+ return (React.createElement(Modal, __assign({}, modalProps),
27
+ React.createElement("div", { className: 'str-chat__message-reactions-details', "data-testid": 'reactions-list-modal' },
28
+ React.createElement("div", { className: 'str-chat__message-reactions-details-reaction-types' }, reactions.map(function (_a) {
29
+ var EmojiComponent = _a.EmojiComponent, reactionCount = _a.reactionCount, reactionType = _a.reactionType;
30
+ return EmojiComponent && (React.createElement("div", { className: clsx('str-chat__message-reactions-details-reaction-type', {
31
+ 'str-chat__message-reactions-details-reaction-type--selected': selectedReactionType === reactionType,
32
+ }), "data-testid": "reaction-details-selector-".concat(reactionType), key: reactionType, onClick: function () { return onSelectedReactionTypeChange === null || onSelectedReactionTypeChange === void 0 ? void 0 : onSelectedReactionTypeChange(reactionType); } },
33
+ React.createElement("span", { className: 'emoji str-chat__message-reaction-emoji' },
34
+ React.createElement(EmojiComponent, null)),
35
+ "\u00A0",
36
+ React.createElement("span", { className: 'str-chat__message-reaction-count' }, reactionCount)));
37
+ })),
38
+ SelectedEmojiComponent && (React.createElement("div", { className: 'emoji str-chat__message-reaction-emoji str-chat__message-reaction-emoji-big' },
39
+ React.createElement(SelectedEmojiComponent, null))),
40
+ React.createElement("div", { className: 'str-chat__message-reactions-details-reacting-users', "data-testid": 'all-reacting-users' }, areReactionsLoading ? (React.createElement(LoadingIndicator, null)) : (currentReactions.map(function (_a) {
41
+ var user = _a.user;
42
+ return (React.createElement("div", { className: 'str-chat__message-reactions-details-reacting-user', key: user === null || user === void 0 ? void 0 : user.id },
43
+ React.createElement(Avatar, { "data-testid": 'avatar', image: user === null || user === void 0 ? void 0 : user.image, name: (user === null || user === void 0 ? void 0 : user.name) || (user === null || user === void 0 ? void 0 : user.id) }),
44
+ React.createElement("span", { className: 'str-chat__user-item--name', "data-testid": 'reaction-user-username' }, (user === null || user === void 0 ? void 0 : user.name) || (user === null || user === void 0 ? void 0 : user.id))));
45
+ }))))));
46
+ }