stream-chat-react-native-core 7.0.0-rc.8 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (498) hide show
  1. package/README.md +1 -1
  2. package/lib/commonjs/components/Attachment/AudioAttachment.js +19 -9
  3. package/lib/commonjs/components/Attachment/AudioAttachment.js.map +1 -1
  4. package/lib/commonjs/components/Attachment/FileAttachmentGroup.js +3 -1
  5. package/lib/commonjs/components/Attachment/FileAttachmentGroup.js.map +1 -1
  6. package/lib/commonjs/components/Attachment/Gallery.js +16 -3
  7. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  8. package/lib/commonjs/components/Attachment/ImageReloadIndicator.js.map +1 -1
  9. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +2 -2
  10. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  11. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js +7 -24
  12. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -1
  13. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js +2 -4
  14. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  15. package/lib/commonjs/components/Channel/Channel.js +320 -310
  16. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  17. package/lib/commonjs/components/Channel/hooks/useChannelDataState.js.map +1 -1
  18. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +2 -0
  19. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  20. package/lib/commonjs/components/Channel/hooks/useMessageListPagination.js +133 -147
  21. package/lib/commonjs/components/Channel/hooks/useMessageListPagination.js.map +1 -1
  22. package/lib/commonjs/components/Chat/Chat.js.map +1 -1
  23. package/lib/commonjs/components/KeyboardCompatibleView/KeyboardCompatibleView.js +8 -13
  24. package/lib/commonjs/components/KeyboardCompatibleView/KeyboardCompatibleView.js.map +1 -1
  25. package/lib/commonjs/components/Message/Message.js +14 -7
  26. package/lib/commonjs/components/Message/Message.js.map +1 -1
  27. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  28. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js +70 -54
  29. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  30. package/lib/commonjs/components/Message/MessageSimple/MessageStatus.js +14 -6
  31. package/lib/commonjs/components/Message/MessageSimple/MessageStatus.js.map +1 -1
  32. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  33. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  34. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js +3 -1
  35. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  36. package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js.map +1 -1
  37. package/lib/commonjs/components/Message/hooks/useMessageActions.js.map +1 -1
  38. package/lib/commonjs/components/MessageInput/FileUploadPreview.js +25 -39
  39. package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
  40. package/lib/commonjs/components/MessageInput/InputButtons.js +18 -15
  41. package/lib/commonjs/components/MessageInput/InputButtons.js.map +1 -1
  42. package/lib/commonjs/components/MessageInput/MessageInput.js +96 -74
  43. package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
  44. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js +2 -1
  45. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js.map +1 -1
  46. package/lib/commonjs/components/MessageInput/hooks/useAudioController.js +4 -4
  47. package/lib/commonjs/components/MessageInput/hooks/useAudioController.js.map +1 -1
  48. package/lib/commonjs/components/MessageList/MessageList.js +281 -223
  49. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  50. package/lib/commonjs/components/MessageList/hooks/useMessageList.js +65 -48
  51. package/lib/commonjs/components/MessageList/hooks/useMessageList.js.map +1 -1
  52. package/lib/commonjs/components/MessageList/hooks/useShouldScrollToRecentOnNewOwnMessage.js.map +1 -1
  53. package/lib/commonjs/components/MessageList/utils/getGroupStyles.js +1 -1
  54. package/lib/commonjs/components/MessageList/utils/getGroupStyles.js.map +1 -1
  55. package/lib/commonjs/components/MessageList/utils/getLastReceivedMessage.js.map +1 -1
  56. package/lib/commonjs/components/MessageList/utils/getReadState.js +20 -0
  57. package/lib/commonjs/components/MessageList/utils/getReadState.js.map +1 -0
  58. package/lib/commonjs/components/MessageMenu/hooks/useFetchReactions.js.map +1 -1
  59. package/lib/commonjs/components/Poll/components/Button.js.map +1 -1
  60. package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js.map +1 -1
  61. package/lib/commonjs/components/Reply/Reply.js +2 -2
  62. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  63. package/lib/commonjs/components/Thread/components/ThreadFooterComponent.js +24 -6
  64. package/lib/commonjs/components/Thread/components/ThreadFooterComponent.js.map +1 -1
  65. package/lib/commonjs/components/ThreadList/ThreadListItem.js.map +1 -1
  66. package/lib/commonjs/components/UIComponents/BottomSheetModal.js +10 -6
  67. package/lib/commonjs/components/UIComponents/BottomSheetModal.js.map +1 -1
  68. package/lib/commonjs/components/index.js +15 -4
  69. package/lib/commonjs/components/index.js.map +1 -1
  70. package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
  71. package/lib/commonjs/contexts/channelsStateContext/useChannelState.js +5 -1
  72. package/lib/commonjs/contexts/channelsStateContext/useChannelState.js.map +1 -1
  73. package/lib/commonjs/contexts/debugContext/DebugContext.js.map +1 -1
  74. package/lib/commonjs/contexts/imageGalleryContext/ImageGalleryContext.js.map +1 -1
  75. package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
  76. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +535 -523
  77. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  78. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +7 -6
  79. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  80. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js +37 -41
  81. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  82. package/lib/commonjs/contexts/messageInputContext/utils/utils.js +4 -4
  83. package/lib/commonjs/contexts/messageInputContext/utils/utils.js.map +1 -1
  84. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  85. package/lib/commonjs/contexts/pollContext/pollContext.js.map +1 -1
  86. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js +23 -14
  87. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
  88. package/lib/commonjs/contexts/themeContext/utils/theme.js +2 -1
  89. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  90. package/lib/commonjs/contexts/threadContext/ThreadContext.js.map +1 -1
  91. package/lib/commonjs/contexts/threadsContext/ThreadListItemContext.js.map +1 -1
  92. package/lib/commonjs/hooks/index.js +22 -0
  93. package/lib/commonjs/hooks/index.js.map +1 -1
  94. package/lib/commonjs/hooks/useAudioPlayer.js +60 -69
  95. package/lib/commonjs/hooks/useAudioPlayer.js.map +1 -1
  96. package/lib/commonjs/hooks/useStableCallback.js +13 -0
  97. package/lib/commonjs/hooks/useStableCallback.js.map +1 -0
  98. package/lib/commonjs/hooks/useTranslatedMessage.js.map +1 -1
  99. package/lib/commonjs/i18n/en.json +3 -0
  100. package/lib/commonjs/i18n/es.json +3 -0
  101. package/lib/commonjs/i18n/fr.json +3 -0
  102. package/lib/commonjs/i18n/he.json +3 -0
  103. package/lib/commonjs/i18n/hi.json +2 -0
  104. package/lib/commonjs/i18n/it.json +3 -0
  105. package/lib/commonjs/i18n/ja.json +1 -0
  106. package/lib/commonjs/i18n/ko.json +1 -0
  107. package/lib/commonjs/i18n/nl.json +2 -0
  108. package/lib/commonjs/i18n/pt-br.json +3 -0
  109. package/lib/commonjs/i18n/ru.json +4 -0
  110. package/lib/commonjs/i18n/tr.json +2 -0
  111. package/lib/commonjs/mock-builders/api/channelMocks.js.map +1 -1
  112. package/lib/commonjs/native.js.map +1 -1
  113. package/lib/commonjs/store/mappers/mapMessageToStorable.js.map +1 -1
  114. package/lib/commonjs/types/types.js.map +1 -1
  115. package/lib/commonjs/utils/compressImage.js +1 -1
  116. package/lib/commonjs/utils/compressImage.js.map +1 -1
  117. package/lib/commonjs/utils/removeReservedFields.js.map +1 -1
  118. package/lib/commonjs/utils/utils.js +17 -4
  119. package/lib/commonjs/utils/utils.js.map +1 -1
  120. package/lib/commonjs/version.json +1 -1
  121. package/lib/module/components/Attachment/AudioAttachment.js +19 -9
  122. package/lib/module/components/Attachment/AudioAttachment.js.map +1 -1
  123. package/lib/module/components/Attachment/FileAttachmentGroup.js +3 -1
  124. package/lib/module/components/Attachment/FileAttachmentGroup.js.map +1 -1
  125. package/lib/module/components/Attachment/Gallery.js +16 -3
  126. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  127. package/lib/module/components/Attachment/ImageReloadIndicator.js.map +1 -1
  128. package/lib/module/components/AttachmentPicker/AttachmentPicker.js +2 -2
  129. package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  130. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js +7 -24
  131. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -1
  132. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js +2 -4
  133. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  134. package/lib/module/components/Channel/Channel.js +320 -310
  135. package/lib/module/components/Channel/Channel.js.map +1 -1
  136. package/lib/module/components/Channel/hooks/useChannelDataState.js.map +1 -1
  137. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +2 -0
  138. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  139. package/lib/module/components/Channel/hooks/useMessageListPagination.js +133 -147
  140. package/lib/module/components/Channel/hooks/useMessageListPagination.js.map +1 -1
  141. package/lib/module/components/Chat/Chat.js.map +1 -1
  142. package/lib/module/components/KeyboardCompatibleView/KeyboardCompatibleView.js +8 -13
  143. package/lib/module/components/KeyboardCompatibleView/KeyboardCompatibleView.js.map +1 -1
  144. package/lib/module/components/Message/Message.js +14 -7
  145. package/lib/module/components/Message/Message.js.map +1 -1
  146. package/lib/module/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  147. package/lib/module/components/Message/MessageSimple/MessageSimple.js +70 -54
  148. package/lib/module/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  149. package/lib/module/components/Message/MessageSimple/MessageStatus.js +14 -6
  150. package/lib/module/components/Message/MessageSimple/MessageStatus.js.map +1 -1
  151. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  152. package/lib/module/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  153. package/lib/module/components/Message/hooks/useCreateMessageContext.js +3 -1
  154. package/lib/module/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  155. package/lib/module/components/Message/hooks/useMessageActionHandlers.js.map +1 -1
  156. package/lib/module/components/Message/hooks/useMessageActions.js.map +1 -1
  157. package/lib/module/components/MessageInput/FileUploadPreview.js +25 -39
  158. package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
  159. package/lib/module/components/MessageInput/InputButtons.js +18 -15
  160. package/lib/module/components/MessageInput/InputButtons.js.map +1 -1
  161. package/lib/module/components/MessageInput/MessageInput.js +96 -74
  162. package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
  163. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js +2 -1
  164. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js.map +1 -1
  165. package/lib/module/components/MessageInput/hooks/useAudioController.js +4 -4
  166. package/lib/module/components/MessageInput/hooks/useAudioController.js.map +1 -1
  167. package/lib/module/components/MessageList/MessageList.js +281 -223
  168. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  169. package/lib/module/components/MessageList/hooks/useMessageList.js +65 -48
  170. package/lib/module/components/MessageList/hooks/useMessageList.js.map +1 -1
  171. package/lib/module/components/MessageList/hooks/useShouldScrollToRecentOnNewOwnMessage.js.map +1 -1
  172. package/lib/module/components/MessageList/utils/getGroupStyles.js +1 -1
  173. package/lib/module/components/MessageList/utils/getGroupStyles.js.map +1 -1
  174. package/lib/module/components/MessageList/utils/getLastReceivedMessage.js.map +1 -1
  175. package/lib/module/components/MessageList/utils/getReadState.js +20 -0
  176. package/lib/module/components/MessageList/utils/getReadState.js.map +1 -0
  177. package/lib/module/components/MessageMenu/hooks/useFetchReactions.js.map +1 -1
  178. package/lib/module/components/Poll/components/Button.js.map +1 -1
  179. package/lib/module/components/Poll/components/PollResults/PollResultItem.js.map +1 -1
  180. package/lib/module/components/Reply/Reply.js +2 -2
  181. package/lib/module/components/Reply/Reply.js.map +1 -1
  182. package/lib/module/components/Thread/components/ThreadFooterComponent.js +24 -6
  183. package/lib/module/components/Thread/components/ThreadFooterComponent.js.map +1 -1
  184. package/lib/module/components/ThreadList/ThreadListItem.js.map +1 -1
  185. package/lib/module/components/UIComponents/BottomSheetModal.js +10 -6
  186. package/lib/module/components/UIComponents/BottomSheetModal.js.map +1 -1
  187. package/lib/module/components/index.js +15 -4
  188. package/lib/module/components/index.js.map +1 -1
  189. package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
  190. package/lib/module/contexts/channelsStateContext/useChannelState.js +5 -1
  191. package/lib/module/contexts/channelsStateContext/useChannelState.js.map +1 -1
  192. package/lib/module/contexts/debugContext/DebugContext.js.map +1 -1
  193. package/lib/module/contexts/imageGalleryContext/ImageGalleryContext.js.map +1 -1
  194. package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
  195. package/lib/module/contexts/messageInputContext/MessageInputContext.js +535 -523
  196. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  197. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +7 -6
  198. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  199. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js +37 -41
  200. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  201. package/lib/module/contexts/messageInputContext/utils/utils.js +4 -4
  202. package/lib/module/contexts/messageInputContext/utils/utils.js.map +1 -1
  203. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  204. package/lib/module/contexts/pollContext/pollContext.js.map +1 -1
  205. package/lib/module/contexts/suggestionsContext/SuggestionsContext.js +23 -14
  206. package/lib/module/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
  207. package/lib/module/contexts/themeContext/utils/theme.js +2 -1
  208. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  209. package/lib/module/contexts/threadContext/ThreadContext.js.map +1 -1
  210. package/lib/module/contexts/threadsContext/ThreadListItemContext.js.map +1 -1
  211. package/lib/module/hooks/index.js +22 -0
  212. package/lib/module/hooks/index.js.map +1 -1
  213. package/lib/module/hooks/useAudioPlayer.js +60 -69
  214. package/lib/module/hooks/useAudioPlayer.js.map +1 -1
  215. package/lib/module/hooks/useStableCallback.js +13 -0
  216. package/lib/module/hooks/useStableCallback.js.map +1 -0
  217. package/lib/module/hooks/useTranslatedMessage.js.map +1 -1
  218. package/lib/module/i18n/en.json +3 -0
  219. package/lib/module/i18n/es.json +3 -0
  220. package/lib/module/i18n/fr.json +3 -0
  221. package/lib/module/i18n/he.json +3 -0
  222. package/lib/module/i18n/hi.json +2 -0
  223. package/lib/module/i18n/it.json +3 -0
  224. package/lib/module/i18n/ja.json +1 -0
  225. package/lib/module/i18n/ko.json +1 -0
  226. package/lib/module/i18n/nl.json +2 -0
  227. package/lib/module/i18n/pt-br.json +3 -0
  228. package/lib/module/i18n/ru.json +4 -0
  229. package/lib/module/i18n/tr.json +2 -0
  230. package/lib/module/mock-builders/api/channelMocks.js.map +1 -1
  231. package/lib/module/native.js.map +1 -1
  232. package/lib/module/store/mappers/mapMessageToStorable.js.map +1 -1
  233. package/lib/module/types/types.js.map +1 -1
  234. package/lib/module/utils/compressImage.js +1 -1
  235. package/lib/module/utils/compressImage.js.map +1 -1
  236. package/lib/module/utils/removeReservedFields.js.map +1 -1
  237. package/lib/module/utils/utils.js +17 -4
  238. package/lib/module/utils/utils.js.map +1 -1
  239. package/lib/module/version.json +1 -1
  240. package/lib/typescript/components/Attachment/AudioAttachment.d.ts +2 -2
  241. package/lib/typescript/components/Attachment/AudioAttachment.d.ts.map +1 -1
  242. package/lib/typescript/components/Attachment/FileAttachmentGroup.d.ts.map +1 -1
  243. package/lib/typescript/components/Attachment/Gallery.d.ts +3 -3
  244. package/lib/typescript/components/Attachment/Gallery.d.ts.map +1 -1
  245. package/lib/typescript/components/Attachment/ImageReloadIndicator.d.ts +4 -3
  246. package/lib/typescript/components/Attachment/ImageReloadIndicator.d.ts.map +1 -1
  247. package/lib/typescript/components/AttachmentPicker/AttachmentPicker.d.ts.map +1 -1
  248. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerItem.d.ts +2 -2
  249. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerItem.d.ts.map +1 -1
  250. package/lib/typescript/components/AutoCompleteInput/AutoCompleteInput.d.ts +2 -3
  251. package/lib/typescript/components/AutoCompleteInput/AutoCompleteInput.d.ts.map +1 -1
  252. package/lib/typescript/components/Channel/Channel.d.ts +3 -4
  253. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  254. package/lib/typescript/components/Channel/hooks/useChannelDataState.d.ts +2 -3
  255. package/lib/typescript/components/Channel/hooks/useChannelDataState.d.ts.map +1 -1
  256. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
  257. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts.map +1 -1
  258. package/lib/typescript/components/Channel/hooks/useCreateThreadContext.d.ts +6 -6
  259. package/lib/typescript/components/Channel/hooks/useCreateThreadContext.d.ts.map +1 -1
  260. package/lib/typescript/components/Channel/hooks/useMessageListPagination.d.ts +3 -3
  261. package/lib/typescript/components/Channel/hooks/useMessageListPagination.d.ts.map +1 -1
  262. package/lib/typescript/components/ChannelPreview/hooks/useChannelPreviewData.d.ts +1 -1
  263. package/lib/typescript/components/ChannelPreview/hooks/useLatestMessagePreview.d.ts +1 -1
  264. package/lib/typescript/components/Chat/Chat.d.ts +0 -9
  265. package/lib/typescript/components/Chat/Chat.d.ts.map +1 -1
  266. package/lib/typescript/components/KeyboardCompatibleView/KeyboardCompatibleView.d.ts +3 -0
  267. package/lib/typescript/components/KeyboardCompatibleView/KeyboardCompatibleView.d.ts.map +1 -1
  268. package/lib/typescript/components/Message/Message.d.ts +4 -5
  269. package/lib/typescript/components/Message/Message.d.ts.map +1 -1
  270. package/lib/typescript/components/Message/MessageSimple/MessageFooter.d.ts +2 -3
  271. package/lib/typescript/components/Message/MessageSimple/MessageFooter.d.ts.map +1 -1
  272. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts.map +1 -1
  273. package/lib/typescript/components/Message/MessageSimple/MessageStatus.d.ts +1 -1
  274. package/lib/typescript/components/Message/MessageSimple/MessageStatus.d.ts.map +1 -1
  275. package/lib/typescript/components/Message/MessageSimple/MessageTextContainer.d.ts.map +1 -1
  276. package/lib/typescript/components/Message/MessageSimple/utils/renderText.d.ts +2 -2
  277. package/lib/typescript/components/Message/MessageSimple/utils/renderText.d.ts.map +1 -1
  278. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts +1 -1
  279. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts.map +1 -1
  280. package/lib/typescript/components/Message/hooks/useMessageActionHandlers.d.ts.map +1 -1
  281. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts +2 -2
  282. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts.map +1 -1
  283. package/lib/typescript/components/MessageInput/FileUploadPreview.d.ts +2 -4
  284. package/lib/typescript/components/MessageInput/FileUploadPreview.d.ts.map +1 -1
  285. package/lib/typescript/components/MessageInput/InputButtons.d.ts +1 -1
  286. package/lib/typescript/components/MessageInput/InputButtons.d.ts.map +1 -1
  287. package/lib/typescript/components/MessageInput/MessageInput.d.ts +1 -1
  288. package/lib/typescript/components/MessageInput/MessageInput.d.ts.map +1 -1
  289. package/lib/typescript/components/MessageInput/hooks/useAudioController.d.ts.map +1 -1
  290. package/lib/typescript/components/MessageList/MessageList.d.ts +4 -4
  291. package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
  292. package/lib/typescript/components/MessageList/MessageSystem.d.ts +2 -2
  293. package/lib/typescript/components/MessageList/MessageSystem.d.ts.map +1 -1
  294. package/lib/typescript/components/MessageList/hooks/useMessageList.d.ts +14 -9
  295. package/lib/typescript/components/MessageList/hooks/useMessageList.d.ts.map +1 -1
  296. package/lib/typescript/components/MessageList/hooks/useShouldScrollToRecentOnNewOwnMessage.d.ts +2 -2
  297. package/lib/typescript/components/MessageList/hooks/useShouldScrollToRecentOnNewOwnMessage.d.ts.map +1 -1
  298. package/lib/typescript/components/MessageList/utils/getGroupStyles.d.ts.map +1 -1
  299. package/lib/typescript/components/MessageList/utils/getLastReceivedMessage.d.ts +2 -2
  300. package/lib/typescript/components/MessageList/utils/getLastReceivedMessage.d.ts.map +1 -1
  301. package/lib/typescript/components/MessageList/utils/getReadState.d.ts +9 -0
  302. package/lib/typescript/components/MessageList/utils/getReadState.d.ts.map +1 -0
  303. package/lib/typescript/components/MessageMenu/hooks/useFetchReactions.d.ts +2 -3
  304. package/lib/typescript/components/MessageMenu/hooks/useFetchReactions.d.ts.map +1 -1
  305. package/lib/typescript/components/Poll/components/Button.d.ts +2 -3
  306. package/lib/typescript/components/Poll/components/Button.d.ts.map +1 -1
  307. package/lib/typescript/components/Poll/components/PollResults/PollResultItem.d.ts +2 -3
  308. package/lib/typescript/components/Poll/components/PollResults/PollResultItem.d.ts.map +1 -1
  309. package/lib/typescript/components/Reply/Reply.d.ts.map +1 -1
  310. package/lib/typescript/components/Thread/components/ThreadFooterComponent.d.ts.map +1 -1
  311. package/lib/typescript/components/ThreadList/ThreadListItem.d.ts.map +1 -1
  312. package/lib/typescript/components/UIComponents/BottomSheetModal.d.ts.map +1 -1
  313. package/lib/typescript/components/index.d.ts +2 -1
  314. package/lib/typescript/components/index.d.ts.map +1 -1
  315. package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts +3 -3
  316. package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts.map +1 -1
  317. package/lib/typescript/contexts/channelsStateContext/useChannelState.d.ts.map +1 -1
  318. package/lib/typescript/contexts/debugContext/DebugContext.d.ts +2 -3
  319. package/lib/typescript/contexts/debugContext/DebugContext.d.ts.map +1 -1
  320. package/lib/typescript/contexts/imageGalleryContext/ImageGalleryContext.d.ts +3 -3
  321. package/lib/typescript/contexts/imageGalleryContext/ImageGalleryContext.d.ts.map +1 -1
  322. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +6 -4
  323. package/lib/typescript/contexts/messageContext/MessageContext.d.ts.map +1 -1
  324. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +13 -15
  325. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts.map +1 -1
  326. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts +1 -1
  327. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  328. package/lib/typescript/contexts/messageInputContext/hooks/useMessageDetailsForState.d.ts +3 -3
  329. package/lib/typescript/contexts/messageInputContext/hooks/useMessageDetailsForState.d.ts.map +1 -1
  330. package/lib/typescript/contexts/messageInputContext/utils/utils.d.ts +2 -2
  331. package/lib/typescript/contexts/messageInputContext/utils/utils.d.ts.map +1 -1
  332. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +25 -21
  333. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts.map +1 -1
  334. package/lib/typescript/contexts/pollContext/pollContext.d.ts +2 -3
  335. package/lib/typescript/contexts/pollContext/pollContext.d.ts.map +1 -1
  336. package/lib/typescript/contexts/suggestionsContext/SuggestionsContext.d.ts.map +1 -1
  337. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +1 -0
  338. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  339. package/lib/typescript/contexts/threadContext/ThreadContext.d.ts +4 -5
  340. package/lib/typescript/contexts/threadContext/ThreadContext.d.ts.map +1 -1
  341. package/lib/typescript/contexts/threadsContext/ThreadListItemContext.d.ts +3 -4
  342. package/lib/typescript/contexts/threadsContext/ThreadListItemContext.d.ts.map +1 -1
  343. package/lib/typescript/hooks/index.d.ts +2 -0
  344. package/lib/typescript/hooks/index.d.ts.map +1 -1
  345. package/lib/typescript/hooks/useAudioPlayer.d.ts.map +1 -1
  346. package/lib/typescript/hooks/useStableCallback.d.ts +26 -0
  347. package/lib/typescript/hooks/useStableCallback.d.ts.map +1 -0
  348. package/lib/typescript/hooks/useTranslatedMessage.d.ts +59 -58
  349. package/lib/typescript/hooks/useTranslatedMessage.d.ts.map +1 -1
  350. package/lib/typescript/i18n/en.json +3 -0
  351. package/lib/typescript/i18n/es.json +3 -0
  352. package/lib/typescript/i18n/fr.json +3 -0
  353. package/lib/typescript/i18n/he.json +3 -0
  354. package/lib/typescript/i18n/hi.json +2 -0
  355. package/lib/typescript/i18n/it.json +3 -0
  356. package/lib/typescript/i18n/ja.json +1 -0
  357. package/lib/typescript/i18n/ko.json +1 -0
  358. package/lib/typescript/i18n/nl.json +2 -0
  359. package/lib/typescript/i18n/pt-br.json +3 -0
  360. package/lib/typescript/i18n/ru.json +4 -0
  361. package/lib/typescript/i18n/tr.json +2 -0
  362. package/lib/typescript/native.d.ts +8 -11
  363. package/lib/typescript/native.d.ts.map +1 -1
  364. package/lib/typescript/store/apis/insertReaction.d.ts +2 -2
  365. package/lib/typescript/store/apis/insertReaction.d.ts.map +1 -1
  366. package/lib/typescript/store/apis/updateMessage.d.ts +2 -2
  367. package/lib/typescript/store/apis/updateMessage.d.ts.map +1 -1
  368. package/lib/typescript/store/apis/updateReaction.d.ts +2 -2
  369. package/lib/typescript/store/apis/updateReaction.d.ts.map +1 -1
  370. package/lib/typescript/store/mappers/mapMessageToStorable.d.ts +2 -2
  371. package/lib/typescript/store/mappers/mapMessageToStorable.d.ts.map +1 -1
  372. package/lib/typescript/types/types.d.ts +28 -50
  373. package/lib/typescript/types/types.d.ts.map +1 -1
  374. package/lib/typescript/utils/compressImage.d.ts +2 -2
  375. package/lib/typescript/utils/compressImage.d.ts.map +1 -1
  376. package/lib/typescript/utils/i18n/Streami18n.d.ts +3 -0
  377. package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
  378. package/lib/typescript/utils/removeReservedFields.d.ts +2 -3
  379. package/lib/typescript/utils/removeReservedFields.d.ts.map +1 -1
  380. package/lib/typescript/utils/utils.d.ts +10 -10
  381. package/lib/typescript/utils/utils.d.ts.map +1 -1
  382. package/package.json +4 -3
  383. package/src/components/Attachment/AudioAttachment.tsx +12 -6
  384. package/src/components/Attachment/FileAttachmentGroup.tsx +3 -1
  385. package/src/components/Attachment/Gallery.tsx +22 -7
  386. package/src/components/Attachment/ImageReloadIndicator.tsx +4 -5
  387. package/src/components/AttachmentPicker/AttachmentPicker.tsx +4 -10
  388. package/src/components/AttachmentPicker/components/AttachmentPickerItem.tsx +9 -37
  389. package/src/components/AutoCompleteInput/AutoCompleteInput.tsx +27 -23
  390. package/src/components/AutoCompleteInput/__tests__/AutoCompleteInput.test.js +12 -12
  391. package/src/components/Channel/Channel.tsx +423 -361
  392. package/src/components/Channel/__tests__/Channel.test.js +10 -3
  393. package/src/components/Channel/hooks/useChannelDataState.ts +2 -4
  394. package/src/components/Channel/hooks/useCreateMessagesContext.ts +2 -0
  395. package/src/components/Channel/hooks/useMessageListPagination.tsx +150 -150
  396. package/src/components/Chat/Chat.tsx +0 -9
  397. package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +8 -7
  398. package/src/components/ImageGallery/__tests__/ImageGalleryFooter.test.tsx +5 -4
  399. package/src/components/ImageGallery/__tests__/ImageGalleryHeader.test.tsx +5 -4
  400. package/src/components/ImageGallery/__tests__/ImageGalleryOverlay.test.tsx +3 -2
  401. package/src/components/KeyboardCompatibleView/KeyboardCompatibleView.tsx +12 -5
  402. package/src/components/Message/Message.tsx +16 -15
  403. package/src/components/Message/MessageSimple/MessageFooter.tsx +2 -3
  404. package/src/components/Message/MessageSimple/MessageSimple.tsx +112 -70
  405. package/src/components/Message/MessageSimple/MessageStatus.tsx +19 -17
  406. package/src/components/Message/MessageSimple/MessageTextContainer.tsx +3 -3
  407. package/src/components/Message/MessageSimple/__tests__/MessageStatus.test.js +11 -5
  408. package/src/components/Message/MessageSimple/__tests__/MessageTextContainer.test.tsx +5 -4
  409. package/src/components/Message/MessageSimple/utils/renderText.tsx +2 -3
  410. package/src/components/Message/hooks/useCreateMessageContext.ts +3 -0
  411. package/src/components/Message/hooks/useMessageActionHandlers.ts +1 -3
  412. package/src/components/Message/hooks/useMessageActions.tsx +4 -3
  413. package/src/components/MessageInput/FileUploadPreview.tsx +41 -70
  414. package/src/components/MessageInput/ImageUploadPreview.tsx +2 -2
  415. package/src/components/MessageInput/InputButtons.tsx +14 -10
  416. package/src/components/MessageInput/MessageInput.tsx +28 -30
  417. package/src/components/MessageInput/__tests__/FileUploadPreview.test.js +1 -1
  418. package/src/components/MessageInput/__tests__/MessageInput.test.js +3 -1
  419. package/src/components/MessageInput/components/AudioRecorder/AudioRecordingButton.tsx +1 -0
  420. package/src/components/MessageInput/hooks/useAudioController.tsx +6 -5
  421. package/src/components/MessageList/MessageList.tsx +253 -137
  422. package/src/components/MessageList/MessageSystem.tsx +2 -2
  423. package/src/components/MessageList/hooks/useMessageList.ts +82 -64
  424. package/src/components/MessageList/hooks/useShouldScrollToRecentOnNewOwnMessage.ts +2 -2
  425. package/src/components/MessageList/utils/getGroupStyles.ts +7 -5
  426. package/src/components/MessageList/utils/getLastReceivedMessage.ts +3 -3
  427. package/src/components/MessageList/utils/getReadState.ts +27 -0
  428. package/src/components/MessageMenu/__tests__/MessageUserReactions.test.tsx +2 -3
  429. package/src/components/MessageMenu/hooks/useFetchReactions.ts +2 -3
  430. package/src/components/Poll/components/Button.tsx +2 -4
  431. package/src/components/Poll/components/PollResults/PollResultItem.tsx +2 -3
  432. package/src/components/Reply/Reply.tsx +1 -2
  433. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +318 -847
  434. package/src/components/Thread/components/ThreadFooterComponent.tsx +31 -9
  435. package/src/components/ThreadList/ThreadListItem.tsx +6 -4
  436. package/src/components/UIComponents/BottomSheetModal.tsx +11 -7
  437. package/src/components/index.ts +2 -1
  438. package/src/contexts/attachmentPickerContext/AttachmentPickerContext.tsx +5 -4
  439. package/src/contexts/channelsStateContext/useChannelState.ts +5 -1
  440. package/src/contexts/debugContext/DebugContext.tsx +2 -4
  441. package/src/contexts/imageGalleryContext/ImageGalleryContext.tsx +5 -4
  442. package/src/contexts/messageContext/MessageContext.tsx +6 -4
  443. package/src/contexts/messageInputContext/MessageInputContext.tsx +295 -262
  444. package/src/contexts/messageInputContext/__tests__/__snapshots__/sendMessage.test.tsx.snap +10 -6
  445. package/src/contexts/messageInputContext/__tests__/sendMessage.test.tsx +6 -5
  446. package/src/contexts/messageInputContext/__tests__/updateMessage.test.tsx +3 -5
  447. package/src/contexts/messageInputContext/__tests__/useMessageDetailsForState.test.tsx +14 -9
  448. package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +7 -3
  449. package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts +37 -40
  450. package/src/contexts/messageInputContext/utils/utils.ts +6 -8
  451. package/src/contexts/messagesContext/MessagesContext.tsx +26 -20
  452. package/src/contexts/pollContext/pollContext.tsx +2 -4
  453. package/src/contexts/suggestionsContext/SuggestionsContext.tsx +33 -14
  454. package/src/contexts/themeContext/utils/theme.ts +2 -0
  455. package/src/contexts/threadContext/ThreadContext.tsx +4 -6
  456. package/src/contexts/threadsContext/ThreadListItemContext.tsx +3 -5
  457. package/src/hooks/index.ts +2 -0
  458. package/src/hooks/useAudioPlayer.ts +37 -31
  459. package/src/hooks/useStableCallback.ts +37 -0
  460. package/src/hooks/useTranslatedMessage.ts +2 -2
  461. package/src/i18n/en.json +3 -0
  462. package/src/i18n/es.json +3 -0
  463. package/src/i18n/fr.json +3 -0
  464. package/src/i18n/he.json +3 -0
  465. package/src/i18n/hi.json +2 -0
  466. package/src/i18n/it.json +3 -0
  467. package/src/i18n/ja.json +1 -0
  468. package/src/i18n/ko.json +1 -0
  469. package/src/i18n/nl.json +2 -0
  470. package/src/i18n/pt-br.json +3 -0
  471. package/src/i18n/ru.json +4 -0
  472. package/src/i18n/tr.json +2 -0
  473. package/src/mock-builders/api/channelMocks.tsx +2 -8
  474. package/src/native.ts +13 -8
  475. package/src/store/apis/insertReaction.ts +2 -2
  476. package/src/store/apis/updateMessage.ts +2 -2
  477. package/src/store/apis/updateReaction.ts +2 -2
  478. package/src/store/mappers/mapMessageToStorable.ts +2 -2
  479. package/src/types/stream-chat-common-custom-data.d.ts +22 -22
  480. package/src/types/types.ts +35 -54
  481. package/src/utils/compressImage.ts +3 -4
  482. package/src/utils/removeReservedFields.ts +3 -5
  483. package/src/utils/utils.ts +25 -16
  484. package/src/version.json +1 -1
  485. package/lib/commonjs/components/MessageList/hooks/useLastReadData.js +0 -20
  486. package/lib/commonjs/components/MessageList/hooks/useLastReadData.js.map +0 -1
  487. package/lib/commonjs/components/MessageList/utils/getReadStates.js +0 -34
  488. package/lib/commonjs/components/MessageList/utils/getReadStates.js.map +0 -1
  489. package/lib/module/components/MessageList/hooks/useLastReadData.js +0 -20
  490. package/lib/module/components/MessageList/hooks/useLastReadData.js.map +0 -1
  491. package/lib/module/components/MessageList/utils/getReadStates.js +0 -34
  492. package/lib/module/components/MessageList/utils/getReadStates.js.map +0 -1
  493. package/lib/typescript/components/MessageList/hooks/useLastReadData.d.ts +0 -12
  494. package/lib/typescript/components/MessageList/hooks/useLastReadData.d.ts.map +0 -1
  495. package/lib/typescript/components/MessageList/utils/getReadStates.d.ts +0 -5
  496. package/lib/typescript/components/MessageList/utils/getReadStates.d.ts.map +0 -1
  497. package/src/components/MessageList/hooks/useLastReadData.ts +0 -29
  498. package/src/components/MessageList/utils/getReadStates.ts +0 -55
@@ -37,6 +37,7 @@ var _ThemeContext = require("../../contexts/themeContext/ThemeContext");
37
37
  var _ThreadContext = require("../../contexts/threadContext/ThreadContext");
38
38
  var _TranslationContext = require("../../contexts/translationContext/TranslationContext");
39
39
  var _TypingContext = require("../../contexts/typingContext/TypingContext");
40
+ var _hooks = require("../../hooks");
40
41
  var _useAppStateListener = require("../../hooks/useAppStateListener");
41
42
  var _icons = require("../../icons");
42
43
  var _native = require("../../native");
@@ -60,6 +61,7 @@ var _Gallery = require("../Attachment/Gallery");
60
61
  var _Giphy = require("../Attachment/Giphy");
61
62
  var _ImageLoadingFailedIndicator = require("../Attachment/ImageLoadingFailedIndicator");
62
63
  var _ImageLoadingIndicator = require("../Attachment/ImageLoadingIndicator");
64
+ var _ImageReloadIndicator = require("../Attachment/ImageReloadIndicator");
63
65
  var _VideoThumbnail = require("../Attachment/VideoThumbnail");
64
66
  var _AutoCompleteSuggestionHeader = require("../AutoCompleteInput/AutoCompleteSuggestionHeader");
65
67
  var _AutoCompleteSuggestionItem = require("../AutoCompleteInput/AutoCompleteSuggestionItem");
@@ -169,7 +171,7 @@ var debounceOptions = {
169
171
  trailing: true
170
172
  };
171
173
  var ChannelWithContext = function ChannelWithContext(props) {
172
- var _channel$getConfig, _channel$data, _ref19, _channelState$members, _channelState$read, _ref20, _channelMessagesState3, _channelState$typing, _channelMessagesState4;
174
+ var _channel$getConfig, _channel$data, _ref19, _channelState$members, _channelState$read, _getChannelConfigSafe, _getChannelConfigSafe2, _ref20, _channelMessagesState3, _channelState$typing, _channelMessagesState4;
173
175
  var additionalKeyboardAvoidingViewProps = props.additionalKeyboardAvoidingViewProps,
174
176
  additionalPressableProps = props.additionalPressableProps,
175
177
  additionalTextInputProps = props.additionalTextInputProps,
@@ -286,8 +288,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
286
288
  handleThreadReply = props.handleThreadReply,
287
289
  _props$hasCameraPicke = props.hasCameraPicker,
288
290
  hasCameraPicker = _props$hasCameraPicke === void 0 ? (0, _native.isImagePickerAvailable)() : _props$hasCameraPicke,
289
- _props$hasCommands = props.hasCommands,
290
- hasCommands = _props$hasCommands === void 0 ? true : _props$hasCommands,
291
+ hasCommands = props.hasCommands,
291
292
  hasCreatePoll = props.hasCreatePoll,
292
293
  _props$hasFilePicker = props.hasFilePicker,
293
294
  hasFilePicker = _props$hasFilePicker === void 0 ? (0, _native.isDocumentPickerAvailable)() : _props$hasFilePicker,
@@ -301,6 +302,8 @@ var ChannelWithContext = function ChannelWithContext(props) {
301
302
  ImageLoadingFailedIndicator = _props$ImageLoadingFa === void 0 ? _ImageLoadingFailedIndicator.ImageLoadingFailedIndicator : _props$ImageLoadingFa,
302
303
  _props$ImageLoadingIn = props.ImageLoadingIndicator,
303
304
  ImageLoadingIndicator = _props$ImageLoadingIn === void 0 ? _ImageLoadingIndicator.ImageLoadingIndicator : _props$ImageLoadingIn,
305
+ _props$ImageReloadInd = props.ImageReloadIndicator,
306
+ ImageReloadIndicator = _props$ImageReloadInd === void 0 ? _ImageReloadIndicator.ImageReloadIndicator : _props$ImageReloadInd,
304
307
  _props$ImageUploadPre = props.ImageUploadPreview,
305
308
  ImageUploadPreview = _props$ImageUploadPre === void 0 ? _ImageUploadPreview.ImageUploadPreview : _props$ImageUploadPre,
306
309
  _props$initialScrollT = props.initialScrollToFirstUnreadMessage,
@@ -518,6 +521,9 @@ var ChannelWithContext = function ChannelWithContext(props) {
518
521
  setTargetedMessage = _useTargetedMessage.setTargetedMessage,
519
522
  targetedMessage = _useTargetedMessage.targetedMessage;
520
523
  var uploadAbortControllerRef = (0, _react.useRef)(new Map());
524
+ var optimisticallyUpdatedNewMessages = (0, _react.useMemo)(function () {
525
+ return new Set();
526
+ }, []);
521
527
  var channelId = (channel == null ? void 0 : channel.id) || '';
522
528
  var pollCreationEnabled = !channel.disconnected && !!(channel != null && channel.id) && (channel == null || (_channel$getConfig = channel.getConfig()) == null ? void 0 : _channel$getConfig.polls);
523
529
  var _useChannelDataState = (0, _useChannelDataState2.useChannelDataState)(channel),
@@ -537,23 +543,39 @@ var ChannelWithContext = function ChannelWithContext(props) {
537
543
  loadMore = _useMessageListPagina.loadMore,
538
544
  loadMoreRecent = _useMessageListPagina.loadMoreRecent,
539
545
  channelMessagesState = _useMessageListPagina.state;
540
- var copyChannelStateThrottlingTime = newMessageStateUpdateThrottleInterval > stateUpdateThrottleInterval ? newMessageStateUpdateThrottleInterval : stateUpdateThrottleInterval;
546
+ var setReadThrottled = (0, _react.useMemo)(function () {
547
+ return (0, _throttle["default"])(function () {
548
+ if (channel) {
549
+ setRead(channel);
550
+ }
551
+ }, stateUpdateThrottleInterval, throttleOptions);
552
+ }, [channel, stateUpdateThrottleInterval, setRead]);
553
+ var copyMessagesStateFromChannelThrottled = (0, _react.useMemo)(function () {
554
+ return (0, _throttle["default"])(function () {
555
+ if (channel) {
556
+ copyMessagesStateFromChannel(channel);
557
+ }
558
+ }, newMessageStateUpdateThrottleInterval, throttleOptions);
559
+ }, [channel, newMessageStateUpdateThrottleInterval, copyMessagesStateFromChannel]);
541
560
  var copyChannelState = (0, _react.useMemo)(function () {
542
561
  return (0, _throttle["default"])(function () {
543
562
  if (channel) {
544
563
  copyStateFromChannel(channel);
545
564
  copyMessagesStateFromChannel(channel);
546
565
  }
547
- }, copyChannelStateThrottlingTime, throttleOptions);
548
- }, [channel, copyChannelStateThrottlingTime, copyMessagesStateFromChannel, copyStateFromChannel]);
549
- var handleEvent = function handleEvent(event) {
566
+ }, stateUpdateThrottleInterval, throttleOptions);
567
+ }, [stateUpdateThrottleInterval, channel, copyStateFromChannel, copyMessagesStateFromChannel]);
568
+ var handleEvent = (0, _hooks.useStableCallback)(function (event) {
550
569
  if (shouldSyncChannel) {
551
570
  if (event.type.startsWith('poll.') || event.type === 'user.watching.start' || event.type === 'user.watching.stop') {
552
571
  return;
553
572
  }
554
- var isTypingEvent = event.type === 'typing.start' || event.type === 'typing.stop';
555
- if (isTypingEvent) {
556
- setTyping(channel);
573
+ if (event.type === 'typing.start' || event.type === 'typing.stop') {
574
+ var _event$user;
575
+ if (((_event$user = event.user) == null ? void 0 : _event$user.id) !== client.userID) {
576
+ setTyping(channel);
577
+ }
578
+ return;
557
579
  } else {
558
580
  if (thread != null && thread.id) {
559
581
  var _event$message;
@@ -583,10 +605,23 @@ var ChannelWithContext = function ChannelWithContext(props) {
583
605
  setChannelUnreadState(undefined);
584
606
  }
585
607
  if (channel && channel.initialized) {
608
+ if (event.type === 'message.new' || event.type === 'notification.message_new') {
609
+ var _event$message$id, _event$message2, _event$user2;
610
+ var _messageId = (_event$message$id = (_event$message2 = event.message) == null ? void 0 : _event$message2.id) != null ? _event$message$id : '';
611
+ if (((_event$user2 = event.user) == null ? void 0 : _event$user2.id) !== client.userID || !optimisticallyUpdatedNewMessages.has(_messageId)) {
612
+ copyMessagesStateFromChannelThrottled();
613
+ }
614
+ optimisticallyUpdatedNewMessages["delete"](_messageId);
615
+ return;
616
+ }
617
+ if (event.type === 'message.read' || event.type === 'notification.mark_read') {
618
+ setReadThrottled();
619
+ return;
620
+ }
586
621
  copyChannelState();
587
622
  }
588
623
  }
589
- };
624
+ });
590
625
  (0, _react.useEffect)(function () {
591
626
  var listener;
592
627
  var initChannel = function () {
@@ -598,7 +633,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
598
633
  case 0:
599
634
  setLastRead(new Date());
600
635
  unreadCount = channel.countUnread();
601
- if (!(!channel || !shouldSyncChannel || channel.offlineMode)) {
636
+ if (!(!channel || !shouldSyncChannel)) {
602
637
  _context.next = 4;
603
638
  break;
604
639
  }
@@ -692,16 +727,6 @@ var ChannelWithContext = function ChannelWithContext(props) {
692
727
  unsubscribe = _client$on.unsubscribe;
693
728
  return unsubscribe;
694
729
  }, [channel == null ? void 0 : channel.cid, client]);
695
- (0, _react.useEffect)(function () {
696
- var handleEvent = function handleEvent(event) {
697
- if (channel.cid === event.cid) {
698
- setRead(channel);
699
- }
700
- };
701
- var _client$on2 = client.on('notification.mark_read', handleEvent),
702
- unsubscribe = _client$on2.unsubscribe;
703
- return unsubscribe;
704
- }, [channel, client, setRead]);
705
730
  var threadPropsExists = !!threadProps;
706
731
  (0, _react.useEffect)(function () {
707
732
  if (threadProps && shouldSyncChannel) {
@@ -725,7 +750,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
725
750
  }
726
751
  }, [thread == null ? void 0 : thread.id, channelId]);
727
752
  (0, _useAppStateListener.useAppStateListener)(undefined, handleAppBackground);
728
- var markRead = (0, _throttle["default"])(function () {
753
+ var markReadInternal = (0, _throttle["default"])(function () {
729
754
  var _ref2 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2(options) {
730
755
  var _ref3, _ref3$updateChannelUn, updateChannelUnreadState, response;
731
756
  return _regenerator["default"].wrap(function _callee2$(_context2) {
@@ -757,6 +782,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
757
782
  last_read_message_id: response == null ? void 0 : response.event.last_read_message_id,
758
783
  unread_messages: 0
759
784
  });
785
+ setLastRead(new Date());
760
786
  }
761
787
  _context2.next = 17;
762
788
  break;
@@ -774,147 +800,138 @@ var ChannelWithContext = function ChannelWithContext(props) {
774
800
  return _ref2.apply(this, arguments);
775
801
  };
776
802
  }(), defaultThrottleInterval, throttleOptions);
777
- var reloadThread = function () {
778
- var _ref4 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3() {
779
- var parentID, limit, queryResponse, updatedHasMore, updatedThreadMessages, _yield$channel$getMes, messages, _messages, threadMessage, formattedMessage;
780
- return _regenerator["default"].wrap(function _callee3$(_context3) {
781
- while (1) switch (_context3.prev = _context3.next) {
782
- case 0:
783
- if (!(!channel || !(thread != null && thread.id))) {
784
- _context3.next = 2;
785
- break;
786
- }
787
- return _context3.abrupt("return");
788
- case 2:
789
- setThreadLoadingMore(true);
790
- _context3.prev = 3;
791
- parentID = thread.id;
792
- limit = 50;
793
- channel.state.threads[parentID] = [];
794
- _context3.next = 9;
795
- return channel.getReplies(parentID, {
796
- limit: limit
797
- });
798
- case 9:
799
- queryResponse = _context3.sent;
800
- updatedHasMore = queryResponse.messages.length === limit;
801
- updatedThreadMessages = channel.state.threads[parentID] || [];
802
- loadMoreThreadFinished(updatedHasMore, updatedThreadMessages);
803
- _context3.next = 15;
804
- return channel.getMessagesById([parentID]);
805
- case 15:
806
- _yield$channel$getMes = _context3.sent;
807
- messages = _yield$channel$getMes.messages;
808
- _messages = (0, _slicedToArray2["default"])(messages, 1), threadMessage = _messages[0];
809
- if (threadMessage && !threadInstance) {
810
- formattedMessage = channel.state.formatMessage(threadMessage);
811
- setThread(formattedMessage);
812
- }
813
- _context3.next = 27;
803
+ var markRead = (0, _hooks.useStableCallback)(markReadInternal);
804
+ var reloadThread = (0, _hooks.useStableCallback)((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3() {
805
+ var parentID, limit, queryResponse, updatedHasMore, updatedThreadMessages, _yield$channel$getMes, messages, _messages, threadMessage, formattedMessage;
806
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
807
+ while (1) switch (_context3.prev = _context3.next) {
808
+ case 0:
809
+ if (!(!channel || !(thread != null && thread.id))) {
810
+ _context3.next = 2;
814
811
  break;
815
- case 21:
816
- _context3.prev = 21;
817
- _context3.t0 = _context3["catch"](3);
818
- console.warn('Thread loading request failed with error', _context3.t0);
819
- if (_context3.t0 instanceof Error) {
820
- setError(_context3.t0);
821
- } else {
822
- setError(true);
823
- }
824
- setThreadLoadingMore(false);
825
- throw _context3.t0;
826
- case 27:
827
- case "end":
828
- return _context3.stop();
829
- }
830
- }, _callee3, null, [[3, 21]]);
831
- }));
832
- return function reloadThread() {
833
- return _ref4.apply(this, arguments);
834
- };
835
- }();
836
- var resyncChannel = function () {
837
- var _ref5 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee4() {
838
- var parseMessage, _channelMessagesState, failedMessages, failedThreadMessages;
839
- return _regenerator["default"].wrap(function _callee4$(_context4) {
840
- while (1) switch (_context4.prev = _context4.next) {
841
- case 0:
842
- if (!(!channel || syncingChannelRef.current)) {
843
- _context4.next = 2;
844
- break;
845
- }
846
- return _context4.abrupt("return");
847
- case 2:
848
- syncingChannelRef.current = true;
849
- setError(false);
850
- if (!(channelMessagesState != null && channelMessagesState.messages)) {
851
- _context4.next = 7;
852
- break;
853
- }
812
+ }
813
+ return _context3.abrupt("return");
814
+ case 2:
815
+ setThreadLoadingMore(true);
816
+ _context3.prev = 3;
817
+ parentID = thread.id;
818
+ limit = 50;
819
+ channel.state.threads[parentID] = [];
820
+ _context3.next = 9;
821
+ return channel.getReplies(parentID, {
822
+ limit: limit
823
+ });
824
+ case 9:
825
+ queryResponse = _context3.sent;
826
+ updatedHasMore = queryResponse.messages.length === limit;
827
+ updatedThreadMessages = channel.state.threads[parentID] || [];
828
+ loadMoreThreadFinished(updatedHasMore, updatedThreadMessages);
829
+ _context3.next = 15;
830
+ return channel.getMessagesById([parentID]);
831
+ case 15:
832
+ _yield$channel$getMes = _context3.sent;
833
+ messages = _yield$channel$getMes.messages;
834
+ _messages = (0, _slicedToArray2["default"])(messages, 1), threadMessage = _messages[0];
835
+ if (threadMessage && !threadInstance) {
836
+ formattedMessage = channel.state.formatMessage(threadMessage);
837
+ setThread(formattedMessage);
838
+ }
839
+ _context3.next = 27;
840
+ break;
841
+ case 21:
842
+ _context3.prev = 21;
843
+ _context3.t0 = _context3["catch"](3);
844
+ console.warn('Thread loading request failed with error', _context3.t0);
845
+ if (_context3.t0 instanceof Error) {
846
+ setError(_context3.t0);
847
+ } else {
848
+ setError(true);
849
+ }
850
+ setThreadLoadingMore(false);
851
+ throw _context3.t0;
852
+ case 27:
853
+ case "end":
854
+ return _context3.stop();
855
+ }
856
+ }, _callee3, null, [[3, 21]]);
857
+ })));
858
+ var resyncChannel = (0, _hooks.useStableCallback)((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee4() {
859
+ var parseMessage, _channelMessagesState, failedMessages, failedThreadMessages;
860
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
861
+ while (1) switch (_context4.prev = _context4.next) {
862
+ case 0:
863
+ if (!(!channel || syncingChannelRef.current)) {
864
+ _context4.next = 2;
865
+ break;
866
+ }
867
+ return _context4.abrupt("return");
868
+ case 2:
869
+ syncingChannelRef.current = true;
870
+ setError(false);
871
+ if (!(channelMessagesState != null && channelMessagesState.messages)) {
854
872
  _context4.next = 7;
855
- return channel == null ? void 0 : channel.watch({
856
- messages: {
857
- limit: channelMessagesState.messages.length + 30
858
- }
859
- });
860
- case 7:
861
- parseMessage = function parseMessage(message) {
862
- var _message$pinned_at, _message$updated_at;
863
- return Object.assign({}, message, {
864
- created_at: message.created_at.toString(),
865
- pinned_at: (_message$pinned_at = message.pinned_at) == null ? void 0 : _message$pinned_at.toString(),
866
- updated_at: (_message$updated_at = message.updated_at) == null ? void 0 : _message$updated_at.toString()
867
- });
868
- };
869
- _context4.prev = 8;
870
- if (thread) {
871
- _context4.next = 16;
872
- break;
873
- }
874
- copyChannelState();
875
- failedMessages = (_channelMessagesState = channelMessagesState.messages) == null ? void 0 : _channelMessagesState.filter(function (message) {
876
- return message.status === _utils.MessageStatusTypes.FAILED;
877
- }).map(parseMessage);
878
- if (failedMessages != null && failedMessages.length) {
879
- channel.state.addMessagesSorted(failedMessages);
880
- }
881
- channel.state.setIsUpToDate(true);
882
- _context4.next = 20;
883
873
  break;
884
- case 16:
885
- _context4.next = 18;
886
- return reloadThread();
887
- case 18:
888
- failedThreadMessages = thread ? threadMessages.filter(function (message) {
889
- return message.status === _utils.MessageStatusTypes.FAILED;
890
- }).map(parseMessage) : [];
891
- if (failedThreadMessages.length) {
892
- channel.state.addMessagesSorted(failedThreadMessages);
893
- setThreadMessages((0, _toConsumableArray2["default"])(channel.state.threads[thread.id]));
874
+ }
875
+ _context4.next = 7;
876
+ return channel == null ? void 0 : channel.watch({
877
+ messages: {
878
+ limit: channelMessagesState.messages.length + 30
894
879
  }
895
- case 20:
896
- _context4.next = 25;
880
+ });
881
+ case 7:
882
+ parseMessage = function parseMessage(message) {
883
+ var _message$pinned_at, _message$updated_at;
884
+ return Object.assign({}, message, {
885
+ created_at: message.created_at.toString(),
886
+ pinned_at: (_message$pinned_at = message.pinned_at) == null ? void 0 : _message$pinned_at.toString(),
887
+ updated_at: (_message$updated_at = message.updated_at) == null ? void 0 : _message$updated_at.toString()
888
+ });
889
+ };
890
+ _context4.prev = 8;
891
+ if (thread) {
892
+ _context4.next = 16;
897
893
  break;
898
- case 22:
899
- _context4.prev = 22;
900
- _context4.t0 = _context4["catch"](8);
901
- if (_context4.t0 instanceof Error) {
902
- setError(_context4.t0);
903
- } else {
904
- setError(true);
905
- }
906
- case 25:
907
- syncingChannelRef.current = false;
908
- case 26:
909
- case "end":
910
- return _context4.stop();
911
- }
912
- }, _callee4, null, [[8, 22]]);
913
- }));
914
- return function resyncChannel() {
915
- return _ref5.apply(this, arguments);
916
- };
917
- }();
894
+ }
895
+ copyChannelState();
896
+ failedMessages = (_channelMessagesState = channelMessagesState.messages) == null ? void 0 : _channelMessagesState.filter(function (message) {
897
+ return message.status === _utils.MessageStatusTypes.FAILED;
898
+ }).map(parseMessage);
899
+ if (failedMessages != null && failedMessages.length) {
900
+ channel.state.addMessagesSorted(failedMessages);
901
+ }
902
+ channel.state.setIsUpToDate(true);
903
+ _context4.next = 20;
904
+ break;
905
+ case 16:
906
+ _context4.next = 18;
907
+ return reloadThread();
908
+ case 18:
909
+ failedThreadMessages = thread ? threadMessages.filter(function (message) {
910
+ return message.status === _utils.MessageStatusTypes.FAILED;
911
+ }).map(parseMessage) : [];
912
+ if (failedThreadMessages.length) {
913
+ channel.state.addMessagesSorted(failedThreadMessages);
914
+ setThreadMessages((0, _toConsumableArray2["default"])(channel.state.threads[thread.id]));
915
+ }
916
+ case 20:
917
+ _context4.next = 25;
918
+ break;
919
+ case 22:
920
+ _context4.prev = 22;
921
+ _context4.t0 = _context4["catch"](8);
922
+ if (_context4.t0 instanceof Error) {
923
+ setError(_context4.t0);
924
+ } else {
925
+ setError(true);
926
+ }
927
+ case 25:
928
+ syncingChannelRef.current = false;
929
+ case 26:
930
+ case "end":
931
+ return _context4.stop();
932
+ }
933
+ }, _callee4, null, [[8, 22]]);
934
+ })));
918
935
  var resyncChannelRef = (0, _react.useRef)(resyncChannel);
919
936
  resyncChannelRef.current = resyncChannel;
920
937
  (0, _react.useEffect)(function () {
@@ -949,32 +966,27 @@ var ChannelWithContext = function ChannelWithContext(props) {
949
966
  }
950
967
  };
951
968
  var clientChannelConfig = getChannelConfigSafely();
952
- var reloadChannel = function () {
953
- var _ref6 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee5() {
954
- return _regenerator["default"].wrap(function _callee5$(_context5) {
955
- while (1) switch (_context5.prev = _context5.next) {
956
- case 0:
957
- _context5.prev = 0;
958
- _context5.next = 3;
959
- return loadLatestMessages();
960
- case 3:
961
- _context5.next = 8;
962
- break;
963
- case 5:
964
- _context5.prev = 5;
965
- _context5.t0 = _context5["catch"](0);
966
- console.warn('Reloading channel failed with error:', _context5.t0);
967
- case 8:
968
- case "end":
969
- return _context5.stop();
970
- }
971
- }, _callee5, null, [[0, 5]]);
972
- }));
973
- return function reloadChannel() {
974
- return _ref6.apply(this, arguments);
975
- };
976
- }();
977
- var loadChannelAroundMessage = function () {
969
+ var reloadChannel = (0, _hooks.useStableCallback)((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee5() {
970
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
971
+ while (1) switch (_context5.prev = _context5.next) {
972
+ case 0:
973
+ _context5.prev = 0;
974
+ _context5.next = 3;
975
+ return loadLatestMessages();
976
+ case 3:
977
+ _context5.next = 8;
978
+ break;
979
+ case 5:
980
+ _context5.prev = 5;
981
+ _context5.t0 = _context5["catch"](0);
982
+ console.warn('Reloading channel failed with error:', _context5.t0);
983
+ case 8:
984
+ case "end":
985
+ return _context5.stop();
986
+ }
987
+ }, _callee5, null, [[0, 5]]);
988
+ })));
989
+ var loadChannelAroundMessage = (0, _hooks.useStableCallback)(function () {
978
990
  var _ref8 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee6(_ref7) {
979
991
  var messageIdToLoadAround;
980
992
  return _regenerator["default"].wrap(function _callee6$(_context6) {
@@ -1035,23 +1047,28 @@ var ChannelWithContext = function ChannelWithContext(props) {
1035
1047
  }
1036
1048
  }, _callee6, null, [[3, 24], [6, 14]]);
1037
1049
  }));
1038
- return function loadChannelAroundMessage(_x2) {
1050
+ return function (_x2) {
1039
1051
  return _ref8.apply(this, arguments);
1040
1052
  };
1041
- }();
1042
- var updateMessage = function updateMessage(updatedMessage) {
1053
+ }());
1054
+ var updateMessage = (0, _hooks.useStableCallback)(function (updatedMessage) {
1043
1055
  var extraState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1056
+ var throttled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1044
1057
  if (!channel) {
1045
1058
  return;
1046
1059
  }
1047
1060
  channel.state.addMessageSorted(updatedMessage, true);
1048
- copyMessagesStateFromChannel(channel);
1061
+ if (throttled) {
1062
+ copyMessagesStateFromChannelThrottled();
1063
+ } else {
1064
+ copyMessagesStateFromChannel(channel);
1065
+ }
1049
1066
  if (thread && updatedMessage.parent_id) {
1050
1067
  extraState.threadMessages = channel.state.threads[updatedMessage.parent_id] || [];
1051
1068
  setThreadMessages(extraState.threadMessages);
1052
1069
  }
1053
- };
1054
- var replaceMessage = function replaceMessage(oldMessage, newMessage) {
1070
+ });
1071
+ var replaceMessage = (0, _hooks.useStableCallback)(function (oldMessage, newMessage) {
1055
1072
  if (channel) {
1056
1073
  channel.state.removeMessage(oldMessage);
1057
1074
  channel.state.addMessageSorted(newMessage, true);
@@ -1061,8 +1078,8 @@ var ChannelWithContext = function ChannelWithContext(props) {
1061
1078
  setThreadMessages(_threadMessages);
1062
1079
  }
1063
1080
  }
1064
- };
1065
- var createMessagePreview = function createMessagePreview(_ref9) {
1081
+ });
1082
+ var createMessagePreview = (0, _hooks.useStableCallback)(function (_ref9) {
1066
1083
  var attachments = _ref9.attachments,
1067
1084
  mentioned_users = _ref9.mentioned_users,
1068
1085
  parent_id = _ref9.parent_id,
@@ -1103,8 +1120,8 @@ var ChannelWithContext = function ChannelWithContext(props) {
1103
1120
  preview.quoted_message = _quotedMessage;
1104
1121
  }
1105
1122
  return preview;
1106
- };
1107
- var uploadPendingAttachments = function () {
1123
+ });
1124
+ var uploadPendingAttachments = (0, _hooks.useStableCallback)(function () {
1108
1125
  var _ref10 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee7(message) {
1109
1126
  var _updatedMessage$attac;
1110
1127
  var updatedMessage, i, _updatedMessage$attac2, attachment, image, file, _image$name, filename, controller, compressedUri, contentType, uploadResponse, _controller, response;
@@ -1187,7 +1204,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1187
1204
  break;
1188
1205
  case 38:
1189
1206
  _context7.next = 40;
1190
- return channel.sendFile(file.uri, file.name, file.mimeType);
1207
+ return channel.sendFile(file.uri, file.name, file.type);
1191
1208
  case 40:
1192
1209
  _context7.t1 = _context7.sent;
1193
1210
  case 41:
@@ -1215,11 +1232,11 @@ var ChannelWithContext = function ChannelWithContext(props) {
1215
1232
  }
1216
1233
  }, _callee7);
1217
1234
  }));
1218
- return function uploadPendingAttachments(_x3) {
1235
+ return function (_x3) {
1219
1236
  return _ref10.apply(this, arguments);
1220
1237
  };
1221
- }();
1222
- var sendMessageRequest = function () {
1238
+ }());
1239
+ var sendMessageRequest = (0, _hooks.useStableCallback)(function () {
1223
1240
  var _ref11 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee8(message, retrying) {
1224
1241
  var updatedMessage, extraFields, attachments, id, mentioned_users, parent_id, text, mentionedUserIds, messageData, messageResponse, _updatedMessage;
1225
1242
  return _regenerator["default"].wrap(function _callee8$(_context8) {
@@ -1270,7 +1287,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1270
1287
  messageResponse = _context8.sent;
1271
1288
  case 21:
1272
1289
  if (!messageResponse.message) {
1273
- _context8.next = 28;
1290
+ _context8.next = 27;
1274
1291
  break;
1275
1292
  }
1276
1293
  messageResponse.message.status = _utils.MessageStatusTypes.RECEIVED;
@@ -1288,16 +1305,13 @@ var ChannelWithContext = function ChannelWithContext(props) {
1288
1305
  if (retrying) {
1289
1306
  replaceMessage(message, messageResponse.message);
1290
1307
  } else {
1291
- updateMessage(messageResponse.message);
1308
+ updateMessage(messageResponse.message, {}, true);
1292
1309
  }
1293
- threadInstance == null || threadInstance.upsertReplyLocally == null || threadInstance.upsertReplyLocally({
1294
- message: messageResponse.message
1295
- });
1296
- case 28:
1310
+ case 27:
1297
1311
  _context8.next = 40;
1298
1312
  break;
1299
- case 30:
1300
- _context8.prev = 30;
1313
+ case 29:
1314
+ _context8.prev = 29;
1301
1315
  _context8.t0 = _context8["catch"](0);
1302
1316
  console.log(_context8.t0);
1303
1317
  message.status = _utils.MessageStatusTypes.FAILED;
@@ -1308,6 +1322,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1308
1322
  threadInstance == null || threadInstance.upsertReplyLocally == null || threadInstance.upsertReplyLocally({
1309
1323
  message: _updatedMessage
1310
1324
  });
1325
+ optimisticallyUpdatedNewMessages["delete"](message.id);
1311
1326
  if (!enableOfflineSupport) {
1312
1327
  _context8.next = 40;
1313
1328
  break;
@@ -1322,13 +1337,13 @@ var ChannelWithContext = function ChannelWithContext(props) {
1322
1337
  case "end":
1323
1338
  return _context8.stop();
1324
1339
  }
1325
- }, _callee8, null, [[0, 30]]);
1340
+ }, _callee8, null, [[0, 29]]);
1326
1341
  }));
1327
- return function sendMessageRequest(_x4, _x5) {
1342
+ return function (_x4, _x5) {
1328
1343
  return _ref11.apply(this, arguments);
1329
1344
  };
1330
- }();
1331
- var sendMessage = function () {
1345
+ }());
1346
+ var sendMessage = (0, _hooks.useStableCallback)(function () {
1332
1347
  var _ref12 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee9(message) {
1333
1348
  var _channel$state;
1334
1349
  var messagePreview;
@@ -1348,31 +1363,32 @@ var ChannelWithContext = function ChannelWithContext(props) {
1348
1363
  threadInstance == null || threadInstance.upsertReplyLocally == null || threadInstance.upsertReplyLocally({
1349
1364
  message: messagePreview
1350
1365
  });
1366
+ optimisticallyUpdatedNewMessages.add(messagePreview.id);
1351
1367
  if (!enableOfflineSupport) {
1352
- _context9.next = 7;
1368
+ _context9.next = 8;
1353
1369
  break;
1354
1370
  }
1355
- _context9.next = 7;
1371
+ _context9.next = 8;
1356
1372
  return dbApi.upsertMessages({
1357
1373
  messages: [Object.assign({}, messagePreview, {
1358
1374
  cid: channel.cid,
1359
1375
  status: _utils.MessageStatusTypes.FAILED
1360
1376
  })]
1361
1377
  });
1362
- case 7:
1363
- _context9.next = 9;
1378
+ case 8:
1379
+ _context9.next = 10;
1364
1380
  return sendMessageRequest(messagePreview);
1365
- case 9:
1381
+ case 10:
1366
1382
  case "end":
1367
1383
  return _context9.stop();
1368
1384
  }
1369
1385
  }, _callee9);
1370
1386
  }));
1371
- return function sendMessage(_x6) {
1387
+ return function (_x6) {
1372
1388
  return _ref12.apply(this, arguments);
1373
1389
  };
1374
- }();
1375
- var retrySendMessage = function () {
1390
+ }());
1391
+ var retrySendMessage = (0, _hooks.useStableCallback)(function () {
1376
1392
  var _ref13 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee10(message) {
1377
1393
  var statusPendingMessage, messageWithoutReservedFields;
1378
1394
  return _regenerator["default"].wrap(function _callee10$(_context10) {
@@ -1393,27 +1409,27 @@ var ChannelWithContext = function ChannelWithContext(props) {
1393
1409
  }
1394
1410
  }, _callee10);
1395
1411
  }));
1396
- return function retrySendMessage(_x7) {
1412
+ return function (_x7) {
1397
1413
  return _ref13.apply(this, arguments);
1398
1414
  };
1399
- }();
1400
- var editMessage = function editMessage(updatedMessage) {
1415
+ }());
1416
+ var editMessage = (0, _hooks.useStableCallback)(function (updatedMessage) {
1401
1417
  return doUpdateMessageRequest ? doUpdateMessageRequest((channel == null ? void 0 : channel.cid) || '', updatedMessage) : client.updateMessage(updatedMessage);
1402
- };
1403
- var setEditingState = function setEditingState(message) {
1418
+ });
1419
+ var setEditingState = (0, _hooks.useStableCallback)(function (message) {
1404
1420
  clearQuotedMessageState();
1405
1421
  setEditing(message);
1406
- };
1407
- var setQuotedMessageState = function setQuotedMessageState(messageOrBoolean) {
1422
+ });
1423
+ var setQuotedMessageState = (0, _hooks.useStableCallback)(function (messageOrBoolean) {
1408
1424
  setQuotedMessage(messageOrBoolean);
1409
- };
1410
- var clearEditingState = function clearEditingState() {
1425
+ });
1426
+ var clearEditingState = (0, _hooks.useStableCallback)(function () {
1411
1427
  return setEditing(undefined);
1412
- };
1413
- var clearQuotedMessageState = function clearQuotedMessageState() {
1428
+ });
1429
+ var clearQuotedMessageState = (0, _hooks.useStableCallback)(function () {
1414
1430
  return setQuotedMessage(undefined);
1415
- };
1416
- var removeMessage = function () {
1431
+ });
1432
+ var removeMessage = (0, _hooks.useStableCallback)(function () {
1417
1433
  var _ref14 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee11(message) {
1418
1434
  return _regenerator["default"].wrap(function _callee11$(_context11) {
1419
1435
  while (1) switch (_context11.prev = _context11.next) {
@@ -1439,11 +1455,11 @@ var ChannelWithContext = function ChannelWithContext(props) {
1439
1455
  }
1440
1456
  }, _callee11);
1441
1457
  }));
1442
- return function removeMessage(_x8) {
1458
+ return function (_x8) {
1443
1459
  return _ref14.apply(this, arguments);
1444
1460
  };
1445
- }();
1446
- var sendReaction = function () {
1461
+ }());
1462
+ var sendReaction = (0, _hooks.useStableCallback)(function () {
1447
1463
  var _ref15 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee12(type, messageId) {
1448
1464
  var payload, sendReactionResponse;
1449
1465
  return _regenerator["default"].wrap(function _callee12$(_context12) {
@@ -1501,11 +1517,11 @@ var ChannelWithContext = function ChannelWithContext(props) {
1501
1517
  }
1502
1518
  }, _callee12);
1503
1519
  }));
1504
- return function sendReaction(_x9, _x10) {
1520
+ return function (_x9, _x10) {
1505
1521
  return _ref15.apply(this, arguments);
1506
1522
  };
1507
- }();
1508
- var deleteMessage = function () {
1523
+ }());
1524
+ var deleteMessage = (0, _hooks.useStableCallback)(function () {
1509
1525
  var _ref16 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee13(message) {
1510
1526
  var updatedMessage, data;
1511
1527
  return _regenerator["default"].wrap(function _callee13$(_context13) {
@@ -1552,7 +1568,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1552
1568
  case 17:
1553
1569
  updatedMessage = Object.assign({}, message, {
1554
1570
  cid: channel.cid,
1555
- deleted_at: new Date().toISOString(),
1571
+ deleted_at: new Date(),
1556
1572
  type: 'deleted'
1557
1573
  });
1558
1574
  updateMessage(updatedMessage);
@@ -1581,11 +1597,11 @@ var ChannelWithContext = function ChannelWithContext(props) {
1581
1597
  }
1582
1598
  }, _callee13);
1583
1599
  }));
1584
- return function deleteMessage(_x11) {
1600
+ return function (_x11) {
1585
1601
  return _ref16.apply(this, arguments);
1586
1602
  };
1587
- }();
1588
- var deleteReaction = function () {
1603
+ }());
1604
+ var deleteReaction = (0, _hooks.useStableCallback)(function () {
1589
1605
  var _ref17 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee14(type, messageId) {
1590
1606
  var payload;
1591
1607
  return _regenerator["default"].wrap(function _callee14$(_context14) {
@@ -1631,10 +1647,10 @@ var ChannelWithContext = function ChannelWithContext(props) {
1631
1647
  }
1632
1648
  }, _callee14);
1633
1649
  }));
1634
- return function deleteReaction(_x12, _x13) {
1650
+ return function (_x12, _x13) {
1635
1651
  return _ref17.apply(this, arguments);
1636
1652
  };
1637
- }();
1653
+ }());
1638
1654
  var openThread = (0, _react.useCallback)(function (message) {
1639
1655
  setThread(message);
1640
1656
  if (channel.initialized) {
@@ -1652,62 +1668,57 @@ var ChannelWithContext = function ChannelWithContext(props) {
1652
1668
  setThreadLoadingMore(false);
1653
1669
  setThreadMessages(updatedThreadMessages);
1654
1670
  }, defaultDebounceInterval, debounceOptions)).current;
1655
- var loadMoreThread = function () {
1656
- var _ref18 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee15() {
1657
- var _threadMessages$, parentID, oldestMessageID, limit, queryResponse, updatedHasMore, updatedThreadMessages;
1658
- return _regenerator["default"].wrap(function _callee15$(_context15) {
1659
- while (1) switch (_context15.prev = _context15.next) {
1660
- case 0:
1661
- if (!(threadLoadingMore || !(thread != null && thread.id))) {
1662
- _context15.next = 2;
1663
- break;
1664
- }
1665
- return _context15.abrupt("return");
1666
- case 2:
1667
- setThreadLoadingMore(true);
1668
- _context15.prev = 3;
1669
- if (!channel) {
1670
- _context15.next = 15;
1671
- break;
1672
- }
1673
- parentID = thread.id;
1674
- channel.state.threads[parentID] = threadMessages;
1675
- oldestMessageID = threadMessages == null || (_threadMessages$ = threadMessages[0]) == null ? void 0 : _threadMessages$.id;
1676
- limit = 50;
1677
- _context15.next = 11;
1678
- return channel.getReplies(parentID, {
1679
- id_lt: oldestMessageID,
1680
- limit: limit
1681
- });
1682
- case 11:
1683
- queryResponse = _context15.sent;
1684
- updatedHasMore = queryResponse.messages.length === limit;
1685
- updatedThreadMessages = channel.state.threads[parentID] || [];
1686
- loadMoreThreadFinished(updatedHasMore, updatedThreadMessages);
1687
- case 15:
1688
- _context15.next = 23;
1671
+ var loadMoreThread = (0, _hooks.useStableCallback)((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee15() {
1672
+ var _threadMessages$, parentID, oldestMessageID, limit, queryResponse, updatedHasMore, updatedThreadMessages;
1673
+ return _regenerator["default"].wrap(function _callee15$(_context15) {
1674
+ while (1) switch (_context15.prev = _context15.next) {
1675
+ case 0:
1676
+ if (!(threadLoadingMore || !(thread != null && thread.id))) {
1677
+ _context15.next = 2;
1689
1678
  break;
1690
- case 17:
1691
- _context15.prev = 17;
1692
- _context15.t0 = _context15["catch"](3);
1693
- console.warn('Message pagination request failed with error', _context15.t0);
1694
- if (_context15.t0 instanceof Error) {
1695
- setError(_context15.t0);
1696
- } else {
1697
- setError(true);
1698
- }
1699
- setThreadLoadingMore(false);
1700
- throw _context15.t0;
1701
- case 23:
1702
- case "end":
1703
- return _context15.stop();
1704
- }
1705
- }, _callee15, null, [[3, 17]]);
1706
- }));
1707
- return function loadMoreThread() {
1708
- return _ref18.apply(this, arguments);
1709
- };
1710
- }();
1679
+ }
1680
+ return _context15.abrupt("return");
1681
+ case 2:
1682
+ setThreadLoadingMore(true);
1683
+ _context15.prev = 3;
1684
+ if (!channel) {
1685
+ _context15.next = 15;
1686
+ break;
1687
+ }
1688
+ parentID = thread.id;
1689
+ channel.state.threads[parentID] = threadMessages;
1690
+ oldestMessageID = threadMessages == null || (_threadMessages$ = threadMessages[0]) == null ? void 0 : _threadMessages$.id;
1691
+ limit = 50;
1692
+ _context15.next = 11;
1693
+ return channel.getReplies(parentID, {
1694
+ id_lt: oldestMessageID,
1695
+ limit: limit
1696
+ });
1697
+ case 11:
1698
+ queryResponse = _context15.sent;
1699
+ updatedHasMore = queryResponse.messages.length === limit;
1700
+ updatedThreadMessages = channel.state.threads[parentID] || [];
1701
+ loadMoreThreadFinished(updatedHasMore, updatedThreadMessages);
1702
+ case 15:
1703
+ _context15.next = 23;
1704
+ break;
1705
+ case 17:
1706
+ _context15.prev = 17;
1707
+ _context15.t0 = _context15["catch"](3);
1708
+ console.warn('Message pagination request failed with error', _context15.t0);
1709
+ if (_context15.t0 instanceof Error) {
1710
+ setError(_context15.t0);
1711
+ } else {
1712
+ setError(true);
1713
+ }
1714
+ setThreadLoadingMore(false);
1715
+ throw _context15.t0;
1716
+ case 23:
1717
+ case "end":
1718
+ return _context15.stop();
1719
+ }
1720
+ }, _callee15, null, [[3, 17]]);
1721
+ })));
1711
1722
  var ownCapabilitiesContext = (0, _useCreateOwnCapabilitiesContext.useCreateOwnCapabilitiesContext)({
1712
1723
  channel: channel,
1713
1724
  overrideCapabilities: overrideOwnCapabilities
@@ -1749,8 +1760,6 @@ var ChannelWithContext = function ChannelWithContext(props) {
1749
1760
  watcherCount: channelState.watcherCount,
1750
1761
  watchers: channelState.watchers
1751
1762
  });
1752
- var sendMessageRef = (0, _react.useRef)(sendMessage);
1753
- sendMessageRef.current = sendMessage;
1754
1763
  var inputMessageInputContext = (0, _useCreateInputMessageInputContext.useCreateInputMessageInputContext)({
1755
1764
  additionalTextInputProps: additionalTextInputProps,
1756
1765
  asyncMessagesLockDistance: asyncMessagesLockDistance,
@@ -1782,7 +1791,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1782
1791
  FileUploadPreview: FileUploadPreview,
1783
1792
  handleAttachButtonPress: handleAttachButtonPress,
1784
1793
  hasCameraPicker: hasCameraPicker,
1785
- hasCommands: hasCommands,
1794
+ hasCommands: hasCommands != null ? hasCommands : ((_getChannelConfigSafe = (_getChannelConfigSafe2 = getChannelConfigSafely()) == null ? void 0 : _getChannelConfigSafe2.commands) != null ? _getChannelConfigSafe : []).length > 0,
1786
1795
  hasFilePicker: hasFilePicker,
1787
1796
  hasImagePicker: hasImagePicker,
1788
1797
  ImageUploadPreview: ImageUploadPreview,
@@ -1803,9 +1812,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1803
1812
  quotedMessage: quotedMessage,
1804
1813
  SendButton: SendButton,
1805
1814
  sendImageAsync: sendImageAsync,
1806
- sendMessage: function sendMessage() {
1807
- return sendMessageRef.current.apply(sendMessageRef, arguments);
1808
- },
1815
+ sendMessage: sendMessage,
1809
1816
  SendMessageDisallowedIndicator: SendMessageDisallowedIndicator,
1810
1817
  setInputRef: setInputRef,
1811
1818
  setQuotedMessageState: setQuotedMessageState,
@@ -1867,6 +1874,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1867
1874
  hasCreatePoll: hasCreatePoll === undefined ? pollCreationEnabled : hasCreatePoll && pollCreationEnabled,
1868
1875
  ImageLoadingFailedIndicator: ImageLoadingFailedIndicator,
1869
1876
  ImageLoadingIndicator: ImageLoadingIndicator,
1877
+ ImageReloadIndicator: ImageReloadIndicator,
1870
1878
  initialScrollToFirstUnreadMessage: !messageId && initialScrollToFirstUnreadMessage,
1871
1879
  InlineDateSeparator: InlineDateSeparator,
1872
1880
  InlineUnreadIndicator: InlineUnreadIndicator,
@@ -1931,11 +1939,13 @@ var ChannelWithContext = function ChannelWithContext(props) {
1931
1939
  UrlPreview: UrlPreview,
1932
1940
  VideoThumbnail: VideoThumbnail
1933
1941
  });
1934
- var suggestionsContext = {
1935
- AutoCompleteSuggestionHeader: AutoCompleteSuggestionHeader,
1936
- AutoCompleteSuggestionItem: AutoCompleteSuggestionItem,
1937
- AutoCompleteSuggestionList: AutoCompleteSuggestionList
1938
- };
1942
+ var suggestionsContext = (0, _react.useMemo)(function () {
1943
+ return {
1944
+ AutoCompleteSuggestionHeader: AutoCompleteSuggestionHeader,
1945
+ AutoCompleteSuggestionItem: AutoCompleteSuggestionItem,
1946
+ AutoCompleteSuggestionList: AutoCompleteSuggestionList
1947
+ };
1948
+ }, [AutoCompleteSuggestionHeader, AutoCompleteSuggestionItem, AutoCompleteSuggestionList]);
1939
1949
  var threadContext = (0, _useCreateThreadContext.useCreateThreadContext)({
1940
1950
  allowThreadMessagesInChannel: allowThreadMessagesInChannel,
1941
1951
  closeThread: closeThread,