stream-chat-react-native-core 5.44.2 → 6.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1305) hide show
  1. package/README.md +1 -2
  2. package/lib/commonjs/components/Attachment/Attachment.js +1 -1
  3. package/lib/commonjs/components/Attachment/Attachment.js.map +1 -1
  4. package/lib/commonjs/components/Attachment/Card.js +6 -6
  5. package/lib/commonjs/components/Attachment/Card.js.map +1 -1
  6. package/lib/commonjs/components/Attachment/FileAttachment.js +5 -5
  7. package/lib/commonjs/components/Attachment/FileAttachment.js.map +1 -1
  8. package/lib/commonjs/components/Attachment/FileAttachmentGroup.js +1 -1
  9. package/lib/commonjs/components/Attachment/FileAttachmentGroup.js.map +1 -1
  10. package/lib/commonjs/components/Attachment/Gallery.js +32 -23
  11. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  12. package/lib/commonjs/components/Attachment/Giphy.js +8 -8
  13. package/lib/commonjs/components/Attachment/Giphy.js.map +1 -1
  14. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGallery.js +7 -0
  15. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGallery.js.map +1 -1
  16. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.js +3 -1
  17. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.js.map +1 -1
  18. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.js +3 -0
  19. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.js.map +1 -1
  20. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.js +4 -0
  21. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.js.map +1 -1
  22. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js +2 -0
  23. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
  24. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnailGrid.js +2 -0
  25. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnailGrid.js.map +1 -1
  26. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +2 -2
  27. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  28. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js +40 -136
  29. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -1
  30. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js +9 -6
  31. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js.map +1 -1
  32. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js +1 -2
  33. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -1
  34. package/lib/commonjs/components/Avatar/Avatar.js +4 -0
  35. package/lib/commonjs/components/Avatar/Avatar.js.map +1 -1
  36. package/lib/commonjs/components/Avatar/GroupAvatar.js +4 -0
  37. package/lib/commonjs/components/Avatar/GroupAvatar.js.map +1 -1
  38. package/lib/commonjs/components/Channel/Channel.js +576 -1262
  39. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  40. package/lib/commonjs/components/Channel/hooks/useChannelDataState.js +174 -0
  41. package/lib/commonjs/components/Channel/hooks/useChannelDataState.js.map +1 -0
  42. package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js +0 -8
  43. package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
  44. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js +2 -2
  45. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  46. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +26 -10
  47. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  48. package/lib/commonjs/components/Channel/hooks/useCreatePaginatedMessageListContext.js +3 -3
  49. package/lib/commonjs/components/Channel/hooks/useCreatePaginatedMessageListContext.js.map +1 -1
  50. package/lib/commonjs/components/Channel/hooks/useMessageListPagination.js +324 -0
  51. package/lib/commonjs/components/Channel/hooks/useMessageListPagination.js.map +1 -0
  52. package/lib/commonjs/components/ChannelList/ChannelList.js +0 -2
  53. package/lib/commonjs/components/ChannelList/ChannelList.js.map +1 -1
  54. package/lib/commonjs/components/ChannelList/ChannelListFooterLoadingIndicator.js +1 -1
  55. package/lib/commonjs/components/ChannelList/ChannelListFooterLoadingIndicator.js.map +1 -1
  56. package/lib/commonjs/components/ChannelList/Skeleton.js +7 -3
  57. package/lib/commonjs/components/ChannelList/Skeleton.js.map +1 -1
  58. package/lib/commonjs/components/ChannelList/hooks/listeners/useNewMessageNotification.js +8 -18
  59. package/lib/commonjs/components/ChannelList/hooks/listeners/useNewMessageNotification.js.map +1 -1
  60. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +85 -46
  61. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  62. package/lib/commonjs/components/Chat/Chat.js +31 -16
  63. package/lib/commonjs/components/Chat/Chat.js.map +1 -1
  64. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js +312 -173
  65. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  66. package/lib/commonjs/components/Chat/hooks/useAppSettings.js +31 -18
  67. package/lib/commonjs/components/Chat/hooks/useAppSettings.js.map +1 -1
  68. package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js +0 -2
  69. package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js.map +1 -1
  70. package/lib/commonjs/components/Chat/hooks/useIsOnline.js +16 -13
  71. package/lib/commonjs/components/Chat/hooks/useIsOnline.js.map +1 -1
  72. package/lib/commonjs/components/ImageGallery/ImageGallery.js +57 -96
  73. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  74. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryImage.js +14 -35
  75. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryImage.js.map +1 -1
  76. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js +17 -35
  77. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -1
  78. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js +72 -64
  79. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  80. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js +38 -39
  81. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  82. package/lib/commonjs/components/ImageGallery/components/ImageGalleryOverlay.js.map +1 -1
  83. package/lib/commonjs/components/ImageGallery/hooks/useAnimatedGalleryStyle.js +54 -0
  84. package/lib/commonjs/components/ImageGallery/hooks/useAnimatedGalleryStyle.js.map +1 -0
  85. package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js +230 -225
  86. package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -1
  87. package/lib/commonjs/components/Indicators/LoadingIndicator.js +1 -1
  88. package/lib/commonjs/components/Indicators/LoadingIndicator.js.map +1 -1
  89. package/lib/commonjs/components/Message/Message.js +136 -192
  90. package/lib/commonjs/components/Message/Message.js.map +1 -1
  91. package/lib/commonjs/components/Message/MessageSimple/MessageAvatar.js.map +1 -1
  92. package/lib/commonjs/components/Message/MessageSimple/MessageBounce.js +23 -6
  93. package/lib/commonjs/components/Message/MessageSimple/MessageBounce.js.map +1 -1
  94. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js +40 -145
  95. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js.map +1 -1
  96. package/lib/commonjs/components/Message/MessageSimple/MessageDeleted.js +1 -1
  97. package/lib/commonjs/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
  98. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js +0 -1
  99. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  100. package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js +20 -34
  101. package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -1
  102. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js +182 -44
  103. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  104. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js +1 -1
  105. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  106. package/lib/commonjs/components/Message/MessageSimple/ReactionList/ReactionListBottom.js +234 -0
  107. package/lib/commonjs/components/Message/MessageSimple/ReactionList/ReactionListBottom.js.map +1 -0
  108. package/lib/commonjs/components/Message/MessageSimple/ReactionList/ReactionListTop.js +195 -0
  109. package/lib/commonjs/components/Message/MessageSimple/ReactionList/ReactionListTop.js.map +1 -0
  110. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js +4 -16
  111. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  112. package/lib/commonjs/components/Message/hooks/useMessageActions.js +36 -72
  113. package/lib/commonjs/components/Message/hooks/useMessageActions.js.map +1 -1
  114. package/lib/commonjs/components/Message/hooks/useMessageData.js +38 -0
  115. package/lib/commonjs/components/Message/hooks/useMessageData.js.map +1 -0
  116. package/lib/commonjs/components/Message/hooks/useProcessReactions.js +3 -3
  117. package/lib/commonjs/components/Message/hooks/useProcessReactions.js.map +1 -1
  118. package/lib/commonjs/components/Message/utils/messageActions.js +4 -6
  119. package/lib/commonjs/components/Message/utils/messageActions.js.map +1 -1
  120. package/lib/commonjs/components/MessageInput/FileUploadPreview.js +1 -1
  121. package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
  122. package/lib/commonjs/components/MessageInput/MessageInput.js +1 -2
  123. package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
  124. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js +1 -0
  125. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js.map +1 -1
  126. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js +1 -2
  127. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js.map +1 -1
  128. package/lib/commonjs/components/MessageInput/components/NativeAttachmentPicker.js +8 -5
  129. package/lib/commonjs/components/MessageInput/components/NativeAttachmentPicker.js.map +1 -1
  130. package/lib/commonjs/components/MessageInput/hooks/useAudioController.js +46 -64
  131. package/lib/commonjs/components/MessageInput/hooks/useAudioController.js.map +1 -1
  132. package/lib/commonjs/components/MessageList/MessageList.js +67 -60
  133. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  134. package/lib/commonjs/components/MessageList/ScrollToBottomButton.js +1 -1
  135. package/lib/commonjs/components/MessageList/ScrollToBottomButton.js.map +1 -1
  136. package/lib/commonjs/components/MessageList/hooks/useMessageList.js.map +1 -1
  137. package/lib/commonjs/components/MessageList/utils/getReadStates.js.map +1 -1
  138. package/lib/commonjs/components/MessageMenu/MessageActionList.js +35 -0
  139. package/lib/commonjs/components/MessageMenu/MessageActionList.js.map +1 -0
  140. package/lib/commonjs/components/MessageMenu/MessageActionListItem.js +60 -0
  141. package/lib/commonjs/components/MessageMenu/MessageActionListItem.js.map +1 -0
  142. package/lib/commonjs/components/MessageMenu/MessageMenu.js +70 -0
  143. package/lib/commonjs/components/MessageMenu/MessageMenu.js.map +1 -0
  144. package/lib/commonjs/components/MessageMenu/MessageReactionPicker.js +81 -0
  145. package/lib/commonjs/components/MessageMenu/MessageReactionPicker.js.map +1 -0
  146. package/lib/commonjs/components/MessageMenu/MessageUserReactions.js +169 -0
  147. package/lib/commonjs/components/MessageMenu/MessageUserReactions.js.map +1 -0
  148. package/lib/commonjs/components/{MessageOverlay/OverlayReactionsAvatar.js → MessageMenu/MessageUserReactionsAvatar.js} +5 -6
  149. package/lib/commonjs/components/MessageMenu/MessageUserReactionsAvatar.js.map +1 -0
  150. package/lib/commonjs/components/MessageMenu/MessageUserReactionsItem.js +112 -0
  151. package/lib/commonjs/components/MessageMenu/MessageUserReactionsItem.js.map +1 -0
  152. package/lib/commonjs/components/MessageMenu/ReactionButton.js +59 -0
  153. package/lib/commonjs/components/MessageMenu/ReactionButton.js.map +1 -0
  154. package/lib/commonjs/components/{MessageOverlay → MessageMenu}/hooks/useFetchReactions.js +65 -41
  155. package/lib/commonjs/components/MessageMenu/hooks/useFetchReactions.js.map +1 -0
  156. package/lib/commonjs/components/Poll/CreatePollContent.js +14 -9
  157. package/lib/commonjs/components/Poll/CreatePollContent.js.map +1 -1
  158. package/lib/commonjs/components/Poll/Poll.js +2 -8
  159. package/lib/commonjs/components/Poll/Poll.js.map +1 -1
  160. package/lib/commonjs/components/Poll/components/Button.js +9 -474
  161. package/lib/commonjs/components/Poll/components/Button.js.map +1 -1
  162. package/lib/commonjs/components/Poll/components/CreatePollIcon.js +2 -2
  163. package/lib/commonjs/components/Poll/components/CreatePollIcon.js.map +1 -1
  164. package/lib/commonjs/components/Poll/components/CreatePollOptions.js +9 -4
  165. package/lib/commonjs/components/Poll/components/CreatePollOptions.js.map +1 -1
  166. package/lib/commonjs/components/Poll/components/PollAnswersList.js +99 -26
  167. package/lib/commonjs/components/Poll/components/PollAnswersList.js.map +1 -1
  168. package/lib/commonjs/components/Poll/components/PollButtons.js +291 -0
  169. package/lib/commonjs/components/Poll/components/PollButtons.js.map +1 -0
  170. package/lib/commonjs/components/Poll/components/PollInputDialog.js +14 -4
  171. package/lib/commonjs/components/Poll/components/PollInputDialog.js.map +1 -1
  172. package/lib/commonjs/components/Poll/components/PollModalHeader.js +7 -1
  173. package/lib/commonjs/components/Poll/components/PollModalHeader.js.map +1 -1
  174. package/lib/commonjs/components/Poll/components/PollOption.js +88 -6
  175. package/lib/commonjs/components/Poll/components/PollOption.js.map +1 -1
  176. package/lib/commonjs/components/Poll/components/PollResults/PollOptionFullResults.js +2 -2
  177. package/lib/commonjs/components/Poll/components/PollResults/PollOptionFullResults.js.map +1 -1
  178. package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js +62 -67
  179. package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js.map +1 -1
  180. package/lib/commonjs/components/Poll/components/PollResults/PollVote.js +89 -0
  181. package/lib/commonjs/components/Poll/components/PollResults/PollVote.js.map +1 -0
  182. package/lib/commonjs/components/Poll/components/index.js +11 -0
  183. package/lib/commonjs/components/Poll/components/index.js.map +1 -1
  184. package/lib/commonjs/components/ProgressControl/ProgressControl.js +21 -28
  185. package/lib/commonjs/components/ProgressControl/ProgressControl.js.map +1 -1
  186. package/lib/commonjs/components/ProgressControl/WaveProgressBar.js +22 -27
  187. package/lib/commonjs/components/ProgressControl/WaveProgressBar.js.map +1 -1
  188. package/lib/commonjs/components/Reply/Reply.js +6 -2
  189. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  190. package/lib/commonjs/components/UIComponents/BottomSheetModal.js +158 -0
  191. package/lib/commonjs/components/UIComponents/BottomSheetModal.js.map +1 -0
  192. package/lib/commonjs/components/{ImageBackground.js → UIComponents/ImageBackground.js} +1 -1
  193. package/lib/commonjs/components/UIComponents/ImageBackground.js.map +1 -0
  194. package/lib/{module/components/Spinner → commonjs/components/UIComponents}/Spinner.js +1 -1
  195. package/lib/commonjs/components/UIComponents/Spinner.js.map +1 -0
  196. package/lib/commonjs/components/UIComponents/index.js +37 -0
  197. package/lib/commonjs/components/UIComponents/index.js.map +1 -0
  198. package/lib/commonjs/components/docs/data.js.map +1 -1
  199. package/lib/commonjs/components/index.js +56 -45
  200. package/lib/commonjs/components/index.js.map +1 -1
  201. package/lib/commonjs/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js +1 -13
  202. package/lib/commonjs/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js.map +1 -1
  203. package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js +1 -11
  204. package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
  205. package/lib/commonjs/contexts/channelContext/ChannelContext.js +1 -11
  206. package/lib/commonjs/contexts/channelContext/ChannelContext.js.map +1 -1
  207. package/lib/commonjs/contexts/channelsContext/ChannelsContext.js +1 -11
  208. package/lib/commonjs/contexts/channelsContext/ChannelsContext.js.map +1 -1
  209. package/lib/commonjs/contexts/channelsStateContext/ChannelsStateContext.js +1 -46
  210. package/lib/commonjs/contexts/channelsStateContext/ChannelsStateContext.js.map +1 -1
  211. package/lib/commonjs/contexts/channelsStateContext/useChannelState.js +7 -84
  212. package/lib/commonjs/contexts/channelsStateContext/useChannelState.js.map +1 -1
  213. package/lib/commonjs/contexts/chatConfigContext/ChatConfigContext.js +33 -0
  214. package/lib/commonjs/contexts/chatConfigContext/ChatConfigContext.js.map +1 -0
  215. package/lib/commonjs/contexts/chatContext/ChatContext.js +1 -11
  216. package/lib/commonjs/contexts/chatContext/ChatContext.js.map +1 -1
  217. package/lib/commonjs/contexts/imageGalleryContext/ImageGalleryContext.js +1 -11
  218. package/lib/commonjs/contexts/imageGalleryContext/ImageGalleryContext.js.map +1 -1
  219. package/lib/commonjs/contexts/index.js +11 -11
  220. package/lib/commonjs/contexts/index.js.map +1 -1
  221. package/lib/commonjs/contexts/keyboardContext/KeyboardContext.js +1 -11
  222. package/lib/commonjs/contexts/keyboardContext/KeyboardContext.js.map +1 -1
  223. package/lib/commonjs/contexts/messageContext/MessageContext.js +1 -11
  224. package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
  225. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +52 -51
  226. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  227. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +1 -1
  228. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  229. package/lib/commonjs/contexts/messagesContext/MessagesContext.js +1 -11
  230. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  231. package/lib/commonjs/contexts/overlayContext/OverlayContext.js +1 -14
  232. package/lib/commonjs/contexts/overlayContext/OverlayContext.js.map +1 -1
  233. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +18 -54
  234. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
  235. package/lib/commonjs/contexts/paginatedMessageListContext/PaginatedMessageListContext.js +1 -11
  236. package/lib/commonjs/contexts/paginatedMessageListContext/PaginatedMessageListContext.js.map +1 -1
  237. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js +1 -11
  238. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
  239. package/lib/commonjs/contexts/themeContext/utils/theme.js +75 -49
  240. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  241. package/lib/commonjs/contexts/threadContext/ThreadContext.js +1 -11
  242. package/lib/commonjs/contexts/threadContext/ThreadContext.js.map +1 -1
  243. package/lib/commonjs/contexts/translationContext/TranslationContext.js +1 -11
  244. package/lib/commonjs/contexts/translationContext/TranslationContext.js.map +1 -1
  245. package/lib/commonjs/contexts/typingContext/TypingContext.js +1 -11
  246. package/lib/commonjs/contexts/typingContext/TypingContext.js.map +1 -1
  247. package/lib/commonjs/hooks/useTranslatedMessage.js +1 -4
  248. package/lib/commonjs/hooks/useTranslatedMessage.js.map +1 -1
  249. package/lib/commonjs/icons/PinHeader.js +17 -6
  250. package/lib/commonjs/icons/PinHeader.js.map +1 -1
  251. package/lib/commonjs/index.js +4 -23
  252. package/lib/commonjs/index.js.map +1 -1
  253. package/lib/commonjs/mock-builders/DB/mock.js +159 -88
  254. package/lib/commonjs/mock-builders/DB/mock.js.map +1 -1
  255. package/lib/commonjs/native.js +38 -26
  256. package/lib/commonjs/native.js.map +1 -1
  257. package/lib/commonjs/store/SqliteClient.js +330 -0
  258. package/lib/commonjs/store/SqliteClient.js.map +1 -0
  259. package/lib/commonjs/store/apis/addPendingTask.js +56 -30
  260. package/lib/commonjs/store/apis/addPendingTask.js.map +1 -1
  261. package/lib/commonjs/store/apis/deleteChannel.js +36 -17
  262. package/lib/commonjs/store/apis/deleteChannel.js.map +1 -1
  263. package/lib/commonjs/store/apis/deleteMember.js +38 -20
  264. package/lib/commonjs/store/apis/deleteMember.js.map +1 -1
  265. package/lib/commonjs/store/apis/deleteMessage.js +36 -17
  266. package/lib/commonjs/store/apis/deleteMessage.js.map +1 -1
  267. package/lib/commonjs/store/apis/deleteMessagesForChannel.js +36 -17
  268. package/lib/commonjs/store/apis/deleteMessagesForChannel.js.map +1 -1
  269. package/lib/commonjs/store/apis/deletePendingTask.js +31 -12
  270. package/lib/commonjs/store/apis/deletePendingTask.js.map +1 -1
  271. package/lib/commonjs/store/apis/deleteReaction.js +39 -22
  272. package/lib/commonjs/store/apis/deleteReaction.js.map +1 -1
  273. package/lib/commonjs/store/apis/deleteReactions.js +36 -17
  274. package/lib/commonjs/store/apis/deleteReactions.js.map +1 -1
  275. package/lib/commonjs/store/apis/getAllChannelIds.js +28 -8
  276. package/lib/commonjs/store/apis/getAllChannelIds.js.map +1 -1
  277. package/lib/commonjs/store/apis/getAppSettings.js +31 -11
  278. package/lib/commonjs/store/apis/getAppSettings.js.map +1 -1
  279. package/lib/commonjs/store/apis/getChannelMessages.js +77 -52
  280. package/lib/commonjs/store/apis/getChannelMessages.js.map +1 -1
  281. package/lib/commonjs/store/apis/getChannels.js +58 -30
  282. package/lib/commonjs/store/apis/getChannels.js.map +1 -1
  283. package/lib/commonjs/store/apis/getChannelsForFilterSort.js +58 -26
  284. package/lib/commonjs/store/apis/getChannelsForFilterSort.js.map +1 -1
  285. package/lib/commonjs/store/apis/getLastSyncedAt.js +31 -11
  286. package/lib/commonjs/store/apis/getLastSyncedAt.js.map +1 -1
  287. package/lib/commonjs/store/apis/getMembers.js +36 -16
  288. package/lib/commonjs/store/apis/getMembers.js.map +1 -1
  289. package/lib/commonjs/store/apis/getPendingTasks.js +37 -14
  290. package/lib/commonjs/store/apis/getPendingTasks.js.map +1 -1
  291. package/lib/commonjs/store/apis/getReactions.js +2 -2
  292. package/lib/commonjs/store/apis/getReactions.js.map +1 -1
  293. package/lib/commonjs/store/apis/getReactionsforFilterSort.js +54 -22
  294. package/lib/commonjs/store/apis/getReactionsforFilterSort.js.map +1 -1
  295. package/lib/commonjs/store/apis/getReads.js +36 -16
  296. package/lib/commonjs/store/apis/getReads.js.map +1 -1
  297. package/lib/commonjs/store/apis/insertReaction.js +41 -23
  298. package/lib/commonjs/store/apis/insertReaction.js.map +1 -1
  299. package/lib/commonjs/store/apis/queries/selectChannelIdsForFilterSort.js +36 -17
  300. package/lib/commonjs/store/apis/queries/selectChannelIdsForFilterSort.js.map +1 -1
  301. package/lib/commonjs/store/apis/queries/selectChannels.js +44 -19
  302. package/lib/commonjs/store/apis/queries/selectChannels.js.map +1 -1
  303. package/lib/commonjs/store/apis/queries/selectMembersForChannels.js +37 -17
  304. package/lib/commonjs/store/apis/queries/selectMembersForChannels.js.map +1 -1
  305. package/lib/commonjs/store/apis/queries/selectMessagesForChannels.js +37 -17
  306. package/lib/commonjs/store/apis/queries/selectMessagesForChannels.js.map +1 -1
  307. package/lib/commonjs/store/apis/queries/selectReactionsForMessages.js +37 -17
  308. package/lib/commonjs/store/apis/queries/selectReactionsForMessages.js.map +1 -1
  309. package/lib/commonjs/store/apis/queries/selectReadsForChannels.js +37 -17
  310. package/lib/commonjs/store/apis/queries/selectReadsForChannels.js.map +1 -1
  311. package/lib/commonjs/store/apis/updateMessage.js +71 -47
  312. package/lib/commonjs/store/apis/updateMessage.js.map +1 -1
  313. package/lib/commonjs/store/apis/updatePollMessage.js +68 -59
  314. package/lib/commonjs/store/apis/updatePollMessage.js.map +1 -1
  315. package/lib/commonjs/store/apis/updateReaction.js +53 -38
  316. package/lib/commonjs/store/apis/updateReaction.js.map +1 -1
  317. package/lib/commonjs/store/apis/upsertAppSettings.js +37 -20
  318. package/lib/commonjs/store/apis/upsertAppSettings.js.map +1 -1
  319. package/lib/commonjs/store/apis/upsertChannelData.js +35 -16
  320. package/lib/commonjs/store/apis/upsertChannelData.js.map +1 -1
  321. package/lib/commonjs/store/apis/upsertChannelDataFromChannel.js +37 -13
  322. package/lib/commonjs/store/apis/upsertChannelDataFromChannel.js.map +1 -1
  323. package/lib/commonjs/store/apis/upsertChannels.js +115 -60
  324. package/lib/commonjs/store/apis/upsertChannels.js.map +1 -1
  325. package/lib/commonjs/store/apis/upsertCidsForQuery.js +43 -26
  326. package/lib/commonjs/store/apis/upsertCidsForQuery.js.map +1 -1
  327. package/lib/commonjs/store/apis/upsertMembers.js +51 -33
  328. package/lib/commonjs/store/apis/upsertMembers.js.map +1 -1
  329. package/lib/commonjs/store/apis/upsertMessages.js +62 -44
  330. package/lib/commonjs/store/apis/upsertMessages.js.map +1 -1
  331. package/lib/commonjs/store/apis/upsertReads.js +51 -34
  332. package/lib/commonjs/store/apis/upsertReads.js.map +1 -1
  333. package/lib/commonjs/store/apis/upsertUserSyncStatus.js +31 -14
  334. package/lib/commonjs/store/apis/upsertUserSyncStatus.js.map +1 -1
  335. package/lib/commonjs/test-utils/BetterSqlite.js +40 -15
  336. package/lib/commonjs/test-utils/BetterSqlite.js.map +1 -1
  337. package/lib/commonjs/utils/DBSyncManager.js +238 -152
  338. package/lib/commonjs/utils/DBSyncManager.js.map +1 -1
  339. package/lib/commonjs/utils/getResizedImageUrl.js +5 -3
  340. package/lib/commonjs/utils/getResizedImageUrl.js.map +1 -1
  341. package/lib/commonjs/utils/utils.js +1 -1
  342. package/lib/commonjs/utils/utils.js.map +1 -1
  343. package/lib/commonjs/version.json +1 -1
  344. package/lib/module/components/Attachment/Attachment.js +1 -1
  345. package/lib/module/components/Attachment/Attachment.js.map +1 -1
  346. package/lib/module/components/Attachment/Card.js +6 -6
  347. package/lib/module/components/Attachment/Card.js.map +1 -1
  348. package/lib/module/components/Attachment/FileAttachment.js +5 -5
  349. package/lib/module/components/Attachment/FileAttachment.js.map +1 -1
  350. package/lib/module/components/Attachment/FileAttachmentGroup.js +1 -1
  351. package/lib/module/components/Attachment/FileAttachmentGroup.js.map +1 -1
  352. package/lib/module/components/Attachment/Gallery.js +32 -23
  353. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  354. package/lib/module/components/Attachment/Giphy.js +8 -8
  355. package/lib/module/components/Attachment/Giphy.js.map +1 -1
  356. package/lib/module/components/Attachment/utils/buildGallery/buildGallery.js +7 -0
  357. package/lib/module/components/Attachment/utils/buildGallery/buildGallery.js.map +1 -1
  358. package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.js +3 -1
  359. package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.js.map +1 -1
  360. package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.js +3 -0
  361. package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.js.map +1 -1
  362. package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.js +4 -0
  363. package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.js.map +1 -1
  364. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js +2 -0
  365. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
  366. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnailGrid.js +2 -0
  367. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnailGrid.js.map +1 -1
  368. package/lib/module/components/AttachmentPicker/AttachmentPicker.js +2 -2
  369. package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  370. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js +40 -136
  371. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -1
  372. package/lib/module/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js +9 -6
  373. package/lib/module/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js.map +1 -1
  374. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js +1 -2
  375. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -1
  376. package/lib/module/components/Avatar/Avatar.js +4 -0
  377. package/lib/module/components/Avatar/Avatar.js.map +1 -1
  378. package/lib/module/components/Avatar/GroupAvatar.js +4 -0
  379. package/lib/module/components/Avatar/GroupAvatar.js.map +1 -1
  380. package/lib/module/components/Channel/Channel.js +576 -1262
  381. package/lib/module/components/Channel/Channel.js.map +1 -1
  382. package/lib/module/components/Channel/hooks/useChannelDataState.js +174 -0
  383. package/lib/module/components/Channel/hooks/useChannelDataState.js.map +1 -0
  384. package/lib/module/components/Channel/hooks/useCreateChannelContext.js +0 -8
  385. package/lib/module/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
  386. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js +2 -2
  387. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  388. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +26 -10
  389. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  390. package/lib/module/components/Channel/hooks/useCreatePaginatedMessageListContext.js +3 -3
  391. package/lib/module/components/Channel/hooks/useCreatePaginatedMessageListContext.js.map +1 -1
  392. package/lib/module/components/Channel/hooks/useMessageListPagination.js +324 -0
  393. package/lib/module/components/Channel/hooks/useMessageListPagination.js.map +1 -0
  394. package/lib/module/components/ChannelList/ChannelList.js +0 -2
  395. package/lib/module/components/ChannelList/ChannelList.js.map +1 -1
  396. package/lib/module/components/ChannelList/ChannelListFooterLoadingIndicator.js +1 -1
  397. package/lib/module/components/ChannelList/ChannelListFooterLoadingIndicator.js.map +1 -1
  398. package/lib/module/components/ChannelList/Skeleton.js +7 -3
  399. package/lib/module/components/ChannelList/Skeleton.js.map +1 -1
  400. package/lib/module/components/ChannelList/hooks/listeners/useNewMessageNotification.js +8 -18
  401. package/lib/module/components/ChannelList/hooks/listeners/useNewMessageNotification.js.map +1 -1
  402. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +85 -46
  403. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  404. package/lib/module/components/Chat/Chat.js +31 -16
  405. package/lib/module/components/Chat/Chat.js.map +1 -1
  406. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js +312 -173
  407. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  408. package/lib/module/components/Chat/hooks/useAppSettings.js +31 -18
  409. package/lib/module/components/Chat/hooks/useAppSettings.js.map +1 -1
  410. package/lib/module/components/Chat/hooks/useCreateChatContext.js +0 -2
  411. package/lib/module/components/Chat/hooks/useCreateChatContext.js.map +1 -1
  412. package/lib/module/components/Chat/hooks/useIsOnline.js +16 -13
  413. package/lib/module/components/Chat/hooks/useIsOnline.js.map +1 -1
  414. package/lib/module/components/ImageGallery/ImageGallery.js +57 -96
  415. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  416. package/lib/module/components/ImageGallery/components/AnimatedGalleryImage.js +14 -35
  417. package/lib/module/components/ImageGallery/components/AnimatedGalleryImage.js.map +1 -1
  418. package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js +17 -35
  419. package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -1
  420. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js +72 -64
  421. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  422. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js +38 -39
  423. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  424. package/lib/module/components/ImageGallery/components/ImageGalleryOverlay.js.map +1 -1
  425. package/lib/module/components/ImageGallery/hooks/useAnimatedGalleryStyle.js +54 -0
  426. package/lib/module/components/ImageGallery/hooks/useAnimatedGalleryStyle.js.map +1 -0
  427. package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js +230 -225
  428. package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -1
  429. package/lib/module/components/Indicators/LoadingIndicator.js +1 -1
  430. package/lib/module/components/Indicators/LoadingIndicator.js.map +1 -1
  431. package/lib/module/components/Message/Message.js +136 -192
  432. package/lib/module/components/Message/Message.js.map +1 -1
  433. package/lib/module/components/Message/MessageSimple/MessageAvatar.js.map +1 -1
  434. package/lib/module/components/Message/MessageSimple/MessageBounce.js +23 -6
  435. package/lib/module/components/Message/MessageSimple/MessageBounce.js.map +1 -1
  436. package/lib/module/components/Message/MessageSimple/MessageContent.js +40 -145
  437. package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
  438. package/lib/module/components/Message/MessageSimple/MessageDeleted.js +1 -1
  439. package/lib/module/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
  440. package/lib/module/components/Message/MessageSimple/MessageFooter.js +0 -1
  441. package/lib/module/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  442. package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js +20 -34
  443. package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -1
  444. package/lib/module/components/Message/MessageSimple/MessageSimple.js +182 -44
  445. package/lib/module/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  446. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js +1 -1
  447. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  448. package/lib/module/components/Message/MessageSimple/ReactionList/ReactionListBottom.js +234 -0
  449. package/lib/module/components/Message/MessageSimple/ReactionList/ReactionListBottom.js.map +1 -0
  450. package/lib/module/components/Message/MessageSimple/ReactionList/ReactionListTop.js +195 -0
  451. package/lib/module/components/Message/MessageSimple/ReactionList/ReactionListTop.js.map +1 -0
  452. package/lib/module/components/Message/hooks/useCreateMessageContext.js +4 -16
  453. package/lib/module/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  454. package/lib/module/components/Message/hooks/useMessageActions.js +36 -72
  455. package/lib/module/components/Message/hooks/useMessageActions.js.map +1 -1
  456. package/lib/module/components/Message/hooks/useMessageData.js +38 -0
  457. package/lib/module/components/Message/hooks/useMessageData.js.map +1 -0
  458. package/lib/module/components/Message/hooks/useProcessReactions.js +3 -3
  459. package/lib/module/components/Message/hooks/useProcessReactions.js.map +1 -1
  460. package/lib/module/components/Message/utils/messageActions.js +4 -6
  461. package/lib/module/components/Message/utils/messageActions.js.map +1 -1
  462. package/lib/module/components/MessageInput/FileUploadPreview.js +1 -1
  463. package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
  464. package/lib/module/components/MessageInput/MessageInput.js +1 -2
  465. package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
  466. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js +1 -0
  467. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js.map +1 -1
  468. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js +1 -2
  469. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js.map +1 -1
  470. package/lib/module/components/MessageInput/components/NativeAttachmentPicker.js +8 -5
  471. package/lib/module/components/MessageInput/components/NativeAttachmentPicker.js.map +1 -1
  472. package/lib/module/components/MessageInput/hooks/useAudioController.js +46 -64
  473. package/lib/module/components/MessageInput/hooks/useAudioController.js.map +1 -1
  474. package/lib/module/components/MessageList/MessageList.js +67 -60
  475. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  476. package/lib/module/components/MessageList/ScrollToBottomButton.js +1 -1
  477. package/lib/module/components/MessageList/ScrollToBottomButton.js.map +1 -1
  478. package/lib/module/components/MessageList/hooks/useMessageList.js.map +1 -1
  479. package/lib/module/components/MessageList/utils/getReadStates.js.map +1 -1
  480. package/lib/module/components/MessageMenu/MessageActionList.js +35 -0
  481. package/lib/module/components/MessageMenu/MessageActionList.js.map +1 -0
  482. package/lib/module/components/MessageMenu/MessageActionListItem.js +60 -0
  483. package/lib/module/components/MessageMenu/MessageActionListItem.js.map +1 -0
  484. package/lib/module/components/MessageMenu/MessageMenu.js +70 -0
  485. package/lib/module/components/MessageMenu/MessageMenu.js.map +1 -0
  486. package/lib/module/components/MessageMenu/MessageReactionPicker.js +81 -0
  487. package/lib/module/components/MessageMenu/MessageReactionPicker.js.map +1 -0
  488. package/lib/module/components/MessageMenu/MessageUserReactions.js +169 -0
  489. package/lib/module/components/MessageMenu/MessageUserReactions.js.map +1 -0
  490. package/lib/module/components/{MessageOverlay/OverlayReactionsAvatar.js → MessageMenu/MessageUserReactionsAvatar.js} +5 -6
  491. package/lib/module/components/MessageMenu/MessageUserReactionsAvatar.js.map +1 -0
  492. package/lib/module/components/MessageMenu/MessageUserReactionsItem.js +112 -0
  493. package/lib/module/components/MessageMenu/MessageUserReactionsItem.js.map +1 -0
  494. package/lib/module/components/MessageMenu/ReactionButton.js +59 -0
  495. package/lib/module/components/MessageMenu/ReactionButton.js.map +1 -0
  496. package/lib/module/components/{MessageOverlay → MessageMenu}/hooks/useFetchReactions.js +65 -41
  497. package/lib/module/components/MessageMenu/hooks/useFetchReactions.js.map +1 -0
  498. package/lib/module/components/Poll/CreatePollContent.js +14 -9
  499. package/lib/module/components/Poll/CreatePollContent.js.map +1 -1
  500. package/lib/module/components/Poll/Poll.js +2 -8
  501. package/lib/module/components/Poll/Poll.js.map +1 -1
  502. package/lib/module/components/Poll/components/Button.js +9 -474
  503. package/lib/module/components/Poll/components/Button.js.map +1 -1
  504. package/lib/module/components/Poll/components/CreatePollIcon.js +2 -2
  505. package/lib/module/components/Poll/components/CreatePollIcon.js.map +1 -1
  506. package/lib/module/components/Poll/components/CreatePollOptions.js +9 -4
  507. package/lib/module/components/Poll/components/CreatePollOptions.js.map +1 -1
  508. package/lib/module/components/Poll/components/PollAnswersList.js +99 -26
  509. package/lib/module/components/Poll/components/PollAnswersList.js.map +1 -1
  510. package/lib/module/components/Poll/components/PollButtons.js +291 -0
  511. package/lib/module/components/Poll/components/PollButtons.js.map +1 -0
  512. package/lib/module/components/Poll/components/PollInputDialog.js +14 -4
  513. package/lib/module/components/Poll/components/PollInputDialog.js.map +1 -1
  514. package/lib/module/components/Poll/components/PollModalHeader.js +7 -1
  515. package/lib/module/components/Poll/components/PollModalHeader.js.map +1 -1
  516. package/lib/module/components/Poll/components/PollOption.js +88 -6
  517. package/lib/module/components/Poll/components/PollOption.js.map +1 -1
  518. package/lib/module/components/Poll/components/PollResults/PollOptionFullResults.js +2 -2
  519. package/lib/module/components/Poll/components/PollResults/PollOptionFullResults.js.map +1 -1
  520. package/lib/module/components/Poll/components/PollResults/PollResultItem.js +62 -67
  521. package/lib/module/components/Poll/components/PollResults/PollResultItem.js.map +1 -1
  522. package/lib/module/components/Poll/components/PollResults/PollVote.js +89 -0
  523. package/lib/module/components/Poll/components/PollResults/PollVote.js.map +1 -0
  524. package/lib/module/components/Poll/components/index.js +11 -0
  525. package/lib/module/components/Poll/components/index.js.map +1 -1
  526. package/lib/module/components/ProgressControl/ProgressControl.js +21 -28
  527. package/lib/module/components/ProgressControl/ProgressControl.js.map +1 -1
  528. package/lib/module/components/ProgressControl/WaveProgressBar.js +22 -27
  529. package/lib/module/components/ProgressControl/WaveProgressBar.js.map +1 -1
  530. package/lib/module/components/Reply/Reply.js +6 -2
  531. package/lib/module/components/Reply/Reply.js.map +1 -1
  532. package/lib/module/components/UIComponents/BottomSheetModal.js +158 -0
  533. package/lib/module/components/UIComponents/BottomSheetModal.js.map +1 -0
  534. package/lib/module/components/{ImageBackground.js → UIComponents/ImageBackground.js} +1 -1
  535. package/lib/module/components/UIComponents/ImageBackground.js.map +1 -0
  536. package/lib/{commonjs/components/Spinner → module/components/UIComponents}/Spinner.js +1 -1
  537. package/lib/module/components/UIComponents/Spinner.js.map +1 -0
  538. package/lib/module/components/UIComponents/index.js +37 -0
  539. package/lib/module/components/UIComponents/index.js.map +1 -0
  540. package/lib/module/components/docs/data.js.map +1 -1
  541. package/lib/module/components/index.js +56 -45
  542. package/lib/module/components/index.js.map +1 -1
  543. package/lib/module/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js +1 -13
  544. package/lib/module/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js.map +1 -1
  545. package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js +1 -11
  546. package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
  547. package/lib/module/contexts/channelContext/ChannelContext.js +1 -11
  548. package/lib/module/contexts/channelContext/ChannelContext.js.map +1 -1
  549. package/lib/module/contexts/channelsContext/ChannelsContext.js +1 -11
  550. package/lib/module/contexts/channelsContext/ChannelsContext.js.map +1 -1
  551. package/lib/module/contexts/channelsStateContext/ChannelsStateContext.js +1 -46
  552. package/lib/module/contexts/channelsStateContext/ChannelsStateContext.js.map +1 -1
  553. package/lib/module/contexts/channelsStateContext/useChannelState.js +7 -84
  554. package/lib/module/contexts/channelsStateContext/useChannelState.js.map +1 -1
  555. package/lib/module/contexts/chatConfigContext/ChatConfigContext.js +33 -0
  556. package/lib/module/contexts/chatConfigContext/ChatConfigContext.js.map +1 -0
  557. package/lib/module/contexts/chatContext/ChatContext.js +1 -11
  558. package/lib/module/contexts/chatContext/ChatContext.js.map +1 -1
  559. package/lib/module/contexts/imageGalleryContext/ImageGalleryContext.js +1 -11
  560. package/lib/module/contexts/imageGalleryContext/ImageGalleryContext.js.map +1 -1
  561. package/lib/module/contexts/index.js +11 -11
  562. package/lib/module/contexts/index.js.map +1 -1
  563. package/lib/module/contexts/keyboardContext/KeyboardContext.js +1 -11
  564. package/lib/module/contexts/keyboardContext/KeyboardContext.js.map +1 -1
  565. package/lib/module/contexts/messageContext/MessageContext.js +1 -11
  566. package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
  567. package/lib/module/contexts/messageInputContext/MessageInputContext.js +52 -51
  568. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  569. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +1 -1
  570. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  571. package/lib/module/contexts/messagesContext/MessagesContext.js +1 -11
  572. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  573. package/lib/module/contexts/overlayContext/OverlayContext.js +1 -14
  574. package/lib/module/contexts/overlayContext/OverlayContext.js.map +1 -1
  575. package/lib/module/contexts/overlayContext/OverlayProvider.js +18 -54
  576. package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
  577. package/lib/module/contexts/paginatedMessageListContext/PaginatedMessageListContext.js +1 -11
  578. package/lib/module/contexts/paginatedMessageListContext/PaginatedMessageListContext.js.map +1 -1
  579. package/lib/module/contexts/suggestionsContext/SuggestionsContext.js +1 -11
  580. package/lib/module/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
  581. package/lib/module/contexts/themeContext/utils/theme.js +75 -49
  582. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  583. package/lib/module/contexts/threadContext/ThreadContext.js +1 -11
  584. package/lib/module/contexts/threadContext/ThreadContext.js.map +1 -1
  585. package/lib/module/contexts/translationContext/TranslationContext.js +1 -11
  586. package/lib/module/contexts/translationContext/TranslationContext.js.map +1 -1
  587. package/lib/module/contexts/typingContext/TypingContext.js +1 -11
  588. package/lib/module/contexts/typingContext/TypingContext.js.map +1 -1
  589. package/lib/module/hooks/useTranslatedMessage.js +1 -4
  590. package/lib/module/hooks/useTranslatedMessage.js.map +1 -1
  591. package/lib/module/icons/PinHeader.js +17 -6
  592. package/lib/module/icons/PinHeader.js.map +1 -1
  593. package/lib/module/index.js +4 -23
  594. package/lib/module/index.js.map +1 -1
  595. package/lib/module/mock-builders/DB/mock.js +159 -88
  596. package/lib/module/mock-builders/DB/mock.js.map +1 -1
  597. package/lib/module/native.js +38 -26
  598. package/lib/module/native.js.map +1 -1
  599. package/lib/module/store/SqliteClient.js +330 -0
  600. package/lib/module/store/SqliteClient.js.map +1 -0
  601. package/lib/module/store/apis/addPendingTask.js +56 -30
  602. package/lib/module/store/apis/addPendingTask.js.map +1 -1
  603. package/lib/module/store/apis/deleteChannel.js +36 -17
  604. package/lib/module/store/apis/deleteChannel.js.map +1 -1
  605. package/lib/module/store/apis/deleteMember.js +38 -20
  606. package/lib/module/store/apis/deleteMember.js.map +1 -1
  607. package/lib/module/store/apis/deleteMessage.js +36 -17
  608. package/lib/module/store/apis/deleteMessage.js.map +1 -1
  609. package/lib/module/store/apis/deleteMessagesForChannel.js +36 -17
  610. package/lib/module/store/apis/deleteMessagesForChannel.js.map +1 -1
  611. package/lib/module/store/apis/deletePendingTask.js +31 -12
  612. package/lib/module/store/apis/deletePendingTask.js.map +1 -1
  613. package/lib/module/store/apis/deleteReaction.js +39 -22
  614. package/lib/module/store/apis/deleteReaction.js.map +1 -1
  615. package/lib/module/store/apis/deleteReactions.js +36 -17
  616. package/lib/module/store/apis/deleteReactions.js.map +1 -1
  617. package/lib/module/store/apis/getAllChannelIds.js +28 -8
  618. package/lib/module/store/apis/getAllChannelIds.js.map +1 -1
  619. package/lib/module/store/apis/getAppSettings.js +31 -11
  620. package/lib/module/store/apis/getAppSettings.js.map +1 -1
  621. package/lib/module/store/apis/getChannelMessages.js +77 -52
  622. package/lib/module/store/apis/getChannelMessages.js.map +1 -1
  623. package/lib/module/store/apis/getChannels.js +58 -30
  624. package/lib/module/store/apis/getChannels.js.map +1 -1
  625. package/lib/module/store/apis/getChannelsForFilterSort.js +58 -26
  626. package/lib/module/store/apis/getChannelsForFilterSort.js.map +1 -1
  627. package/lib/module/store/apis/getLastSyncedAt.js +31 -11
  628. package/lib/module/store/apis/getLastSyncedAt.js.map +1 -1
  629. package/lib/module/store/apis/getMembers.js +36 -16
  630. package/lib/module/store/apis/getMembers.js.map +1 -1
  631. package/lib/module/store/apis/getPendingTasks.js +37 -14
  632. package/lib/module/store/apis/getPendingTasks.js.map +1 -1
  633. package/lib/module/store/apis/getReactions.js +2 -2
  634. package/lib/module/store/apis/getReactions.js.map +1 -1
  635. package/lib/module/store/apis/getReactionsforFilterSort.js +54 -22
  636. package/lib/module/store/apis/getReactionsforFilterSort.js.map +1 -1
  637. package/lib/module/store/apis/getReads.js +36 -16
  638. package/lib/module/store/apis/getReads.js.map +1 -1
  639. package/lib/module/store/apis/insertReaction.js +41 -23
  640. package/lib/module/store/apis/insertReaction.js.map +1 -1
  641. package/lib/module/store/apis/queries/selectChannelIdsForFilterSort.js +36 -17
  642. package/lib/module/store/apis/queries/selectChannelIdsForFilterSort.js.map +1 -1
  643. package/lib/module/store/apis/queries/selectChannels.js +44 -19
  644. package/lib/module/store/apis/queries/selectChannels.js.map +1 -1
  645. package/lib/module/store/apis/queries/selectMembersForChannels.js +37 -17
  646. package/lib/module/store/apis/queries/selectMembersForChannels.js.map +1 -1
  647. package/lib/module/store/apis/queries/selectMessagesForChannels.js +37 -17
  648. package/lib/module/store/apis/queries/selectMessagesForChannels.js.map +1 -1
  649. package/lib/module/store/apis/queries/selectReactionsForMessages.js +37 -17
  650. package/lib/module/store/apis/queries/selectReactionsForMessages.js.map +1 -1
  651. package/lib/module/store/apis/queries/selectReadsForChannels.js +37 -17
  652. package/lib/module/store/apis/queries/selectReadsForChannels.js.map +1 -1
  653. package/lib/module/store/apis/updateMessage.js +71 -47
  654. package/lib/module/store/apis/updateMessage.js.map +1 -1
  655. package/lib/module/store/apis/updatePollMessage.js +68 -59
  656. package/lib/module/store/apis/updatePollMessage.js.map +1 -1
  657. package/lib/module/store/apis/updateReaction.js +53 -38
  658. package/lib/module/store/apis/updateReaction.js.map +1 -1
  659. package/lib/module/store/apis/upsertAppSettings.js +37 -20
  660. package/lib/module/store/apis/upsertAppSettings.js.map +1 -1
  661. package/lib/module/store/apis/upsertChannelData.js +35 -16
  662. package/lib/module/store/apis/upsertChannelData.js.map +1 -1
  663. package/lib/module/store/apis/upsertChannelDataFromChannel.js +37 -13
  664. package/lib/module/store/apis/upsertChannelDataFromChannel.js.map +1 -1
  665. package/lib/module/store/apis/upsertChannels.js +115 -60
  666. package/lib/module/store/apis/upsertChannels.js.map +1 -1
  667. package/lib/module/store/apis/upsertCidsForQuery.js +43 -26
  668. package/lib/module/store/apis/upsertCidsForQuery.js.map +1 -1
  669. package/lib/module/store/apis/upsertMembers.js +51 -33
  670. package/lib/module/store/apis/upsertMembers.js.map +1 -1
  671. package/lib/module/store/apis/upsertMessages.js +62 -44
  672. package/lib/module/store/apis/upsertMessages.js.map +1 -1
  673. package/lib/module/store/apis/upsertReads.js +51 -34
  674. package/lib/module/store/apis/upsertReads.js.map +1 -1
  675. package/lib/module/store/apis/upsertUserSyncStatus.js +31 -14
  676. package/lib/module/store/apis/upsertUserSyncStatus.js.map +1 -1
  677. package/lib/module/test-utils/BetterSqlite.js +40 -15
  678. package/lib/module/test-utils/BetterSqlite.js.map +1 -1
  679. package/lib/module/utils/DBSyncManager.js +238 -152
  680. package/lib/module/utils/DBSyncManager.js.map +1 -1
  681. package/lib/module/utils/getResizedImageUrl.js +5 -3
  682. package/lib/module/utils/getResizedImageUrl.js.map +1 -1
  683. package/lib/module/utils/utils.js +1 -1
  684. package/lib/module/utils/utils.js.map +1 -1
  685. package/lib/module/version.json +1 -1
  686. package/lib/typescript/components/Attachment/Card.d.ts +2 -2
  687. package/lib/typescript/components/Attachment/Card.d.ts.map +1 -1
  688. package/lib/typescript/components/Attachment/FileAttachment.d.ts +1 -1
  689. package/lib/typescript/components/Attachment/FileAttachment.d.ts.map +1 -1
  690. package/lib/typescript/components/Attachment/Gallery.d.ts +1 -1
  691. package/lib/typescript/components/Attachment/Gallery.d.ts.map +1 -1
  692. package/lib/typescript/components/Attachment/Giphy.d.ts +1 -1
  693. package/lib/typescript/components/Attachment/utils/buildGallery/buildGallery.d.ts +2 -1
  694. package/lib/typescript/components/Attachment/utils/buildGallery/buildGallery.d.ts.map +1 -1
  695. package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.d.ts +2 -1
  696. package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.d.ts.map +1 -1
  697. package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.d.ts +2 -1
  698. package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.d.ts.map +1 -1
  699. package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.d.ts +2 -1
  700. package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.d.ts.map +1 -1
  701. package/lib/typescript/components/Attachment/utils/buildGallery/buildThumbnail.d.ts +4 -2
  702. package/lib/typescript/components/Attachment/utils/buildGallery/buildThumbnail.d.ts.map +1 -1
  703. package/lib/typescript/components/Attachment/utils/buildGallery/buildThumbnailGrid.d.ts +2 -1
  704. package/lib/typescript/components/Attachment/utils/buildGallery/buildThumbnailGrid.d.ts.map +1 -1
  705. package/lib/typescript/components/AttachmentPicker/AttachmentPicker.d.ts.map +1 -1
  706. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.d.ts +2 -2
  707. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.d.ts.map +1 -1
  708. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerItem.d.ts.map +1 -1
  709. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerSelectionBar.d.ts.map +1 -1
  710. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionList.d.ts.map +1 -1
  711. package/lib/typescript/components/Avatar/Avatar.d.ts.map +1 -1
  712. package/lib/typescript/components/Avatar/GroupAvatar.d.ts.map +1 -1
  713. package/lib/typescript/components/Channel/Channel.d.ts +5 -5
  714. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  715. package/lib/typescript/components/Channel/hooks/useChannelDataState.d.ts +75 -0
  716. package/lib/typescript/components/Channel/hooks/useChannelDataState.d.ts.map +1 -0
  717. package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts +1 -1
  718. package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts.map +1 -1
  719. package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts.map +1 -1
  720. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +22 -14
  721. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts.map +1 -1
  722. package/lib/typescript/components/Channel/hooks/useCreatePaginatedMessageListContext.d.ts +1 -1
  723. package/lib/typescript/components/Channel/hooks/useCreatePaginatedMessageListContext.d.ts.map +1 -1
  724. package/lib/typescript/components/Channel/hooks/useMessageListPagination.d.ts +28 -0
  725. package/lib/typescript/components/Channel/hooks/useMessageListPagination.d.ts.map +1 -0
  726. package/lib/typescript/components/ChannelList/ChannelList.d.ts +0 -12
  727. package/lib/typescript/components/ChannelList/ChannelList.d.ts.map +1 -1
  728. package/lib/typescript/components/ChannelList/Skeleton.d.ts.map +1 -1
  729. package/lib/typescript/components/ChannelList/hooks/listeners/useNewMessageNotification.d.ts +1 -2
  730. package/lib/typescript/components/ChannelList/hooks/listeners/useNewMessageNotification.d.ts.map +1 -1
  731. package/lib/typescript/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
  732. package/lib/typescript/components/Chat/Chat.d.ts +1 -1
  733. package/lib/typescript/components/Chat/Chat.d.ts.map +1 -1
  734. package/lib/typescript/components/Chat/hooks/handleEventToSyncDB.d.ts +1 -1
  735. package/lib/typescript/components/Chat/hooks/handleEventToSyncDB.d.ts.map +1 -1
  736. package/lib/typescript/components/Chat/hooks/useAppSettings.d.ts.map +1 -1
  737. package/lib/typescript/components/Chat/hooks/useCreateChatContext.d.ts +1 -1
  738. package/lib/typescript/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
  739. package/lib/typescript/components/Chat/hooks/useIsOnline.d.ts.map +1 -1
  740. package/lib/typescript/components/ImageGallery/ImageGallery.d.ts +2 -2
  741. package/lib/typescript/components/ImageGallery/ImageGallery.d.ts.map +1 -1
  742. package/lib/typescript/components/ImageGallery/components/AnimatedGalleryImage.d.ts +5 -5
  743. package/lib/typescript/components/ImageGallery/components/AnimatedGalleryImage.d.ts.map +1 -1
  744. package/lib/typescript/components/ImageGallery/components/AnimatedGalleryVideo.d.ts +5 -5
  745. package/lib/typescript/components/ImageGallery/components/AnimatedGalleryVideo.d.ts.map +1 -1
  746. package/lib/typescript/components/ImageGallery/components/ImageGalleryFooter.d.ts +3 -3
  747. package/lib/typescript/components/ImageGallery/components/ImageGalleryFooter.d.ts.map +1 -1
  748. package/lib/typescript/components/ImageGallery/components/ImageGalleryHeader.d.ts +3 -3
  749. package/lib/typescript/components/ImageGallery/components/ImageGalleryHeader.d.ts.map +1 -1
  750. package/lib/typescript/components/ImageGallery/components/ImageGalleryOverlay.d.ts +2 -2
  751. package/lib/typescript/components/ImageGallery/components/ImageGalleryOverlay.d.ts.map +1 -1
  752. package/lib/typescript/components/ImageGallery/hooks/useAnimatedGalleryStyle.d.ts +37 -0
  753. package/lib/typescript/components/ImageGallery/hooks/useAnimatedGalleryStyle.d.ts.map +1 -0
  754. package/lib/typescript/components/ImageGallery/hooks/useImageGalleryGestures.d.ts +4 -5
  755. package/lib/typescript/components/ImageGallery/hooks/useImageGalleryGestures.d.ts.map +1 -1
  756. package/lib/typescript/components/Message/Message.d.ts +4 -40
  757. package/lib/typescript/components/Message/Message.d.ts.map +1 -1
  758. package/lib/typescript/components/Message/MessageSimple/MessageAvatar.d.ts.map +1 -1
  759. package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts +11 -5
  760. package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts.map +1 -1
  761. package/lib/typescript/components/Message/MessageSimple/MessagePinnedHeader.d.ts +2 -6
  762. package/lib/typescript/components/Message/MessageSimple/MessagePinnedHeader.d.ts.map +1 -1
  763. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts +1 -1
  764. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts.map +1 -1
  765. package/lib/typescript/components/Message/MessageSimple/MessageTextContainer.d.ts +1 -2
  766. package/lib/typescript/components/Message/MessageSimple/MessageTextContainer.d.ts.map +1 -1
  767. package/lib/typescript/components/Message/MessageSimple/ReactionList/ReactionListBottom.d.ts +12 -0
  768. package/lib/typescript/components/Message/MessageSimple/ReactionList/ReactionListBottom.d.ts.map +1 -0
  769. package/lib/typescript/components/Message/MessageSimple/ReactionList/ReactionListTop.d.ts +20 -0
  770. package/lib/typescript/components/Message/MessageSimple/ReactionList/ReactionListTop.d.ts.map +1 -0
  771. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts +1 -1
  772. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts.map +1 -1
  773. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts +5 -6
  774. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts.map +1 -1
  775. package/lib/typescript/components/Message/hooks/useMessageData.d.ts +12 -0
  776. package/lib/typescript/components/Message/hooks/useMessageData.d.ts.map +1 -0
  777. package/lib/typescript/components/Message/hooks/useProcessReactions.d.ts +11 -3
  778. package/lib/typescript/components/Message/hooks/useProcessReactions.d.ts.map +1 -1
  779. package/lib/typescript/components/Message/utils/messageActions.d.ts +6 -14
  780. package/lib/typescript/components/Message/utils/messageActions.d.ts.map +1 -1
  781. package/lib/typescript/components/MessageInput/MessageInput.d.ts.map +1 -1
  782. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingButton.d.ts.map +1 -1
  783. package/lib/typescript/components/MessageInput/components/NativeAttachmentPicker.d.ts.map +1 -1
  784. package/lib/typescript/components/MessageInput/hooks/useAudioController.d.ts.map +1 -1
  785. package/lib/typescript/components/MessageList/MessageList.d.ts +1 -1
  786. package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
  787. package/lib/typescript/components/MessageList/hooks/useMessageList.d.ts.map +1 -1
  788. package/lib/typescript/components/MessageList/utils/getReadStates.d.ts +1 -1
  789. package/lib/typescript/components/MessageList/utils/getReadStates.d.ts.map +1 -1
  790. package/lib/typescript/components/MessageMenu/MessageActionList.d.ts +16 -0
  791. package/lib/typescript/components/MessageMenu/MessageActionList.d.ts.map +1 -0
  792. package/lib/typescript/components/{MessageOverlay → MessageMenu}/MessageActionListItem.d.ts +2 -8
  793. package/lib/typescript/components/MessageMenu/MessageActionListItem.d.ts.map +1 -0
  794. package/lib/typescript/components/MessageMenu/MessageMenu.d.ts +32 -0
  795. package/lib/typescript/components/MessageMenu/MessageMenu.d.ts.map +1 -0
  796. package/lib/typescript/components/MessageMenu/MessageReactionPicker.d.ts +30 -0
  797. package/lib/typescript/components/MessageMenu/MessageReactionPicker.d.ts.map +1 -0
  798. package/lib/typescript/components/MessageMenu/MessageUserReactions.d.ts +21 -0
  799. package/lib/typescript/components/MessageMenu/MessageUserReactions.d.ts.map +1 -0
  800. package/lib/typescript/components/MessageMenu/MessageUserReactionsAvatar.d.ts +11 -0
  801. package/lib/typescript/components/MessageMenu/MessageUserReactionsAvatar.d.ts.map +1 -0
  802. package/lib/typescript/components/MessageMenu/MessageUserReactionsItem.d.ts +16 -0
  803. package/lib/typescript/components/MessageMenu/MessageUserReactionsItem.d.ts.map +1 -0
  804. package/lib/typescript/components/MessageMenu/ReactionButton.d.ts +25 -0
  805. package/lib/typescript/components/MessageMenu/ReactionButton.d.ts.map +1 -0
  806. package/lib/typescript/components/MessageMenu/hooks/useFetchReactions.d.ts.map +1 -0
  807. package/lib/typescript/components/Poll/Poll.d.ts +0 -1
  808. package/lib/typescript/components/Poll/Poll.d.ts.map +1 -1
  809. package/lib/typescript/components/Poll/components/Button.d.ts +0 -17
  810. package/lib/typescript/components/Poll/components/Button.d.ts.map +1 -1
  811. package/lib/typescript/components/Poll/components/CreatePollOptions.d.ts.map +1 -1
  812. package/lib/typescript/components/Poll/components/PollAnswersList.d.ts +2 -0
  813. package/lib/typescript/components/Poll/components/PollAnswersList.d.ts.map +1 -1
  814. package/lib/typescript/components/Poll/components/PollButtons.d.ts +10 -0
  815. package/lib/typescript/components/Poll/components/PollButtons.d.ts.map +1 -0
  816. package/lib/typescript/components/Poll/components/PollInputDialog.d.ts.map +1 -1
  817. package/lib/typescript/components/Poll/components/PollOption.d.ts +2 -0
  818. package/lib/typescript/components/Poll/components/PollOption.d.ts.map +1 -1
  819. package/lib/typescript/components/Poll/components/PollResults/PollResultItem.d.ts +11 -4
  820. package/lib/typescript/components/Poll/components/PollResults/PollResultItem.d.ts.map +1 -1
  821. package/lib/typescript/components/Poll/components/PollResults/PollVote.d.ts +6 -0
  822. package/lib/typescript/components/Poll/components/PollResults/PollVote.d.ts.map +1 -0
  823. package/lib/typescript/components/Poll/components/index.d.ts +1 -0
  824. package/lib/typescript/components/Poll/components/index.d.ts.map +1 -1
  825. package/lib/typescript/components/ProgressControl/ProgressControl.d.ts.map +1 -1
  826. package/lib/typescript/components/ProgressControl/WaveProgressBar.d.ts.map +1 -1
  827. package/lib/typescript/components/Reply/Reply.d.ts.map +1 -1
  828. package/lib/typescript/components/UIComponents/BottomSheetModal.d.ts +21 -0
  829. package/lib/typescript/components/UIComponents/BottomSheetModal.d.ts.map +1 -0
  830. package/lib/typescript/components/UIComponents/ImageBackground.d.ts.map +1 -0
  831. package/lib/typescript/components/UIComponents/Spinner.d.ts.map +1 -0
  832. package/lib/typescript/components/UIComponents/index.d.ts +4 -0
  833. package/lib/typescript/components/UIComponents/index.d.ts.map +1 -0
  834. package/lib/typescript/components/index.d.ts +11 -10
  835. package/lib/typescript/components/index.d.ts.map +1 -1
  836. package/lib/typescript/contexts/activeChannelsRefContext/ActiveChannelsRefContext.d.ts +0 -11
  837. package/lib/typescript/contexts/activeChannelsRefContext/ActiveChannelsRefContext.d.ts.map +1 -1
  838. package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts +1 -11
  839. package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts.map +1 -1
  840. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts +28 -62
  841. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts.map +1 -1
  842. package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts +1 -11
  843. package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts.map +1 -1
  844. package/lib/typescript/contexts/channelsStateContext/ChannelsStateContext.d.ts +1 -27
  845. package/lib/typescript/contexts/channelsStateContext/ChannelsStateContext.d.ts.map +1 -1
  846. package/lib/typescript/contexts/channelsStateContext/useChannelState.d.ts +7 -13
  847. package/lib/typescript/contexts/channelsStateContext/useChannelState.d.ts.map +1 -1
  848. package/lib/typescript/contexts/chatConfigContext/ChatConfigContext.d.ts +16 -0
  849. package/lib/typescript/contexts/chatConfigContext/ChatConfigContext.d.ts.map +1 -0
  850. package/lib/typescript/contexts/chatContext/ChatContext.d.ts +1 -15
  851. package/lib/typescript/contexts/chatContext/ChatContext.d.ts.map +1 -1
  852. package/lib/typescript/contexts/imageGalleryContext/ImageGalleryContext.d.ts +0 -10
  853. package/lib/typescript/contexts/imageGalleryContext/ImageGalleryContext.d.ts.map +1 -1
  854. package/lib/typescript/contexts/index.d.ts +1 -1
  855. package/lib/typescript/contexts/index.d.ts.map +1 -1
  856. package/lib/typescript/contexts/keyboardContext/KeyboardContext.d.ts +0 -11
  857. package/lib/typescript/contexts/keyboardContext/KeyboardContext.d.ts.map +1 -1
  858. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +21 -56
  859. package/lib/typescript/contexts/messageContext/MessageContext.d.ts.map +1 -1
  860. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +2 -12
  861. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts.map +1 -1
  862. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  863. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +78 -38
  864. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts.map +1 -1
  865. package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts +2 -27
  866. package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts.map +1 -1
  867. package/lib/typescript/contexts/overlayContext/OverlayProvider.d.ts.map +1 -1
  868. package/lib/typescript/contexts/paginatedMessageListContext/PaginatedMessageListContext.d.ts +18 -27
  869. package/lib/typescript/contexts/paginatedMessageListContext/PaginatedMessageListContext.d.ts.map +1 -1
  870. package/lib/typescript/contexts/suggestionsContext/SuggestionsContext.d.ts +1 -11
  871. package/lib/typescript/contexts/suggestionsContext/SuggestionsContext.d.ts.map +1 -1
  872. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +69 -44
  873. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  874. package/lib/typescript/contexts/threadContext/ThreadContext.d.ts +1 -11
  875. package/lib/typescript/contexts/threadContext/ThreadContext.d.ts.map +1 -1
  876. package/lib/typescript/contexts/translationContext/TranslationContext.d.ts +0 -11
  877. package/lib/typescript/contexts/translationContext/TranslationContext.d.ts.map +1 -1
  878. package/lib/typescript/contexts/typingContext/TypingContext.d.ts +1 -11
  879. package/lib/typescript/contexts/typingContext/TypingContext.d.ts.map +1 -1
  880. package/lib/typescript/hooks/useTranslatedMessage.d.ts.map +1 -1
  881. package/lib/typescript/icons/PinHeader.d.ts +5 -1
  882. package/lib/typescript/icons/PinHeader.d.ts.map +1 -1
  883. package/lib/typescript/index.d.ts +2 -3
  884. package/lib/typescript/index.d.ts.map +1 -1
  885. package/lib/typescript/native.d.ts +11 -13
  886. package/lib/typescript/native.d.ts.map +1 -1
  887. package/lib/typescript/store/SqliteClient.d.ts +27 -0
  888. package/lib/typescript/store/SqliteClient.d.ts.map +1 -0
  889. package/lib/typescript/store/apis/addPendingTask.d.ts +1 -1
  890. package/lib/typescript/store/apis/addPendingTask.d.ts.map +1 -1
  891. package/lib/typescript/store/apis/deleteChannel.d.ts +1 -1
  892. package/lib/typescript/store/apis/deleteChannel.d.ts.map +1 -1
  893. package/lib/typescript/store/apis/deleteMember.d.ts +1 -1
  894. package/lib/typescript/store/apis/deleteMember.d.ts.map +1 -1
  895. package/lib/typescript/store/apis/deleteMessage.d.ts +1 -1
  896. package/lib/typescript/store/apis/deleteMessage.d.ts.map +1 -1
  897. package/lib/typescript/store/apis/deleteMessagesForChannel.d.ts +1 -1
  898. package/lib/typescript/store/apis/deleteMessagesForChannel.d.ts.map +1 -1
  899. package/lib/typescript/store/apis/deletePendingTask.d.ts +1 -1
  900. package/lib/typescript/store/apis/deletePendingTask.d.ts.map +1 -1
  901. package/lib/typescript/store/apis/deleteReaction.d.ts +1 -1
  902. package/lib/typescript/store/apis/deleteReaction.d.ts.map +1 -1
  903. package/lib/typescript/store/apis/deleteReactions.d.ts +1 -1
  904. package/lib/typescript/store/apis/deleteReactions.d.ts.map +1 -1
  905. package/lib/typescript/store/apis/getAllChannelIds.d.ts +1 -1
  906. package/lib/typescript/store/apis/getAllChannelIds.d.ts.map +1 -1
  907. package/lib/typescript/store/apis/getAppSettings.d.ts +1 -1
  908. package/lib/typescript/store/apis/getAppSettings.d.ts.map +1 -1
  909. package/lib/typescript/store/apis/getChannelMessages.d.ts +1 -1
  910. package/lib/typescript/store/apis/getChannelMessages.d.ts.map +1 -1
  911. package/lib/typescript/store/apis/getChannels.d.ts +1 -1
  912. package/lib/typescript/store/apis/getChannels.d.ts.map +1 -1
  913. package/lib/typescript/store/apis/getChannelsForFilterSort.d.ts +1 -1
  914. package/lib/typescript/store/apis/getChannelsForFilterSort.d.ts.map +1 -1
  915. package/lib/typescript/store/apis/getLastSyncedAt.d.ts +1 -1
  916. package/lib/typescript/store/apis/getLastSyncedAt.d.ts.map +1 -1
  917. package/lib/typescript/store/apis/getMembers.d.ts +1 -1
  918. package/lib/typescript/store/apis/getMembers.d.ts.map +1 -1
  919. package/lib/typescript/store/apis/getPendingTasks.d.ts +1 -1
  920. package/lib/typescript/store/apis/getPendingTasks.d.ts.map +1 -1
  921. package/lib/typescript/store/apis/getReactionsforFilterSort.d.ts +1 -1
  922. package/lib/typescript/store/apis/getReactionsforFilterSort.d.ts.map +1 -1
  923. package/lib/typescript/store/apis/getReads.d.ts +1 -1
  924. package/lib/typescript/store/apis/getReads.d.ts.map +1 -1
  925. package/lib/typescript/store/apis/insertReaction.d.ts +1 -1
  926. package/lib/typescript/store/apis/insertReaction.d.ts.map +1 -1
  927. package/lib/typescript/store/apis/queries/selectChannelIdsForFilterSort.d.ts +1 -1
  928. package/lib/typescript/store/apis/queries/selectChannelIdsForFilterSort.d.ts.map +1 -1
  929. package/lib/typescript/store/apis/queries/selectChannels.d.ts +2 -2
  930. package/lib/typescript/store/apis/queries/selectChannels.d.ts.map +1 -1
  931. package/lib/typescript/store/apis/queries/selectMembersForChannels.d.ts +1 -1
  932. package/lib/typescript/store/apis/queries/selectMembersForChannels.d.ts.map +1 -1
  933. package/lib/typescript/store/apis/queries/selectMessagesForChannels.d.ts +1 -1
  934. package/lib/typescript/store/apis/queries/selectMessagesForChannels.d.ts.map +1 -1
  935. package/lib/typescript/store/apis/queries/selectReactionsForMessages.d.ts +1 -1
  936. package/lib/typescript/store/apis/queries/selectReactionsForMessages.d.ts.map +1 -1
  937. package/lib/typescript/store/apis/queries/selectReadsForChannels.d.ts +1 -1
  938. package/lib/typescript/store/apis/queries/selectReadsForChannels.d.ts.map +1 -1
  939. package/lib/typescript/store/apis/updateMessage.d.ts +1 -1
  940. package/lib/typescript/store/apis/updateMessage.d.ts.map +1 -1
  941. package/lib/typescript/store/apis/updatePollMessage.d.ts +1 -1
  942. package/lib/typescript/store/apis/updatePollMessage.d.ts.map +1 -1
  943. package/lib/typescript/store/apis/updateReaction.d.ts +1 -1
  944. package/lib/typescript/store/apis/updateReaction.d.ts.map +1 -1
  945. package/lib/typescript/store/apis/upsertAppSettings.d.ts +1 -1
  946. package/lib/typescript/store/apis/upsertAppSettings.d.ts.map +1 -1
  947. package/lib/typescript/store/apis/upsertChannelData.d.ts +1 -1
  948. package/lib/typescript/store/apis/upsertChannelData.d.ts.map +1 -1
  949. package/lib/typescript/store/apis/upsertChannelDataFromChannel.d.ts +1 -1
  950. package/lib/typescript/store/apis/upsertChannelDataFromChannel.d.ts.map +1 -1
  951. package/lib/typescript/store/apis/upsertChannels.d.ts +1 -1
  952. package/lib/typescript/store/apis/upsertChannels.d.ts.map +1 -1
  953. package/lib/typescript/store/apis/upsertCidsForQuery.d.ts +1 -1
  954. package/lib/typescript/store/apis/upsertCidsForQuery.d.ts.map +1 -1
  955. package/lib/typescript/store/apis/upsertMembers.d.ts +1 -1
  956. package/lib/typescript/store/apis/upsertMembers.d.ts.map +1 -1
  957. package/lib/typescript/store/apis/upsertMessages.d.ts +1 -1
  958. package/lib/typescript/store/apis/upsertMessages.d.ts.map +1 -1
  959. package/lib/typescript/store/apis/upsertReads.d.ts +1 -1
  960. package/lib/typescript/store/apis/upsertReads.d.ts.map +1 -1
  961. package/lib/typescript/store/apis/upsertUserSyncStatus.d.ts +1 -1
  962. package/lib/typescript/store/apis/upsertUserSyncStatus.d.ts.map +1 -1
  963. package/lib/typescript/test-utils/BetterSqlite.d.ts +2 -2
  964. package/lib/typescript/test-utils/BetterSqlite.d.ts.map +1 -1
  965. package/lib/typescript/types/types.d.ts +8 -0
  966. package/lib/typescript/types/types.d.ts.map +1 -1
  967. package/lib/typescript/utils/DBSyncManager.d.ts +1 -1
  968. package/lib/typescript/utils/DBSyncManager.d.ts.map +1 -1
  969. package/lib/typescript/utils/getResizedImageUrl.d.ts +3 -2
  970. package/lib/typescript/utils/getResizedImageUrl.d.ts.map +1 -1
  971. package/lib/typescript/utils/utils.d.ts.map +1 -1
  972. package/package.json +14 -14
  973. package/src/__tests__/offline-support/offline-feature.js +220 -176
  974. package/src/__tests__/offline-support/optimistic-update.js +27 -23
  975. package/src/components/Attachment/Attachment.tsx +2 -2
  976. package/src/components/Attachment/Card.tsx +10 -10
  977. package/src/components/Attachment/FileAttachment.tsx +8 -16
  978. package/src/components/Attachment/FileAttachmentGroup.tsx +2 -2
  979. package/src/components/Attachment/Gallery.tsx +21 -18
  980. package/src/components/Attachment/Giphy.tsx +14 -14
  981. package/src/components/Attachment/__tests__/Attachment.test.js +4 -2
  982. package/src/components/Attachment/__tests__/Gallery.test.js +0 -2
  983. package/src/components/Attachment/utils/buildGallery/buildGallery.ts +10 -1
  984. package/src/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.ts +4 -1
  985. package/src/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.ts +5 -1
  986. package/src/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.ts +6 -1
  987. package/src/components/Attachment/utils/buildGallery/buildThumbnail.ts +13 -6
  988. package/src/components/Attachment/utils/buildGallery/buildThumbnailGrid.ts +5 -1
  989. package/src/components/AttachmentPicker/AttachmentPicker.tsx +7 -2
  990. package/src/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.tsx +2 -2
  991. package/src/components/AttachmentPicker/components/AttachmentPickerItem.tsx +17 -33
  992. package/src/components/AttachmentPicker/components/AttachmentPickerSelectionBar.tsx +18 -17
  993. package/src/components/AutoCompleteInput/AutoCompleteSuggestionList.tsx +1 -1
  994. package/src/components/Avatar/Avatar.tsx +3 -0
  995. package/src/components/Avatar/GroupAvatar.tsx +4 -0
  996. package/src/components/Channel/Channel.tsx +299 -982
  997. package/src/components/Channel/__tests__/Channel.test.js +244 -13
  998. package/src/components/Channel/__tests__/ownCapabilities.test.js +57 -57
  999. package/src/components/Channel/__tests__/useMessageListPagination.test.js +419 -0
  1000. package/src/components/Channel/hooks/useChannelDataState.ts +235 -0
  1001. package/src/components/Channel/hooks/useCreateChannelContext.ts +0 -8
  1002. package/src/components/Channel/hooks/useCreateInputMessageInputContext.ts +2 -6
  1003. package/src/components/Channel/hooks/useCreateMessagesContext.ts +26 -10
  1004. package/src/components/Channel/hooks/useCreatePaginatedMessageListContext.ts +3 -10
  1005. package/src/components/Channel/hooks/useMessageListPagination.tsx +246 -0
  1006. package/src/components/ChannelList/ChannelList.tsx +0 -17
  1007. package/src/components/ChannelList/ChannelListFooterLoadingIndicator.tsx +1 -1
  1008. package/src/components/ChannelList/Skeleton.tsx +9 -1
  1009. package/src/components/ChannelList/__tests__/ChannelList.test.js +5 -5
  1010. package/src/components/ChannelList/hooks/listeners/useNewMessageNotification.ts +2 -11
  1011. package/src/components/ChannelList/hooks/usePaginatedChannels.ts +20 -13
  1012. package/src/components/Chat/Chat.tsx +23 -18
  1013. package/src/components/Chat/__tests__/Chat.test.js +199 -178
  1014. package/src/components/Chat/hooks/handleEventToSyncDB.ts +18 -16
  1015. package/src/components/Chat/hooks/useAppSettings.ts +3 -2
  1016. package/src/components/Chat/hooks/useCreateChatContext.ts +0 -2
  1017. package/src/components/Chat/hooks/useIsOnline.ts +13 -10
  1018. package/src/components/ImageGallery/ImageGallery.tsx +71 -121
  1019. package/src/components/ImageGallery/__tests__/AnimatedVideoGallery.test.tsx +0 -11
  1020. package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +3 -4
  1021. package/src/components/ImageGallery/__tests__/ImageGalleryFooter.test.tsx +3 -5
  1022. package/src/components/ImageGallery/__tests__/ImageGalleryGrid.test.tsx +1 -1
  1023. package/src/components/ImageGallery/__tests__/ImageGalleryGridHandle.test.tsx +1 -1
  1024. package/src/components/ImageGallery/__tests__/ImageGalleryHeader.test.tsx +3 -5
  1025. package/src/components/ImageGallery/__tests__/ImageGalleryOverlay.test.tsx +0 -3
  1026. package/src/components/ImageGallery/components/AnimatedGalleryImage.tsx +17 -56
  1027. package/src/components/ImageGallery/components/AnimatedGalleryVideo.tsx +21 -56
  1028. package/src/components/ImageGallery/components/ImageGalleryFooter.tsx +73 -59
  1029. package/src/components/ImageGallery/components/ImageGalleryHeader.tsx +46 -45
  1030. package/src/components/ImageGallery/components/ImageGalleryOverlay.tsx +2 -1
  1031. package/src/components/ImageGallery/components/__tests__/ImageGalleryHeader.test.tsx +3 -4
  1032. package/src/components/ImageGallery/hooks/useAnimatedGalleryStyle.tsx +83 -0
  1033. package/src/components/ImageGallery/hooks/useImageGalleryGestures.tsx +495 -470
  1034. package/src/components/Indicators/LoadingIndicator.tsx +1 -1
  1035. package/src/components/Message/Message.tsx +113 -215
  1036. package/src/components/Message/MessageSimple/MessageAvatar.tsx +1 -0
  1037. package/src/components/Message/MessageSimple/MessageBounce.tsx +2 -2
  1038. package/src/components/Message/MessageSimple/MessageContent.tsx +28 -155
  1039. package/src/components/Message/MessageSimple/MessageDeleted.tsx +1 -1
  1040. package/src/components/Message/MessageSimple/MessageFooter.tsx +1 -1
  1041. package/src/components/Message/MessageSimple/MessagePinnedHeader.tsx +21 -66
  1042. package/src/components/Message/MessageSimple/MessageSimple.tsx +245 -54
  1043. package/src/components/Message/MessageSimple/MessageTextContainer.tsx +3 -4
  1044. package/src/components/Message/MessageSimple/ReactionList/ReactionListBottom.tsx +295 -0
  1045. package/src/components/Message/MessageSimple/ReactionList/ReactionListTop.tsx +271 -0
  1046. package/src/components/Message/MessageSimple/__tests__/MessageContent.test.js +1 -2
  1047. package/src/components/Message/MessageSimple/__tests__/MessageSimple.test.js +208 -0
  1048. package/src/components/Message/MessageSimple/__tests__/MessageTextContainer.test.tsx +3 -3
  1049. package/src/components/Message/MessageSimple/__tests__/ReactionListBottom.test.js +166 -0
  1050. package/src/components/Message/MessageSimple/__tests__/ReactionListTop.test.js +92 -0
  1051. package/src/components/Message/MessageSimple/__tests__/__snapshots__/MessagePinnedHeader.test.js.snap +23 -19
  1052. package/src/components/Message/hooks/useCreateMessageContext.ts +4 -16
  1053. package/src/components/Message/hooks/useMessageActions.tsx +48 -68
  1054. package/src/components/Message/hooks/useMessageData.ts +59 -0
  1055. package/src/components/Message/hooks/useProcessReactions.ts +17 -10
  1056. package/src/components/Message/utils/messageActions.ts +10 -20
  1057. package/src/components/MessageInput/FileUploadPreview.tsx +2 -2
  1058. package/src/components/MessageInput/MessageInput.tsx +0 -1
  1059. package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewExpo.test.tsx +1 -4
  1060. package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewNative.test.tsx +1 -4
  1061. package/src/components/MessageInput/__tests__/FileUploadPreview.test.js +3 -5
  1062. package/src/components/MessageInput/__tests__/MessageInput.test.js +116 -2
  1063. package/src/components/MessageInput/components/AudioRecorder/AudioRecordingButton.tsx +7 -1
  1064. package/src/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.tsx +0 -1
  1065. package/src/components/MessageInput/components/NativeAttachmentPicker.tsx +8 -1
  1066. package/src/components/MessageInput/hooks/useAudioController.tsx +4 -7
  1067. package/src/components/MessageList/MessageList.tsx +53 -83
  1068. package/src/components/MessageList/ScrollToBottomButton.tsx +1 -1
  1069. package/src/components/MessageList/__tests__/MessageList.test.js +174 -23
  1070. package/src/components/MessageList/__tests__/ScrollToBottomButton.test.js +3 -3
  1071. package/src/components/MessageList/__tests__/__snapshots__/ScrollToBottomButton.test.js.snap +1 -1
  1072. package/src/components/MessageList/hooks/useMessageList.ts +2 -5
  1073. package/src/components/MessageList/utils/getReadStates.ts +3 -2
  1074. package/src/components/MessageMenu/MessageActionList.tsx +49 -0
  1075. package/src/components/MessageMenu/MessageActionListItem.tsx +86 -0
  1076. package/src/components/MessageMenu/MessageMenu.tsx +123 -0
  1077. package/src/components/MessageMenu/MessageReactionPicker.tsx +122 -0
  1078. package/src/components/MessageMenu/MessageUserReactions.tsx +207 -0
  1079. package/src/components/{MessageOverlay/OverlayReactionsAvatar.tsx → MessageMenu/MessageUserReactionsAvatar.tsx} +6 -6
  1080. package/src/components/MessageMenu/MessageUserReactionsItem.tsx +132 -0
  1081. package/src/components/MessageMenu/ReactionButton.tsx +72 -0
  1082. package/src/components/MessageMenu/__tests__/MessageActionList.test.tsx +48 -0
  1083. package/src/components/MessageMenu/__tests__/MessageActionListItem.test.tsx +48 -0
  1084. package/src/components/MessageMenu/__tests__/MessageReactionPicker.test.tsx +101 -0
  1085. package/src/components/MessageMenu/__tests__/MessageUserReactions.test.tsx +186 -0
  1086. package/src/components/MessageMenu/__tests__/MessageUserReactionsAvatar.test.tsx +35 -0
  1087. package/src/components/MessageMenu/__tests__/MessageUserReactionsItem.test.tsx +81 -0
  1088. package/src/components/MessageMenu/__tests__/ReactionButton.test.tsx +77 -0
  1089. package/src/components/{MessageOverlay → MessageMenu}/hooks/useFetchReactions.ts +4 -2
  1090. package/src/components/Poll/CreatePollContent.tsx +4 -4
  1091. package/src/components/Poll/Poll.tsx +1 -20
  1092. package/src/components/Poll/components/Button.tsx +8 -420
  1093. package/src/components/Poll/components/CreatePollIcon.tsx +1 -1
  1094. package/src/components/Poll/components/CreatePollOptions.tsx +9 -4
  1095. package/src/components/Poll/components/PollAnswersList.tsx +66 -3
  1096. package/src/components/Poll/components/PollButtons.tsx +241 -0
  1097. package/src/components/Poll/components/PollInputDialog.tsx +9 -6
  1098. package/src/components/Poll/components/PollModalHeader.tsx +3 -3
  1099. package/src/components/Poll/components/PollOption.tsx +74 -4
  1100. package/src/components/Poll/components/PollResults/PollOptionFullResults.tsx +1 -1
  1101. package/src/components/Poll/components/PollResults/PollResultItem.tsx +68 -52
  1102. package/src/components/Poll/components/PollResults/PollVote.tsx +68 -0
  1103. package/src/components/Poll/components/index.ts +1 -0
  1104. package/src/components/ProgressControl/ProgressControl.tsx +28 -38
  1105. package/src/components/ProgressControl/WaveProgressBar.tsx +29 -37
  1106. package/src/components/Reply/Reply.tsx +5 -2
  1107. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +936 -796
  1108. package/src/components/UIComponents/BottomSheetModal.tsx +174 -0
  1109. package/src/components/UIComponents/index.ts +3 -0
  1110. package/src/components/docs/data.js +13 -27
  1111. package/src/components/index.ts +11 -10
  1112. package/src/contexts/__tests__/index.test.tsx +0 -5
  1113. package/src/contexts/activeChannelsRefContext/ActiveChannelsRefContext.tsx +0 -27
  1114. package/src/contexts/attachmentPickerContext/AttachmentPickerContext.tsx +1 -29
  1115. package/src/contexts/channelContext/ChannelContext.tsx +33 -79
  1116. package/src/contexts/channelsContext/ChannelsContext.tsx +1 -28
  1117. package/src/contexts/channelsStateContext/ChannelsStateContext.tsx +2 -97
  1118. package/src/contexts/channelsStateContext/useChannelState.ts +6 -108
  1119. package/src/contexts/chatConfigContext/ChatConfigContext.tsx +33 -0
  1120. package/src/contexts/chatContext/ChatContext.tsx +1 -30
  1121. package/src/contexts/imageGalleryContext/ImageGalleryContext.tsx +0 -29
  1122. package/src/contexts/index.ts +1 -1
  1123. package/src/contexts/keyboardContext/KeyboardContext.tsx +0 -30
  1124. package/src/contexts/messageContext/MessageContext.tsx +22 -75
  1125. package/src/contexts/messageInputContext/MessageInputContext.tsx +12 -39
  1126. package/src/contexts/messageInputContext/__tests__/isValidMessage.test.tsx +2 -3
  1127. package/src/contexts/messageInputContext/__tests__/uploadFile.test.tsx +1 -2
  1128. package/src/contexts/messageInputContext/__tests__/uploadImage.test.tsx +1 -2
  1129. package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +1 -5
  1130. package/src/contexts/messagesContext/MessagesContext.tsx +84 -57
  1131. package/src/contexts/overlayContext/OverlayContext.tsx +2 -55
  1132. package/src/contexts/overlayContext/OverlayProvider.tsx +23 -64
  1133. package/src/contexts/paginatedMessageListContext/PaginatedMessageListContext.tsx +18 -46
  1134. package/src/contexts/suggestionsContext/SuggestionsContext.tsx +1 -30
  1135. package/src/contexts/themeContext/utils/theme.ts +141 -92
  1136. package/src/contexts/threadContext/ThreadContext.tsx +1 -28
  1137. package/src/contexts/translationContext/TranslationContext.tsx +0 -29
  1138. package/src/contexts/typingContext/TypingContext.tsx +1 -28
  1139. package/src/hooks/__tests__/useTranslatedMessage.test.tsx +3 -9
  1140. package/src/hooks/useTranslatedMessage.ts +1 -4
  1141. package/src/icons/PinHeader.tsx +13 -7
  1142. package/src/index.ts +2 -3
  1143. package/src/mock-builders/DB/mock.ts +70 -87
  1144. package/src/native.ts +18 -29
  1145. package/src/store/SqliteClient.ts +210 -0
  1146. package/src/store/apis/addPendingTask.ts +7 -7
  1147. package/src/store/apis/deleteChannel.ts +4 -4
  1148. package/src/store/apis/deleteMember.ts +4 -4
  1149. package/src/store/apis/deleteMessage.ts +4 -4
  1150. package/src/store/apis/deleteMessagesForChannel.ts +4 -4
  1151. package/src/store/apis/deletePendingTask.ts +4 -4
  1152. package/src/store/apis/deleteReaction.ts +4 -4
  1153. package/src/store/apis/deleteReactions.ts +3 -3
  1154. package/src/store/apis/getAllChannelIds.ts +4 -4
  1155. package/src/store/apis/getAppSettings.ts +5 -5
  1156. package/src/store/apis/getChannelMessages.ts +6 -6
  1157. package/src/store/apis/getChannels.ts +8 -8
  1158. package/src/store/apis/getChannelsForFilterSort.ts +6 -6
  1159. package/src/store/apis/getLastSyncedAt.ts +5 -5
  1160. package/src/store/apis/getMembers.ts +4 -4
  1161. package/src/store/apis/getPendingTasks.ts +4 -4
  1162. package/src/store/apis/getReactions.ts +2 -2
  1163. package/src/store/apis/getReactionsforFilterSort.ts +8 -6
  1164. package/src/store/apis/getReads.ts +4 -4
  1165. package/src/store/apis/insertReaction.ts +4 -4
  1166. package/src/store/apis/queries/selectChannelIdsForFilterSort.ts +5 -5
  1167. package/src/store/apis/queries/selectChannels.ts +6 -6
  1168. package/src/store/apis/queries/selectMembersForChannels.ts +6 -4
  1169. package/src/store/apis/queries/selectMessagesForChannels.ts +7 -5
  1170. package/src/store/apis/queries/selectReactionsForMessages.ts +5 -5
  1171. package/src/store/apis/queries/selectReadsForChannels.ts +7 -5
  1172. package/src/store/apis/updateMessage.ts +5 -5
  1173. package/src/store/apis/updatePollMessage.ts +5 -5
  1174. package/src/store/apis/updateReaction.ts +4 -4
  1175. package/src/store/apis/upsertAppSettings.ts +4 -4
  1176. package/src/store/apis/upsertChannelData.ts +5 -4
  1177. package/src/store/apis/upsertChannelDataFromChannel.ts +3 -3
  1178. package/src/store/apis/upsertChannels.ts +8 -8
  1179. package/src/store/apis/upsertCidsForQuery.ts +4 -4
  1180. package/src/store/apis/upsertMembers.ts +4 -4
  1181. package/src/store/apis/upsertMessages.ts +4 -4
  1182. package/src/store/apis/upsertReads.ts +4 -4
  1183. package/src/store/apis/upsertUserSyncStatus.ts +4 -4
  1184. package/src/test-utils/BetterSqlite.js +4 -12
  1185. package/src/types/types.ts +9 -0
  1186. package/src/utils/DBSyncManager.ts +49 -44
  1187. package/src/utils/__tests__/getResizedImageUrl.test.ts +1 -2
  1188. package/src/utils/getResizedImageUrl.ts +7 -5
  1189. package/src/utils/utils.ts +1 -1
  1190. package/src/version.json +1 -1
  1191. package/lib/commonjs/components/ImageBackground.js.map +0 -1
  1192. package/lib/commonjs/components/Message/MessageSimple/ReactionList.js +0 -305
  1193. package/lib/commonjs/components/Message/MessageSimple/ReactionList.js.map +0 -1
  1194. package/lib/commonjs/components/MessageOverlay/MessageActionList.js +0 -112
  1195. package/lib/commonjs/components/MessageOverlay/MessageActionList.js.map +0 -1
  1196. package/lib/commonjs/components/MessageOverlay/MessageActionListItem.js +0 -87
  1197. package/lib/commonjs/components/MessageOverlay/MessageActionListItem.js.map +0 -1
  1198. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +0 -461
  1199. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +0 -1
  1200. package/lib/commonjs/components/MessageOverlay/OverlayBackdrop.js +0 -24
  1201. package/lib/commonjs/components/MessageOverlay/OverlayBackdrop.js.map +0 -1
  1202. package/lib/commonjs/components/MessageOverlay/OverlayReactionList.js +0 -305
  1203. package/lib/commonjs/components/MessageOverlay/OverlayReactionList.js.map +0 -1
  1204. package/lib/commonjs/components/MessageOverlay/OverlayReactions.js +0 -188
  1205. package/lib/commonjs/components/MessageOverlay/OverlayReactions.js.map +0 -1
  1206. package/lib/commonjs/components/MessageOverlay/OverlayReactionsAvatar.js.map +0 -1
  1207. package/lib/commonjs/components/MessageOverlay/OverlayReactionsItem.js +0 -166
  1208. package/lib/commonjs/components/MessageOverlay/OverlayReactionsItem.js.map +0 -1
  1209. package/lib/commonjs/components/MessageOverlay/hooks/useFetchReactions.js.map +0 -1
  1210. package/lib/commonjs/components/MessageOverlay/hooks/useMessageActionAnimation.js +0 -34
  1211. package/lib/commonjs/components/MessageOverlay/hooks/useMessageActionAnimation.js.map +0 -1
  1212. package/lib/commonjs/components/Spinner/Spinner.js.map +0 -1
  1213. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js +0 -45
  1214. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +0 -1
  1215. package/lib/commonjs/contexts/messageOverlayContext/hooks/useResettableState.js +0 -27
  1216. package/lib/commonjs/contexts/messageOverlayContext/hooks/useResettableState.js.map +0 -1
  1217. package/lib/commonjs/contexts/messageOverlayContext/hooks/useResettableState.test.js +0 -67
  1218. package/lib/commonjs/contexts/messageOverlayContext/hooks/useResettableState.test.js.map +0 -1
  1219. package/lib/commonjs/store/QuickSqliteClient.js +0 -158
  1220. package/lib/commonjs/store/QuickSqliteClient.js.map +0 -1
  1221. package/lib/commonjs/utils/StreamChatRN.js +0 -25
  1222. package/lib/commonjs/utils/StreamChatRN.js.map +0 -1
  1223. package/lib/module/components/ImageBackground.js.map +0 -1
  1224. package/lib/module/components/Message/MessageSimple/ReactionList.js +0 -305
  1225. package/lib/module/components/Message/MessageSimple/ReactionList.js.map +0 -1
  1226. package/lib/module/components/MessageOverlay/MessageActionList.js +0 -112
  1227. package/lib/module/components/MessageOverlay/MessageActionList.js.map +0 -1
  1228. package/lib/module/components/MessageOverlay/MessageActionListItem.js +0 -87
  1229. package/lib/module/components/MessageOverlay/MessageActionListItem.js.map +0 -1
  1230. package/lib/module/components/MessageOverlay/MessageOverlay.js +0 -461
  1231. package/lib/module/components/MessageOverlay/MessageOverlay.js.map +0 -1
  1232. package/lib/module/components/MessageOverlay/OverlayBackdrop.js +0 -24
  1233. package/lib/module/components/MessageOverlay/OverlayBackdrop.js.map +0 -1
  1234. package/lib/module/components/MessageOverlay/OverlayReactionList.js +0 -305
  1235. package/lib/module/components/MessageOverlay/OverlayReactionList.js.map +0 -1
  1236. package/lib/module/components/MessageOverlay/OverlayReactions.js +0 -188
  1237. package/lib/module/components/MessageOverlay/OverlayReactions.js.map +0 -1
  1238. package/lib/module/components/MessageOverlay/OverlayReactionsAvatar.js.map +0 -1
  1239. package/lib/module/components/MessageOverlay/OverlayReactionsItem.js +0 -166
  1240. package/lib/module/components/MessageOverlay/OverlayReactionsItem.js.map +0 -1
  1241. package/lib/module/components/MessageOverlay/hooks/useFetchReactions.js.map +0 -1
  1242. package/lib/module/components/MessageOverlay/hooks/useMessageActionAnimation.js +0 -34
  1243. package/lib/module/components/MessageOverlay/hooks/useMessageActionAnimation.js.map +0 -1
  1244. package/lib/module/components/Spinner/Spinner.js.map +0 -1
  1245. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js +0 -45
  1246. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +0 -1
  1247. package/lib/module/contexts/messageOverlayContext/hooks/useResettableState.js +0 -27
  1248. package/lib/module/contexts/messageOverlayContext/hooks/useResettableState.js.map +0 -1
  1249. package/lib/module/contexts/messageOverlayContext/hooks/useResettableState.test.js +0 -67
  1250. package/lib/module/contexts/messageOverlayContext/hooks/useResettableState.test.js.map +0 -1
  1251. package/lib/module/store/QuickSqliteClient.js +0 -158
  1252. package/lib/module/store/QuickSqliteClient.js.map +0 -1
  1253. package/lib/module/utils/StreamChatRN.js +0 -25
  1254. package/lib/module/utils/StreamChatRN.js.map +0 -1
  1255. package/lib/typescript/components/ImageBackground.d.ts.map +0 -1
  1256. package/lib/typescript/components/Message/MessageSimple/ReactionList.d.ts +0 -32
  1257. package/lib/typescript/components/Message/MessageSimple/ReactionList.d.ts.map +0 -1
  1258. package/lib/typescript/components/MessageOverlay/MessageActionList.d.ts +0 -14
  1259. package/lib/typescript/components/MessageOverlay/MessageActionList.d.ts.map +0 -1
  1260. package/lib/typescript/components/MessageOverlay/MessageActionListItem.d.ts.map +0 -1
  1261. package/lib/typescript/components/MessageOverlay/MessageOverlay.d.ts +0 -15
  1262. package/lib/typescript/components/MessageOverlay/MessageOverlay.d.ts.map +0 -1
  1263. package/lib/typescript/components/MessageOverlay/OverlayBackdrop.d.ts +0 -8
  1264. package/lib/typescript/components/MessageOverlay/OverlayBackdrop.d.ts.map +0 -1
  1265. package/lib/typescript/components/MessageOverlay/OverlayReactionList.d.ts +0 -36
  1266. package/lib/typescript/components/MessageOverlay/OverlayReactionList.d.ts.map +0 -1
  1267. package/lib/typescript/components/MessageOverlay/OverlayReactions.d.ts +0 -31
  1268. package/lib/typescript/components/MessageOverlay/OverlayReactions.d.ts.map +0 -1
  1269. package/lib/typescript/components/MessageOverlay/OverlayReactionsAvatar.d.ts +0 -11
  1270. package/lib/typescript/components/MessageOverlay/OverlayReactionsAvatar.d.ts.map +0 -1
  1271. package/lib/typescript/components/MessageOverlay/OverlayReactionsItem.d.ts +0 -11
  1272. package/lib/typescript/components/MessageOverlay/OverlayReactionsItem.d.ts.map +0 -1
  1273. package/lib/typescript/components/MessageOverlay/hooks/useFetchReactions.d.ts.map +0 -1
  1274. package/lib/typescript/components/MessageOverlay/hooks/useMessageActionAnimation.d.ts +0 -11
  1275. package/lib/typescript/components/MessageOverlay/hooks/useMessageActionAnimation.d.ts.map +0 -1
  1276. package/lib/typescript/components/Spinner/Spinner.d.ts.map +0 -1
  1277. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +0 -80
  1278. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts.map +0 -1
  1279. package/lib/typescript/contexts/messageOverlayContext/hooks/useResettableState.d.ts +0 -13
  1280. package/lib/typescript/contexts/messageOverlayContext/hooks/useResettableState.d.ts.map +0 -1
  1281. package/lib/typescript/contexts/messageOverlayContext/hooks/useResettableState.test.d.ts +0 -2
  1282. package/lib/typescript/contexts/messageOverlayContext/hooks/useResettableState.test.d.ts.map +0 -1
  1283. package/lib/typescript/store/QuickSqliteClient.d.ts +0 -26
  1284. package/lib/typescript/store/QuickSqliteClient.d.ts.map +0 -1
  1285. package/lib/typescript/utils/StreamChatRN.d.ts +0 -23
  1286. package/lib/typescript/utils/StreamChatRN.d.ts.map +0 -1
  1287. package/src/components/Message/MessageSimple/ReactionList.tsx +0 -398
  1288. package/src/components/MessageOverlay/MessageActionList.tsx +0 -171
  1289. package/src/components/MessageOverlay/MessageActionListItem.tsx +0 -144
  1290. package/src/components/MessageOverlay/MessageOverlay.tsx +0 -648
  1291. package/src/components/MessageOverlay/OverlayBackdrop.tsx +0 -18
  1292. package/src/components/MessageOverlay/OverlayReactionList.tsx +0 -447
  1293. package/src/components/MessageOverlay/OverlayReactions.tsx +0 -252
  1294. package/src/components/MessageOverlay/OverlayReactionsItem.tsx +0 -188
  1295. package/src/components/MessageOverlay/hooks/useMessageActionAnimation.tsx +0 -44
  1296. package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +0 -148
  1297. package/src/contexts/messageOverlayContext/hooks/useResettableState.test.tsx +0 -48
  1298. package/src/contexts/messageOverlayContext/hooks/useResettableState.ts +0 -22
  1299. package/src/store/QuickSqliteClient.ts +0 -187
  1300. package/src/utils/StreamChatRN.ts +0 -27
  1301. /package/lib/typescript/components/{MessageOverlay → MessageMenu}/hooks/useFetchReactions.d.ts +0 -0
  1302. /package/lib/typescript/components/{ImageBackground.d.ts → UIComponents/ImageBackground.d.ts} +0 -0
  1303. /package/lib/typescript/components/{Spinner → UIComponents}/Spinner.d.ts +0 -0
  1304. /package/src/components/{ImageBackground.tsx → UIComponents/ImageBackground.tsx} +0 -0
  1305. /package/src/components/{Spinner → UIComponents}/Spinner.tsx +0 -0
@@ -1,4 +1,4 @@
1
- import React, { PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';
1
+ import React, { PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';
2
2
  import { KeyboardAvoidingViewProps, StyleSheet, Text, View } from 'react-native';
3
3
 
4
4
  import debounce from 'lodash/debounce';
@@ -11,6 +11,7 @@ import {
11
11
  ChannelState,
12
12
  Channel as ChannelType,
13
13
  EventHandler,
14
+ FormatMessageResponse,
14
15
  logChatPromiseExecution,
15
16
  MessageResponse,
16
17
  Reaction,
@@ -21,6 +22,7 @@ import {
21
22
  Thread,
22
23
  } from 'stream-chat';
23
24
 
25
+ import { useChannelDataState } from './hooks/useChannelDataState';
24
26
  import { useCreateChannelContext } from './hooks/useCreateChannelContext';
25
27
 
26
28
  import { useCreateInputMessageInputContext } from './hooks/useCreateInputMessageInputContext';
@@ -34,6 +36,7 @@ import { useCreateThreadContext } from './hooks/useCreateThreadContext';
34
36
 
35
37
  import { useCreateTypingContext } from './hooks/useCreateTypingContext';
36
38
 
39
+ import { useMessageListPagination } from './hooks/useMessageListPagination';
37
40
  import { useTargetedMessage } from './hooks/useTargetedMessage';
38
41
 
39
42
  import { MessageContextValue } from '../../contexts';
@@ -81,7 +84,13 @@ import {
81
84
  ThumbsUpReaction,
82
85
  WutReaction,
83
86
  } from '../../icons';
84
- import { FlatList as FlatListDefault, isImagePickerAvailable, pickDocument } from '../../native';
87
+ import {
88
+ FlatList as FlatListDefault,
89
+ isAudioRecorderAvailable,
90
+ isDocumentPickerAvailable,
91
+ isImageMediaLibraryAvailable,
92
+ isImagePickerAvailable,
93
+ } from '../../native';
85
94
  import * as dbApi from '../../store/apis';
86
95
  import { DefaultStreamChatGenerics, FileTypes } from '../../types/types';
87
96
  import { addReactionToLocalState } from '../../utils/addReactionToLocalState';
@@ -135,7 +144,8 @@ import { MessageRepliesAvatars as MessageRepliesAvatarsDefault } from '../Messag
135
144
  import { MessageSimple as MessageSimpleDefault } from '../Message/MessageSimple/MessageSimple';
136
145
  import { MessageStatus as MessageStatusDefault } from '../Message/MessageSimple/MessageStatus';
137
146
  import { MessageTimestamp as MessageTimestampDefault } from '../Message/MessageSimple/MessageTimestamp';
138
- import { ReactionList as ReactionListDefault } from '../Message/MessageSimple/ReactionList';
147
+ import { ReactionListBottom as ReactionListBottomDefault } from '../Message/MessageSimple/ReactionList/ReactionListBottom';
148
+ import { ReactionListTop as ReactionListTopDefault } from '../Message/MessageSimple/ReactionList/ReactionListTop';
139
149
  import { StreamingMessageView as DefaultStreamingMessageView } from '../Message/MessageSimple/StreamingMessageView';
140
150
  import { AttachButton as AttachButtonDefault } from '../MessageInput/AttachButton';
141
151
  import { CommandsButton as CommandsButtonDefault } from '../MessageInput/CommandsButton';
@@ -169,7 +179,13 @@ import { ScrollToBottomButton as ScrollToBottomButtonDefault } from '../MessageL
169
179
  import { StickyHeader as StickyHeaderDefault } from '../MessageList/StickyHeader';
170
180
  import { TypingIndicator as TypingIndicatorDefault } from '../MessageList/TypingIndicator';
171
181
  import { TypingIndicatorContainer as TypingIndicatorContainerDefault } from '../MessageList/TypingIndicatorContainer';
172
- import { OverlayReactionList as OverlayReactionListDefault } from '../MessageOverlay/OverlayReactionList';
182
+ import { MessageActionList as MessageActionListDefault } from '../MessageMenu/MessageActionList';
183
+ import { MessageActionListItem as MessageActionListItemDefault } from '../MessageMenu/MessageActionListItem';
184
+ import { MessageMenu as MessageMenuDefault } from '../MessageMenu/MessageMenu';
185
+ import { MessageReactionPicker as MessageReactionPickerDefault } from '../MessageMenu/MessageReactionPicker';
186
+ import { MessageUserReactions as MessageUserReactionsDefault } from '../MessageMenu/MessageUserReactions';
187
+ import { MessageUserReactionsAvatar as MessageUserReactionsAvatarDefault } from '../MessageMenu/MessageUserReactionsAvatar';
188
+ import { MessageUserReactionsItem as MessageUserReactionsItemDefault } from '../MessageMenu/MessageUserReactionsItem';
173
189
  import { Reply as ReplyDefault } from '../Reply/Reply';
174
190
 
175
191
  const styles = StyleSheet.create({
@@ -255,11 +271,11 @@ export type ChannelPropsWithContext<
255
271
  'messages' | 'loadingMore' | 'loadingMoreRecent'
256
272
  >
257
273
  > &
258
- UseChannelStateValue<StreamChatGenerics> &
274
+ Pick<UseChannelStateValue<StreamChatGenerics>, 'threadMessages' | 'setThreadMessages'> &
259
275
  Partial<
260
276
  Pick<
261
277
  MessagesContextValue<StreamChatGenerics>,
262
- | 'additionalTouchableProps'
278
+ | 'additionalPressableProps'
263
279
  | 'Attachment'
264
280
  | 'AttachmentActions'
265
281
  | 'AudioAttachment'
@@ -281,7 +297,6 @@ export type ChannelPropsWithContext<
281
297
  | 'Giphy'
282
298
  | 'giphyVersion'
283
299
  | 'handleBan'
284
- | 'handleBlock'
285
300
  | 'handleCopy'
286
301
  | 'handleDelete'
287
302
  | 'handleEdit'
@@ -300,6 +315,8 @@ export type ChannelPropsWithContext<
300
315
  | 'ImageLoadingIndicator'
301
316
  | 'markdownRules'
302
317
  | 'Message'
318
+ | 'MessageActionList'
319
+ | 'MessageActionListItem'
303
320
  | 'messageActions'
304
321
  | 'MessageAvatar'
305
322
  | 'MessageBounce'
@@ -311,6 +328,7 @@ export type ChannelPropsWithContext<
311
328
  | 'MessageFooter'
312
329
  | 'MessageHeader'
313
330
  | 'MessageList'
331
+ | 'MessageMenu'
314
332
  | 'MessagePinnedHeader'
315
333
  | 'MessageReplies'
316
334
  | 'MessageRepliesAvatars'
@@ -318,13 +336,19 @@ export type ChannelPropsWithContext<
318
336
  | 'MessageStatus'
319
337
  | 'MessageSystem'
320
338
  | 'MessageText'
339
+ | 'messageTextNumberOfLines'
321
340
  | 'MessageTimestamp'
341
+ | 'MessageUserReactions'
322
342
  | 'myMessageTheme'
323
343
  | 'onLongPressMessage'
324
344
  | 'onPressInMessage'
325
345
  | 'onPressMessage'
326
- | 'OverlayReactionList'
327
- | 'ReactionList'
346
+ | 'MessageReactionPicker'
347
+ | 'MessageUserReactionsAvatar'
348
+ | 'MessageUserReactionsItem'
349
+ | 'ReactionListBottom'
350
+ | 'reactionListPosition'
351
+ | 'ReactionListTop'
328
352
  | 'Reply'
329
353
  | 'shouldShowUnreadUnderlay'
330
354
  | 'ScrollToBottomButton'
@@ -347,10 +371,6 @@ export type ChannelPropsWithContext<
347
371
  * Additional props passed to keyboard avoiding view
348
372
  */
349
373
  additionalKeyboardAvoidingViewProps?: Partial<KeyboardAvoidingViewProps>;
350
- /**
351
- * Disables the channel UI if the channel is frozen
352
- */
353
- disableIfFrozenChannel?: boolean;
354
374
  /**
355
375
  * When true, disables the KeyboardCompatibleView wrapper
356
376
  *
@@ -418,6 +438,10 @@ export type ChannelPropsWithContext<
418
438
  * Load the channel at a specified message instead of the most recent message.
419
439
  */
420
440
  messageId?: string;
441
+ /**
442
+ * @deprecated
443
+ * The time interval for throttling while updating the message state
444
+ */
421
445
  newMessageStateUpdateThrottleInterval?: number;
422
446
  overrideOwnCapabilities?: Partial<OwnCapabilitiesContextValue>;
423
447
  stateUpdateThrottleInterval?: number;
@@ -439,8 +463,8 @@ const ChannelWithContext = <
439
463
  ) => {
440
464
  const {
441
465
  additionalKeyboardAvoidingViewProps,
466
+ additionalPressableProps,
442
467
  additionalTextInputProps,
443
- additionalTouchableProps,
444
468
  allowThreadMessagesInChannel = true,
445
469
  asyncMessagesLockDistance = 50,
446
470
  asyncMessagesMinimumPressDuration = 500,
@@ -452,7 +476,7 @@ const ChannelWithContext = <
452
476
  AudioAttachment = AudioAttachmentDefault,
453
477
  AudioAttachmentUploadPreview = AudioAttachmentDefault,
454
478
  AudioRecorder = AudioRecorderDefault,
455
- audioRecordingEnabled = false,
479
+ audioRecordingEnabled = isAudioRecorderAvailable(),
456
480
  AudioRecordingInProgress = AudioRecordingInProgressDefault,
457
481
  AudioRecordingLockIndicator = AudioRecordingLockIndicatorDefault,
458
482
  AudioRecordingPreview = AudioRecordingPreviewDefault,
@@ -475,7 +499,6 @@ const ChannelWithContext = <
475
499
  CreatePollContent,
476
500
  DateHeader = DateHeaderDefault,
477
501
  deletedMessagesVisibilityType = 'always',
478
- disableIfFrozenChannel = true,
479
502
  disableKeyboardCompatibleView = false,
480
503
  disableTypingIndicator,
481
504
  dismissKeyboardOnMessageTouch = true,
@@ -502,7 +525,6 @@ const ChannelWithContext = <
502
525
  giphyVersion = 'fixed_height',
503
526
  handleAttachButtonPress,
504
527
  handleBan,
505
- handleBlock,
506
528
  handleCopy,
507
529
  handleDelete,
508
530
  handleEdit,
@@ -513,12 +535,12 @@ const ChannelWithContext = <
513
535
  handleReaction,
514
536
  handleRetry,
515
537
  handleThreadReply,
516
- // If pickDocument isn't available, default to hiding the file picker
517
538
  hasCameraPicker = isImagePickerAvailable(),
518
539
  hasCommands = true,
519
540
  hasCreatePoll,
520
- hasFilePicker = pickDocument !== null,
521
- hasImagePicker = true,
541
+ // If pickDocument isn't available, default to hiding the file picker
542
+ hasFilePicker = isDocumentPickerAvailable(),
543
+ hasImagePicker = isImagePickerAvailable() || isImageMediaLibraryAvailable(),
522
544
  hideDateSeparators = false,
523
545
  hideStickyDateHeader = false,
524
546
  ImageLoadingFailedIndicator = ImageLoadingFailedIndicatorDefault,
@@ -547,10 +569,11 @@ const ChannelWithContext = <
547
569
  maxMessageLength: maxMessageLengthProp,
548
570
  maxNumberOfFiles = 10,
549
571
  maxTimeBetweenGroupedMessages,
550
- members,
551
572
  mentionAllAppUsersEnabled = false,
552
573
  mentionAllAppUsersQuery,
553
574
  Message = MessageDefault,
575
+ MessageActionList = MessageActionListDefault,
576
+ MessageActionListItem = MessageActionListItemDefault,
554
577
  messageActions,
555
578
  MessageAvatar = MessageAvatarDefault,
556
579
  MessageBounce = MessageBounceDefault,
@@ -571,18 +594,24 @@ const ChannelWithContext = <
571
594
  MessageHeader,
572
595
  messageId,
573
596
  MessageList = MessageListDefault,
597
+ MessageMenu = MessageMenuDefault,
574
598
  MessagePinnedHeader = MessagePinnedHeaderDefault,
599
+ MessageReactionPicker = MessageReactionPickerDefault,
575
600
  MessageReplies = MessageRepliesDefault,
576
601
  MessageRepliesAvatars = MessageRepliesAvatarsDefault,
577
- messages,
578
602
  MessageSimple = MessageSimpleDefault,
579
603
  MessageStatus = MessageStatusDefault,
580
604
  MessageSystem = MessageSystemDefault,
581
605
  MessageText,
606
+ messageTextNumberOfLines,
582
607
  MessageTimestamp = MessageTimestampDefault,
608
+ MessageUserReactions = MessageUserReactionsDefault,
609
+ MessageUserReactionsAvatar = MessageUserReactionsAvatarDefault,
610
+ MessageUserReactionsItem = MessageUserReactionsItemDefault,
583
611
  MoreOptionsButton = MoreOptionsButtonDefault,
584
612
  myMessageTheme,
585
613
  NetworkDownIndicator = NetworkDownIndicatorDefault,
614
+ // TODO: Think about this one
586
615
  newMessageStateUpdateThrottleInterval = defaultThrottleInterval,
587
616
  numberOfLines = 5,
588
617
  onChangeText,
@@ -590,11 +619,11 @@ const ChannelWithContext = <
590
619
  onPressInMessage,
591
620
  onPressMessage,
592
621
  openPollCreationDialog,
593
- OverlayReactionList = OverlayReactionListDefault,
594
622
  overrideOwnCapabilities,
595
623
  PollContent,
596
- ReactionList = ReactionListDefault,
597
- read,
624
+ ReactionListBottom = ReactionListBottomDefault,
625
+ reactionListPosition = 'top',
626
+ ReactionListTop = ReactionListTopDefault,
598
627
  Reply = ReplyDefault,
599
628
  ScrollToBottomButton = ScrollToBottomButtonDefault,
600
629
  selectReaction,
@@ -602,13 +631,7 @@ const ChannelWithContext = <
602
631
  sendImageAsync = false,
603
632
  SendMessageDisallowedIndicator = SendMessageDisallowedIndicatorDefault,
604
633
  setInputRef,
605
- setMembers,
606
- setMessages,
607
- setRead,
608
634
  setThreadMessages,
609
- setTyping,
610
- setWatcherCount,
611
- setWatchers,
612
635
  shouldShowUnreadUnderlay = true,
613
636
  shouldSyncChannel,
614
637
  ShowThreadMessageInChannelButton = ShowThreadMessageInChannelButtonDefault,
@@ -622,14 +645,11 @@ const ChannelWithContext = <
622
645
  thread: threadFromProps,
623
646
  threadList,
624
647
  threadMessages,
625
- typing,
626
648
  TypingIndicator = TypingIndicatorDefault,
627
649
  TypingIndicatorContainer = TypingIndicatorContainerDefault,
628
650
  UploadProgressIndicator = UploadProgressIndicatorDefault,
629
651
  UrlPreview = CardDefault,
630
652
  VideoThumbnail = VideoThumbnailDefault,
631
- watcherCount,
632
- watchers,
633
653
  } = props;
634
654
 
635
655
  const { thread: threadProps, threadInstance } = threadFromProps;
@@ -644,17 +664,12 @@ const ChannelWithContext = <
644
664
  colors: { black },
645
665
  },
646
666
  } = useTheme();
647
- const [deleted, setDeleted] = useState(false);
667
+ const [deleted, setDeleted] = useState<boolean>(false);
648
668
  const [editing, setEditing] = useState<MessageType<StreamChatGenerics> | undefined>(undefined);
649
669
  const [error, setError] = useState<Error | boolean>(false);
650
- const [hasMore, setHasMore] = useState(true);
651
670
  const [lastRead, setLastRead] = useState<ChannelContextValue<StreamChatGenerics>['lastRead']>();
652
- const [loading, setLoading] = useState(false);
653
- const [loadingMore, setLoadingMore] = useState(false);
654
-
655
- const [loadingMoreRecent, setLoadingMoreRecent] = useState(false);
656
- const [quotedMessage, setQuotedMessage] = useState<boolean | MessageType<StreamChatGenerics>>(
657
- false,
671
+ const [quotedMessage, setQuotedMessage] = useState<MessageType<StreamChatGenerics> | undefined>(
672
+ undefined,
658
673
  );
659
674
  const [thread, setThread] = useState<MessageType<StreamChatGenerics> | null>(threadProps || null);
660
675
  const [threadHasMore, setThreadHasMore] = useState(true);
@@ -662,19 +677,7 @@ const ChannelWithContext = <
662
677
 
663
678
  const syncingChannelRef = useRef(false);
664
679
 
665
- /**
666
- * Flag to track if we know for sure that there are no more recent messages to load.
667
- * This is necessary to avoid unnecessary api calls to load recent messages on pagination.
668
- */
669
- const [hasNoMoreRecentMessagesToLoad, setHasNoMoreRecentMessagesToLoad] = useState(true);
670
-
671
- const { prevTargetedMessage, setTargetedMessage, targetedMessage } = useTargetedMessage();
672
-
673
- /**
674
- * If we loaded a channel around message
675
- * We may have moved latest message to a new message set in that case mark this ref to avoid fetching
676
- */
677
- const hasOverlappingRecentMessagesRef = useRef(false);
680
+ const { setTargetedMessage, targetedMessage } = useTargetedMessage();
678
681
 
679
682
  /**
680
683
  * This ref will hold the abort controllers for
@@ -686,50 +689,142 @@ const ChannelWithContext = <
686
689
  const channelId = channel?.id || '';
687
690
  const pollCreationEnabled = !channel.disconnected && !!channel?.id && channel?.getConfig()?.polls;
688
691
 
692
+ const {
693
+ copyStateFromChannel,
694
+ initStateFromChannel,
695
+ setTyping,
696
+ state: channelState,
697
+ } = useChannelDataState<StreamChatGenerics>(channel);
698
+
699
+ const {
700
+ copyMessagesStateFromChannel,
701
+ loadChannelAroundMessage: loadChannelAroundMessageFn,
702
+ loadChannelAtFirstUnreadMessage,
703
+ loadInitialMessagesStateFromChannel,
704
+ loadLatestMessages,
705
+ loadMore,
706
+ loadMoreRecent,
707
+ state: channelMessagesState,
708
+ } = useMessageListPagination<StreamChatGenerics>({
709
+ channel,
710
+ });
711
+
712
+ /**
713
+ * Since we copy the current channel state all together, we need to find the greatest time among the below two and apply it as the throttling time for copying the channel state.
714
+ * This is done until we remove the newMessageStateUpdateThrottleInterval prop.
715
+ */
716
+ const copyChannelStateThrottlingTime =
717
+ newMessageStateUpdateThrottleInterval > stateUpdateThrottleInterval
718
+ ? newMessageStateUpdateThrottleInterval
719
+ : stateUpdateThrottleInterval;
720
+
721
+ const copyChannelState = useRef(
722
+ throttle(
723
+ () => {
724
+ if (channel) {
725
+ copyStateFromChannel(channel);
726
+ copyMessagesStateFromChannel(channel);
727
+ }
728
+ },
729
+ copyChannelStateThrottlingTime,
730
+ throttleOptions,
731
+ ),
732
+ ).current;
733
+
734
+ const handleEvent: EventHandler<StreamChatGenerics> = (event) => {
735
+ if (shouldSyncChannel) {
736
+ // Ignore user.watching.start and user.watching.stop events
737
+ const ignorableEvents = ['user.watching.start', 'user.watching.stop'];
738
+ if (ignorableEvents.includes(event.type)) return;
739
+
740
+ // If the event is typing.start or typing.stop, set the typing state
741
+ const isTypingEvent = event.type === 'typing.start' || event.type === 'typing.stop';
742
+ if (isTypingEvent) {
743
+ setTyping(channel);
744
+ } else {
745
+ if (thread?.id) {
746
+ const updatedThreadMessages =
747
+ (thread.id && channel && channel.state.threads[thread.id]) || threadMessages;
748
+ setThreadMessages(updatedThreadMessages);
749
+
750
+ if (channel && event.message?.id === thread.id && !threadInstance) {
751
+ const updatedThread = channel.state.formatMessage(event.message);
752
+ setThread(updatedThread);
753
+ }
754
+ }
755
+ }
756
+
757
+ // only update channel state if the events are not the previously subscribed useEffect's subscription events
758
+ if (channel && channel.initialized) {
759
+ copyChannelState();
760
+ }
761
+ }
762
+ };
763
+
689
764
  useEffect(() => {
765
+ let listener: ReturnType<typeof channel.on>;
690
766
  const initChannel = async () => {
691
767
  if (!channel || !shouldSyncChannel || channel.offlineMode) return;
692
- /**
693
- * Loading channel at first unread message requires channel to be initialized in the first place,
694
- * since we use read state on channel to decide what offset to load channel at.
695
- * Also there is no use case from UX perspective, why one would need loading uninitialized channel at particular message.
696
- * If the channel is not initiated, then we need to do channel.watch, which is more expensive for backend than channel.query.
697
- */
698
- if (!channel.initialized) {
699
- await loadChannel();
768
+ let errored = false;
769
+
770
+ if (!channel.initialized || !channel.state.isUpToDate) {
771
+ try {
772
+ await channel?.watch();
773
+ } catch (err) {
774
+ console.warn('Channel watch request failed with error:', err);
775
+ setError(true);
776
+ errored = true;
777
+ }
700
778
  }
701
779
 
702
- if (messageId) {
703
- loadChannelAroundMessage({ messageId });
780
+ if (!errored) {
781
+ initStateFromChannel(channel);
782
+ loadInitialMessagesStateFromChannel(channel, channel.state.messagePagination.hasPrev);
704
783
  }
705
- // The condition, where if the count of unread messages is greater than 4, then scroll to the first unread message.
706
- else if (
784
+
785
+ if (messageId) {
786
+ await loadChannelAroundMessage({ messageId, setTargetedMessage });
787
+ } else if (
707
788
  initialScrollToFirstUnreadMessage &&
708
789
  channel.countUnread() > scrollToFirstUnreadThreshold
709
790
  ) {
710
- loadChannelAtFirstUnreadMessage();
711
- }
712
- // If the messageId is undefined and the last message and the current message id do not match we load the channel at the very bottom.
713
- else if (
714
- channel.state.messages?.[channel.state.messages.length - 1]?.id !==
715
- channel.state.latestMessages?.[channel.state.latestMessages.length - 1]?.id &&
716
- !messageId
717
- ) {
718
- await loadChannel();
791
+ await loadChannelAtFirstUnreadMessage({ setTargetedMessage });
719
792
  }
793
+ listener = channel.on(handleEvent);
720
794
  };
721
795
 
722
796
  initChannel();
723
797
 
724
798
  return () => {
725
799
  copyChannelState.cancel();
726
- copyReadState.cancel();
727
- copyTypingState.cancel();
728
- loadMoreFinished.cancel();
729
800
  loadMoreThreadFinished.cancel();
801
+ listener?.unsubscribe();
730
802
  };
731
803
  // eslint-disable-next-line react-hooks/exhaustive-deps
732
- }, [channelId, messageId]);
804
+ }, [channel.cid, messageId, shouldSyncChannel]);
805
+
806
+ // subscribe to channel.deleted event
807
+ useEffect(() => {
808
+ const { unsubscribe } = client.on('channel.deleted', (event) => {
809
+ if (event.cid === channel?.cid) {
810
+ setDeleted(true);
811
+ }
812
+ });
813
+
814
+ return unsubscribe;
815
+ }, [channel?.cid, client]);
816
+
817
+ /**
818
+ * Subscription to the Notification mark_read event.
819
+ */
820
+ useEffect(() => {
821
+ const handleEvent: EventHandler<StreamChatGenerics> = (event) => {
822
+ if (channel.cid === event.cid) copyChannelState();
823
+ };
824
+
825
+ const { unsubscribe } = client.on('notification.mark_read', handleEvent);
826
+ return unsubscribe;
827
+ }, [channel.cid, client, copyChannelState]);
733
828
 
734
829
  const threadPropsExists = !!threadProps;
735
830
 
@@ -760,17 +855,6 @@ const ChannelWithContext = <
760
855
 
761
856
  useAppStateListener(undefined, handleAppBackground);
762
857
 
763
- /**
764
- * CHANNEL CONSTANTS
765
- */
766
- const isAdmin = client?.user?.role === 'admin' || channel?.state.membership.role === 'admin';
767
-
768
- const isModerator =
769
- channel?.state.membership.role === 'channel_moderator' ||
770
- channel?.state.membership.role === 'moderator';
771
-
772
- const isOwner = channel?.state.membership.role === 'owner';
773
-
774
858
  /**
775
859
  * CHANNEL METHODS
776
860
  */
@@ -792,464 +876,6 @@ const ChannelWithContext = <
792
876
  ),
793
877
  ).current;
794
878
 
795
- const copyMessagesState = useRef(
796
- throttle(
797
- () => {
798
- if (channel) {
799
- clearInterval(mergeSetsIntervalRef.current);
800
- setMessages(channel.state.messages);
801
- restartSetsMergeFuncRef.current();
802
- }
803
- },
804
- newMessageStateUpdateThrottleInterval,
805
- throttleOptions,
806
- ),
807
- ).current;
808
-
809
- const copyTypingState = useRef(
810
- throttle(
811
- () => {
812
- if (channel) {
813
- setTyping({ ...channel.state.typing });
814
- }
815
- },
816
- stateUpdateThrottleInterval,
817
- throttleOptions,
818
- ),
819
- ).current;
820
-
821
- const copyReadState = useRef(
822
- throttle(
823
- () => {
824
- if (channel) {
825
- setRead({ ...channel.state.read });
826
- }
827
- },
828
- stateUpdateThrottleInterval,
829
- throttleOptions,
830
- ),
831
- ).current;
832
-
833
- const copyChannelState = useRef(
834
- throttle(
835
- () => {
836
- setLoading(false);
837
- if (channel) {
838
- setMembers({ ...channel.state.members });
839
- setMessages([...channel.state.messages]);
840
- setRead({ ...channel.state.read });
841
- setTyping({ ...channel.state.typing });
842
- setWatcherCount(channel.state.watcher_count);
843
- setWatchers({ ...channel.state.watchers });
844
- }
845
- },
846
- stateUpdateThrottleInterval,
847
- throttleOptions,
848
- ),
849
- ).current;
850
-
851
- // subscribe to specific channel events
852
- useEffect(() => {
853
- const channelSubscriptions: Array<ReturnType<ChannelType['on']>> = [];
854
- if (channel && shouldSyncChannel) {
855
- channelSubscriptions.push(channel.on('message.new', copyMessagesState));
856
- channelSubscriptions.push(channel.on('message.read', copyReadState));
857
- channelSubscriptions.push(channel.on('typing.start', copyTypingState));
858
- channelSubscriptions.push(channel.on('typing.stop', copyTypingState));
859
- }
860
- return () => {
861
- channelSubscriptions.forEach((s) => s.unsubscribe());
862
- };
863
- // eslint-disable-next-line react-hooks/exhaustive-deps
864
- }, [channelId, shouldSyncChannel]);
865
-
866
- // subscribe to the generic all channel event
867
- useEffect(() => {
868
- const handleEvent: EventHandler<StreamChatGenerics> = (event) => {
869
- const ignorableEvents = ['user.watching.start', 'user.watching.stop'];
870
- if (ignorableEvents.includes(event.type)) return;
871
- if (shouldSyncChannel) {
872
- const isTypingEvent = event.type === 'typing.start' || event.type === 'typing.stop';
873
- if (!isTypingEvent) {
874
- if (thread?.id) {
875
- const updatedThreadMessages =
876
- (thread.id && channel && channel.state.threads[thread.id]) || threadMessages;
877
- setThreadMessages(updatedThreadMessages);
878
- }
879
-
880
- if (channel && thread?.id && event.message?.id === thread.id && !threadInstance) {
881
- const updatedThread = channel.state.formatMessage(event.message);
882
- setThread(updatedThread);
883
- }
884
- }
885
-
886
- // only update channel state if the events are not the previously subscribed useEffect's subscription events
887
- if (
888
- channel &&
889
- channel.initialized &&
890
- event.type !== 'message.new' &&
891
- event.type !== 'message.read' &&
892
- event.type !== 'typing.start' &&
893
- event.type !== 'typing.stop'
894
- ) {
895
- copyChannelState();
896
- }
897
- }
898
- };
899
- const { unsubscribe } = channel.on(handleEvent);
900
- return unsubscribe;
901
- // eslint-disable-next-line react-hooks/exhaustive-deps
902
- }, [channelId, thread?.id, shouldSyncChannel]);
903
-
904
- // subscribe to channel.deleted event
905
- useEffect(() => {
906
- const { unsubscribe } = client.on('channel.deleted', (event) => {
907
- if (event.cid === channel?.cid) {
908
- setDeleted(true);
909
- }
910
- });
911
-
912
- return unsubscribe;
913
- // eslint-disable-next-line react-hooks/exhaustive-deps
914
- }, [channelId]);
915
-
916
- useEffect(() => {
917
- const handleEvent: EventHandler<StreamChatGenerics> = (event) => {
918
- if (channel.cid === event.cid) copyChannelState();
919
- };
920
-
921
- const { unsubscribe } = client.on('notification.mark_read', handleEvent);
922
- return unsubscribe;
923
- // eslint-disable-next-line react-hooks/exhaustive-deps
924
- }, []);
925
-
926
- const channelQueryCallRef = useRef(
927
- async (
928
- queryCall: () => Promise<void>,
929
- onAfterQueryCall: (() => void) | undefined = undefined,
930
- // if we are scrolling to a message after the query, pass it here
931
- scrollToMessageId: string | (() => string | undefined) | undefined = undefined,
932
- ) => {
933
- setError(false);
934
- try {
935
- clearInterval(mergeSetsIntervalRef.current);
936
- await queryCall();
937
- setLastRead(new Date());
938
- setHasMore(true);
939
- const currentMessages = channel.state.messages;
940
- const hadCurrentLatestMessages =
941
- currentMessages.length > 0 && currentMessages === channel.state.latestMessages;
942
- if (typeof scrollToMessageId === 'function') {
943
- scrollToMessageId = scrollToMessageId();
944
- }
945
-
946
- const scrollToMessageIndex = scrollToMessageId
947
- ? currentMessages.findIndex(({ id }) => id === scrollToMessageId)
948
- : -1;
949
- if (channel && scrollToMessageIndex !== -1) {
950
- copyChannelState.cancel();
951
- // We assume that on average user sees 5 messages on screen
952
- // We dont want new renders to happen while scrolling to the targeted message
953
- // hence we limit the number of messages to be rendered after the targeted message to 5 - 1 = 4
954
- // NOTE: we have one drawback here, if there were already a split latest and current message set
955
- // the previous latest message set will be thrown away as we cannot merge it with the current message set after the target message is set
956
- const limitAfter = 4;
957
- const currentLength = currentMessages.length;
958
- const noOfMessagesAfter = currentLength - scrollToMessageIndex - 1;
959
- // number of messages are over the limit, limit the length of messages
960
- if (noOfMessagesAfter > limitAfter) {
961
- const endIndex = scrollToMessageIndex + limitAfter;
962
- channel.state.clearMessages();
963
- channel.state.messages = currentMessages.slice(0, endIndex + 1);
964
- splitLatestCurrentMessageSetRef.current();
965
- const restOfMessages = currentMessages.slice(endIndex + 1);
966
- if (hadCurrentLatestMessages) {
967
- const latestSet = channel.state.messageSets.find((set) => set.isLatest);
968
- if (latestSet) {
969
- latestSet.messages = restOfMessages;
970
- hasOverlappingRecentMessagesRef.current = true;
971
- }
972
- }
973
- }
974
- }
975
- const hasLatestMessages = channel.state.latestMessages.length > 0;
976
- channel.state.setIsUpToDate(hasLatestMessages);
977
- setHasNoMoreRecentMessagesToLoad(hasLatestMessages);
978
- copyChannelState();
979
- if (scrollToMessageIndex !== -1) {
980
- // since we need to scroll after immediately do this without throttle
981
- copyChannelState.flush();
982
- }
983
- onAfterQueryCall?.();
984
- } catch (err) {
985
- if (err instanceof Error) {
986
- setError(err);
987
- } else {
988
- setError(true);
989
- }
990
- setLoading(false);
991
- setLastRead(new Date());
992
- }
993
- },
994
- );
995
-
996
- /**
997
- * Loads channel at first unread message.
998
- */
999
- const loadChannelAtFirstUnreadMessage = () => {
1000
- if (!channel) return;
1001
- let unreadMessageIdToScrollTo: string | undefined;
1002
- // query for messages around the last read date
1003
- return channelQueryCallRef.current(
1004
- async () => {
1005
- const unreadCount = channel.countUnread();
1006
- if (unreadCount === 0) return;
1007
- const isLatestMessageSetShown = !!channel.state.messageSets.find(
1008
- (set) => set.isCurrent && set.isLatest,
1009
- );
1010
- if (isLatestMessageSetShown && unreadCount <= channel.state.messages.length) {
1011
- unreadMessageIdToScrollTo =
1012
- channel.state.messages[channel.state.messages.length - unreadCount].id;
1013
- return;
1014
- }
1015
- const lastReadDate = channel.lastRead();
1016
-
1017
- // if last read date is present we can just fetch messages around that date
1018
- // last read date not being present is an edge case if somewhere the user of SDK deletes the read state (this will usually never happen)
1019
- if (lastReadDate) {
1020
- setLoading(true);
1021
- // get totally 30 messages... max 15 before last read date and max 15 after last read date
1022
- // ref: https://github.com/GetStream/chat/pull/2588
1023
- const res = await channel.query(
1024
- {
1025
- messages: {
1026
- created_at_around: lastReadDate,
1027
- limit: 30,
1028
- },
1029
- watch: true,
1030
- },
1031
- 'new',
1032
- );
1033
- unreadMessageIdToScrollTo = res.messages.find(
1034
- (m) => lastReadDate < (m.created_at ? new Date(m.created_at) : new Date()),
1035
- )?.id;
1036
- if (unreadMessageIdToScrollTo) {
1037
- channel.state.loadMessageIntoState(unreadMessageIdToScrollTo);
1038
- }
1039
- } else {
1040
- await loadLatestMessagesRef.current();
1041
- }
1042
- },
1043
- () => {
1044
- if (unreadMessageIdToScrollTo) {
1045
- restartSetsMergeFuncRef.current();
1046
- }
1047
- },
1048
- () => unreadMessageIdToScrollTo,
1049
- );
1050
- };
1051
-
1052
- /**
1053
- * Loads channel around a specific message
1054
- *
1055
- * @param messageId If undefined, channel will be loaded at most recent message.
1056
- */
1057
- const loadChannelAroundMessage: ChannelContextValue<StreamChatGenerics>['loadChannelAroundMessage'] =
1058
- async ({ messageId: messageIdToLoadAround }) => {
1059
- if (thread) {
1060
- if (messageIdToLoadAround) {
1061
- setThreadLoadingMore(true);
1062
- try {
1063
- await channel.state.loadMessageIntoState(messageIdToLoadAround, thread.id);
1064
- setThreadLoadingMore(false);
1065
- setThreadMessages(channel.state.threads[thread.id]);
1066
- setTargetedMessage(messageIdToLoadAround);
1067
- } catch (err) {
1068
- if (err instanceof Error) {
1069
- setError(err);
1070
- } else {
1071
- setError(true);
1072
- }
1073
- setThreadLoadingMore(false);
1074
- }
1075
- }
1076
- } else {
1077
- await channelQueryCallRef.current(
1078
- async () => {
1079
- setLoading(true);
1080
- if (messageIdToLoadAround) {
1081
- setMessages([]);
1082
- await channel.state.loadMessageIntoState(messageIdToLoadAround);
1083
- const currentMessageSet = channel.state.messageSets.find((set) => set.isCurrent);
1084
- if (currentMessageSet && !currentMessageSet?.isLatest) {
1085
- // if the current message set is not the latest, we will throw away the latest messages
1086
- // in order to attempt to not throw away, will attempt to merge it by loading 25 more messages
1087
- const recentCurrentSetMsgId =
1088
- currentMessageSet.messages[currentMessageSet.messages.length - 1].id;
1089
- await channel.query(
1090
- {
1091
- messages: {
1092
- id_gte: recentCurrentSetMsgId,
1093
- limit: 25,
1094
- },
1095
- },
1096
- 'current',
1097
- );
1098
- // if the gap is more than 25, we will unfortunately have to throw away the latest messages
1099
- }
1100
- }
1101
- },
1102
- () => {
1103
- if (messageIdToLoadAround) {
1104
- clearInterval(mergeSetsIntervalRef.current); // do not merge sets as we will scroll/highlight to the message
1105
- setTargetedMessage(messageIdToLoadAround);
1106
- }
1107
- },
1108
- messageIdToLoadAround,
1109
- );
1110
- }
1111
- };
1112
-
1113
- useEffect(() => {
1114
- if (!targetedMessage && prevTargetedMessage) {
1115
- // we cleared the merge sets interval to wait for the targeted message to be set
1116
- // now restart it since its done
1117
- restartSetsMergeFuncRef.current();
1118
- }
1119
- // eslint-disable-next-line react-hooks/exhaustive-deps
1120
- }, [targetedMessage]);
1121
-
1122
- /**
1123
- * @deprecated use loadChannelAroundMessage instead
1124
- *
1125
- * Loads channel at specific message
1126
- *
1127
- * @param messageId If undefined, channel will be loaded at most recent message.
1128
- * @param before Number of message to query before messageId
1129
- * @param after Number of message to query after messageId
1130
- */
1131
- const loadChannelAtMessage: ChannelContextValue<StreamChatGenerics>['loadChannelAtMessage'] = ({
1132
- after = 2,
1133
- before = 30,
1134
- messageId,
1135
- }) =>
1136
- channelQueryCallRef.current(async () => {
1137
- await queryAtMessage({ after, before, messageId });
1138
-
1139
- if (messageId) {
1140
- setTargetedMessage(messageId);
1141
- }
1142
- });
1143
-
1144
- /**
1145
- * Utility method to mark that current set if latest into two.
1146
- * With an empty latest set
1147
- * This is useful when we know that we dont know the latest messages anymore
1148
- * Or if we are loading a channel around a message
1149
- */
1150
- const splitLatestCurrentMessageSetRef = useRef(() => {
1151
- const currentLatestSet = channel.state.messageSets.find((set) => set.isCurrent && set.isLatest);
1152
- if (!currentLatestSet) return;
1153
- // unmark the current latest set
1154
- currentLatestSet.isLatest = false;
1155
- // create a new set with empty latest messages
1156
- channel.state.messageSets.push({
1157
- isCurrent: false,
1158
- isLatest: true,
1159
- messages: [],
1160
- pagination: {
1161
- hasNext: true,
1162
- hasPrev: true,
1163
- },
1164
- });
1165
- });
1166
-
1167
- /**
1168
- * Utility method to merge current and latest message set.
1169
- * Returns true if merge was successful, false otherwise.
1170
- */
1171
- const mergeOverlappingMessageSetsRef = useRef((limitToMaxRenderPerBatch = false) => {
1172
- if (hasOverlappingRecentMessagesRef.current) {
1173
- const limit = 5; // 5 is the load to recent limit, a larger value seems to cause jumpiness in some devices..
1174
- // merge current and latest sets
1175
- const latestMessageSet = channel.state.messageSets.find((set) => set.isLatest);
1176
- const currentMessageSet = channel.state.messageSets.find((set) => set.isCurrent);
1177
- if (latestMessageSet && currentMessageSet && latestMessageSet !== currentMessageSet) {
1178
- if (limitToMaxRenderPerBatch && latestMessageSet.messages.length > limit) {
1179
- currentMessageSet.messages = currentMessageSet.messages.concat(
1180
- latestMessageSet.messages.slice(0, limit),
1181
- );
1182
- latestMessageSet.messages = latestMessageSet.messages.slice(limit);
1183
- } else {
1184
- channel.state.messageSets = channel.state.messageSets.filter((set) => !set.isLatest);
1185
- currentMessageSet.messages = currentMessageSet.messages.concat(latestMessageSet.messages);
1186
- currentMessageSet.isLatest = true;
1187
- hasOverlappingRecentMessagesRef.current = false;
1188
- clearInterval(mergeSetsIntervalRef.current);
1189
- }
1190
- return true;
1191
- }
1192
- }
1193
- return false;
1194
- });
1195
-
1196
- const mergeSetsIntervalRef = useRef<NodeJS.Timeout>();
1197
-
1198
- // clear the interval on unmount
1199
- useEffect(
1200
- () => () => {
1201
- clearInterval(mergeSetsIntervalRef.current);
1202
- },
1203
- [],
1204
- );
1205
-
1206
- // if we had split the latest and current message set, we try to merge them back
1207
- // temporarily commented out the interval as it was causing issues with jankiness during scrolling
1208
- const restartSetsMergeFuncRef = useRef(() => {
1209
- clearInterval(mergeSetsIntervalRef.current);
1210
- if (!hasOverlappingRecentMessagesRef.current) return;
1211
- // mergeSetsIntervalRef.current = setInterval(() => {
1212
- // const currentLength = channel.state.messages.length || 0;
1213
- // const didMerge = mergeOverlappingMessageSetsRef.current(true);
1214
- // if (didMerge && channel.state.messages.length !== currentLength) {
1215
- // setMessages(channel.state.messages);
1216
- // }
1217
- // }, 1000);
1218
- });
1219
-
1220
- /**
1221
- * Shows the latest messages from the channel state
1222
- * If recent messages are empty, fetches new
1223
- * @param clearLatest If true, clears the latest messages before loading (useful for complete refresh)
1224
- */
1225
- const loadLatestMessagesRef = useRef(async (clearLatest = false) => {
1226
- mergeOverlappingMessageSetsRef.current();
1227
- if (clearLatest) {
1228
- const latestSet = channel.state.messageSets.find((set) => set.isLatest);
1229
- if (latestSet) latestSet.messages = [];
1230
- }
1231
- if (channel.state.latestMessages.length === 0) {
1232
- await channel.query({}, 'latest');
1233
- }
1234
- await channel.state.loadMessageIntoState('latest');
1235
- setMessages([...channel.state.messages]);
1236
- });
1237
-
1238
- const loadChannel = () =>
1239
- channelQueryCallRef.current(
1240
- async () => {
1241
- if (!channel?.initialized || !channel.state.isUpToDate) {
1242
- await channel?.watch();
1243
- } else {
1244
- await channel.state.loadMessageIntoState('latest');
1245
- }
1246
- },
1247
- () => {
1248
- channel?.state.setIsUpToDate(true);
1249
- setHasNoMoreRecentMessagesToLoad(true);
1250
- },
1251
- );
1252
-
1253
879
  const reloadThread = async () => {
1254
880
  if (!channel || !thread?.id) return;
1255
881
  setThreadLoadingMore(true);
@@ -1285,105 +911,39 @@ const ChannelWithContext = <
1285
911
 
1286
912
  const resyncChannel = async () => {
1287
913
  if (!channel || syncingChannelRef.current) return;
1288
- hasOverlappingRecentMessagesRef.current = false;
1289
- clearInterval(mergeSetsIntervalRef.current);
1290
914
  syncingChannelRef.current = true;
1291
-
1292
915
  setError(false);
1293
- try {
1294
- /**
1295
- * Allow a buffer of 30 new messages, so that MessageList won't move its scroll position,
1296
- * giving smooth user experience.
1297
- */
1298
- const state = await channel.watch({
1299
- messages: {
1300
- limit: messages.length + 30,
1301
- },
1302
- });
1303
-
1304
- const oldListTopMessage = messages[0];
1305
- const oldListTopMessageId = messages[0]?.id;
1306
- const oldListBottomMessage = messages[messages.length - 1];
1307
916
 
1308
- const newListTopMessage = state.messages[0];
1309
- const newListBottomMessage = state.messages[state.messages.length - 1];
1310
-
1311
- if (
1312
- !oldListTopMessage || // previous list was empty
1313
- !oldListBottomMessage || // previous list was empty
1314
- !newListTopMessage || // new list is truncated
1315
- !newListBottomMessage // new list is truncated
1316
- ) {
1317
- /** Channel was truncated */
1318
- channel.state.clearMessages();
1319
- channel.state.setIsUpToDate(true);
1320
- channel.state.addMessagesSorted(state.messages);
1321
- channel.state.addPinnedMessages(state.pinned_messages);
917
+ const parseMessage = (message: FormatMessageResponse<StreamChatGenerics>) =>
918
+ ({
919
+ ...message,
920
+ created_at: message.created_at.toString(),
921
+ pinned_at: message.pinned_at?.toString(),
922
+ updated_at: message.updated_at?.toString(),
923
+ } as unknown as MessageResponse<StreamChatGenerics>);
1322
924
 
925
+ try {
926
+ if (!thread) {
1323
927
  copyChannelState();
1324
- return;
1325
- }
1326
928
 
1327
- const parseMessage = (message: typeof oldListTopMessage) =>
1328
- ({
1329
- ...message,
1330
- created_at: message.created_at.toString(),
1331
- pinned_at: message.pinned_at?.toString(),
1332
- updated_at: message.updated_at?.toString(),
1333
- } as unknown as MessageResponse<StreamChatGenerics>);
1334
-
1335
- const failedMessages = messages
1336
- .filter((message) => message.status === MessageStatusTypes.FAILED)
1337
- .map(parseMessage);
1338
-
1339
- const failedThreadMessages = thread
1340
- ? threadMessages
1341
- .filter((message) => message.status === MessageStatusTypes.FAILED)
1342
- .map(parseMessage)
1343
- : [];
1344
-
1345
- const oldListTopMessageCreatedAt = oldListTopMessage.created_at;
1346
- const oldListBottomMessageCreatedAt = oldListBottomMessage.created_at;
1347
- const newListTopMessageCreatedAt = newListTopMessage.created_at
1348
- ? new Date(newListTopMessage.created_at)
1349
- : new Date();
1350
- const newListBottomMessageCreatedAt = newListBottomMessage?.created_at
1351
- ? new Date(newListBottomMessage.created_at)
1352
- : new Date();
1353
-
1354
- let finalMessages = [];
1355
-
1356
- if (
1357
- oldListTopMessage &&
1358
- oldListTopMessageCreatedAt &&
1359
- oldListBottomMessageCreatedAt &&
1360
- newListTopMessageCreatedAt < oldListTopMessageCreatedAt &&
1361
- newListBottomMessageCreatedAt >= oldListBottomMessageCreatedAt
1362
- ) {
1363
- const index = state.messages.findIndex((message) => message.id === oldListTopMessageId);
1364
- finalMessages = state.messages.slice(index);
929
+ const failedMessages = channelMessagesState.messages
930
+ ?.filter((message) => message.status === MessageStatusTypes.FAILED)
931
+ .map(parseMessage);
932
+ if (failedMessages?.length) {
933
+ channel.state.addMessagesSorted(failedMessages);
934
+ }
1365
935
  } else {
1366
- finalMessages = state.messages;
1367
- }
1368
-
1369
- channel.state.setIsUpToDate(true);
1370
- channel.state.clearMessages();
1371
- channel.state.addMessagesSorted(finalMessages);
1372
- channel.state.addPinnedMessages(state.pinned_messages);
1373
- setHasNoMoreRecentMessagesToLoad(true);
1374
- setHasMore(true);
1375
- copyChannelState();
1376
-
1377
- if (failedMessages.length) {
1378
- channel.state.addMessagesSorted(failedMessages);
1379
- copyChannelState();
1380
- }
1381
-
1382
- await reloadThread();
1383
-
1384
- if (thread && failedThreadMessages.length) {
1385
- channel.state.addMessagesSorted(failedThreadMessages);
1386
- setThreadMessages([...channel.state.threads[thread.id]]);
936
+ await reloadThread();
937
+
938
+ const failedThreadMessages = thread
939
+ ? threadMessages
940
+ .filter((message) => message.status === MessageStatusTypes.FAILED)
941
+ .map(parseMessage)
942
+ : [];
943
+ if (failedThreadMessages.length) {
944
+ channel.state.addMessagesSorted(failedThreadMessages);
945
+ setThreadMessages([...channel.state.threads[thread.id]]);
946
+ }
1387
947
  }
1388
948
  } catch (err) {
1389
949
  if (err instanceof Error) {
@@ -1391,7 +951,6 @@ const ChannelWithContext = <
1391
951
  } else {
1392
952
  setError(true);
1393
953
  }
1394
- setLoading(false);
1395
954
  }
1396
955
 
1397
956
  syncingChannelRef.current = false;
@@ -1412,7 +971,7 @@ const ChannelWithContext = <
1412
971
  if (enableOfflineSupport) {
1413
972
  connectionChangedSubscription = DBSyncManager.onSyncStatusChange((statusChanged) => {
1414
973
  if (statusChanged) {
1415
- connectionChangedHandler();
974
+ copyChannelState();
1416
975
  }
1417
976
  });
1418
977
  } else {
@@ -1428,108 +987,6 @@ const ChannelWithContext = <
1428
987
  // eslint-disable-next-line react-hooks/exhaustive-deps
1429
988
  }, [enableOfflineSupport, shouldSyncChannel]);
1430
989
 
1431
- const reloadChannel = () =>
1432
- channelQueryCallRef.current(
1433
- async () => {
1434
- setLoading(true);
1435
- await loadLatestMessagesRef.current(true);
1436
- setLoading(false);
1437
- },
1438
- () => {
1439
- channel?.state.setIsUpToDate(true);
1440
- setHasNoMoreRecentMessagesToLoad(true);
1441
- },
1442
- );
1443
-
1444
- /**
1445
- * @deprecated
1446
- * Makes a query to load messages at particular message id.
1447
- *
1448
- * @param messageId Targeted message id
1449
- * @param before Number of messages to load before messageId
1450
- * @param after Number of messages to load after messageId
1451
- */
1452
- const queryAtMessage = async ({
1453
- after = 10,
1454
- before = 10,
1455
- messageId,
1456
- }: Parameters<ChannelContextValue<StreamChatGenerics>['loadChannelAtMessage']>[0]) => {
1457
- if (!channel) return;
1458
- channel.state.setIsUpToDate(false);
1459
- hasOverlappingRecentMessagesRef.current = false;
1460
- clearInterval(mergeSetsIntervalRef.current);
1461
- channel.state.clearMessages();
1462
- setMessages([]);
1463
- if (!messageId) {
1464
- await channel.query({
1465
- messages: {
1466
- limit: before,
1467
- },
1468
- watch: true,
1469
- });
1470
-
1471
- channel.state.setIsUpToDate(true);
1472
- return;
1473
- }
1474
-
1475
- await queryBeforeMessage(messageId, before);
1476
- await queryAfterMessage(messageId, after);
1477
- };
1478
-
1479
- /**
1480
- * @deprecated
1481
- * Makes a query to load messages before particular message id.
1482
- *
1483
- * @param messageId Targeted message id
1484
- * @param limit Number of messages to load
1485
- */
1486
- const queryBeforeMessage = async (messageId: string, limit = 5) => {
1487
- if (!channel) return;
1488
-
1489
- await channel.query({
1490
- messages: {
1491
- id_lt: messageId,
1492
- limit,
1493
- },
1494
- watch: true,
1495
- });
1496
-
1497
- channel.state.setIsUpToDate(false);
1498
- };
1499
-
1500
- /**
1501
- * @deprecated
1502
- * Makes a query to load messages later than particular message id.
1503
- *
1504
- * @param messageId Targeted message id
1505
- * @param limit Number of messages to load.
1506
- */
1507
- const queryAfterMessage = async (messageId: string, limit = 5) => {
1508
- if (!channel) return;
1509
- const state = await channel.query({
1510
- messages: {
1511
- id_gte: messageId,
1512
- limit,
1513
- },
1514
- watch: true,
1515
- });
1516
-
1517
- if (state.messages.length < limit) {
1518
- // make current set as the latest
1519
- const currentSet = channel.state.messageSets.find((set) => set.isCurrent);
1520
- if (currentSet && !currentSet.isLatest) {
1521
- channel.state.messageSets = channel.state.messageSets.filter((set) => !set.isLatest);
1522
- currentSet.isLatest = true;
1523
- }
1524
- channel.state.setIsUpToDate(true);
1525
- setHasNoMoreRecentMessagesToLoad(true);
1526
- } else {
1527
- splitLatestCurrentMessageSetRef.current();
1528
- channel.state.setIsUpToDate(false);
1529
- setHasNoMoreRecentMessagesToLoad(false);
1530
- }
1531
- };
1532
-
1533
990
  // In case the channel is disconnected which may happen when channel is deleted,
1534
991
  // underlying js client throws an error. Following function ensures that Channel component
1535
992
  // won't result in error in such a case.
@@ -1548,22 +1005,61 @@ const ChannelWithContext = <
1548
1005
  */
1549
1006
  const clientChannelConfig = getChannelConfigSafely();
1550
1007
 
1008
+ const reloadChannel = async () => {
1009
+ try {
1010
+ await loadLatestMessages();
1011
+ } catch (err) {
1012
+ console.warn('Reloading channel failed with error:', err);
1013
+ }
1014
+ };
1015
+
1016
+ const loadChannelAroundMessage: ChannelContextValue<StreamChatGenerics>['loadChannelAroundMessage'] =
1017
+ async ({ messageId: messageIdToLoadAround }): Promise<void> => {
1018
+ if (!messageIdToLoadAround) return;
1019
+ try {
1020
+ if (thread) {
1021
+ setThreadLoadingMore(true);
1022
+ try {
1023
+ await channel.state.loadMessageIntoState(messageIdToLoadAround, thread.id);
1024
+ setThreadLoadingMore(false);
1025
+ setThreadMessages(channel.state.threads[thread.id]);
1026
+ if (setTargetedMessage) {
1027
+ setTargetedMessage(messageIdToLoadAround);
1028
+ }
1029
+ } catch (err) {
1030
+ if (err instanceof Error) {
1031
+ setError(err);
1032
+ } else {
1033
+ setError(true);
1034
+ }
1035
+ setThreadLoadingMore(false);
1036
+ }
1037
+ } else {
1038
+ await loadChannelAroundMessageFn({
1039
+ messageId: messageIdToLoadAround,
1040
+ setTargetedMessage,
1041
+ });
1042
+ }
1043
+ } catch (err) {
1044
+ console.warn('Loading channel around message failed with error:', err);
1045
+ }
1046
+ };
1047
+
1551
1048
  /**
1552
1049
  * MESSAGE METHODS
1553
1050
  */
1554
-
1555
1051
  const updateMessage: MessagesContextValue<StreamChatGenerics>['updateMessage'] = (
1556
1052
  updatedMessage,
1557
1053
  extraState = {},
1558
1054
  ) => {
1559
- if (channel) {
1560
- channel.state.addMessageSorted(updatedMessage, true);
1561
- if (thread && updatedMessage.parent_id) {
1562
- extraState.threadMessages = channel.state.threads[updatedMessage.parent_id] || [];
1563
- setThreadMessages(extraState.threadMessages);
1564
- }
1055
+ if (!channel) return;
1056
+
1057
+ channel.state.addMessageSorted(updatedMessage, true);
1058
+ copyMessagesStateFromChannel(channel);
1565
1059
 
1566
- setMessages([...channel.state.messages]);
1060
+ if (thread && updatedMessage.parent_id) {
1061
+ extraState.threadMessages = channel.state.threads[updatedMessage.parent_id] || [];
1062
+ setThreadMessages(extraState.threadMessages);
1567
1063
  }
1568
1064
  };
1569
1065
 
@@ -1574,11 +1070,12 @@ const ChannelWithContext = <
1574
1070
  if (channel) {
1575
1071
  channel.state.removeMessage(oldMessage);
1576
1072
  channel.state.addMessageSorted(newMessage, true);
1073
+ copyMessagesStateFromChannel(channel);
1074
+
1577
1075
  if (thread && newMessage.parent_id) {
1578
1076
  const threadMessages = channel.state.threads[newMessage.parent_id] || [];
1579
1077
  setThreadMessages(threadMessages);
1580
1078
  }
1581
- setMessages(channel.state.messages);
1582
1079
  }
1583
1080
  };
1584
1081
 
@@ -1628,7 +1125,9 @@ const ChannelWithContext = <
1628
1125
  * as quoted_message is a reserved field.
1629
1126
  */
1630
1127
  if (preview.quoted_message_id) {
1631
- const quotedMessage = messages.find((message) => message.id === preview.quoted_message_id);
1128
+ const quotedMessage = channelMessagesState.messages?.find(
1129
+ (message) => message.id === preview.quoted_message_id,
1130
+ );
1632
1131
 
1633
1132
  preview.quoted_message =
1634
1133
  quotedMessage as MessageResponse<StreamChatGenerics>['quoted_message'];
@@ -1667,7 +1166,7 @@ const ChannelWithContext = <
1667
1166
  attachment.image_url = uploadResponse.file;
1668
1167
  delete attachment.originalFile;
1669
1168
 
1670
- dbApi.updateMessage({
1169
+ await dbApi.updateMessage({
1671
1170
  message: { ...updatedMessage, cid: channel.cid },
1672
1171
  });
1673
1172
  }
@@ -1696,7 +1195,7 @@ const ChannelWithContext = <
1696
1195
  }
1697
1196
 
1698
1197
  delete attachment.originalFile;
1699
- dbApi.updateMessage({
1198
+ await dbApi.updateMessage({
1700
1199
  message: { ...updatedMessage, cid: channel.cid },
1701
1200
  });
1702
1201
  }
@@ -1758,7 +1257,7 @@ const ChannelWithContext = <
1758
1257
  messageResponse.message.status = MessageStatusTypes.RECEIVED;
1759
1258
 
1760
1259
  if (enableOfflineSupport) {
1761
- dbApi.updateMessage({
1260
+ await dbApi.updateMessage({
1762
1261
  message: { ...messageResponse.message, cid: channel.cid },
1763
1262
  });
1764
1263
  }
@@ -1778,7 +1277,7 @@ const ChannelWithContext = <
1778
1277
  threadInstance?.upsertReplyLocally?.({ message: updatedMessage });
1779
1278
 
1780
1279
  if (enableOfflineSupport) {
1781
- dbApi.updateMessage({
1280
+ await dbApi.updateMessage({
1782
1281
  message: { ...message, cid: channel.cid },
1783
1282
  });
1784
1283
  }
@@ -1797,8 +1296,6 @@ const ChannelWithContext = <
1797
1296
  attachments: message.attachments || [],
1798
1297
  });
1799
1298
 
1800
- mergeOverlappingMessageSetsRef.current();
1801
-
1802
1299
  updateMessage(messagePreview, {
1803
1300
  commands: [],
1804
1301
  messageInput: '',
@@ -1810,7 +1307,7 @@ const ChannelWithContext = <
1810
1307
  // if app gets closed before message gets sent and next time user opens the app
1811
1308
  // then user can see that message in failed state and can retry.
1812
1309
  // If succesfull, it will be updated with received status.
1813
- dbApi.upsertMessages({
1310
+ await dbApi.upsertMessages({
1814
1311
  messages: [{ ...messagePreview, cid: channel.cid, status: MessageStatusTypes.FAILED }],
1815
1312
  });
1816
1313
  }
@@ -1839,161 +1336,6 @@ const ChannelWithContext = <
1839
1336
  );
1840
1337
  };
1841
1338
 
1842
- // hard limit to prevent you from scrolling faster than 1 page per 2 seconds
1843
- const loadMoreFinished = useRef(
1844
- debounce(
1845
- (updatedHasMore: boolean, newMessages: ChannelState<StreamChatGenerics>['messages']) => {
1846
- setLoading(false);
1847
- setLoadingMore(false);
1848
- setError(false);
1849
- setHasMore(updatedHasMore);
1850
- setMessages(newMessages);
1851
- },
1852
- defaultDebounceInterval,
1853
- debounceOptions,
1854
- ),
1855
- ).current;
1856
-
1857
- /**
1858
- * This function loads more messages before the first message in current channel state.
1859
- */
1860
- const loadMore = useCallback<PaginatedMessageListContextValue<StreamChatGenerics>['loadMore']>(
1861
- async (limit = 20) => {
1862
- if (loadingMore || hasMore === false) {
1863
- return;
1864
- }
1865
-
1866
- const currentMessages = channel.state.messages;
1867
-
1868
- if (!currentMessages.length) {
1869
- return setLoadingMore(false);
1870
- }
1871
-
1872
- const oldestMessage = currentMessages && currentMessages[0];
1873
-
1874
- if (oldestMessage && oldestMessage.status !== MessageStatusTypes.RECEIVED) {
1875
- return setLoadingMore(false);
1876
- }
1877
-
1878
- setLoadingMore(true);
1879
-
1880
- const oldestID = oldestMessage && oldestMessage.id;
1881
-
1882
- try {
1883
- if (channel) {
1884
- const queryResponse = await channel.query({
1885
- messages: { id_lt: oldestID, limit },
1886
- });
1887
-
1888
- const updatedHasMore = queryResponse.messages.length === limit;
1889
- loadMoreFinished(updatedHasMore, channel.state.messages);
1890
- }
1891
- } catch (err) {
1892
- if (err instanceof Error) {
1893
- setError(err);
1894
- } else {
1895
- setError(true);
1896
- }
1897
- setLoadingMore(false);
1898
- throw err;
1899
- }
1900
- },
1901
- /*
1902
- * This function is passed to useCreatePaginatedMessageListContext
1903
- * Where the deps are [channelId, hasMore, loadingMoreRecent, loadingMore]
1904
- * and only those deps should be used here because of that
1905
- */
1906
- // eslint-disable-next-line react-hooks/exhaustive-deps
1907
- [channelId, hasMore, loadingMore],
1908
- );
1909
-
1910
- /**
1911
- * This function loads more messages after the most recent message in current channel state.
1912
- */
1913
- const loadMoreRecent = useCallback<
1914
- PaginatedMessageListContextValue<StreamChatGenerics>['loadMoreRecent']
1915
- >(
1916
- async (limit = 5) => {
1917
- const latestMessageSet = channel.state.messageSets.find((set) => set.isLatest);
1918
- const latestLengthBeforeMerge = latestMessageSet?.messages.length || 0;
1919
- const didMerge = mergeOverlappingMessageSetsRef.current(true);
1920
- if (didMerge) {
1921
- if (latestMessageSet && latestLengthBeforeMerge > 0) {
1922
- const shouldSetStateUpToDate =
1923
- latestMessageSet.messages.length < limit && latestMessageSet.isCurrent;
1924
- setLoadingMoreRecent(true);
1925
- channel.state.setIsUpToDate(shouldSetStateUpToDate);
1926
- setHasNoMoreRecentMessagesToLoad(shouldSetStateUpToDate);
1927
- loadMoreRecentFinished(channel.state.messages);
1928
- restartSetsMergeFuncRef.current();
1929
- return;
1930
- }
1931
- }
1932
- if (channel.state.isUpToDate) {
1933
- setLoadingMoreRecent(false);
1934
- return;
1935
- }
1936
- const currentMessages = channel.state.messages;
1937
- const recentMessage = currentMessages[currentMessages.length - 1];
1938
-
1939
- if (recentMessage?.status !== MessageStatusTypes.RECEIVED) {
1940
- setLoadingMoreRecent(false);
1941
- return;
1942
- }
1943
- setLoadingMoreRecent(true);
1944
- try {
1945
- if (channel) {
1946
- const queryResponse = await channel.query({
1947
- messages: {
1948
- id_gte: recentMessage.id,
1949
- limit,
1950
- },
1951
- watch: true,
1952
- });
1953
- const gotAllRecentMessages = queryResponse.messages.length < limit;
1954
- const currentSet = channel.state.messageSets.find((set) => set.isCurrent);
1955
- if (gotAllRecentMessages && currentSet && !currentSet.isLatest) {
1956
- channel.state.messageSets = channel.state.messageSets.filter((set) => !set.isLatest);
1957
- // make current set as the latest
1958
- currentSet.isLatest = true;
1959
- }
1960
- channel.state.setIsUpToDate(gotAllRecentMessages);
1961
- setHasNoMoreRecentMessagesToLoad(gotAllRecentMessages);
1962
- loadMoreRecentFinished(channel.state.messages);
1963
- }
1964
- } catch (err) {
1965
- console.warn('Message pagination request failed with error', err);
1966
- if (err instanceof Error) {
1967
- setError(err);
1968
- } else {
1969
- setError(true);
1970
- }
1971
- setLoadingMoreRecent(false);
1972
- throw err;
1973
- }
1974
- },
1975
- /*
1976
- * This function is passed to useCreatePaginatedMessageListContext
1977
- * Where the deps are [channelId, hasMore, loadingMoreRecent, loadingMore, hasNoMoreRecentMessagesToLoad]
1978
- * and and only those deps should be used here because of that
1979
- */
1980
- // eslint-disable-next-line react-hooks/exhaustive-deps
1981
- [channelId, hasNoMoreRecentMessagesToLoad],
1982
- );
1983
-
1984
- // hard limit to prevent you from scrolling faster than 1 page per 2 seconds
1985
- const loadMoreRecentFinished = useRef(
1986
- debounce(
1987
- (newMessages: ChannelState<StreamChatGenerics>['messages']) => {
1988
- setLoadingMoreRecent(false);
1989
- setMessages(newMessages);
1990
- setError(false);
1991
- },
1992
- defaultDebounceInterval,
1993
- debounceOptions,
1994
- ),
1995
- ).current;
1996
-
1997
1339
  const editMessage: InputMessageInputContextValue<StreamChatGenerics>['editMessage'] = (
1998
1340
  updatedMessage,
1999
1341
  ) =>
@@ -2018,22 +1360,25 @@ const ChannelWithContext = <
2018
1360
  () => setEditing(undefined);
2019
1361
 
2020
1362
  const clearQuotedMessageState: InputMessageInputContextValue<StreamChatGenerics>['clearQuotedMessageState'] =
2021
- () => setQuotedMessage(false);
1363
+ () => setQuotedMessage(undefined);
2022
1364
 
2023
1365
  /**
2024
1366
  * Removes the message from local state
2025
1367
  */
2026
- const removeMessage: MessagesContextValue<StreamChatGenerics>['removeMessage'] = (message) => {
1368
+ const removeMessage: MessagesContextValue<StreamChatGenerics>['removeMessage'] = async (
1369
+ message,
1370
+ ) => {
2027
1371
  if (channel) {
2028
1372
  channel.state.removeMessage(message);
2029
- setMessages(channel.state.messages);
1373
+ copyMessagesStateFromChannel(channel);
1374
+
2030
1375
  if (thread) {
2031
1376
  setThreadMessages(channel.state.threads[thread.id] || []);
2032
1377
  }
2033
1378
  }
2034
1379
 
2035
1380
  if (enableOfflineSupport) {
2036
- dbApi.deleteMessage({
1381
+ await dbApi.deleteMessage({
2037
1382
  id: message.id,
2038
1383
  });
2039
1384
  }
@@ -2065,7 +1410,7 @@ const ChannelWithContext = <
2065
1410
  user: client.user,
2066
1411
  });
2067
1412
 
2068
- setMessages(channel.state.messages);
1413
+ copyMessagesStateFromChannel(channel);
2069
1414
 
2070
1415
  const sendReactionResponse = await DBSyncManager.queueTask<StreamChatGenerics>({
2071
1416
  client,
@@ -2091,7 +1436,7 @@ const ChannelWithContext = <
2091
1436
 
2092
1437
  if (!enableOfflineSupport) {
2093
1438
  if (message.status === MessageStatusTypes.FAILED) {
2094
- removeMessage(message);
1439
+ await removeMessage(message);
2095
1440
  return;
2096
1441
  }
2097
1442
  await client.deleteMessage(message.id);
@@ -2099,8 +1444,8 @@ const ChannelWithContext = <
2099
1444
  }
2100
1445
 
2101
1446
  if (message.status === MessageStatusTypes.FAILED) {
2102
- DBSyncManager.dropPendingTasks({ messageId: message.id });
2103
- removeMessage(message);
1447
+ await DBSyncManager.dropPendingTasks({ messageId: message.id });
1448
+ await removeMessage(message);
2104
1449
  } else {
2105
1450
  const updatedMessage = {
2106
1451
  ...message,
@@ -2151,7 +1496,7 @@ const ChannelWithContext = <
2151
1496
  user: client.user,
2152
1497
  });
2153
1498
 
2154
- setMessages(channel.state.messages);
1499
+ copyMessagesStateFromChannel(channel);
2155
1500
 
2156
1501
  await DBSyncManager.queueTask<StreamChatGenerics>({
2157
1502
  client,
@@ -2246,11 +1591,6 @@ const ChannelWithContext = <
2246
1591
  }
2247
1592
  };
2248
1593
 
2249
- const disabledValue = useMemo(
2250
- () => !!channel?.data?.frozen && disableIfFrozenChannel,
2251
- [channel.data?.frozen, disableIfFrozenChannel],
2252
- );
2253
-
2254
1594
  const ownCapabilitiesContext = useCreateOwnCapabilitiesContext({
2255
1595
  channel,
2256
1596
  overrideCapabilities: overrideOwnCapabilities,
@@ -2258,7 +1598,7 @@ const ChannelWithContext = <
2258
1598
 
2259
1599
  const channelContext = useCreateChannelContext({
2260
1600
  channel,
2261
- disabled: disabledValue,
1601
+ disabled: !!channel?.data?.frozen,
2262
1602
  EmptyStateIndicator,
2263
1603
  enableMessageGroupingByUser,
2264
1604
  enforceUniqueReaction,
@@ -2268,20 +1608,16 @@ const ChannelWithContext = <
2268
1608
  !!(clientChannelConfig?.commands || [])?.some((command) => command.name === 'giphy'),
2269
1609
  hideDateSeparators,
2270
1610
  hideStickyDateHeader,
2271
- isAdmin,
2272
1611
  isChannelActive: shouldSyncChannel,
2273
- isModerator,
2274
- isOwner,
2275
1612
  lastRead,
2276
1613
  loadChannelAroundMessage,
2277
- loadChannelAtMessage,
2278
- loading,
1614
+ loading: channelMessagesState.loading,
2279
1615
  LoadingIndicator,
2280
1616
  markRead,
2281
1617
  maxTimeBetweenGroupedMessages,
2282
- members,
1618
+ members: channelState.members ?? {},
2283
1619
  NetworkDownIndicator,
2284
- read,
1620
+ read: channelState.read ?? {},
2285
1621
  reloadChannel,
2286
1622
  scrollToFirstUnreadThreshold,
2287
1623
  setLastRead,
@@ -2290,8 +1626,8 @@ const ChannelWithContext = <
2290
1626
  targetedMessage,
2291
1627
  threadList,
2292
1628
  uploadAbortControllerRef,
2293
- watcherCount,
2294
- watchers,
1629
+ watcherCount: channelState.watcherCount,
1630
+ watchers: channelState.watchers,
2295
1631
  });
2296
1632
 
2297
1633
  // This is mainly a hack to get around an issue with sendMessage not being passed correctly as a
@@ -2369,20 +1705,20 @@ const ChannelWithContext = <
2369
1705
 
2370
1706
  const messageListContext = useCreatePaginatedMessageListContext({
2371
1707
  channelId,
2372
- hasMore,
2373
- hasNoMoreRecentMessagesToLoad,
2374
- loadingMore: loadingMoreProp !== undefined ? loadingMoreProp : loadingMore,
1708
+ hasMore: channelMessagesState.hasMore,
1709
+ loadingMore: loadingMoreProp !== undefined ? loadingMoreProp : channelMessagesState.loadingMore,
2375
1710
  loadingMoreRecent:
2376
- loadingMoreRecentProp !== undefined ? loadingMoreRecentProp : loadingMoreRecent,
1711
+ loadingMoreRecentProp !== undefined
1712
+ ? loadingMoreRecentProp
1713
+ : channelMessagesState.loadingMoreRecent,
1714
+ loadLatestMessages,
2377
1715
  loadMore,
2378
1716
  loadMoreRecent,
2379
- messages,
2380
- setLoadingMore,
2381
- setLoadingMoreRecent,
1717
+ messages: channelMessagesState.messages ?? [],
2382
1718
  });
2383
1719
 
2384
1720
  const messagesContext = useCreateMessagesContext({
2385
- additionalTouchableProps,
1721
+ additionalPressableProps,
2386
1722
  Attachment,
2387
1723
  AttachmentActions,
2388
1724
  AudioAttachment,
@@ -2408,7 +1744,6 @@ const ChannelWithContext = <
2408
1744
  Giphy,
2409
1745
  giphyVersion,
2410
1746
  handleBan,
2411
- handleBlock,
2412
1747
  handleCopy,
2413
1748
  handleDelete,
2414
1749
  handleEdit,
@@ -2431,6 +1766,8 @@ const ChannelWithContext = <
2431
1766
  legacyImageViewerSwipeBehaviour,
2432
1767
  markdownRules,
2433
1768
  Message,
1769
+ MessageActionList,
1770
+ MessageActionListItem,
2434
1771
  messageActions,
2435
1772
  MessageAvatar,
2436
1773
  MessageBounce,
@@ -2442,21 +1779,28 @@ const ChannelWithContext = <
2442
1779
  MessageFooter,
2443
1780
  MessageHeader,
2444
1781
  MessageList,
1782
+ MessageMenu,
2445
1783
  MessagePinnedHeader,
1784
+ MessageReactionPicker,
2446
1785
  MessageReplies,
2447
1786
  MessageRepliesAvatars,
2448
1787
  MessageSimple,
2449
1788
  MessageStatus,
2450
1789
  MessageSystem,
2451
1790
  MessageText,
1791
+ messageTextNumberOfLines,
2452
1792
  MessageTimestamp,
1793
+ MessageUserReactions,
1794
+ MessageUserReactionsAvatar,
1795
+ MessageUserReactionsItem,
2453
1796
  myMessageTheme,
2454
1797
  onLongPressMessage,
2455
1798
  onPressInMessage,
2456
1799
  onPressMessage,
2457
- OverlayReactionList,
2458
1800
  PollContent,
2459
- ReactionList,
1801
+ ReactionListBottom,
1802
+ reactionListPosition,
1803
+ ReactionListTop,
2460
1804
  removeMessage,
2461
1805
  Reply,
2462
1806
  retrySendMessage,
@@ -2497,13 +1841,13 @@ const ChannelWithContext = <
2497
1841
  });
2498
1842
 
2499
1843
  const typingContext = useCreateTypingContext({
2500
- typing,
1844
+ typing: channelState.typing ?? {},
2501
1845
  });
2502
1846
 
2503
1847
  // TODO: replace the null view with appropriate message. Currently this is waiting a design decision.
2504
1848
  if (deleted) return null;
2505
1849
 
2506
- if (!channel || (error && messages.length === 0)) {
1850
+ if (!channel || (error && channelMessagesState.messages?.length === 0)) {
2507
1851
  return <LoadingErrorIndicator error={error} listType='message' retry={reloadChannel} />;
2508
1852
  }
2509
1853
 
@@ -2580,22 +1924,7 @@ export const Channel = <
2580
1924
 
2581
1925
  const shouldSyncChannel = threadMessage?.id ? !!props.threadList : true;
2582
1926
 
2583
- const {
2584
- members,
2585
- messages,
2586
- read,
2587
- setMembers,
2588
- setMessages,
2589
- setRead,
2590
- setThreadMessages,
2591
- setTyping,
2592
- setWatcherCount,
2593
- setWatchers,
2594
- threadMessages,
2595
- typing,
2596
- watcherCount,
2597
- watchers,
2598
- } = useChannelState<StreamChatGenerics>(
1927
+ const { setThreadMessages, threadMessages } = useChannelState<StreamChatGenerics>(
2599
1928
  props.channel,
2600
1929
  props.threadList ? threadMessage?.id : undefined,
2601
1930
  );
@@ -2611,21 +1940,9 @@ export const Channel = <
2611
1940
  shouldSyncChannel={shouldSyncChannel}
2612
1941
  {...{
2613
1942
  isMessageAIGenerated,
2614
- members,
2615
- messages: props.messages || messages,
2616
- read,
2617
- setMembers,
2618
- setMessages,
2619
- setRead,
2620
1943
  setThreadMessages,
2621
- setTyping,
2622
- setWatcherCount,
2623
- setWatchers,
2624
1944
  thread,
2625
1945
  threadMessages,
2626
- typing,
2627
- watcherCount,
2628
- watchers,
2629
1946
  }}
2630
1947
  />
2631
1948
  );