stream-chat-react 8.0.0 → 8.1.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 (245) hide show
  1. package/dist/browser.full-bundle.js +1820 -609
  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/AttachmentActions.d.ts +0 -1
  6. package/dist/components/Attachment/AttachmentActions.d.ts.map +1 -1
  7. package/dist/components/Attachment/Audio.d.ts +0 -1
  8. package/dist/components/Attachment/Audio.d.ts.map +1 -1
  9. package/dist/components/Attachment/FileAttachment.d.ts +0 -1
  10. package/dist/components/Attachment/FileAttachment.d.ts.map +1 -1
  11. package/dist/components/AutoCompleteTextarea/Item.d.ts.map +1 -1
  12. package/dist/components/AutoCompleteTextarea/Item.js +2 -1
  13. package/dist/components/AutoCompleteTextarea/Textarea.d.ts.map +1 -1
  14. package/dist/components/AutoCompleteTextarea/Textarea.js +1 -1
  15. package/dist/components/Channel/Channel.d.ts.map +1 -1
  16. package/dist/components/Channel/Channel.js +102 -24
  17. package/dist/components/Channel/channelState.d.ts +17 -0
  18. package/dist/components/Channel/channelState.d.ts.map +1 -1
  19. package/dist/components/Channel/channelState.js +24 -2
  20. package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -1
  21. package/dist/components/Channel/hooks/useCreateChannelStateContext.js +7 -1
  22. package/dist/components/Channel/hooks/useIsMounted.d.ts +0 -1
  23. package/dist/components/Channel/hooks/useIsMounted.d.ts.map +1 -1
  24. package/dist/components/Channel/utils.d.ts +5 -0
  25. package/dist/components/Channel/utils.d.ts.map +1 -0
  26. package/dist/components/Channel/utils.js +19 -0
  27. package/dist/components/ChannelHeader/icons.d.ts +0 -1
  28. package/dist/components/ChannelHeader/icons.d.ts.map +1 -1
  29. package/dist/components/ChannelHeader/icons.js +1 -1
  30. package/dist/components/ChannelList/ChannelList.d.ts +2 -3
  31. package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
  32. package/dist/components/ChannelList/ChannelList.js +1 -0
  33. package/dist/components/ChannelList/hooks/useChannelDeletedListener.d.ts +0 -1
  34. package/dist/components/ChannelList/hooks/useChannelDeletedListener.d.ts.map +1 -1
  35. package/dist/components/ChannelList/hooks/useChannelHiddenListener.d.ts +0 -1
  36. package/dist/components/ChannelList/hooks/useChannelHiddenListener.d.ts.map +1 -1
  37. package/dist/components/ChannelList/hooks/useChannelTruncatedListener.d.ts +0 -1
  38. package/dist/components/ChannelList/hooks/useChannelTruncatedListener.d.ts.map +1 -1
  39. package/dist/components/ChannelList/hooks/useChannelUpdatedListener.d.ts +0 -1
  40. package/dist/components/ChannelList/hooks/useChannelUpdatedListener.d.ts.map +1 -1
  41. package/dist/components/ChannelList/hooks/useChannelVisibleListener.d.ts +0 -1
  42. package/dist/components/ChannelList/hooks/useChannelVisibleListener.d.ts.map +1 -1
  43. package/dist/components/ChannelList/hooks/useMessageNewListener.d.ts +0 -1
  44. package/dist/components/ChannelList/hooks/useMessageNewListener.d.ts.map +1 -1
  45. package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts +0 -1
  46. package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts.map +1 -1
  47. package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts +0 -1
  48. package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts.map +1 -1
  49. package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.d.ts +0 -1
  50. package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.d.ts.map +1 -1
  51. package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts +0 -1
  52. package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
  53. package/dist/components/ChannelList/hooks/useUserPresenceChangedListener.d.ts +0 -1
  54. package/dist/components/ChannelList/hooks/useUserPresenceChangedListener.d.ts.map +1 -1
  55. package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
  56. package/dist/components/ChannelPreview/ChannelPreview.js +6 -10
  57. package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts +0 -1
  58. package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts.map +1 -1
  59. package/dist/components/ChannelPreview/utils.d.ts +0 -1
  60. package/dist/components/ChannelPreview/utils.d.ts.map +1 -1
  61. package/dist/components/Chat/Chat.d.ts.map +1 -1
  62. package/dist/components/Chat/Chat.js +2 -1
  63. package/dist/components/Chat/hooks/useChat.d.ts +1 -1
  64. package/dist/components/Chat/hooks/useChat.d.ts.map +1 -1
  65. package/dist/components/Chat/hooks/useChat.js +12 -7
  66. package/dist/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
  67. package/dist/components/Chat/hooks/useCreateChatContext.js +2 -1
  68. package/dist/components/DateSeparator/DateSeparator.d.ts +0 -1
  69. package/dist/components/DateSeparator/DateSeparator.d.ts.map +1 -1
  70. package/dist/components/Gallery/Gallery.d.ts +0 -1
  71. package/dist/components/Gallery/Gallery.d.ts.map +1 -1
  72. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts +2 -2
  73. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts.map +1 -1
  74. package/dist/components/InfiniteScrollPaginator/InfiniteScroll.js +16 -45
  75. package/dist/components/InfiniteScrollPaginator/index.d.ts +0 -2
  76. package/dist/components/InfiniteScrollPaginator/index.d.ts.map +1 -1
  77. package/dist/components/InfiniteScrollPaginator/index.js +0 -2
  78. package/dist/components/Message/FixedHeightMessage.d.ts +0 -1
  79. package/dist/components/Message/FixedHeightMessage.d.ts.map +1 -1
  80. package/dist/components/Message/Message.d.ts +0 -1
  81. package/dist/components/Message/Message.d.ts.map +1 -1
  82. package/dist/components/Message/Message.js +8 -7
  83. package/dist/components/Message/MessageCommerce.d.ts +0 -1
  84. package/dist/components/Message/MessageCommerce.d.ts.map +1 -1
  85. package/dist/components/Message/MessageDeleted.d.ts +0 -1
  86. package/dist/components/Message/MessageDeleted.d.ts.map +1 -1
  87. package/dist/components/Message/MessageRepliesCountButton.d.ts.map +1 -1
  88. package/dist/components/Message/MessageRepliesCountButton.js +10 -24
  89. package/dist/components/Message/MessageSimple.d.ts +0 -1
  90. package/dist/components/Message/MessageSimple.d.ts.map +1 -1
  91. package/dist/components/Message/MessageSimple.js +2 -2
  92. package/dist/components/Message/MessageTeam.d.ts +0 -1
  93. package/dist/components/Message/MessageTeam.d.ts.map +1 -1
  94. package/dist/components/Message/MessageText.d.ts +0 -1
  95. package/dist/components/Message/MessageText.d.ts.map +1 -1
  96. package/dist/components/Message/MessageTimestamp.d.ts +0 -1
  97. package/dist/components/Message/MessageTimestamp.d.ts.map +1 -1
  98. package/dist/components/Message/QuotedMessage.d.ts +0 -1
  99. package/dist/components/Message/QuotedMessage.d.ts.map +1 -1
  100. package/dist/components/Message/QuotedMessage.js +3 -1
  101. package/dist/components/Message/hooks/useEditHandler.d.ts +0 -1
  102. package/dist/components/Message/hooks/useEditHandler.d.ts.map +1 -1
  103. package/dist/components/Message/hooks/useUserHandler.d.ts +0 -1
  104. package/dist/components/Message/hooks/useUserHandler.d.ts.map +1 -1
  105. package/dist/components/Message/icons.d.ts +0 -1
  106. package/dist/components/Message/icons.d.ts.map +1 -1
  107. package/dist/components/Message/types.d.ts +2 -1
  108. package/dist/components/Message/types.d.ts.map +1 -1
  109. package/dist/components/Message/utils.d.ts.map +1 -1
  110. package/dist/components/Message/utils.js +3 -0
  111. package/dist/components/MessageActions/MessageActionsBox.d.ts +0 -1
  112. package/dist/components/MessageActions/MessageActionsBox.d.ts.map +1 -1
  113. package/dist/components/MessageInput/EditMessageForm.d.ts +0 -1
  114. package/dist/components/MessageInput/EditMessageForm.d.ts.map +1 -1
  115. package/dist/components/MessageInput/EmojiPicker.d.ts +0 -1
  116. package/dist/components/MessageInput/EmojiPicker.d.ts.map +1 -1
  117. package/dist/components/MessageInput/MessageInputFlat.d.ts +0 -1
  118. package/dist/components/MessageInput/MessageInputFlat.d.ts.map +1 -1
  119. package/dist/components/MessageInput/MessageInputFlat.js +25 -3
  120. package/dist/components/MessageInput/MessageInputSmall.d.ts +0 -1
  121. package/dist/components/MessageInput/MessageInputSmall.d.ts.map +1 -1
  122. package/dist/components/MessageInput/MessageInputSmall.js +26 -4
  123. package/dist/components/MessageInput/QuotedMessagePreview.d.ts +0 -1
  124. package/dist/components/MessageInput/QuotedMessagePreview.d.ts.map +1 -1
  125. package/dist/components/MessageInput/UploadsPreview.d.ts +0 -1
  126. package/dist/components/MessageInput/UploadsPreview.d.ts.map +1 -1
  127. package/dist/components/MessageInput/hooks/useAttachments.d.ts +0 -1
  128. package/dist/components/MessageInput/hooks/useAttachments.d.ts.map +1 -1
  129. package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts.map +1 -1
  130. package/dist/components/MessageInput/hooks/useCooldownTimer.js +19 -29
  131. package/dist/components/MessageInput/hooks/useEmojiPicker.d.ts +0 -1
  132. package/dist/components/MessageInput/hooks/useEmojiPicker.d.ts.map +1 -1
  133. package/dist/components/MessageInput/hooks/useFileUploads.d.ts +0 -1
  134. package/dist/components/MessageInput/hooks/useFileUploads.d.ts.map +1 -1
  135. package/dist/components/MessageInput/hooks/useMessageInputText.d.ts +0 -1
  136. package/dist/components/MessageInput/hooks/useMessageInputText.d.ts.map +1 -1
  137. package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts +0 -1
  138. package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts.map +1 -1
  139. package/dist/components/MessageList/GiphyPreviewMessage.d.ts +0 -1
  140. package/dist/components/MessageList/GiphyPreviewMessage.d.ts.map +1 -1
  141. package/dist/components/MessageList/MessageList.d.ts +8 -3
  142. package/dist/components/MessageList/MessageList.d.ts.map +1 -1
  143. package/dist/components/MessageList/MessageList.js +90 -24
  144. package/dist/components/MessageList/MessageListNotifications.d.ts +1 -0
  145. package/dist/components/MessageList/MessageListNotifications.d.ts.map +1 -1
  146. package/dist/components/MessageList/MessageListNotifications.js +2 -2
  147. package/dist/components/MessageList/VirtualizedMessageList.d.ts +11 -1
  148. package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
  149. package/dist/components/MessageList/VirtualizedMessageList.js +116 -19
  150. package/dist/components/MessageList/hooks/index.d.ts +0 -1
  151. package/dist/components/MessageList/hooks/index.d.ts.map +1 -1
  152. package/dist/components/MessageList/hooks/index.js +0 -1
  153. package/dist/components/MessageList/hooks/useEnrichedMessages.d.ts +0 -1
  154. package/dist/components/MessageList/hooks/useEnrichedMessages.d.ts.map +1 -1
  155. package/dist/components/MessageList/hooks/useEnrichedMessages.js +4 -4
  156. package/dist/components/MessageList/hooks/useGiphyPreview.d.ts +0 -1
  157. package/dist/components/MessageList/hooks/useGiphyPreview.d.ts.map +1 -1
  158. package/dist/components/MessageList/hooks/useMessageListElements.d.ts.map +1 -1
  159. package/dist/components/MessageList/hooks/useMessageListElements.js +1 -1
  160. package/dist/components/MessageList/hooks/useNewMessageNotification.d.ts +1 -2
  161. package/dist/components/MessageList/hooks/useNewMessageNotification.d.ts.map +1 -1
  162. package/dist/components/MessageList/hooks/useNewMessageNotification.js +6 -2
  163. package/dist/components/MessageList/hooks/usePrependMessagesCount.d.ts.map +1 -1
  164. package/dist/components/MessageList/hooks/usePrependMessagesCount.js +2 -0
  165. package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts +2 -0
  166. package/dist/components/MessageList/hooks/useScrollLocationLogic.d.ts.map +1 -1
  167. package/dist/components/MessageList/hooks/useScrollLocationLogic.js +9 -5
  168. package/dist/components/MessageList/utils.d.ts +24 -6
  169. package/dist/components/MessageList/utils.d.ts.map +1 -1
  170. package/dist/components/MessageList/utils.js +31 -23
  171. package/dist/components/Reactions/ReactionsList.d.ts +0 -1
  172. package/dist/components/Reactions/ReactionsList.d.ts.map +1 -1
  173. package/dist/components/Reactions/utils/utils.d.ts +0 -1
  174. package/dist/components/Reactions/utils/utils.d.ts.map +1 -1
  175. package/dist/components/Thread/Thread.d.ts +2 -0
  176. package/dist/components/Thread/Thread.d.ts.map +1 -1
  177. package/dist/components/Thread/Thread.js +6 -10
  178. package/dist/context/ChannelActionContext.d.ts +3 -0
  179. package/dist/context/ChannelActionContext.d.ts.map +1 -1
  180. package/dist/context/ChannelStateContext.d.ts +5 -1
  181. package/dist/context/ChannelStateContext.d.ts.map +1 -1
  182. package/dist/context/ChatContext.d.ts +3 -0
  183. package/dist/context/ChatContext.d.ts.map +1 -1
  184. package/dist/context/MessageContext.d.ts +2 -0
  185. package/dist/context/MessageContext.d.ts.map +1 -1
  186. package/dist/context/utils/getDisplayName.d.ts +0 -1
  187. package/dist/context/utils/getDisplayName.d.ts.map +1 -1
  188. package/dist/css/index.css +1 -1
  189. package/dist/i18n/Streami18n.d.ts +5 -4
  190. package/dist/i18n/Streami18n.d.ts.map +1 -1
  191. package/dist/i18n/Streami18n.js +5 -5
  192. package/dist/i18n/de.json +29 -28
  193. package/dist/i18n/en.json +3 -2
  194. package/dist/i18n/es.json +4 -2
  195. package/dist/i18n/fr.json +4 -2
  196. package/dist/i18n/hi.json +3 -2
  197. package/dist/i18n/it.json +4 -2
  198. package/dist/i18n/ja.json +3 -2
  199. package/dist/i18n/ko.json +3 -2
  200. package/dist/i18n/nl.json +3 -2
  201. package/dist/i18n/pt.json +22 -20
  202. package/dist/i18n/ru.json +5 -2
  203. package/dist/i18n/tr.json +3 -2
  204. package/dist/index.cjs.js +489 -278
  205. package/dist/index.cjs.js.map +1 -1
  206. package/dist/scss/Attachment.scss +6 -1
  207. package/dist/scss/Avatar.scss +1 -1
  208. package/dist/scss/ChannelHeader.scss +8 -13
  209. package/dist/scss/Gallery.scss +19 -0
  210. package/dist/scss/Message.scss +24 -13
  211. package/dist/scss/MessageInputFlat.scss +20 -0
  212. package/dist/scss/MessageList.scss +7 -0
  213. package/dist/scss/ReactionList.scss +2 -1
  214. package/dist/scss/ReactionSelector.scss +2 -1
  215. package/dist/scss/SimpleReactionsList.scss +2 -1
  216. package/dist/scss/SmallMessageInput.scss +34 -0
  217. package/dist/scss/Thread.scss +5 -1
  218. package/dist/scss/VirtualMessage.scss +6 -0
  219. package/dist/scss/_variables.scss +4 -5
  220. package/dist/stories/connected-user.stories.d.ts +4 -0
  221. package/dist/stories/connected-user.stories.d.ts.map +1 -0
  222. package/dist/stories/connected-user.stories.js +81 -0
  223. package/dist/stories/hello.stories.d.ts +3 -0
  224. package/dist/stories/hello.stories.d.ts.map +1 -0
  225. package/dist/stories/hello.stories.js +47 -0
  226. package/dist/stories/jump-to-message.stories.d.ts +4 -0
  227. package/dist/stories/jump-to-message.stories.d.ts.map +1 -0
  228. package/dist/stories/jump-to-message.stories.js +111 -0
  229. package/dist/stories/utils.d.ts +19 -0
  230. package/dist/stories/utils.d.ts.map +1 -0
  231. package/dist/stories/utils.js +5 -0
  232. package/dist/types/types.d.ts +15 -0
  233. package/dist/types/types.d.ts.map +1 -1
  234. package/dist/version.d.ts +1 -1
  235. package/dist/version.js +1 -1
  236. package/package.json +20 -12
  237. package/dist/components/InfiniteScrollPaginator/InfiniteScrollPaginator.d.ts +0 -18
  238. package/dist/components/InfiniteScrollPaginator/InfiniteScrollPaginator.d.ts.map +0 -1
  239. package/dist/components/InfiniteScrollPaginator/InfiniteScrollPaginator.js +0 -8
  240. package/dist/components/InfiniteScrollPaginator/ReverseInfiniteScroll.d.ts +0 -4
  241. package/dist/components/InfiniteScrollPaginator/ReverseInfiniteScroll.d.ts.map +0 -1
  242. package/dist/components/InfiniteScrollPaginator/ReverseInfiniteScroll.js +0 -14
  243. package/dist/components/MessageList/hooks/useCallLoadMore.d.ts +0 -3
  244. package/dist/components/MessageList/hooks/useCallLoadMore.d.ts.map +0 -1
  245. package/dist/components/MessageList/hooks/useCallLoadMore.js +0 -8
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { MessageInputReducerAction, MessageInputState } from './useMessageInputState';
3
2
  import type { MessageInputProps } from '../MessageInput';
4
3
  import type { CustomTrigger, DefaultStreamChatGenerics } from '../../../types/types';
@@ -1 +1 @@
1
- {"version":3,"file":"useMessageInputText.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useMessageInputText.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAErF,eAAO,MAAM,mBAAmB;;+BAyBb,MAAM;;CAsExB,CAAC"}
1
+ {"version":3,"file":"useMessageInputText.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useMessageInputText.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAErF,eAAO,MAAM,mBAAmB;;+BAyBb,MAAM;;CAsExB,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { Message } from 'stream-chat';
3
2
  import type { MessageInputReducerAction, MessageInputState } from './useMessageInputState';
4
3
  import type { MessageInputProps } from '../MessageInput';
@@ -1 +1 @@
1
- {"version":3,"file":"useSubmitHandler.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useSubmitHandler.ts"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAc,OAAO,EAAkB,MAAM,aAAa,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAQrF,eAAO,MAAM,gBAAgB,iUAOV,MAAM;0BA4Dd,MAAM,kBAAkB;CAqGlC,CAAC"}
1
+ {"version":3,"file":"useSubmitHandler.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useSubmitHandler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAc,OAAO,EAAkB,MAAM,aAAa,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAQrF,eAAO,MAAM,gBAAgB,iUAOV,MAAM;0BA4Dd,MAAM,kBAAkB;CAqGlC,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { StreamMessage } from '../../context/ChannelStateContext';
3
2
  import type { DefaultStreamChatGenerics } from '../../types/types';
4
3
  export declare type GiphyPreviewMessageProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
@@ -1 +1 @@
1
- {"version":3,"file":"GiphyPreviewMessage.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/GiphyPreviewMessage.tsx"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,oBAAY,wBAAwB,CAClC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;CAC5C,CAAC;AAEF,eAAO,MAAM,mBAAmB,wJAY/B,CAAC"}
1
+ {"version":3,"file":"GiphyPreviewMessage.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/GiphyPreviewMessage.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,oBAAY,wBAAwB,CAClC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;CAC5C,CAAC;AAEF,eAAO,MAAM,mBAAmB,wJAY/B,CAAC"}
@@ -1,13 +1,12 @@
1
- /// <reference types="react" />
2
1
  import { ChannelActionContextValue } from '../../context/ChannelActionContext';
3
- import { InfiniteScrollProps } from '../InfiniteScrollPaginator';
2
+ import { InfiniteScrollProps } from '../InfiniteScrollPaginator/InfiniteScroll';
4
3
  import type { GroupStyle } from './utils';
5
4
  import type { MessageProps } from '../Message/types';
6
5
  import type { StreamMessage } from '../../context/ChannelStateContext';
7
6
  import type { DefaultStreamChatGenerics } from '../../types/types';
8
7
  declare type PropsDrilledToMessage = 'additionalMessageInputProps' | 'closeReactionSelectorOnClick' | 'customMessageActions' | 'disableQuotedMessages' | 'formatDate' | 'getDeleteMessageErrorNotification' | 'getFlagMessageErrorNotification' | 'getFlagMessageSuccessNotification' | 'getMuteUserErrorNotification' | 'getMuteUserSuccessNotification' | 'getPinMessageErrorNotification' | 'Message' | 'messageActions' | 'onlySenderCanEdit' | 'onMentionsClick' | 'onMentionsHover' | 'onUserClick' | 'onUserHover' | 'openThread' | 'pinPermissions' | 'renderText' | 'retrySendMessage' | 'unsafeHTML';
9
8
  export declare type MessageListProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Partial<Pick<MessageProps<StreamChatGenerics>, PropsDrilledToMessage>> & {
10
- /** Disables the injection of date separator components, defaults to `false` */
9
+ /** Disables the injection of date separator components in MessageList, defaults to `false` */
11
10
  disableDateSeparator?: boolean;
12
11
  /** Callback function to set group styles for each message */
13
12
  groupStyles?: (message: StreamMessage<StreamChatGenerics>, previousMessage: StreamMessage<StreamChatGenerics>, nextMessage: StreamMessage<StreamChatGenerics>, noGroupByUser: boolean) => GroupStyle;
@@ -21,10 +20,16 @@ export declare type MessageListProps<StreamChatGenerics extends DefaultStreamCha
21
20
  hideNewMessageSeparator?: boolean;
22
21
  /** Overrides the default props passed to [InfiniteScroll](https://github.com/GetStream/stream-chat-react/blob/master/src/components/InfiniteScrollPaginator/InfiniteScroll.tsx) */
23
22
  internalInfiniteScrollProps?: InfiniteScrollProps;
23
+ /** Function called when latest messages should be loaded, after the list has jumped at an earlier message set */
24
+ jumpToLatestMessage?: () => Promise<void>;
24
25
  /** Whether or not the list is currently loading more items */
25
26
  loadingMore?: boolean;
27
+ /** Whether or not the list is currently loading newer items */
28
+ loadingMoreNewer?: boolean;
26
29
  /** Function called when more messages are to be loaded, defaults to function stored in [ChannelActionContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_action_context/) */
27
30
  loadMore?: ChannelActionContextValue['loadMore'] | (() => Promise<void>);
31
+ /** Function called when newer messages are to be loaded, defaults to function stored in [ChannelActionContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_action_context/) */
32
+ loadMoreNewer?: ChannelActionContextValue['loadMoreNewer'] | (() => Promise<void>);
28
33
  /** The limit to use when paginating messages */
29
34
  messageLimit?: number;
30
35
  /** The messages to render in the list, defaults to messages stored in [ChannelStateContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_state_context/) */
@@ -1 +1 @@
1
- {"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/MessageList.tsx"],"names":[],"mappings":";AAWA,OAAO,EACL,yBAAyB,EAE1B,MAAM,oCAAoC,CAAC;AAQ5C,OAAO,EAAkB,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AA2JnE,aAAK,qBAAqB,GACtB,6BAA6B,GAC7B,8BAA8B,GAC9B,sBAAsB,GACtB,uBAAuB,GACvB,YAAY,GACZ,mCAAmC,GACnC,iCAAiC,GACjC,mCAAmC,GACnC,8BAA8B,GAC9B,gCAAgC,GAChC,gCAAgC,GAChC,SAAS,GACT,gBAAgB,GAChB,mBAAmB,GACnB,iBAAiB,GACjB,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,YAAY,GACZ,gBAAgB,GAChB,YAAY,GACZ,kBAAkB,GAClB,YAAY,CAAC;AAEjB,oBAAY,gBAAgB,CAC1B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,qBAAqB,CAAC,CAAC,GAAG;IAC3E,+EAA+E;IAC/E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC1C,eAAe,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAClD,WAAW,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC9C,aAAa,EAAE,OAAO,KACnB,UAAU,CAAC;IAChB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qIAAqI;IACrI,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,mLAAmL;IACnL,2BAA2B,CAAC,EAAE,mBAAmB,CAAC;IAClD,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4LAA4L;IAC5L,QAAQ,CAAC,EAAE,yBAAyB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yKAAyK;IACzK,QAAQ,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC/C,qDAAqD;IACrD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qHAAqH;IACrH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6GAA6G;IAC7G,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uDAAuD;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,gJAqBvB,CAAC"}
1
+ {"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/MessageList.tsx"],"names":[],"mappings":"AAUA,OAAO,EACL,yBAAyB,EAE1B,MAAM,oCAAoC,CAAC;AAQ5C,OAAO,EAAkB,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAKhG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAsLnE,aAAK,qBAAqB,GACtB,6BAA6B,GAC7B,8BAA8B,GAC9B,sBAAsB,GACtB,uBAAuB,GACvB,YAAY,GACZ,mCAAmC,GACnC,iCAAiC,GACjC,mCAAmC,GACnC,8BAA8B,GAC9B,gCAAgC,GAChC,gCAAgC,GAChC,SAAS,GACT,gBAAgB,GAChB,mBAAmB,GACnB,iBAAiB,GACjB,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,YAAY,GACZ,gBAAgB,GAChB,YAAY,GACZ,kBAAkB,GAClB,YAAY,CAAC;AAEjB,oBAAY,gBAAgB,CAC1B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,qBAAqB,CAAC,CAAC,GAAG;IAC3E,8FAA8F;IAC9F,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC1C,eAAe,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAClD,WAAW,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC9C,aAAa,EAAE,OAAO,KACnB,UAAU,CAAC;IAChB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qIAAqI;IACrI,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,mLAAmL;IACnL,2BAA2B,CAAC,EAAE,mBAAmB,CAAC;IAClD,iHAAiH;IACjH,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4LAA4L;IAC5L,QAAQ,CAAC,EAAE,yBAAyB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,6LAA6L;IAC7L,aAAa,CAAC,EAAE,yBAAyB,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yKAAyK;IACzK,QAAQ,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC/C,qDAAqD;IACrD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qHAAqH;IACrH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6GAA6G;IAC7G,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uDAAuD;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,gJA2BvB,CAAC"}
@@ -9,6 +9,42 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (_) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
12
48
  var __rest = (this && this.__rest) || function (s, e) {
13
49
  var t = {};
14
50
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -21,7 +57,6 @@ var __rest = (this && this.__rest) || function (s, e) {
21
57
  return t;
22
58
  };
23
59
  import React from 'react';
24
- import { useCallLoadMore } from './hooks/useCallLoadMore';
25
60
  import { useEnrichedMessages } from './hooks/useEnrichedMessages';
26
61
  import { useMessageListElements } from './hooks/useMessageListElements';
27
62
  import { useScrollLocationLogic } from './hooks/useScrollLocationLogic';
@@ -33,26 +68,23 @@ import { useChannelStateContext, } from '../../context/ChannelStateContext';
33
68
  import { useChatContext } from '../../context/ChatContext';
34
69
  import { useComponentContext } from '../../context/ComponentContext';
35
70
  import { EmptyStateIndicator as DefaultEmptyStateIndicator } from '../EmptyStateIndicator';
36
- import { InfiniteScroll } from '../InfiniteScrollPaginator';
71
+ import { InfiniteScroll } from '../InfiniteScrollPaginator/InfiniteScroll';
37
72
  import { LoadingIndicator as DefaultLoadingIndicator } from '../Loading';
38
73
  import { defaultPinPermissions, MESSAGE_ACTIONS } from '../Message/utils';
39
74
  import { TypingIndicator as DefaultTypingIndicator } from '../TypingIndicator';
40
- var useInternalInfiniteScrollProps = function (props) {
41
- var _a = useComponentContext('useInternalInfiniteScrollProps').LoadingIndicator, LoadingIndicator = _a === void 0 ? DefaultLoadingIndicator : _a;
42
- return __assign({ hasMore: props.hasMore, isLoading: props.loadingMore, loader: (React.createElement(Center, { key: 'loadingindicator' },
43
- React.createElement(LoadingIndicator, { size: 20 }))), loadMore: useCallLoadMore(props.loadMore, props.messageLimit || 100) }, props.internalInfiniteScrollProps);
44
- };
45
75
  var MessageListWithContext = function (props) {
46
76
  var channel = props.channel, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? false : _a, groupStyles = props.groupStyles, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, _d = props.messageActions, messageActions = _d === void 0 ? Object.keys(MESSAGE_ACTIONS) : _d, _e = props.messages, messages = _e === void 0 ? [] : _e, notifications = props.notifications, _f = props.noGroupByUser, noGroupByUser = _f === void 0 ? false : _f, _g = props.pinPermissions, pinPermissions = _g === void 0 ? defaultPinPermissions : _g, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
47
77
  _h = props.returnAllReadData, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release
48
- returnAllReadData = _h === void 0 ? false : _h, _j = props.threadList, threadList = _j === void 0 ? false : _j, _k = props.unsafeHTML, unsafeHTML = _k === void 0 ? false : _k, headerPosition = props.headerPosition, read = props.read;
78
+ returnAllReadData = _h === void 0 ? false : _h, _j = props.threadList, threadList = _j === void 0 ? false : _j, _k = props.unsafeHTML, unsafeHTML = _k === void 0 ? false : _k, headerPosition = props.headerPosition, read = props.read, _l = props.messageLimit, messageLimit = _l === void 0 ? 100 : _l, loadMoreCallback = props.loadMore, loadMoreNewerCallback = props.loadMoreNewer, _m = props.hasMoreNewer, hasMoreNewer = _m === void 0 ? false : _m, suppressAutoscroll = props.suppressAutoscroll, highlightedMessageId = props.highlightedMessageId, _o = props.jumpToLatestMessage, jumpToLatestMessage = _o === void 0 ? function () { return Promise.resolve(); } : _o;
49
79
  var customClasses = useChatContext('MessageList').customClasses;
50
- var _l = useComponentContext('MessageList'), _m = _l.EmptyStateIndicator, EmptyStateIndicator = _m === void 0 ? DefaultEmptyStateIndicator : _m, _o = _l.MessageListNotifications, MessageListNotifications = _o === void 0 ? DefaultMessageListNotifications : _o, _p = _l.MessageNotification, MessageNotification = _p === void 0 ? DefaultMessageNotification : _p, _q = _l.TypingIndicator, TypingIndicator = _q === void 0 ? DefaultTypingIndicator : _q;
51
- var _r = useScrollLocationLogic({
80
+ var _p = useComponentContext('MessageList'), _q = _p.EmptyStateIndicator, EmptyStateIndicator = _q === void 0 ? DefaultEmptyStateIndicator : _q, _r = _p.MessageListNotifications, MessageListNotifications = _r === void 0 ? DefaultMessageListNotifications : _r, _s = _p.MessageNotification, MessageNotification = _s === void 0 ? DefaultMessageNotification : _s, _t = _p.TypingIndicator, TypingIndicator = _t === void 0 ? DefaultTypingIndicator : _t;
81
+ var _u = useScrollLocationLogic({
82
+ hasMoreNewer: hasMoreNewer,
52
83
  messages: messages,
53
84
  scrolledUpThreshold: props.scrolledUpThreshold,
54
- }), hasNewMessages = _r.hasNewMessages, listRef = _r.listRef, onMessageLoadCaptured = _r.onMessageLoadCaptured, onScroll = _r.onScroll, scrollToBottom = _r.scrollToBottom, wrapperRect = _r.wrapperRect;
55
- var _s = useEnrichedMessages({
85
+ suppressAutoscroll: suppressAutoscroll,
86
+ }), hasNewMessages = _u.hasNewMessages, listRef = _u.listRef, onMessageLoadCaptured = _u.onMessageLoadCaptured, onScroll = _u.onScroll, scrollToBottom = _u.scrollToBottom, wrapperRect = _u.wrapperRect;
87
+ var _v = useEnrichedMessages({
56
88
  channel: channel,
57
89
  disableDateSeparator: disableDateSeparator,
58
90
  groupStyles: groupStyles,
@@ -61,8 +93,7 @@ var MessageListWithContext = function (props) {
61
93
  hideNewMessageSeparator: hideNewMessageSeparator,
62
94
  messages: messages,
63
95
  noGroupByUser: noGroupByUser,
64
- threadList: threadList,
65
- }), messageGroupStyles = _s.messageGroupStyles, enrichedMessages = _s.messages;
96
+ }), messageGroupStyles = _v.messageGroupStyles, enrichedMessages = _v.messages;
66
97
  var elements = useMessageListElements({
67
98
  enrichedMessages: enrichedMessages,
68
99
  internalMessageProps: {
@@ -97,15 +128,50 @@ var MessageListWithContext = function (props) {
97
128
  returnAllReadData: returnAllReadData,
98
129
  threadList: threadList,
99
130
  });
100
- var finalInternalInfiniteScrollProps = useInternalInfiniteScrollProps(props);
131
+ var _w = useComponentContext('useInternalInfiniteScrollProps').LoadingIndicator, LoadingIndicator = _w === void 0 ? DefaultLoadingIndicator : _w;
101
132
  var messageListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.messageList) || 'str-chat__list';
102
133
  var threadListClass = threadList ? (customClasses === null || customClasses === void 0 ? void 0 : customClasses.threadList) || 'str-chat__list--thread' : '';
134
+ var loadMore = React.useCallback(function () {
135
+ if (loadMoreCallback) {
136
+ loadMoreCallback(messageLimit);
137
+ }
138
+ }, [loadMoreCallback, messageLimit]);
139
+ var loadMoreNewer = React.useCallback(function () {
140
+ if (loadMoreNewerCallback) {
141
+ loadMoreNewerCallback(messageLimit);
142
+ }
143
+ }, [loadMoreNewerCallback, messageLimit]);
144
+ var scrollToBottomFromNotification = React.useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
145
+ return __generator(this, function (_a) {
146
+ switch (_a.label) {
147
+ case 0:
148
+ if (!hasMoreNewer) return [3 /*break*/, 2];
149
+ return [4 /*yield*/, jumpToLatestMessage()];
150
+ case 1:
151
+ _a.sent();
152
+ return [3 /*break*/, 3];
153
+ case 2:
154
+ scrollToBottom();
155
+ _a.label = 3;
156
+ case 3: return [2 /*return*/];
157
+ }
158
+ });
159
+ }); }, [scrollToBottom, hasMoreNewer]);
160
+ var ulRef = React.useRef(null);
161
+ React.useLayoutEffect(function () {
162
+ var _a;
163
+ if (highlightedMessageId) {
164
+ var element = (_a = ulRef.current) === null || _a === void 0 ? void 0 : _a.querySelector("[data-message-id='" + highlightedMessageId + "']");
165
+ element === null || element === void 0 ? void 0 : element.scrollIntoView({ block: 'center' });
166
+ }
167
+ }, [highlightedMessageId]);
103
168
  return (React.createElement(React.Fragment, null,
104
- React.createElement("div", { className: messageListClass + " " + threadListClass, onScroll: onScroll, ref: listRef }, !elements.length ? (React.createElement(EmptyStateIndicator, { listType: 'message' })) : (React.createElement(InfiniteScroll, __assign({ className: 'str-chat__reverse-infinite-scroll', "data-testid": 'reverse-infinite-scroll', isReverse: true, useWindow: false }, finalInternalInfiniteScrollProps),
105
- React.createElement("ul", { className: 'str-chat__ul' }, elements),
169
+ React.createElement("div", { className: messageListClass + " " + threadListClass, onScroll: onScroll, ref: listRef }, !elements.length ? (React.createElement(EmptyStateIndicator, { listType: 'message' })) : (React.createElement(InfiniteScroll, __assign({ className: 'str-chat__reverse-infinite-scroll', "data-testid": 'reverse-infinite-scroll', hasMore: props.hasMore, hasMoreNewer: props.hasMoreNewer, isLoading: props.loadingMore, loader: React.createElement(Center, { key: 'loadingindicator' },
170
+ React.createElement(LoadingIndicator, { size: 20 })), loadMore: loadMore, loadMoreNewer: loadMoreNewer }, props.internalInfiniteScrollProps),
171
+ React.createElement("ul", { className: 'str-chat__ul', ref: ulRef }, elements),
106
172
  React.createElement(TypingIndicator, { threadList: threadList }),
107
173
  React.createElement("div", { key: 'bottom' })))),
108
- React.createElement(MessageListNotifications, { hasNewMessages: hasNewMessages, MessageNotification: MessageNotification, notifications: notifications, scrollToBottom: scrollToBottom })));
174
+ React.createElement(MessageListNotifications, { hasNewMessages: hasNewMessages, isNotAtLatestMessageSet: hasMoreNewer, MessageNotification: MessageNotification, notifications: notifications, scrollToBottom: scrollToBottomFromNotification })));
109
175
  };
110
176
  /**
111
177
  * The MessageList component renders a list of Messages.
@@ -116,10 +182,10 @@ var MessageListWithContext = function (props) {
116
182
  * - [TypingContext](https://getstream.io/chat/docs/sdk/react/contexts/typing_context/)
117
183
  */
118
184
  export var MessageList = function (props) {
119
- var loadMore = useChannelActionContext('MessageList').loadMore;
120
- var _a = useChannelStateContext('MessageList'), membersPropToNotPass = _a.members, // eslint-disable-line @typescript-eslint/no-unused-vars
121
- mutesPropToNotPass = _a.mutes, // eslint-disable-line @typescript-eslint/no-unused-vars
122
- watchersPropToNotPass = _a.watchers, // eslint-disable-line @typescript-eslint/no-unused-vars
123
- restChannelStateContext = __rest(_a, ["members", "mutes", "watchers"]);
124
- return (React.createElement(MessageListWithContext, __assign({ loadMore: loadMore }, restChannelStateContext, props)));
185
+ var _a = useChannelActionContext('MessageList'), jumpToLatestMessage = _a.jumpToLatestMessage, loadMore = _a.loadMore, loadMoreNewer = _a.loadMoreNewer;
186
+ var _b = useChannelStateContext('MessageList'), membersPropToNotPass = _b.members, // eslint-disable-line @typescript-eslint/no-unused-vars
187
+ mutesPropToNotPass = _b.mutes, // eslint-disable-line @typescript-eslint/no-unused-vars
188
+ watchersPropToNotPass = _b.watchers, // eslint-disable-line @typescript-eslint/no-unused-vars
189
+ restChannelStateContext = __rest(_b, ["members", "mutes", "watchers"]);
190
+ return (React.createElement(MessageListWithContext, __assign({ jumpToLatestMessage: jumpToLatestMessage, loadMore: loadMore, loadMoreNewer: loadMoreNewer }, restChannelStateContext, props)));
125
191
  };
@@ -3,6 +3,7 @@ import type { MessageNotificationProps } from './MessageNotification';
3
3
  import type { ChannelNotifications } from '../../context/ChannelStateContext';
4
4
  export declare type MessageListNotificationsProps = {
5
5
  hasNewMessages: boolean;
6
+ isNotAtLatestMessageSet: boolean;
6
7
  MessageNotification: React.ComponentType<MessageNotificationProps>;
7
8
  notifications: ChannelNotifications;
8
9
  scrollToBottom: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"MessageListNotifications.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/MessageListNotifications.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,oBAAY,6BAA6B,GAAG;IAC1C,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACnE,aAAa,EAAE,oBAAoB,CAAC;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,wBAAwB,UAAW,6BAA6B,gBAkB5E,CAAC"}
1
+ {"version":3,"file":"MessageListNotifications.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/MessageListNotifications.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,oBAAY,6BAA6B,GAAG;IAC1C,cAAc,EAAE,OAAO,CAAC;IACxB,uBAAuB,EAAE,OAAO,CAAC;IACjC,mBAAmB,EAAE,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACnE,aAAa,EAAE,oBAAoB,CAAC;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,wBAAwB,UAAW,6BAA6B,gBA2B5E,CAAC"}
@@ -3,10 +3,10 @@ import { ConnectionStatus } from './ConnectionStatus';
3
3
  import { CustomNotification } from './CustomNotification';
4
4
  import { useTranslationContext } from '../../context/TranslationContext';
5
5
  export var MessageListNotifications = function (props) {
6
- var hasNewMessages = props.hasNewMessages, MessageNotification = props.MessageNotification, notifications = props.notifications, scrollToBottom = props.scrollToBottom;
6
+ var hasNewMessages = props.hasNewMessages, isNotAtLatestMessageSet = props.isNotAtLatestMessageSet, MessageNotification = props.MessageNotification, notifications = props.notifications, scrollToBottom = props.scrollToBottom;
7
7
  var t = useTranslationContext('MessageListNotifications').t;
8
8
  return (React.createElement("div", { className: 'str-chat__list-notifications' },
9
9
  notifications.map(function (notification) { return (React.createElement(CustomNotification, { active: true, key: notification.id, type: notification.type }, notification.text)); }),
10
10
  React.createElement(ConnectionStatus, null),
11
- React.createElement(MessageNotification, { onClick: scrollToBottom, showNotification: hasNewMessages }, t('New Messages!'))));
11
+ React.createElement(MessageNotification, { onClick: scrollToBottom, showNotification: hasNewMessages || isNotAtLatestMessageSet }, isNotAtLatestMessageSet ? t('Latest Messages') : t('New Messages!'))));
12
12
  };
@@ -13,18 +13,26 @@ export declare type VirtualizedMessageListProps<StreamChatGenerics extends Defau
13
13
  customMessageRenderer?: (messageList: StreamMessage<StreamChatGenerics>[], index: number) => React.ReactElement;
14
14
  /** If set, the default item height is used for the calculation of the total list height. Use if you expect messages with a lot of height variance */
15
15
  defaultItemHeight?: number;
16
- /** Disables the injection of date separator components, defaults to `true` */
16
+ /** Disables the injection of date separator components in MessageList, defaults to `true` */
17
17
  disableDateSeparator?: boolean;
18
18
  /** Whether or not the list has more items to load */
19
19
  hasMore?: boolean;
20
+ /** Whether or not the list has newer items to load */
21
+ hasMoreNewer?: boolean;
20
22
  /** Hides the `MessageDeleted` components from the list, defaults to `false` */
21
23
  hideDeletedMessages?: boolean;
22
24
  /** Hides the `DateSeparator` component when new messages are received in a channel that's watched but not active, defaults to false */
23
25
  hideNewMessageSeparator?: boolean;
26
+ /** The id of the message to highlight and center */
27
+ highlightedMessageId?: string;
24
28
  /** Whether or not the list is currently loading more items */
25
29
  loadingMore?: boolean;
30
+ /** Whether or not the list is currently loading newer items */
31
+ loadingMoreNewer?: boolean;
26
32
  /** Function called when more messages are to be loaded, defaults to function stored in [ChannelActionContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_action_context/) */
27
33
  loadMore?: ChannelActionContextValue['loadMore'] | (() => Promise<void>);
34
+ /** Function called when new messages are to be loaded, defaults to function stored in [ChannelActionContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_action_context/) */
35
+ loadMoreNewer?: ChannelActionContextValue['loadMore'] | (() => Promise<void>);
28
36
  /** Custom UI component to display a message, defaults to and accepts same props as [FixedHeightMessage](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/FixedHeightMessage.tsx) */
29
37
  Message?: React.ComponentType<MessageUIComponentProps<StreamChatGenerics>>;
30
38
  /** The limit to use when paginating messages */
@@ -56,6 +64,8 @@ export declare type VirtualizedMessageListProps<StreamChatGenerics extends Defau
56
64
  shouldGroupByUser?: boolean;
57
65
  /** The scrollTo behavior when new messages appear. Use `"smooth"` for regular chat channels, and `"auto"` (which results in instant scroll to bottom) if you expect high throughput. */
58
66
  stickToBottomScrollBehavior?: 'smooth' | 'auto';
67
+ /** stops the list from autoscrolling when new messages are loaded */
68
+ suppressAutoscroll?: boolean;
59
69
  /** If true, indicates the message list is a thread */
60
70
  threadList?: boolean;
61
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualizedMessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/VirtualizedMessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AACvE,OAAO,EAEL,uBAAuB,EACvB,0BAA0B,EAG1B,aAAa,EACd,MAAM,gBAAgB,CAAC;AAexB,OAAO,EAAW,YAAY,EAAiB,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE3F,OAAO,EACL,yBAAyB,EAE1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEL,aAAa,EAEd,MAAM,mCAAmC,CAAC;AAO3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA6ThF,oBAAY,2BAA2B,CACrC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,sBAAsB,GAAG,gBAAgB,CAAC,CAAC,GAAG;IAC/F,gJAAgJ;IAChJ,uBAAuB,CAAC,EAAE,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC9D,gGAAgG;IAChG,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,sEAAsE;IACtE,qBAAqB,CAAC,EAAE,CACtB,WAAW,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,EAChD,KAAK,EAAE,MAAM,KACV,KAAK,CAAC,YAAY,CAAC;IACxB,qJAAqJ;IACrJ,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uIAAuI;IACvI,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4LAA4L;IAC5L,QAAQ,CAAC,EAAE,yBAAyB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,qNAAqN;IACrN,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC3E,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4JAA4J;IAC5J,QAAQ,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC/C,iHAAiH;IACjH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;OAWG;IACH,qBAAqB,CAAC,EAAE,uBAAuB,GAAG;QAChD,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC;KAC9D,CAAC;IACF,4FAA4F;IAC5F,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,sJAAsJ;IACtJ,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mGAAmG;IACnG,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wLAAwL;IACxL,2BAA2B,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAChD,uDAAuD;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAChF,KAAK,EAAE,2BAA2B,CAAC,kBAAkB,CAAC,eAuBvD"}
1
+ {"version":3,"file":"VirtualizedMessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/VirtualizedMessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,EAEL,uBAAuB,EACvB,0BAA0B,EAG1B,aAAa,EACd,MAAM,gBAAgB,CAAC;AAexB,OAAO,EAAW,YAAY,EAAiB,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE3F,OAAO,EACL,yBAAyB,EAE1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEL,aAAa,EAEd,MAAM,mCAAmC,CAAC;AAO3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAsYhF,oBAAY,2BAA2B,CACrC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,sBAAsB,GAAG,gBAAgB,CAAC,CAAC,GAAG;IAC/F,gJAAgJ;IAChJ,uBAAuB,CAAC,EAAE,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC9D,gGAAgG;IAChG,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,sEAAsE;IACtE,qBAAqB,CAAC,EAAE,CACtB,WAAW,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,EAChD,KAAK,EAAE,MAAM,KACV,KAAK,CAAC,YAAY,CAAC;IACxB,qJAAqJ;IACrJ,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6FAA6F;IAC7F,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uIAAuI;IACvI,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,oDAAoD;IACpD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4LAA4L;IAC5L,QAAQ,CAAC,EAAE,yBAAyB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,2LAA2L;IAC3L,aAAa,CAAC,EAAE,yBAAyB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,qNAAqN;IACrN,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC3E,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4JAA4J;IAC5J,QAAQ,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC/C,iHAAiH;IACjH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;OAWG;IACH,qBAAqB,CAAC,EAAE,uBAAuB,GAAG;QAChD,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC;KAC9D,CAAC;IACF,4FAA4F;IAC5F,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,sJAAsJ;IACtJ,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mGAAmG;IACnG,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wLAAwL;IACxL,2BAA2B,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAChD,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uDAAuD;IACvD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAChF,KAAK,EAAE,2BAA2B,CAAC,kBAAkB,CAAC,eAqCvD"}
@@ -9,7 +9,43 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
- import React, { useCallback, useEffect, useMemo, useRef } from 'react';
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (_) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
13
49
  import { Virtuoso, } from 'react-virtuoso';
14
50
  import { GiphyPreviewMessage as DefaultGiphyPreviewMessage } from './GiphyPreviewMessage';
15
51
  import { useGiphyPreview } from './hooks/useGiphyPreview';
@@ -47,10 +83,24 @@ function useCaptureResizeObserverExceededError() {
47
83
  function fractionalItemSize(element) {
48
84
  return element.getBoundingClientRect().height;
49
85
  }
86
+ function findMessageIndex(messages, id) {
87
+ return messages.findIndex(function (message) { return message.id === id; });
88
+ }
89
+ function calculateInitialTopMostItemIndex(messages, highlightedMessageId) {
90
+ if (highlightedMessageId) {
91
+ var index = findMessageIndex(messages, highlightedMessageId);
92
+ if (index !== -1) {
93
+ return { align: 'center', index: index };
94
+ }
95
+ }
96
+ return messages.length - 1;
97
+ }
50
98
  var VirtualizedMessageListWithContext = function (props) {
51
- var additionalVirtuosoProps = props.additionalVirtuosoProps, channel = props.channel, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? true : _a, hasMore = props.hasMore, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, loadingMore = props.loadingMore, loadMore = props.loadMore, propMessage = props.Message, _d = props.messageLimit, messageLimit = _d === void 0 ? 100 : _d, messages = props.messages, notifications = props.notifications, _e = props.overscan, overscan = _e === void 0 ? 0 : _e,
99
+ var additionalVirtuosoProps = props.additionalVirtuosoProps, channel = props.channel, closeReactionSelectorOnClick = props.closeReactionSelectorOnClick, customMessageRenderer = props.customMessageRenderer, defaultItemHeight = props.defaultItemHeight, _a = props.disableDateSeparator, disableDateSeparator = _a === void 0 ? true : _a, hasMore = props.hasMore, hasMoreNewer = props.hasMoreNewer, _b = props.hideDeletedMessages, hideDeletedMessages = _b === void 0 ? false : _b, _c = props.hideNewMessageSeparator, hideNewMessageSeparator = _c === void 0 ? false : _c, highlightedMessageId = props.highlightedMessageId, jumpToLatestMessage = props.jumpToLatestMessage, loadingMore = props.loadingMore, loadMore = props.loadMore, loadMoreNewer = props.loadMoreNewer, propMessage = props.Message, _d = props.messageLimit, messageLimit = _d === void 0 ? 100 : _d, messages = props.messages, notifications = props.notifications,
100
+ // TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
101
+ _e = props.overscan,
52
102
  // TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component
53
- scrollSeekPlaceHolder = props.scrollSeekPlaceHolder, _f = props.scrollToLatestMessageOnFocus, scrollToLatestMessageOnFocus = _f === void 0 ? false : _f, _g = props.separateGiphyPreview, separateGiphyPreview = _g === void 0 ? false : _g, _h = props.shouldGroupByUser, shouldGroupByUser = _h === void 0 ? false : _h, _j = props.stickToBottomScrollBehavior, stickToBottomScrollBehavior = _j === void 0 ? 'smooth' : _j;
103
+ overscan = _e === void 0 ? 0 : _e, scrollSeekPlaceHolder = props.scrollSeekPlaceHolder, _f = props.scrollToLatestMessageOnFocus, scrollToLatestMessageOnFocus = _f === void 0 ? false : _f, _g = props.separateGiphyPreview, separateGiphyPreview = _g === void 0 ? false : _g, _h = props.shouldGroupByUser, shouldGroupByUser = _h === void 0 ? false : _h, _j = props.stickToBottomScrollBehavior, stickToBottomScrollBehavior = _j === void 0 ? 'smooth' : _j, suppressAutoscroll = props.suppressAutoscroll;
54
104
  // Stops errors generated from react-virtuoso to bubble up
55
105
  // to Sentry or other tracking tools.
56
106
  useCaptureResizeObserverExceededError();
@@ -70,12 +120,11 @@ var VirtualizedMessageListWithContext = function (props) {
70
120
  return messages;
71
121
  }
72
122
  return processMessages({
73
- disableDateSeparator: disableDateSeparator,
123
+ enableDateSeparator: !disableDateSeparator,
74
124
  hideDeletedMessages: hideDeletedMessages,
75
125
  hideNewMessageSeparator: hideNewMessageSeparator,
76
126
  lastRead: lastRead,
77
127
  messages: messages,
78
- separateGiphyPreview: separateGiphyPreview,
79
128
  setGiphyPreviewMessage: setGiphyPreviewMessage,
80
129
  userId: client.userID || '',
81
130
  });
@@ -89,13 +138,32 @@ var VirtualizedMessageListWithContext = function (props) {
89
138
  client.userID,
90
139
  ]);
91
140
  var virtuoso = useRef(null);
92
- var _x = useNewMessageNotification(processedMessages, client.userID), atBottom = _x.atBottom, newMessagesNotification = _x.newMessagesNotification, setNewMessagesNotification = _x.setNewMessagesNotification;
93
- var scrollToBottom = useCallback(function () {
94
- if (virtuoso.current) {
95
- virtuoso.current.scrollToIndex(processedMessages.length - 1);
96
- }
97
- setNewMessagesNotification(false);
98
- }, [virtuoso, processedMessages, setNewMessagesNotification, processedMessages.length]);
141
+ var _x = useNewMessageNotification(processedMessages, client.userID, hasMoreNewer), atBottom = _x.atBottom, newMessagesNotification = _x.newMessagesNotification, setNewMessagesNotification = _x.setNewMessagesNotification;
142
+ var scrollToBottom = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
143
+ return __generator(this, function (_a) {
144
+ switch (_a.label) {
145
+ case 0:
146
+ if (!hasMoreNewer) return [3 /*break*/, 2];
147
+ return [4 /*yield*/, jumpToLatestMessage()];
148
+ case 1:
149
+ _a.sent();
150
+ return [2 /*return*/];
151
+ case 2:
152
+ if (virtuoso.current) {
153
+ virtuoso.current.scrollToIndex(processedMessages.length - 1);
154
+ }
155
+ setNewMessagesNotification(false);
156
+ return [2 /*return*/];
157
+ }
158
+ });
159
+ }); }, [
160
+ virtuoso,
161
+ processedMessages,
162
+ setNewMessagesNotification,
163
+ processedMessages.length,
164
+ hasMoreNewer,
165
+ jumpToLatestMessage,
166
+ ]);
99
167
  var _y = React.useState(false), newMessagesReceivedInBackground = _y[0], setNewMessagesReceivedInBackground = _y[1];
100
168
  var resetNewMessagesReceivedInBackground = useCallback(function () {
101
169
  setNewMessagesReceivedInBackground(false);
@@ -121,8 +189,24 @@ var VirtualizedMessageListWithContext = function (props) {
121
189
  };
122
190
  }, [scrollToBottomIfConfigured]);
123
191
  var numItemsPrepended = usePrependedMessagesCount(processedMessages);
192
+ /**
193
+ * Logic to update the key of the virtuoso component when the list jumps to a new location.
194
+ */
195
+ var _z = useState(+new Date()), messageSetKey = _z[0], setMessageSetKey = _z[1];
196
+ var firstMessageId = useRef();
197
+ useEffect(function () {
198
+ var _a;
199
+ var continuousSet = messages && messages.find(function (message) { return message.id === firstMessageId.current; });
200
+ if (!continuousSet) {
201
+ setMessageSetKey(+new Date());
202
+ }
203
+ firstMessageId.current = (_a = messages === null || messages === void 0 ? void 0 : messages[0]) === null || _a === void 0 ? void 0 : _a.id;
204
+ }, [messages]);
124
205
  var shouldForceScrollToBottom = useShouldForceScrollToBottom(processedMessages, client.userID);
125
206
  var followOutput = function (isAtBottom) {
207
+ if (hasMoreNewer || suppressAutoscroll) {
208
+ return false;
209
+ }
126
210
  if (shouldForceScrollToBottom()) {
127
211
  return isAtBottom ? stickToBottomScrollBehavior : 'auto';
128
212
  }
@@ -182,13 +266,26 @@ var VirtualizedMessageListWithContext = function (props) {
182
266
  loadMore(messageLimit);
183
267
  }
184
268
  };
269
+ var endReached = function () {
270
+ if (hasMoreNewer && loadMoreNewer) {
271
+ loadMoreNewer(messageLimit);
272
+ }
273
+ };
274
+ useEffect(function () {
275
+ var _a;
276
+ if (highlightedMessageId) {
277
+ var index = findMessageIndex(processedMessages, highlightedMessageId);
278
+ if (index !== -1) {
279
+ (_a = virtuoso.current) === null || _a === void 0 ? void 0 : _a.scrollToIndex({ align: 'center', index: index });
280
+ }
281
+ }
282
+ }, [highlightedMessageId]);
185
283
  if (!processedMessages)
186
284
  return null;
187
- var virtualizedMessageListClass = (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualizedMessageList) || 'str-chat__virtual-list';
188
285
  return (React.createElement(React.Fragment, null,
189
- React.createElement("div", { className: virtualizedMessageListClass },
190
- React.createElement(Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, components: virtuosoComponents, firstItemIndex: PREPEND_OFFSET - numItemsPrepended, followOutput: followOutput, increaseViewportBy: { bottom: 200, top: 0 }, initialTopMostItemIndex: processedMessages.length ? processedMessages.length - 1 : 0, itemContent: function (i) { return messageRenderer(processedMessages, i); }, itemSize: fractionalItemSize, overscan: overscan, ref: virtuoso, startReached: startReached, style: { overflowX: 'hidden' }, totalCount: processedMessages.length }, additionalVirtuosoProps, (scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {}), (defaultItemHeight ? { defaultItemHeight: defaultItemHeight } : {})))),
191
- React.createElement(MessageListNotifications, { hasNewMessages: newMessagesNotification, MessageNotification: MessageNotification, notifications: notifications, scrollToBottom: scrollToBottom }),
286
+ React.createElement("div", { className: (customClasses === null || customClasses === void 0 ? void 0 : customClasses.virtualizedMessageList) || 'str-chat__virtual-list' },
287
+ React.createElement(Virtuoso, __assign({ atBottomStateChange: atBottomStateChange, components: virtuosoComponents, endReached: endReached, firstItemIndex: PREPEND_OFFSET - numItemsPrepended, followOutput: followOutput, increaseViewportBy: { bottom: 200, top: 0 }, initialTopMostItemIndex: calculateInitialTopMostItemIndex(processedMessages, highlightedMessageId), itemContent: function (i) { return messageRenderer(processedMessages, i); }, itemSize: fractionalItemSize, key: messageSetKey, overscan: overscan, ref: virtuoso, startReached: startReached, style: { overflowX: 'hidden' }, totalCount: processedMessages.length }, additionalVirtuosoProps, (scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {}), (defaultItemHeight ? { defaultItemHeight: defaultItemHeight } : {})))),
288
+ React.createElement(MessageListNotifications, { hasNewMessages: newMessagesNotification, isNotAtLatestMessageSet: hasMoreNewer, MessageNotification: MessageNotification, notifications: notifications, scrollToBottom: scrollToBottom }),
192
289
  giphyPreviewMessage && React.createElement(GiphyPreviewMessage, { message: giphyPreviewMessage })));
193
290
  };
194
291
  /**
@@ -198,8 +295,8 @@ var VirtualizedMessageListWithContext = function (props) {
198
295
  * **Note**: It works well when there are thousands of messages in a channel, it has a shortcoming though - the message UI should have a fixed height.
199
296
  */
200
297
  export function VirtualizedMessageList(props) {
201
- var loadMore = useChannelActionContext('VirtualizedMessageList').loadMore;
202
- var _a = useChannelStateContext('VirtualizedMessageList'), channel = _a.channel, hasMore = _a.hasMore, loadingMore = _a.loadingMore, contextMessages = _a.messages, notifications = _a.notifications;
298
+ var _a = useChannelActionContext('VirtualizedMessageList'), jumpToLatestMessage = _a.jumpToLatestMessage, loadMore = _a.loadMore, loadMoreNewer = _a.loadMoreNewer;
299
+ var _b = useChannelStateContext('VirtualizedMessageList'), channel = _b.channel, hasMore = _b.hasMore, hasMoreNewer = _b.hasMoreNewer, highlightedMessageId = _b.highlightedMessageId, loadingMore = _b.loadingMore, loadingMoreNewer = _b.loadingMoreNewer, contextMessages = _b.messages, notifications = _b.notifications, suppressAutoscroll = _b.suppressAutoscroll;
203
300
  var messages = props.messages || contextMessages;
204
- return (React.createElement(VirtualizedMessageListWithContext, __assign({ channel: channel, hasMore: !!hasMore, loadingMore: !!loadingMore, loadMore: loadMore, messages: messages, notifications: notifications }, props)));
301
+ return (React.createElement(VirtualizedMessageListWithContext, __assign({ channel: channel, hasMore: !!hasMore, hasMoreNewer: !!hasMoreNewer, highlightedMessageId: highlightedMessageId, jumpToLatestMessage: jumpToLatestMessage, loadingMore: !!loadingMore, loadingMoreNewer: !!loadingMoreNewer, loadMore: loadMore, loadMoreNewer: loadMoreNewer, messages: messages, notifications: notifications, suppressAutoscroll: suppressAutoscroll }, props)));
205
302
  }
@@ -1,4 +1,3 @@
1
- export * from './useCallLoadMore';
2
1
  export * from './useEnrichedMessages';
3
2
  export * from './useLastReadData';
4
3
  export * from './useMessageListElements';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageList/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageList/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC"}
@@ -1,4 +1,3 @@
1
- export * from './useCallLoadMore';
2
1
  export * from './useEnrichedMessages';
3
2
  export * from './useLastReadData';
4
3
  export * from './useMessageListElements';
@@ -9,7 +9,6 @@ export declare const useEnrichedMessages: <StreamChatGenerics extends DefaultStr
9
9
  hideNewMessageSeparator: boolean;
10
10
  messages: StreamMessage<StreamChatGenerics>[];
11
11
  noGroupByUser: boolean;
12
- threadList: boolean;
13
12
  groupStyles?: ((message: StreamMessage<StreamChatGenerics>, previousMessage: StreamMessage<StreamChatGenerics>, nextMessage: StreamMessage<StreamChatGenerics>, noGroupByUser: boolean) => GroupStyle) | undefined;
14
13
  headerPosition?: number | undefined;
15
14
  }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"useEnrichedMessages.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageList/hooks/useEnrichedMessages.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,UAAU,EAAgC,MAAM,UAAU,CAAC;AAKpF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAE1E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,eAAO,MAAM,mBAAmB;;0BAIR,OAAO;yBACR,OAAO;6BACH,OAAO;;mBAEjB,OAAO;gBACV,OAAO;mLAKF,OAAO,KACnB,UAAU;;;;;CAsDhB,CAAC"}
1
+ {"version":3,"file":"useEnrichedMessages.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageList/hooks/useEnrichedMessages.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,UAAU,EAAgC,MAAM,UAAU,CAAC;AAKpF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAE1E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,eAAO,MAAM,mBAAmB;;0BAIR,OAAO;yBACR,OAAO;6BACH,OAAO;;mBAEjB,OAAO;mLAKL,OAAO,KACnB,UAAU;;;;;CAsDhB,CAAC"}
@@ -3,19 +3,19 @@ import { getGroupStyles, insertIntro, processMessages } from '../utils';
3
3
  import { useChatContext } from '../../../context/ChatContext';
4
4
  import { useComponentContext } from '../../../context/ComponentContext';
5
5
  export var useEnrichedMessages = function (args) {
6
- var channel = args.channel, disableDateSeparator = args.disableDateSeparator, groupStyles = args.groupStyles, headerPosition = args.headerPosition, hideDeletedMessages = args.hideDeletedMessages, hideNewMessageSeparator = args.hideNewMessageSeparator, messages = args.messages, noGroupByUser = args.noGroupByUser, threadList = args.threadList;
6
+ var channel = args.channel, disableDateSeparator = args.disableDateSeparator, groupStyles = args.groupStyles, headerPosition = args.headerPosition, hideDeletedMessages = args.hideDeletedMessages, hideNewMessageSeparator = args.hideNewMessageSeparator, messages = args.messages, noGroupByUser = args.noGroupByUser;
7
7
  var client = useChatContext('useEnrichedMessages').client;
8
8
  var HeaderComponent = useComponentContext('useEnrichedMessages').HeaderComponent;
9
9
  var lastRead = useMemo(function () { var _a; return (_a = channel.lastRead) === null || _a === void 0 ? void 0 : _a.call(channel); }, [channel]);
10
- var messagesWithDates = disableDateSeparator && !hideDeletedMessages && hideNewMessageSeparator
10
+ var enableDateSeparator = !disableDateSeparator;
11
+ var messagesWithDates = !enableDateSeparator && !hideDeletedMessages && hideNewMessageSeparator
11
12
  ? messages
12
13
  : processMessages({
13
- disableDateSeparator: disableDateSeparator,
14
+ enableDateSeparator: enableDateSeparator,
14
15
  hideDeletedMessages: hideDeletedMessages,
15
16
  hideNewMessageSeparator: hideNewMessageSeparator,
16
17
  lastRead: lastRead,
17
18
  messages: messages,
18
- threadList: threadList,
19
19
  userId: client.userID || '',
20
20
  });
21
21
  if (HeaderComponent) {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { StreamMessage } from '../../../context/ChannelStateContext';
3
2
  import type { DefaultStreamChatGenerics } from '../../../types/types';
4
3
  export declare const useGiphyPreview: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(separateGiphyPreview: boolean) => {