stream-chat-react-native-core 3.10.1 → 4.0.0-beta.2

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 (623) hide show
  1. package/lib/commonjs/components/Attachment/Card.js +18 -15
  2. package/lib/commonjs/components/Attachment/Card.js.map +1 -1
  3. package/lib/commonjs/components/Attachment/Gallery.js +8 -15
  4. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  5. package/lib/commonjs/components/Attachment/Giphy.js +3 -3
  6. package/lib/commonjs/components/Attachment/Giphy.js.map +1 -1
  7. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js +21 -45
  8. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  9. package/lib/commonjs/components/AutoCompleteInput/{CommandsItem.js → AutoCompleteSuggestionCommandIcon.js} +21 -94
  10. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionCommandIcon.js.map +1 -0
  11. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js +145 -0
  12. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js.map +1 -0
  13. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionItem.js +248 -0
  14. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionItem.js.map +1 -0
  15. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js +223 -0
  16. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -0
  17. package/lib/commonjs/components/Avatar/GroupAvatar.js +3 -9
  18. package/lib/commonjs/components/Avatar/GroupAvatar.js.map +1 -1
  19. package/lib/commonjs/components/Channel/Channel.js +293 -208
  20. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  21. package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js +5 -5
  22. package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
  23. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js +7 -5
  24. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  25. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +9 -31
  26. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  27. package/lib/commonjs/components/Channel/hooks/useCreateOwnCapabilitiesContext.js +35 -0
  28. package/lib/commonjs/components/Channel/hooks/useCreateOwnCapabilitiesContext.js.map +1 -0
  29. package/lib/commonjs/components/ChannelList/ChannelListFooterLoadingIndicator.js +1 -0
  30. package/lib/commonjs/components/ChannelList/ChannelListFooterLoadingIndicator.js.map +1 -1
  31. package/lib/commonjs/components/ChannelList/ChannelListHeaderNetworkDownIndicator.js +2 -1
  32. package/lib/commonjs/components/ChannelList/ChannelListHeaderNetworkDownIndicator.js.map +1 -1
  33. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +32 -20
  34. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  35. package/lib/commonjs/components/ChannelPreview/ChannelPreviewMessenger.js +8 -7
  36. package/lib/commonjs/components/ChannelPreview/ChannelPreviewMessenger.js.map +1 -1
  37. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.js +16 -7
  38. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.js.map +1 -1
  39. package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js +2 -1
  40. package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  41. package/lib/commonjs/components/Chat/hooks/useIsOnline.js +12 -5
  42. package/lib/commonjs/components/Chat/hooks/useIsOnline.js.map +1 -1
  43. package/lib/commonjs/components/ImageGallery/ImageGallery.js +1 -2
  44. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  45. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js +14 -16
  46. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  47. package/lib/commonjs/components/Indicators/LoadingErrorIndicator.js.map +1 -1
  48. package/lib/commonjs/components/Message/Message.js +144 -851
  49. package/lib/commonjs/components/Message/Message.js.map +1 -1
  50. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js +39 -38
  51. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js.map +1 -1
  52. package/lib/commonjs/components/Message/MessageSimple/MessageDeleted.js +4 -2
  53. package/lib/commonjs/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
  54. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js +24 -16
  55. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  56. package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js +122 -0
  57. package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -0
  58. package/lib/commonjs/components/Message/MessageSimple/MessageReplies.js +5 -1
  59. package/lib/commonjs/components/Message/MessageSimple/MessageReplies.js.map +1 -1
  60. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js +27 -13
  61. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  62. package/lib/commonjs/components/Message/MessageSimple/MessageStatus.js +19 -20
  63. package/lib/commonjs/components/Message/MessageSimple/MessageStatus.js.map +1 -1
  64. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js +7 -3
  65. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  66. package/lib/commonjs/components/Message/MessageSimple/ReactionList.js +52 -80
  67. package/lib/commonjs/components/Message/MessageSimple/ReactionList.js.map +1 -1
  68. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js +42 -14
  69. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  70. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js +1 -5
  71. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  72. package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js +294 -0
  73. package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js.map +1 -0
  74. package/lib/commonjs/components/Message/hooks/useMessageActions.js +559 -0
  75. package/lib/commonjs/components/Message/hooks/useMessageActions.js.map +1 -0
  76. package/lib/commonjs/components/Message/utils/messageActions.js +17 -15
  77. package/lib/commonjs/components/Message/utils/messageActions.js.map +1 -1
  78. package/lib/commonjs/components/MessageInput/CooldownTimer.js +78 -0
  79. package/lib/commonjs/components/MessageInput/CooldownTimer.js.map +1 -0
  80. package/lib/commonjs/components/MessageInput/FileUploadPreview.js +2 -2
  81. package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
  82. package/lib/commonjs/components/MessageInput/ImageUploadPreview.js +2 -2
  83. package/lib/commonjs/components/MessageInput/ImageUploadPreview.js.map +1 -1
  84. package/lib/commonjs/components/MessageInput/InputButtons.js +16 -21
  85. package/lib/commonjs/components/MessageInput/InputButtons.js.map +1 -1
  86. package/lib/commonjs/components/MessageInput/MessageInput.js +90 -62
  87. package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
  88. package/lib/commonjs/components/MessageInput/SendMessageDisallowedIndicator.js +71 -0
  89. package/lib/commonjs/components/MessageInput/SendMessageDisallowedIndicator.js.map +1 -0
  90. package/lib/commonjs/components/MessageInput/ShowThreadMessageInChannelButton.js +1 -0
  91. package/lib/commonjs/components/MessageInput/ShowThreadMessageInChannelButton.js.map +1 -1
  92. package/lib/commonjs/components/MessageInput/hooks/useCooldown.js +63 -0
  93. package/lib/commonjs/components/MessageInput/hooks/useCooldown.js.map +1 -0
  94. package/lib/commonjs/components/MessageInput/hooks/useCountdown.js +57 -0
  95. package/lib/commonjs/components/MessageInput/hooks/useCountdown.js.map +1 -0
  96. package/lib/commonjs/components/MessageList/DateHeader.js +2 -2
  97. package/lib/commonjs/components/MessageList/DateHeader.js.map +1 -1
  98. package/lib/commonjs/components/MessageList/InlineDateSeparator.js +2 -2
  99. package/lib/commonjs/components/MessageList/InlineDateSeparator.js.map +1 -1
  100. package/lib/commonjs/components/MessageList/MessageList.js +75 -42
  101. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  102. package/lib/commonjs/components/MessageList/hooks/useMessageList.js +16 -3
  103. package/lib/commonjs/components/MessageList/hooks/useMessageList.js.map +1 -1
  104. package/lib/commonjs/components/MessageList/utils/getDateSeparators.js +2 -1
  105. package/lib/commonjs/components/MessageList/utils/getDateSeparators.js.map +1 -1
  106. package/lib/commonjs/components/MessageList/utils/getGroupStyles.js +10 -5
  107. package/lib/commonjs/components/MessageList/utils/getGroupStyles.js.map +1 -1
  108. package/lib/{module/components/MessageOverlay/MessageActions.js → commonjs/components/MessageOverlay/MessageActionList.js} +33 -85
  109. package/lib/commonjs/components/MessageOverlay/MessageActionList.js.map +1 -0
  110. package/lib/commonjs/components/MessageOverlay/MessageActionListItem.js +131 -0
  111. package/lib/commonjs/components/MessageOverlay/MessageActionListItem.js.map +1 -0
  112. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +83 -70
  113. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +1 -1
  114. package/lib/commonjs/components/MessageOverlay/OverlayBackdrop.js +38 -0
  115. package/lib/commonjs/components/MessageOverlay/OverlayBackdrop.js.map +1 -0
  116. package/lib/commonjs/components/MessageOverlay/OverlayReactionList.js +1 -0
  117. package/lib/commonjs/components/MessageOverlay/OverlayReactionList.js.map +1 -1
  118. package/lib/commonjs/components/MessageOverlay/hooks/useMessageActionAnimation.js +37 -0
  119. package/lib/commonjs/components/MessageOverlay/hooks/useMessageActionAnimation.js.map +1 -0
  120. package/lib/commonjs/components/Thread/Thread.js +13 -4
  121. package/lib/commonjs/components/Thread/Thread.js.map +1 -1
  122. package/lib/commonjs/components/Thread/components/ThreadFooterComponent.js +9 -1
  123. package/lib/commonjs/components/Thread/components/ThreadFooterComponent.js.map +1 -1
  124. package/lib/commonjs/components/docs/ListProps.md +1 -1
  125. package/lib/commonjs/components/index.js +107 -55
  126. package/lib/commonjs/components/index.js.map +1 -1
  127. package/lib/commonjs/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js +68 -0
  128. package/lib/commonjs/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js.map +1 -0
  129. package/lib/commonjs/contexts/channelContext/ChannelContext.js +2 -2
  130. package/lib/commonjs/contexts/channelContext/ChannelContext.js.map +1 -1
  131. package/lib/commonjs/contexts/channelsContext/ChannelsContext.js.map +1 -1
  132. package/lib/commonjs/contexts/channelsStateContext/ChannelsStateContext.js +155 -0
  133. package/lib/commonjs/contexts/channelsStateContext/ChannelsStateContext.js.map +1 -0
  134. package/lib/commonjs/contexts/channelsStateContext/useChannelState.js +144 -0
  135. package/lib/commonjs/contexts/channelsStateContext/useChannelState.js.map +1 -0
  136. package/lib/commonjs/contexts/messageContext/MessageContext.js +2 -2
  137. package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
  138. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +112 -78
  139. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  140. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +9 -5
  141. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  142. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  143. package/lib/commonjs/contexts/messagesContext/MessagesContext.js +2 -2
  144. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  145. package/lib/commonjs/contexts/overlayContext/OverlayContext.js +1 -1
  146. package/lib/commonjs/contexts/overlayContext/OverlayContext.js.map +1 -1
  147. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +31 -24
  148. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
  149. package/lib/commonjs/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js +61 -0
  150. package/lib/commonjs/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js.map +1 -0
  151. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js +19 -32
  152. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
  153. package/lib/commonjs/contexts/themeContext/utils/theme.js +25 -9
  154. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  155. package/lib/commonjs/contexts/translationContext/TranslationContext.js.map +1 -1
  156. package/lib/commonjs/contexts/utils/getDisplayName.js.map +1 -1
  157. package/lib/commonjs/emoji-data/compiled.js +0 -315
  158. package/lib/commonjs/emoji-data/compiled.js.map +1 -1
  159. package/lib/commonjs/emoji-data/emojiNames.js +0 -105
  160. package/lib/commonjs/emoji-data/emojiNames.js.map +1 -1
  161. package/lib/commonjs/emoji-data/emojis.js +0 -175
  162. package/lib/commonjs/emoji-data/emojis.js.map +1 -1
  163. package/lib/commonjs/i18n/en.json +9 -3
  164. package/lib/commonjs/i18n/fr.json +9 -3
  165. package/lib/commonjs/i18n/hi.json +9 -3
  166. package/lib/commonjs/i18n/it.json +9 -3
  167. package/lib/commonjs/i18n/ja.json +9 -0
  168. package/lib/commonjs/i18n/ko.json +9 -0
  169. package/lib/commonjs/i18n/nl.json +9 -3
  170. package/lib/commonjs/i18n/ru.json +9 -3
  171. package/lib/commonjs/i18n/tr.json +10 -4
  172. package/lib/commonjs/icons/Pin.js +42 -0
  173. package/lib/commonjs/icons/Pin.js.map +1 -0
  174. package/lib/commonjs/icons/PinHeader.js +38 -0
  175. package/lib/commonjs/icons/PinHeader.js.map +1 -0
  176. package/lib/commonjs/icons/Unpin.js +38 -0
  177. package/lib/commonjs/icons/Unpin.js.map +1 -0
  178. package/lib/commonjs/icons/index.js +39 -0
  179. package/lib/commonjs/icons/index.js.map +1 -1
  180. package/lib/commonjs/mock-builders/api/sendMessage.js +4 -1
  181. package/lib/commonjs/mock-builders/api/sendMessage.js.map +1 -1
  182. package/lib/commonjs/mock-builders/generator/channel.js +1 -0
  183. package/lib/commonjs/mock-builders/generator/channel.js.map +1 -1
  184. package/lib/commonjs/mock-builders/mock.js +2 -2
  185. package/lib/commonjs/mock-builders/mock.js.map +1 -1
  186. package/lib/commonjs/native.js +1 -7
  187. package/lib/commonjs/native.js.map +1 -1
  188. package/lib/commonjs/utils/date.js +13 -0
  189. package/lib/commonjs/utils/date.js.map +1 -0
  190. package/lib/commonjs/utils/utils.js +9 -7
  191. package/lib/commonjs/utils/utils.js.map +1 -1
  192. package/lib/commonjs/version.json +1 -1
  193. package/lib/module/components/Attachment/Card.js +18 -15
  194. package/lib/module/components/Attachment/Card.js.map +1 -1
  195. package/lib/module/components/Attachment/Gallery.js +8 -15
  196. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  197. package/lib/module/components/Attachment/Giphy.js +3 -3
  198. package/lib/module/components/Attachment/Giphy.js.map +1 -1
  199. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js +21 -45
  200. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  201. package/lib/module/components/AutoCompleteInput/{CommandsItem.js → AutoCompleteSuggestionCommandIcon.js} +21 -94
  202. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionCommandIcon.js.map +1 -0
  203. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js +145 -0
  204. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js.map +1 -0
  205. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionItem.js +248 -0
  206. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionItem.js.map +1 -0
  207. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js +223 -0
  208. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -0
  209. package/lib/module/components/Avatar/GroupAvatar.js +3 -9
  210. package/lib/module/components/Avatar/GroupAvatar.js.map +1 -1
  211. package/lib/module/components/Channel/Channel.js +293 -208
  212. package/lib/module/components/Channel/Channel.js.map +1 -1
  213. package/lib/module/components/Channel/hooks/useCreateChannelContext.js +5 -5
  214. package/lib/module/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
  215. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js +7 -5
  216. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  217. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +9 -31
  218. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  219. package/lib/module/components/Channel/hooks/useCreateOwnCapabilitiesContext.js +35 -0
  220. package/lib/module/components/Channel/hooks/useCreateOwnCapabilitiesContext.js.map +1 -0
  221. package/lib/module/components/ChannelList/ChannelListFooterLoadingIndicator.js +1 -0
  222. package/lib/module/components/ChannelList/ChannelListFooterLoadingIndicator.js.map +1 -1
  223. package/lib/module/components/ChannelList/ChannelListHeaderNetworkDownIndicator.js +2 -1
  224. package/lib/module/components/ChannelList/ChannelListHeaderNetworkDownIndicator.js.map +1 -1
  225. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +32 -20
  226. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  227. package/lib/module/components/ChannelPreview/ChannelPreviewMessenger.js +8 -7
  228. package/lib/module/components/ChannelPreview/ChannelPreviewMessenger.js.map +1 -1
  229. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.js +16 -7
  230. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.js.map +1 -1
  231. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js +2 -1
  232. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  233. package/lib/module/components/Chat/hooks/useIsOnline.js +12 -5
  234. package/lib/module/components/Chat/hooks/useIsOnline.js.map +1 -1
  235. package/lib/module/components/ImageGallery/ImageGallery.js +1 -2
  236. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  237. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js +14 -16
  238. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  239. package/lib/module/components/Indicators/LoadingErrorIndicator.js.map +1 -1
  240. package/lib/module/components/Message/Message.js +144 -851
  241. package/lib/module/components/Message/Message.js.map +1 -1
  242. package/lib/module/components/Message/MessageSimple/MessageContent.js +39 -38
  243. package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
  244. package/lib/module/components/Message/MessageSimple/MessageDeleted.js +4 -2
  245. package/lib/module/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
  246. package/lib/module/components/Message/MessageSimple/MessageFooter.js +24 -16
  247. package/lib/module/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  248. package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js +122 -0
  249. package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -0
  250. package/lib/module/components/Message/MessageSimple/MessageReplies.js +5 -1
  251. package/lib/module/components/Message/MessageSimple/MessageReplies.js.map +1 -1
  252. package/lib/module/components/Message/MessageSimple/MessageSimple.js +27 -13
  253. package/lib/module/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  254. package/lib/module/components/Message/MessageSimple/MessageStatus.js +19 -20
  255. package/lib/module/components/Message/MessageSimple/MessageStatus.js.map +1 -1
  256. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js +7 -3
  257. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  258. package/lib/module/components/Message/MessageSimple/ReactionList.js +52 -80
  259. package/lib/module/components/Message/MessageSimple/ReactionList.js.map +1 -1
  260. package/lib/module/components/Message/MessageSimple/utils/renderText.js +42 -14
  261. package/lib/module/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  262. package/lib/module/components/Message/hooks/useCreateMessageContext.js +1 -5
  263. package/lib/module/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  264. package/lib/module/components/Message/hooks/useMessageActionHandlers.js +294 -0
  265. package/lib/module/components/Message/hooks/useMessageActionHandlers.js.map +1 -0
  266. package/lib/module/components/Message/hooks/useMessageActions.js +559 -0
  267. package/lib/module/components/Message/hooks/useMessageActions.js.map +1 -0
  268. package/lib/module/components/Message/utils/messageActions.js +17 -15
  269. package/lib/module/components/Message/utils/messageActions.js.map +1 -1
  270. package/lib/module/components/MessageInput/CooldownTimer.js +78 -0
  271. package/lib/module/components/MessageInput/CooldownTimer.js.map +1 -0
  272. package/lib/module/components/MessageInput/FileUploadPreview.js +2 -2
  273. package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
  274. package/lib/module/components/MessageInput/ImageUploadPreview.js +2 -2
  275. package/lib/module/components/MessageInput/ImageUploadPreview.js.map +1 -1
  276. package/lib/module/components/MessageInput/InputButtons.js +16 -21
  277. package/lib/module/components/MessageInput/InputButtons.js.map +1 -1
  278. package/lib/module/components/MessageInput/MessageInput.js +90 -62
  279. package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
  280. package/lib/module/components/MessageInput/SendMessageDisallowedIndicator.js +71 -0
  281. package/lib/module/components/MessageInput/SendMessageDisallowedIndicator.js.map +1 -0
  282. package/lib/module/components/MessageInput/ShowThreadMessageInChannelButton.js +1 -0
  283. package/lib/module/components/MessageInput/ShowThreadMessageInChannelButton.js.map +1 -1
  284. package/lib/module/components/MessageInput/hooks/useCooldown.js +63 -0
  285. package/lib/module/components/MessageInput/hooks/useCooldown.js.map +1 -0
  286. package/lib/module/components/MessageInput/hooks/useCountdown.js +57 -0
  287. package/lib/module/components/MessageInput/hooks/useCountdown.js.map +1 -0
  288. package/lib/module/components/MessageList/DateHeader.js +2 -2
  289. package/lib/module/components/MessageList/DateHeader.js.map +1 -1
  290. package/lib/module/components/MessageList/InlineDateSeparator.js +2 -2
  291. package/lib/module/components/MessageList/InlineDateSeparator.js.map +1 -1
  292. package/lib/module/components/MessageList/MessageList.js +75 -42
  293. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  294. package/lib/module/components/MessageList/hooks/useMessageList.js +16 -3
  295. package/lib/module/components/MessageList/hooks/useMessageList.js.map +1 -1
  296. package/lib/module/components/MessageList/utils/getDateSeparators.js +2 -1
  297. package/lib/module/components/MessageList/utils/getDateSeparators.js.map +1 -1
  298. package/lib/module/components/MessageList/utils/getGroupStyles.js +10 -5
  299. package/lib/module/components/MessageList/utils/getGroupStyles.js.map +1 -1
  300. package/lib/{commonjs/components/MessageOverlay/MessageActions.js → module/components/MessageOverlay/MessageActionList.js} +33 -85
  301. package/lib/module/components/MessageOverlay/MessageActionList.js.map +1 -0
  302. package/lib/module/components/MessageOverlay/MessageActionListItem.js +131 -0
  303. package/lib/module/components/MessageOverlay/MessageActionListItem.js.map +1 -0
  304. package/lib/module/components/MessageOverlay/MessageOverlay.js +83 -70
  305. package/lib/module/components/MessageOverlay/MessageOverlay.js.map +1 -1
  306. package/lib/module/components/MessageOverlay/OverlayBackdrop.js +38 -0
  307. package/lib/module/components/MessageOverlay/OverlayBackdrop.js.map +1 -0
  308. package/lib/module/components/MessageOverlay/OverlayReactionList.js +1 -0
  309. package/lib/module/components/MessageOverlay/OverlayReactionList.js.map +1 -1
  310. package/lib/module/components/MessageOverlay/hooks/useMessageActionAnimation.js +37 -0
  311. package/lib/module/components/MessageOverlay/hooks/useMessageActionAnimation.js.map +1 -0
  312. package/lib/module/components/Thread/Thread.js +13 -4
  313. package/lib/module/components/Thread/Thread.js.map +1 -1
  314. package/lib/module/components/Thread/components/ThreadFooterComponent.js +9 -1
  315. package/lib/module/components/Thread/components/ThreadFooterComponent.js.map +1 -1
  316. package/lib/module/components/docs/ListProps.md +1 -1
  317. package/lib/module/components/index.js +107 -55
  318. package/lib/module/components/index.js.map +1 -1
  319. package/lib/module/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js +68 -0
  320. package/lib/module/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js.map +1 -0
  321. package/lib/module/contexts/channelContext/ChannelContext.js +2 -2
  322. package/lib/module/contexts/channelContext/ChannelContext.js.map +1 -1
  323. package/lib/module/contexts/channelsContext/ChannelsContext.js.map +1 -1
  324. package/lib/module/contexts/channelsStateContext/ChannelsStateContext.js +155 -0
  325. package/lib/module/contexts/channelsStateContext/ChannelsStateContext.js.map +1 -0
  326. package/lib/module/contexts/channelsStateContext/useChannelState.js +144 -0
  327. package/lib/module/contexts/channelsStateContext/useChannelState.js.map +1 -0
  328. package/lib/module/contexts/messageContext/MessageContext.js +2 -2
  329. package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
  330. package/lib/module/contexts/messageInputContext/MessageInputContext.js +112 -78
  331. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  332. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +9 -5
  333. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  334. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  335. package/lib/module/contexts/messagesContext/MessagesContext.js +2 -2
  336. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  337. package/lib/module/contexts/overlayContext/OverlayContext.js +1 -1
  338. package/lib/module/contexts/overlayContext/OverlayContext.js.map +1 -1
  339. package/lib/module/contexts/overlayContext/OverlayProvider.js +31 -24
  340. package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
  341. package/lib/module/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js +61 -0
  342. package/lib/module/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js.map +1 -0
  343. package/lib/module/contexts/suggestionsContext/SuggestionsContext.js +19 -32
  344. package/lib/module/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
  345. package/lib/module/contexts/themeContext/utils/theme.js +25 -9
  346. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  347. package/lib/module/contexts/translationContext/TranslationContext.js.map +1 -1
  348. package/lib/module/contexts/utils/getDisplayName.js.map +1 -1
  349. package/lib/module/emoji-data/compiled.js +0 -315
  350. package/lib/module/emoji-data/compiled.js.map +1 -1
  351. package/lib/module/emoji-data/emojiNames.js +0 -105
  352. package/lib/module/emoji-data/emojiNames.js.map +1 -1
  353. package/lib/module/emoji-data/emojis.js +0 -175
  354. package/lib/module/emoji-data/emojis.js.map +1 -1
  355. package/lib/module/i18n/en.json +9 -3
  356. package/lib/module/i18n/fr.json +9 -3
  357. package/lib/module/i18n/hi.json +9 -3
  358. package/lib/module/i18n/it.json +9 -3
  359. package/lib/module/i18n/ja.json +9 -0
  360. package/lib/module/i18n/ko.json +9 -0
  361. package/lib/module/i18n/nl.json +9 -3
  362. package/lib/module/i18n/ru.json +9 -3
  363. package/lib/module/i18n/tr.json +10 -4
  364. package/lib/module/icons/Pin.js +42 -0
  365. package/lib/module/icons/Pin.js.map +1 -0
  366. package/lib/module/icons/PinHeader.js +38 -0
  367. package/lib/module/icons/PinHeader.js.map +1 -0
  368. package/lib/module/icons/Unpin.js +38 -0
  369. package/lib/module/icons/Unpin.js.map +1 -0
  370. package/lib/module/icons/index.js +39 -0
  371. package/lib/module/icons/index.js.map +1 -1
  372. package/lib/module/mock-builders/api/sendMessage.js +4 -1
  373. package/lib/module/mock-builders/api/sendMessage.js.map +1 -1
  374. package/lib/module/mock-builders/generator/channel.js +1 -0
  375. package/lib/module/mock-builders/generator/channel.js.map +1 -1
  376. package/lib/module/mock-builders/mock.js +2 -2
  377. package/lib/module/mock-builders/mock.js.map +1 -1
  378. package/lib/module/native.js +1 -7
  379. package/lib/module/native.js.map +1 -1
  380. package/lib/module/utils/date.js +13 -0
  381. package/lib/module/utils/date.js.map +1 -0
  382. package/lib/module/utils/utils.js +9 -7
  383. package/lib/module/utils/utils.js.map +1 -1
  384. package/lib/module/version.json +1 -1
  385. package/lib/typescript/components/Attachment/Card.d.ts +2 -0
  386. package/lib/typescript/components/Attachment/Gallery.d.ts +3 -2
  387. package/lib/typescript/components/AutoCompleteInput/AutoCompleteInput.d.ts +7 -1
  388. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionCommandIcon.d.ts +4 -0
  389. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionHeader.d.ts +8 -0
  390. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionItem.d.ts +10 -0
  391. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionList.d.ts +22 -0
  392. package/lib/typescript/components/Channel/Channel.d.ts +11 -10
  393. package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts +1 -1
  394. package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts +1 -68
  395. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -126
  396. package/lib/typescript/components/Channel/hooks/useCreateOwnCapabilitiesContext.d.ts +7 -0
  397. package/lib/typescript/components/ChannelList/hooks/usePaginatedChannels.d.ts +1 -1
  398. package/lib/typescript/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.d.ts +12 -0
  399. package/lib/typescript/components/ImageGallery/ImageGallery.d.ts +1 -0
  400. package/lib/typescript/components/Indicators/LoadingErrorIndicator.d.ts +1 -1
  401. package/lib/typescript/components/Message/Message.d.ts +3 -2
  402. package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts +1 -1
  403. package/lib/typescript/components/Message/MessageSimple/MessagePinnedHeader.d.ts +8 -0
  404. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts +1 -1
  405. package/lib/typescript/components/Message/MessageSimple/MessageStatus.d.ts +1 -1
  406. package/lib/typescript/components/Message/MessageSimple/MessageTextContainer.d.ts +1 -0
  407. package/lib/typescript/components/Message/MessageSimple/ReactionList.d.ts +2 -1
  408. package/lib/typescript/components/Message/MessageSimple/utils/renderText.d.ts +1 -0
  409. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts +1 -1
  410. package/lib/typescript/components/Message/hooks/useMessageActionHandlers.d.ts +15 -0
  411. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts +26 -0
  412. package/lib/typescript/components/Message/utils/messageActions.d.ts +22 -21
  413. package/lib/typescript/components/MessageInput/CooldownTimer.d.ts +10 -0
  414. package/lib/typescript/components/MessageInput/InputButtons.d.ts +1 -1
  415. package/lib/typescript/components/MessageInput/MessageInput.d.ts +1 -1
  416. package/lib/typescript/components/MessageInput/SendMessageDisallowedIndicator.d.ts +1 -0
  417. package/lib/typescript/components/MessageInput/hooks/useCooldown.d.ts +9 -0
  418. package/lib/typescript/components/MessageInput/hooks/useCountdown.d.ts +8 -0
  419. package/lib/typescript/components/MessageList/MessageList.d.ts +2 -1
  420. package/lib/typescript/components/MessageList/hooks/useMessageList.d.ts +1 -0
  421. package/lib/typescript/components/MessageOverlay/MessageActionList.d.ts +12 -0
  422. package/lib/typescript/components/MessageOverlay/MessageActionListItem.d.ts +20 -0
  423. package/lib/typescript/components/MessageOverlay/MessageOverlay.d.ts +4 -4
  424. package/lib/typescript/components/MessageOverlay/OverlayBackdrop.d.ts +6 -0
  425. package/lib/typescript/components/MessageOverlay/hooks/useMessageActionAnimation.d.ts +12 -0
  426. package/lib/typescript/components/index.d.ts +11 -7
  427. package/lib/typescript/contexts/activeChannelsRefContext/ActiveChannelsRefContext.d.ts +9 -0
  428. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts +28 -30
  429. package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts +1 -1
  430. package/lib/typescript/contexts/channelsStateContext/ChannelsStateContext.d.ts +41 -0
  431. package/lib/typescript/contexts/channelsStateContext/useChannelState.d.ts +20 -0
  432. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +2 -6
  433. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +15 -6
  434. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts +1 -1
  435. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +8 -11
  436. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +15 -106
  437. package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts +10 -3
  438. package/lib/typescript/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.d.ts +25 -0
  439. package/lib/typescript/contexts/suggestionsContext/SuggestionsContext.d.ts +15 -14
  440. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +24 -8
  441. package/lib/typescript/contexts/utils/getDisplayName.d.ts +2 -2
  442. package/lib/typescript/i18n/en.json +9 -3
  443. package/lib/typescript/i18n/fr.json +9 -3
  444. package/lib/typescript/i18n/hi.json +9 -3
  445. package/lib/typescript/i18n/it.json +9 -3
  446. package/lib/typescript/i18n/ja.json +9 -0
  447. package/lib/typescript/i18n/ko.json +9 -0
  448. package/lib/typescript/i18n/nl.json +9 -3
  449. package/lib/typescript/i18n/ru.json +9 -3
  450. package/lib/typescript/i18n/tr.json +10 -4
  451. package/lib/typescript/icons/Pin.d.ts +3 -0
  452. package/lib/typescript/icons/PinHeader.d.ts +3 -0
  453. package/lib/typescript/icons/Unpin.d.ts +3 -0
  454. package/lib/typescript/icons/index.d.ts +3 -0
  455. package/lib/typescript/native.d.ts +1 -9
  456. package/lib/typescript/utils/Streami18n.d.ts +9 -6
  457. package/lib/typescript/utils/date.d.ts +2 -0
  458. package/lib/typescript/utils/utils.d.ts +8 -10
  459. package/package.json +5 -3
  460. package/src/components/Attachment/Card.tsx +5 -1
  461. package/src/components/Attachment/Gallery.tsx +5 -10
  462. package/src/components/Attachment/Giphy.tsx +3 -3
  463. package/src/components/Attachment/__tests__/Attachment.test.js +13 -6
  464. package/src/components/AutoCompleteInput/AutoCompleteInput.tsx +41 -27
  465. package/src/components/AutoCompleteInput/{CommandsItem.tsx → AutoCompleteSuggestionCommandIcon.tsx} +2 -56
  466. package/src/components/AutoCompleteInput/AutoCompleteSuggestionHeader.tsx +109 -0
  467. package/src/components/AutoCompleteInput/AutoCompleteSuggestionItem.tsx +154 -0
  468. package/src/components/AutoCompleteInput/AutoCompleteSuggestionList.tsx +213 -0
  469. package/src/components/AutoCompleteInput/__tests__/AutoCompleteInput.test.js +0 -4
  470. package/src/components/Avatar/GroupAvatar.tsx +0 -19
  471. package/src/components/Avatar/__tests__/Avatar.test.js +0 -28
  472. package/src/components/Channel/Channel.tsx +225 -176
  473. package/src/components/Channel/__tests__/Channel.test.js +25 -20
  474. package/src/components/Channel/__tests__/ownCapabilities.test.js +376 -0
  475. package/src/components/Channel/hooks/useCreateChannelContext.ts +6 -6
  476. package/src/components/Channel/hooks/useCreateInputMessageInputContext.ts +4 -3
  477. package/src/components/Channel/hooks/useCreateMessagesContext.ts +9 -30
  478. package/src/components/Channel/hooks/useCreateOwnCapabilitiesContext.ts +53 -0
  479. package/src/components/ChannelList/ChannelListFooterLoadingIndicator.tsx +1 -1
  480. package/src/components/ChannelList/ChannelListHeaderNetworkDownIndicator.tsx +4 -1
  481. package/src/components/ChannelList/hooks/usePaginatedChannels.ts +16 -4
  482. package/src/components/ChannelPreview/ChannelPreviewMessenger.tsx +4 -1
  483. package/src/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.ts +6 -0
  484. package/src/components/ChannelPreview/hooks/useLatestMessagePreview.ts +2 -1
  485. package/src/components/Chat/__tests__/Chat.test.js +6 -2
  486. package/src/components/Chat/hooks/useIsOnline.ts +8 -5
  487. package/src/components/ImageGallery/ImageGallery.tsx +3 -2
  488. package/src/components/ImageGallery/components/ImageGalleryHeader.tsx +4 -5
  489. package/src/components/Indicators/LoadingErrorIndicator.tsx +1 -1
  490. package/src/components/Message/Message.tsx +140 -579
  491. package/src/components/Message/MessageSimple/MessageContent.tsx +21 -22
  492. package/src/components/Message/MessageSimple/MessageDeleted.tsx +5 -2
  493. package/src/components/Message/MessageSimple/MessageFooter.tsx +36 -17
  494. package/src/components/Message/MessageSimple/MessagePinnedHeader.tsx +150 -0
  495. package/src/components/Message/MessageSimple/MessageReplies.tsx +5 -0
  496. package/src/components/Message/MessageSimple/MessageSimple.tsx +47 -26
  497. package/src/components/Message/MessageSimple/MessageStatus.tsx +10 -29
  498. package/src/components/Message/MessageSimple/MessageTextContainer.tsx +5 -0
  499. package/src/components/Message/MessageSimple/ReactionList.tsx +64 -77
  500. package/src/components/Message/MessageSimple/__tests__/Message.test.js +0 -1
  501. package/src/components/Message/MessageSimple/__tests__/MessageContent.test.js +32 -22
  502. package/src/components/Message/MessageSimple/__tests__/MessagePinnedHeader.test.js +53 -0
  503. package/src/components/Message/MessageSimple/__tests__/__snapshots__/MessagePinnedHeader.test.js.snap +80 -0
  504. package/src/components/Message/MessageSimple/utils/renderText.tsx +25 -3
  505. package/src/components/Message/hooks/useCreateMessageContext.ts +0 -5
  506. package/src/components/Message/hooks/useMessageActionHandlers.ts +163 -0
  507. package/src/components/Message/hooks/useMessageActions.tsx +381 -0
  508. package/src/components/Message/utils/messageActions.ts +64 -38
  509. package/src/components/MessageInput/CooldownTimer.tsx +66 -0
  510. package/src/components/MessageInput/FileUploadPreview.tsx +2 -2
  511. package/src/components/MessageInput/ImageUploadPreview.tsx +2 -2
  512. package/src/components/MessageInput/InputButtons.tsx +4 -10
  513. package/src/components/MessageInput/MessageInput.tsx +59 -31
  514. package/src/components/MessageInput/SendMessageDisallowedIndicator.tsx +47 -0
  515. package/src/components/MessageInput/ShowThreadMessageInChannelButton.tsx +1 -1
  516. package/src/components/MessageInput/__tests__/FileUploadPreview.test.js +29 -29
  517. package/src/components/MessageInput/__tests__/ImageUploadPreview.test.js +12 -12
  518. package/src/components/MessageInput/__tests__/MessageInput.test.js +8 -16
  519. package/src/components/MessageInput/__tests__/__snapshots__/FileUploadPreview.test.js.snap +6061 -2789
  520. package/src/components/MessageInput/__tests__/__snapshots__/ImageUploadPreview.test.js.snap +1912 -1572
  521. package/src/components/MessageInput/__tests__/__snapshots__/MessageInput.test.js.snap +1167 -282
  522. package/src/components/MessageInput/__tests__/__snapshots__/UploadProgressIndicator.test.js.snap +4 -4
  523. package/src/components/MessageInput/hooks/useCooldown.ts +60 -0
  524. package/src/components/MessageInput/hooks/useCountdown.ts +47 -0
  525. package/src/components/MessageList/DateHeader.tsx +2 -2
  526. package/src/components/MessageList/InlineDateSeparator.tsx +2 -2
  527. package/src/components/MessageList/MessageList.tsx +60 -36
  528. package/src/components/MessageList/__tests__/MessageList.test.js +231 -106
  529. package/src/components/MessageList/hooks/useMessageList.ts +14 -2
  530. package/src/components/MessageList/utils/getDateSeparators.ts +4 -3
  531. package/src/components/MessageList/utils/getGroupStyles.ts +13 -7
  532. package/src/components/MessageOverlay/{MessageActions.tsx → MessageActionList.tsx} +57 -89
  533. package/src/components/MessageOverlay/MessageActionListItem.tsx +111 -0
  534. package/src/components/MessageOverlay/MessageOverlay.tsx +242 -205
  535. package/src/components/MessageOverlay/OverlayBackdrop.tsx +17 -0
  536. package/src/components/MessageOverlay/OverlayReactionList.tsx +1 -1
  537. package/src/components/MessageOverlay/hooks/useMessageActionAnimation.tsx +43 -0
  538. package/src/components/Thread/Thread.tsx +8 -0
  539. package/src/components/Thread/__tests__/Thread.test.js +28 -101
  540. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +1085 -1018
  541. package/src/components/Thread/components/ThreadFooterComponent.tsx +13 -1
  542. package/src/components/docs/ListProps.md +1 -1
  543. package/src/components/index.ts +11 -7
  544. package/src/contexts/activeChannelsRefContext/ActiveChannelsRefContext.tsx +33 -0
  545. package/src/contexts/channelContext/ChannelContext.tsx +27 -30
  546. package/src/contexts/channelsContext/ChannelsContext.tsx +1 -1
  547. package/src/contexts/channelsStateContext/ChannelsStateContext.tsx +287 -0
  548. package/src/contexts/channelsStateContext/useChannelState.ts +206 -0
  549. package/src/contexts/messageContext/MessageContext.tsx +1 -8
  550. package/src/contexts/messageInputContext/MessageInputContext.tsx +56 -18
  551. package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +7 -3
  552. package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +12 -12
  553. package/src/contexts/messagesContext/MessagesContext.tsx +28 -129
  554. package/src/contexts/overlayContext/OverlayContext.tsx +10 -4
  555. package/src/contexts/overlayContext/OverlayProvider.tsx +21 -20
  556. package/src/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.tsx +38 -0
  557. package/src/contexts/suggestionsContext/SuggestionsContext.tsx +27 -48
  558. package/src/contexts/suggestionsContext/__tests__/Suggestions.test.js +0 -1
  559. package/src/contexts/themeContext/utils/theme.ts +48 -16
  560. package/src/contexts/translationContext/TranslationContext.tsx +1 -1
  561. package/src/contexts/utils/getDisplayName.ts +2 -1
  562. package/src/emoji-data/compiled.ts +1830 -9609
  563. package/src/emoji-data/emojiNames.ts +0 -140
  564. package/src/emoji-data/emojis.ts +0 -210
  565. package/src/i18n/en.json +9 -3
  566. package/src/i18n/fr.json +9 -3
  567. package/src/i18n/hi.json +9 -3
  568. package/src/i18n/it.json +9 -3
  569. package/src/i18n/ja.json +9 -0
  570. package/src/i18n/ko.json +9 -0
  571. package/src/i18n/nl.json +9 -3
  572. package/src/i18n/ru.json +9 -3
  573. package/src/i18n/tr.json +10 -4
  574. package/src/icons/Pin.tsx +17 -0
  575. package/src/icons/PinHeader.tsx +12 -0
  576. package/src/icons/Unpin.tsx +12 -0
  577. package/src/icons/index.ts +3 -0
  578. package/src/mock-builders/api/sendMessage.js +3 -2
  579. package/src/mock-builders/generator/channel.js +18 -0
  580. package/src/mock-builders/mock.js +2 -2
  581. package/src/native.ts +1 -13
  582. package/src/utils/date.ts +4 -0
  583. package/src/utils/utils.ts +14 -12
  584. package/src/version.json +1 -1
  585. package/lib/commonjs/components/AutoCompleteInput/CommandsHeader.js +0 -78
  586. package/lib/commonjs/components/AutoCompleteInput/CommandsHeader.js.map +0 -1
  587. package/lib/commonjs/components/AutoCompleteInput/CommandsItem.js.map +0 -1
  588. package/lib/commonjs/components/AutoCompleteInput/EmojisHeader.js +0 -81
  589. package/lib/commonjs/components/AutoCompleteInput/EmojisHeader.js.map +0 -1
  590. package/lib/commonjs/components/AutoCompleteInput/EmojisItem.js +0 -75
  591. package/lib/commonjs/components/AutoCompleteInput/EmojisItem.js.map +0 -1
  592. package/lib/commonjs/components/AutoCompleteInput/MentionsItem.js +0 -125
  593. package/lib/commonjs/components/AutoCompleteInput/MentionsItem.js.map +0 -1
  594. package/lib/commonjs/components/AutoCompleteInput/SuggestionsList.js +0 -199
  595. package/lib/commonjs/components/AutoCompleteInput/SuggestionsList.js.map +0 -1
  596. package/lib/commonjs/components/MessageOverlay/MessageActions.js.map +0 -1
  597. package/lib/module/components/AutoCompleteInput/CommandsHeader.js +0 -78
  598. package/lib/module/components/AutoCompleteInput/CommandsHeader.js.map +0 -1
  599. package/lib/module/components/AutoCompleteInput/CommandsItem.js.map +0 -1
  600. package/lib/module/components/AutoCompleteInput/EmojisHeader.js +0 -81
  601. package/lib/module/components/AutoCompleteInput/EmojisHeader.js.map +0 -1
  602. package/lib/module/components/AutoCompleteInput/EmojisItem.js +0 -75
  603. package/lib/module/components/AutoCompleteInput/EmojisItem.js.map +0 -1
  604. package/lib/module/components/AutoCompleteInput/MentionsItem.js +0 -125
  605. package/lib/module/components/AutoCompleteInput/MentionsItem.js.map +0 -1
  606. package/lib/module/components/AutoCompleteInput/SuggestionsList.js +0 -199
  607. package/lib/module/components/AutoCompleteInput/SuggestionsList.js.map +0 -1
  608. package/lib/module/components/MessageOverlay/MessageActions.js.map +0 -1
  609. package/lib/typescript/components/AutoCompleteInput/CommandsHeader.d.ts +0 -2
  610. package/lib/typescript/components/AutoCompleteInput/CommandsItem.d.ts +0 -15
  611. package/lib/typescript/components/AutoCompleteInput/EmojisHeader.d.ts +0 -5
  612. package/lib/typescript/components/AutoCompleteInput/EmojisItem.d.ts +0 -12
  613. package/lib/typescript/components/AutoCompleteInput/MentionsItem.d.ts +0 -16
  614. package/lib/typescript/components/AutoCompleteInput/SuggestionsList.d.ts +0 -13
  615. package/lib/typescript/components/MessageOverlay/MessageActions.d.ts +0 -11
  616. package/src/components/AutoCompleteInput/CommandsHeader.tsx +0 -43
  617. package/src/components/AutoCompleteInput/EmojisHeader.tsx +0 -45
  618. package/src/components/AutoCompleteInput/EmojisItem.tsx +0 -52
  619. package/src/components/AutoCompleteInput/MentionsItem.tsx +0 -74
  620. package/src/components/AutoCompleteInput/SuggestionsList.tsx +0 -138
  621. package/src/components/AutoCompleteInput/__tests__/CommandsItem.test.js +0 -26
  622. package/src/components/AutoCompleteInput/__tests__/MentionsItem.test.js +0 -62
  623. package/src/components/MessageList/__tests__/__snapshots__/MessageList.test.js.snap +0 -936
@@ -1,36 +1,15 @@
1
- import React, { useEffect, useRef } from 'react';
2
- import {
3
- Alert,
4
- Clipboard,
5
- GestureResponderEvent,
6
- Image,
7
- Keyboard,
8
- PixelRatio,
9
- Platform,
10
- StyleProp,
11
- StyleSheet,
12
- ViewStyle,
13
- } from 'react-native';
14
- import { TapGestureHandler, TapGestureHandlerGestureEvent } from 'react-native-gesture-handler';
15
- import Animated, {
16
- cancelAnimation,
17
- runOnJS,
18
- useAnimatedGestureHandler,
19
- useAnimatedStyle,
20
- useSharedValue,
21
- withSequence,
22
- withTiming,
23
- } from 'react-native-reanimated';
1
+ import React from 'react';
2
+ import { GestureResponderEvent, Keyboard, StyleProp, View, ViewStyle } from 'react-native';
24
3
 
25
4
  import { useCreateMessageContext } from './hooks/useCreateMessageContext';
26
5
  import { messageActions as defaultMessageActions } from './utils/messageActions';
27
- import { removeReservedFields } from './utils/removeReservedFields';
28
6
 
29
7
  import {
30
8
  isMessageWithStylesReadByAndDateSeparator,
31
9
  MessageType,
32
10
  } from '../MessageList/hooks/useMessageList';
33
11
 
12
+ import { useOwnCapabilitiesContext } from '../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';
34
13
  import {
35
14
  ChannelContextValue,
36
15
  useChannelContext,
@@ -46,10 +25,10 @@ import {
46
25
  Reactions,
47
26
  } from '../../contexts/messageContext/MessageContext';
48
27
  import {
49
- MessageAction,
50
28
  MessageOverlayContextValue,
51
29
  useMessageOverlayContext,
52
30
  } from '../../contexts/messageOverlayContext/MessageOverlayContext';
31
+ import type { MessageActionListItemProps } from '../MessageOverlay/MessageActionListItem';
53
32
  import {
54
33
  MessagesContextValue,
55
34
  useMessagesContext,
@@ -65,21 +44,10 @@ import {
65
44
  useTranslationContext,
66
45
  } from '../../contexts/translationContext/TranslationContext';
67
46
 
68
- import {
69
- Copy,
70
- CurveLineLeftUp,
71
- Delete,
72
- Edit,
73
- MessageFlag,
74
- Mute,
75
- SendUp,
76
- ThreadReply,
77
- UserDelete,
78
- } from '../../icons';
79
47
  import { triggerHaptic } from '../../native';
80
48
  import { emojiRegex } from '../../utils/utils';
81
49
 
82
- import type { Attachment, MessageResponse, Reaction } from 'stream-chat';
50
+ import type { Attachment } from 'stream-chat';
83
51
 
84
52
  import type {
85
53
  DefaultAttachmentType,
@@ -91,22 +59,9 @@ import type {
91
59
  DefaultUserType,
92
60
  UnknownType,
93
61
  } from '../../types/types';
62
+ import { useMessageActions } from './hooks/useMessageActions';
63
+ import { useMessageActionHandlers } from './hooks/useMessageActionHandlers';
94
64
 
95
- const prefetchImage = ({ height, url }: { height: number | string; url: string }) => {
96
- if (url.includes('&h=%2A')) {
97
- Image.prefetch(
98
- url.replace('h=%2A', `h=${PixelRatio.getPixelSizeForLayoutSize(Number(height))}`),
99
- )
100
- .catch(() => Image.prefetch(url))
101
- .catch(() => {
102
- // do nothing, not a big deal that prefetch failed
103
- });
104
- } else {
105
- Image.prefetch(url).catch(() => {
106
- // do nothing, not a big deal that prefetch failed
107
- });
108
- }
109
- };
110
65
  export type TouchableHandlerPayload = {
111
66
  defaultHandler?: () => void;
112
67
  emitter?:
@@ -139,6 +94,7 @@ export type MessageTouchableHandlerPayload<
139
94
  export type MessageActionHandlers = {
140
95
  deleteMessage: () => Promise<void>;
141
96
  editMessage: () => void;
97
+ pinMessage: () => Promise<void>;
142
98
  quotedReply: () => void;
143
99
  resendMessage: () => Promise<void>;
144
100
  showMessageOverlay: () => void;
@@ -157,13 +113,7 @@ export type MessagePropsWithContext<
157
113
  Us extends UnknownType = DefaultUserType,
158
114
  > = Pick<
159
115
  ChannelContextValue<At, Ch, Co, Ev, Me, Re, Us>,
160
- | 'channel'
161
- | 'disabled'
162
- | 'enforceUniqueReaction'
163
- | 'isAdmin'
164
- | 'isModerator'
165
- | 'members'
166
- | 'readEventsEnabled'
116
+ 'channel' | 'disabled' | 'enforceUniqueReaction' | 'members'
167
117
  > &
168
118
  Pick<ChatContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'client' | 'mutedUsers'> &
169
119
  Pick<KeyboardContextValue, 'dismissKeyboard'> &
@@ -171,13 +121,7 @@ export type MessagePropsWithContext<
171
121
  Pick<MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'groupStyles' | 'message'> &
172
122
  Pick<
173
123
  MessagesContextValue<At, Ch, Co, Ev, Me, Re, Us>,
174
- | 'animatedLongPress'
175
- | 'blockUser'
176
- | 'copyMessage'
177
- | 'deleteMessage'
178
124
  | 'dismissKeyboardOnMessageTouch'
179
- | 'editMessage'
180
- | 'flagMessage'
181
125
  | 'forceAlignMessages'
182
126
  | 'handleBlock'
183
127
  | 'handleCopy'
@@ -185,6 +129,7 @@ export type MessagePropsWithContext<
185
129
  | 'handleEdit'
186
130
  | 'handleFlag'
187
131
  | 'handleMute'
132
+ | 'handlePinMessage'
188
133
  | 'handleQuotedReply'
189
134
  | 'handleReaction'
190
135
  | 'handleRetry'
@@ -192,25 +137,16 @@ export type MessagePropsWithContext<
192
137
  | 'messageActions'
193
138
  | 'messageContentOrder'
194
139
  | 'MessageSimple'
195
- | 'mutesEnabled'
196
- | 'muteUser'
197
- | 'onDoubleTapMessage'
198
140
  | 'onLongPressMessage'
199
141
  | 'onPressInMessage'
200
142
  | 'onPressMessage'
201
143
  | 'OverlayReactionList'
202
- | 'quotedRepliesEnabled'
203
- | 'quotedReply'
204
- | 'reactionsEnabled'
205
144
  | 'removeMessage'
206
- | 'retry'
207
145
  | 'retrySendMessage'
208
146
  | 'selectReaction'
209
147
  | 'setEditingState'
210
148
  | 'setQuotedMessageState'
211
149
  | 'supportedReactions'
212
- | 'threadRepliesEnabled'
213
- | 'threadReply'
214
150
  | 'updateMessage'
215
151
  > &
216
152
  Pick<MessageOverlayContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'setData'> &
@@ -223,6 +159,7 @@ export type MessagePropsWithContext<
223
159
  */
224
160
  enableLongPress?: boolean;
225
161
  goToMessage?: (messageId: string) => void;
162
+ isTargetedMessage?: boolean;
226
163
  /**
227
164
  * Array of allowed actions or null on message, this can also be a function returning the array.
228
165
  * If all the actions need to be disabled an empty array should be provided as value of prop
@@ -241,6 +178,7 @@ export type MessagePropsWithContext<
241
178
  onLongPress?: (
242
179
  payload: Partial<MessageTouchableHandlerPayload<At, Ch, Co, Ev, Me, Re, Us>>,
243
180
  ) => void;
181
+
244
182
  /**
245
183
  * You can call methods available on the Message
246
184
  * component such as handleEdit, handleDelete, handleAction etc.
@@ -255,7 +193,6 @@ export type MessagePropsWithContext<
255
193
  onPress?: (
256
194
  payload: Partial<MessageTouchableHandlerPayload<At, Ch, Co, Ev, Me, Re, Us>>,
257
195
  ) => void;
258
-
259
196
  onPressIn?: (
260
197
  payload: Partial<MessageTouchableHandlerPayload<At, Ch, Co, Ev, Me, Re, Us>>,
261
198
  ) => void;
@@ -267,7 +204,6 @@ export type MessagePropsWithContext<
267
204
  onThreadSelect?: (message: MessageType<At, Ch, Co, Ev, Me, Re, Us>) => void;
268
205
  showUnreadUnderlay?: boolean;
269
206
  style?: StyleProp<ViewStyle>;
270
- targetedMessage?: boolean;
271
207
  };
272
208
 
273
209
  /**
@@ -286,20 +222,16 @@ const MessageWithContext = <
286
222
  >(
287
223
  props: MessagePropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,
288
224
  ) => {
225
+ const isMessageTypeDeleted = props.message.type === 'deleted';
226
+
289
227
  const {
290
- animatedLongPress = Platform.OS === 'ios' && !props.message.deleted_at,
291
- blockUser: blockUserProp,
292
228
  channel,
293
229
  client,
294
- copyMessage: copyMessageProp,
295
- deleteMessage: deleteMessageProp,
296
230
  disabled,
297
231
  dismissKeyboard,
298
232
  dismissKeyboardOnMessageTouch,
299
- editMessage: editMessageProp,
300
233
  enableLongPress = true,
301
234
  enforceUniqueReaction,
302
- flagMessage: flagMessageProp,
303
235
  forceAlignMessages = false,
304
236
  goToMessage,
305
237
  groupStyles = ['bottom'],
@@ -309,12 +241,11 @@ const MessageWithContext = <
309
241
  handleEdit,
310
242
  handleFlag,
311
243
  handleMute,
244
+ handlePinMessage,
312
245
  handleQuotedReply,
313
246
  handleReaction: handleReactionProp,
314
247
  handleRetry,
315
248
  handleThreadReply,
316
- isAdmin,
317
- isModerator,
318
249
  lastReceivedId,
319
250
  members,
320
251
  message,
@@ -322,9 +253,6 @@ const MessageWithContext = <
322
253
  messageContentOrder: messageContentOrderProp,
323
254
  messagesContext,
324
255
  MessageSimple,
325
- mutesEnabled,
326
- muteUser: muteUserProp,
327
- onDoubleTapMessage: onDoubleTapMessageProp,
328
256
  onLongPress: onLongPressProp,
329
257
  onLongPressMessage: onLongPressMessageProp,
330
258
  onPress: onPressProp,
@@ -335,12 +263,7 @@ const MessageWithContext = <
335
263
  openThread,
336
264
  OverlayReactionList,
337
265
  preventPress,
338
- quotedRepliesEnabled,
339
- reactionsEnabled,
340
- readEventsEnabled,
341
266
  removeMessage,
342
- quotedReply: quotedReplyProp,
343
- retry: retryProp,
344
267
  retrySendMessage,
345
268
  selectReaction,
346
269
  setData,
@@ -353,68 +276,22 @@ const MessageWithContext = <
353
276
  style,
354
277
  supportedReactions,
355
278
  t,
356
- targetedMessage,
279
+ isTargetedMessage,
357
280
  threadList = false,
358
- threadRepliesEnabled,
359
- threadReply: threadReplyProp,
360
281
  updateMessage,
361
282
  } = props;
362
283
 
363
284
  const {
364
285
  theme: {
365
- colors: { accent_blue, accent_red, bg_gradient_start, grey, targetedMessageBackground },
366
- messageSimple: {
367
- gallery: { halfSize, size },
368
- targetedMessageUnderlay,
369
- },
286
+ colors: { bg_gradient_start, targetedMessageBackground },
287
+ messageSimple: { targetedMessageUnderlay },
370
288
  },
371
289
  } = useTheme();
372
290
 
373
- const doubleTapRef = useRef<TapGestureHandler>(null);
374
- const pressActive = useSharedValue(false);
375
- const scale = useSharedValue(1);
376
-
377
- /**
378
- * This is a cleanup effect to prevent the onLongPress
379
- * handler from being called if the component has dismounted.
380
- */
381
- useEffect(
382
- () => () => {
383
- pressActive.value = false;
384
- cancelAnimation(scale);
385
- },
386
- [],
387
- );
388
- const scaleStyle = useAnimatedStyle<ViewStyle>(
389
- () => ({
390
- transform: [
391
- {
392
- scale: scale.value,
393
- },
394
- ],
395
- }),
396
- [],
397
- );
398
- const targetedOpacity = useSharedValue(0);
399
- const targetedStyle = useAnimatedStyle<ViewStyle>(
400
- () => ({
401
- opacity: targetedOpacity.value,
402
- }),
403
- [],
404
- );
405
-
406
- useEffect(() => {
407
- targetedOpacity.value = withTiming(targetedMessage ? 1 : 0, {
408
- duration: 1000,
409
- });
410
- }, [targetedMessage]);
411
-
412
291
  const actionsEnabled = message.type === 'regular' && message.status === 'received';
413
292
 
414
293
  const isMyMessage = client && message && client.userID === message.user?.id;
415
294
 
416
- const canModifyMessage = isMyMessage || isModerator || isAdmin;
417
-
418
295
  const handleAction = async (name: string, value: string) => {
419
296
  if (message.id) {
420
297
  const data = await channel?.sendAction(message.id, { [name]: value });
@@ -432,9 +309,6 @@ const MessageWithContext = <
432
309
  const onPressQuotedMessage = (quotedMessage: MessageType<At, Ch, Co, Ev, Me, Re, Us>) => {
433
310
  if (!goToMessage) return;
434
311
 
435
- pressActive.value = false;
436
- cancelAnimation(scale);
437
- scale.value = withTiming(1, { duration: 100 });
438
312
  goToMessage(quotedMessage.id);
439
313
  };
440
314
 
@@ -465,7 +339,7 @@ const MessageWithContext = <
465
339
  * clickable
466
340
  */
467
341
  const attachments =
468
- !message.deleted_at && Array.isArray(message.attachments)
342
+ !isMessageTypeDeleted && Array.isArray(message.attachments)
469
343
  ? message.attachments.reduce(
470
344
  (acc, cur) => {
471
345
  if (cur.type === 'file' || cur.type === 'video') {
@@ -503,33 +377,10 @@ const MessageWithContext = <
503
377
  * Check if any actions to prevent long press
504
378
  */
505
379
  const hasAttachmentActions =
506
- !message.deleted_at &&
380
+ !isMessageTypeDeleted &&
507
381
  Array.isArray(message.attachments) &&
508
382
  message.attachments.some((attachment) => attachment.actions && attachment.actions.length);
509
383
 
510
- // prefetch images for Gallery component rendering
511
- const attachmentImageLength = attachments.images.length;
512
- useEffect(() => {
513
- if (attachmentImageLength) {
514
- attachments.images.slice(0, 4).forEach((image, index) => {
515
- const url = image.image_url || image.thumb_url;
516
- if (url) {
517
- if (attachmentImageLength <= 2) {
518
- prefetchImage({ height: size || 200, url });
519
- } else if (attachmentImageLength === 3) {
520
- if (index === 0) {
521
- prefetchImage({ height: size || 200, url });
522
- } else {
523
- prefetchImage({ height: halfSize || 100, url });
524
- }
525
- } else {
526
- prefetchImage({ height: halfSize || 100, url });
527
- }
528
- }
529
- });
530
- }
531
- }, [attachmentImageLength]);
532
-
533
384
  const messageContentOrder = messageContentOrderProp.filter((content) => {
534
385
  if (content === 'quoted_reply') {
535
386
  return !!message.quoted_message;
@@ -565,10 +416,7 @@ const MessageWithContext = <
565
416
  };
566
417
 
567
418
  const hasReactions =
568
- !!reactionsEnabled &&
569
- !message.deleted_at &&
570
- !!message.latest_reactions &&
571
- message.latest_reactions.length > 0;
419
+ !isMessageTypeDeleted && !!message.latest_reactions && message.latest_reactions.length > 0;
572
420
 
573
421
  const clientId = client.userID;
574
422
 
@@ -590,76 +438,69 @@ const MessageWithContext = <
590
438
  }, [] as Reactions)
591
439
  : [];
592
440
 
593
- const handleToggleReaction = async (reactionType: string) => {
594
- const messageId = message.id;
595
- const ownReaction = !!reactions.find(
596
- (reaction) => reaction.own && reaction.type === reactionType,
597
- );
598
-
599
- // Change reaction in local state, make API call in background, revert to old message if fails
600
- try {
601
- if (channel && messageId) {
602
- if (ownReaction) {
603
- await channel.deleteReaction(messageId, reactionType);
604
- } else {
605
- await channel.sendReaction(
606
- messageId,
607
- {
608
- type: reactionType,
609
- } as Reaction<Re, Us>,
610
- { enforce_unique: enforceUniqueReaction },
611
- );
612
- }
613
- }
614
- } catch (err) {
615
- console.log(err);
616
- }
617
- };
618
-
619
- const handleResendMessage = () =>
620
- retrySendMessage(message as MessageResponse<At, Ch, Co, Me, Re, Us>);
621
-
622
- const handleQuotedReplyMessage = () => {
623
- setQuotedMessageState(message);
624
- };
625
-
626
- const isMuted = (client.mutedUsers || []).some(
627
- (mute) => mute.user.id === client.userID && mute.target.id === message.user?.id,
628
- );
629
-
630
- const handleToggleMuteUser = async () => {
631
- if (!message.user?.id) {
632
- return;
633
- }
634
-
635
- if (isMuted) {
636
- await client.unmuteUser(message.user.id);
637
- } else {
638
- await client.muteUser(message.user.id);
639
- }
640
- };
641
-
642
- const handleDeleteMessage = async () => {
643
- const data = await client.deleteMessage(message.id);
644
- updateMessage(data.message);
645
- };
646
-
647
- const handleEditMessage = () => {
648
- setEditingState(message);
649
- };
441
+ const ownCapabilities = useOwnCapabilitiesContext();
650
442
 
651
- const handleToggleBanUser = async () => {
652
- const messageUser = message.user;
653
- if (!messageUser) {
654
- return;
655
- }
443
+ const {
444
+ handleDeleteMessage,
445
+ handleEditMessage,
446
+ handleQuotedReplyMessage,
447
+ handleResendMessage,
448
+ handleToggleBanUser,
449
+ handleToggleMuteUser,
450
+ handleTogglePinMessage,
451
+ handleToggleReaction,
452
+ } = useMessageActionHandlers({
453
+ channel,
454
+ client,
455
+ enforceUniqueReaction,
456
+ message,
457
+ retrySendMessage,
458
+ setEditingState,
459
+ setQuotedMessageState,
460
+ supportedReactions,
461
+ updateMessage,
462
+ });
656
463
 
657
- if (messageUser.banned) {
658
- await client.unbanUser(messageUser.id);
659
- } else {
660
- await client.banUser(messageUser.id);
661
- }
662
- };
464
+ const {
465
+ blockUser,
466
+ copyMessage,
467
+ deleteMessage,
468
+ editMessage,
469
+ flagMessage,
470
+ handleReaction,
471
+ muteUser,
472
+ pinMessage,
473
+ quotedReply,
474
+ retry,
475
+ threadReply,
476
+ unpinMessage,
477
+ } = useMessageActions({
478
+ channel,
479
+ client,
480
+ enforceUniqueReaction,
481
+ handleBlock,
482
+ handleCopy,
483
+ handleDelete,
484
+ handleEdit,
485
+ handleFlag,
486
+ handleMute,
487
+ handlePinMessage,
488
+ handleQuotedReply,
489
+ handleReaction: handleReactionProp,
490
+ handleRetry,
491
+ handleThreadReply,
492
+ message,
493
+ onThreadSelect,
494
+ openThread,
495
+ retrySendMessage,
496
+ selectReaction,
497
+ setEditingState,
498
+ setOverlay,
499
+ setQuotedMessageState,
500
+ supportedReactions,
501
+ t,
502
+ updateMessage,
503
+ });
663
504
 
664
505
  const showMessageOverlay = async (
665
506
  messageReactions = false,
@@ -667,230 +508,6 @@ const MessageWithContext = <
667
508
  ) => {
668
509
  await dismissKeyboard();
669
510
 
670
- const blockUser = blockUserProp
671
- ? blockUserProp(message)
672
- : blockUserProp === null
673
- ? null
674
- : {
675
- action: () => async () => {
676
- setOverlay('none');
677
- if (message.user?.id) {
678
- if (handleBlock) {
679
- handleBlock(message);
680
- }
681
-
682
- await handleToggleBanUser();
683
- }
684
- },
685
- icon: <UserDelete pathFill={grey} />,
686
- title: message.user?.banned ? t('Unblock User') : t('Block User'),
687
- };
688
-
689
- const copyMessage = copyMessageProp
690
- ? copyMessageProp(message)
691
- : copyMessageProp === null
692
- ? null
693
- : {
694
- // using depreciated Clipboard from react-native until expo supports the community version or their own
695
- action: () => {
696
- setOverlay('none');
697
- if (handleCopy) {
698
- handleCopy(message);
699
- }
700
- Clipboard.setString(message.text || '');
701
- },
702
- icon: <Copy pathFill={grey} />,
703
- title: t('Copy Message'),
704
- };
705
-
706
- const deleteMessage = deleteMessageProp
707
- ? deleteMessageProp(message)
708
- : deleteMessageProp === null
709
- ? null
710
- : {
711
- action: () => {
712
- setOverlay('alert');
713
- if (message.id) {
714
- Alert.alert(
715
- t('Delete Message'),
716
- t('Are you sure you want to permanently delete this message?'),
717
- [
718
- { onPress: () => setOverlay('none'), text: t('Cancel') },
719
- {
720
- onPress: async () => {
721
- setOverlay('none');
722
- if (handleDelete) {
723
- handleDelete(message);
724
- }
725
-
726
- await handleDeleteMessage();
727
- },
728
- style: 'destructive',
729
- text: t('Delete'),
730
- },
731
- ],
732
- { cancelable: false },
733
- );
734
- }
735
- },
736
- icon: <Delete pathFill={accent_red} />,
737
- title: t('Delete Message'),
738
- titleStyle: { color: accent_red },
739
- };
740
-
741
- const editMessage = editMessageProp
742
- ? editMessageProp(message)
743
- : editMessageProp === null
744
- ? null
745
- : {
746
- action: () => {
747
- setOverlay('none');
748
- if (handleEdit) {
749
- handleEdit(message);
750
- }
751
- handleEditMessage();
752
- },
753
- icon: <Edit pathFill={grey} />,
754
- title: t('Edit Message'),
755
- };
756
-
757
- const flagMessage = flagMessageProp
758
- ? flagMessageProp(message)
759
- : flagMessageProp === null
760
- ? null
761
- : {
762
- action: () => {
763
- setOverlay('alert');
764
- if (message.id) {
765
- Alert.alert(
766
- t('Flag Message'),
767
- t(
768
- 'Do you want to send a copy of this message to a moderator for further investigation?',
769
- ),
770
- [
771
- { onPress: () => setOverlay('none'), text: t('Cancel') },
772
- {
773
- onPress: async () => {
774
- try {
775
- if (handleFlag) {
776
- handleFlag(message);
777
- }
778
- await client.flagMessage(message.id);
779
- Alert.alert(
780
- t('Message flagged'),
781
- t('The message has been reported to a moderator.'),
782
- [
783
- {
784
- onPress: () => setOverlay('none'),
785
- text: t('Dismiss'),
786
- },
787
- ],
788
- );
789
- } catch (err) {
790
- Alert.alert(
791
- t('Something went wrong'),
792
- t("The operation couldn't be completed."),
793
- [
794
- {
795
- onPress: () => setOverlay('none'),
796
- text: t('Dismiss'),
797
- },
798
- ],
799
- );
800
- }
801
- },
802
- text: t('Flag'),
803
- },
804
- ],
805
- { cancelable: false },
806
- );
807
- }
808
- },
809
- icon: <MessageFlag pathFill={grey} />,
810
- title: t('Flag Message'),
811
- };
812
-
813
- const handleReaction = !error
814
- ? selectReaction
815
- ? selectReaction(message)
816
- : async (reactionType: string) => {
817
- if (handleReactionProp) {
818
- handleReactionProp(message, reactionType);
819
- }
820
-
821
- await handleToggleReaction(reactionType);
822
- }
823
- : undefined;
824
-
825
- const muteUser = muteUserProp
826
- ? muteUserProp(message)
827
- : muteUserProp === null
828
- ? null
829
- : {
830
- action: async () => {
831
- setOverlay('none');
832
- if (message.user?.id) {
833
- if (handleMute) {
834
- handleMute(message);
835
- }
836
-
837
- await handleToggleMuteUser();
838
- }
839
- },
840
- icon: <Mute pathFill={grey} />,
841
- title: isMuted ? t('Unmute User') : t('Mute User'),
842
- };
843
-
844
- const quotedReply = quotedReplyProp
845
- ? quotedReplyProp(message)
846
- : quotedReplyProp === null
847
- ? null
848
- : {
849
- action: () => {
850
- setOverlay('none');
851
- if (handleQuotedReply) {
852
- handleQuotedReply(message);
853
- }
854
- handleQuotedReplyMessage();
855
- },
856
- icon: <CurveLineLeftUp pathFill={grey} />,
857
- title: t('Reply'),
858
- };
859
-
860
- const retry = retryProp
861
- ? retryProp(message)
862
- : retryProp === null
863
- ? null
864
- : {
865
- action: async () => {
866
- setOverlay('none');
867
- const messageWithoutReservedFields = removeReservedFields(message);
868
- if (handleRetry) {
869
- handleRetry(messageWithoutReservedFields);
870
- }
871
-
872
- await handleResendMessage();
873
- },
874
- icon: <SendUp pathFill={accent_blue} />,
875
- title: t('Resend'),
876
- };
877
-
878
- const threadReply = threadReplyProp
879
- ? threadReplyProp(message)
880
- : threadReplyProp === null
881
- ? null
882
- : {
883
- action: () => {
884
- setOverlay('none');
885
- if (handleThreadReply) {
886
- handleThreadReply(message);
887
- }
888
- onOpenThread();
889
- },
890
- icon: <ThreadReply pathFill={grey} />,
891
- title: t('Thread Reply'),
892
- };
893
-
894
511
  const isThreadMessage = threadList || !!message.parent_id;
895
512
 
896
513
  const dismissOverlay = () => setOverlay('none');
@@ -900,7 +517,6 @@ const MessageWithContext = <
900
517
  ? messageActionsProp
901
518
  : messageActionsProp({
902
519
  blockUser,
903
- canModifyMessage,
904
520
  copyMessage,
905
521
  deleteMessage,
906
522
  dismissOverlay,
@@ -911,13 +527,13 @@ const MessageWithContext = <
911
527
  isThreadMessage,
912
528
  message,
913
529
  messageReactions,
914
- mutesEnabled,
915
530
  muteUser,
916
- quotedRepliesEnabled,
531
+ ownCapabilities,
532
+ pinMessage,
917
533
  quotedReply,
918
534
  retry,
919
- threadRepliesEnabled,
920
535
  threadReply,
536
+ unpinMessage,
921
537
  });
922
538
 
923
539
  setData({
@@ -925,16 +541,17 @@ const MessageWithContext = <
925
541
  clientId: client.userID,
926
542
  files: attachments.files,
927
543
  groupStyles,
928
- handleReaction: reactionsEnabled ? handleReaction : undefined,
544
+ handleReaction: ownCapabilities.sendReaction ? handleReaction : undefined,
929
545
  images: attachments.images,
930
546
  message,
931
- messageActions: messageActions?.filter(Boolean) as MessageAction[] | undefined,
547
+ messageActions: messageActions?.filter(Boolean) as MessageActionListItemProps[] | undefined,
932
548
  messageContext: { ...messageContext, disabled: true, preventPress: true },
933
549
  messageReactionTitle: !error && messageReactions ? t('Message Reactions') : undefined,
934
550
  messagesContext: { ...messagesContext, messageContentOrder },
935
551
  onlyEmojis,
936
552
  otherAttachments: attachments.other,
937
553
  OverlayReactionList,
554
+ ownCapabilities,
938
555
  supportedReactions,
939
556
  threadList,
940
557
  });
@@ -945,6 +562,7 @@ const MessageWithContext = <
945
562
  const actionHandlers: MessageActionHandlers = {
946
563
  deleteMessage: handleDeleteMessage,
947
564
  editMessage: handleEditMessage,
565
+ pinMessage: handleTogglePinMessage,
948
566
  quotedReply: handleQuotedReplyMessage,
949
567
  resendMessage: handleResendMessage,
950
568
  showMessageOverlay,
@@ -974,19 +592,15 @@ const MessageWithContext = <
974
592
  event: payload?.event,
975
593
  })
976
594
  : enableLongPress
977
- ? () => showMessageOverlay(false)
595
+ ? () => {
596
+ triggerHaptic('impactMedium');
597
+ showMessageOverlay(false);
598
+ }
978
599
  : () => null;
979
600
 
980
- const onDoubleTapMessage = () => {
981
- if (onDoubleTapMessageProp) {
982
- onDoubleTapMessageProp({ actionHandlers, message });
983
- }
984
- };
985
-
986
601
  const messageContext = useCreateMessageContext({
987
602
  actionsEnabled,
988
603
  alignment,
989
- canModifyMessage,
990
604
  channel,
991
605
  disabled,
992
606
  files: attachments.files,
@@ -1008,7 +622,7 @@ const MessageWithContext = <
1008
622
  members,
1009
623
  message,
1010
624
  messageContentOrder,
1011
- onLongPress: !animatedLongPress ? onLongPressMessage : () => null,
625
+ onLongPress: onLongPressMessage,
1012
626
  onlyEmojis,
1013
627
  onOpenThread,
1014
628
  onPress: (payload) => {
@@ -1056,96 +670,41 @@ const MessageWithContext = <
1056
670
  otherAttachments: attachments.other,
1057
671
  preventPress,
1058
672
  reactions,
1059
- readEventsEnabled,
1060
673
  showAvatar,
1061
674
  showMessageOverlay,
1062
675
  showMessageStatus: typeof showMessageStatus === 'boolean' ? showMessageStatus : isMyMessage,
1063
676
  threadList,
1064
677
  });
1065
678
 
1066
- const onLongPressTouchable = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>(
1067
- {
1068
- onFinish: () => {
1069
- pressActive.value = false;
1070
- cancelAnimation(scale);
1071
- scale.value = withTiming(1, { duration: 100 });
1072
- },
1073
- onStart: () => {
1074
- pressActive.value = true;
1075
- cancelAnimation(scale);
1076
- /**
1077
- * React native longPress active occurs on 370ms,
1078
- * to hijack this we must make sure the timing is
1079
- * longer, otherwise onPress will fire instead
1080
- */
1081
- scale.value = withSequence(
1082
- withTiming(1, { duration: 100 }),
1083
- withTiming(0.98, { duration: 400 }, () => {
1084
- if (pressActive.value) {
1085
- runOnJS(onLongPressMessage)();
1086
- runOnJS(triggerHaptic)('impactMedium');
1087
- }
1088
- }),
1089
- withTiming(1.02, { duration: 100 }),
1090
- withTiming(1.0, { duration: 300 }),
1091
- );
1092
- },
1093
- },
1094
- [onLongPressMessage],
1095
- );
1096
-
1097
- const onDoubleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>(
1098
- {
1099
- onActive: () => {
1100
- pressActive.value = false;
1101
- cancelAnimation(scale);
1102
- scale.value = withTiming(1, { duration: 100 });
1103
- runOnJS(onDoubleTapMessage)();
1104
- },
1105
- },
1106
- [onDoubleTapMessage],
1107
- );
679
+ if (!(isMessageTypeDeleted || messageContentOrder.length)) return null;
1108
680
 
1109
- return message.deleted_at || messageContentOrder.length ? (
1110
- <TapGestureHandler
1111
- enabled={animatedLongPress && !preventPress}
1112
- maxDeltaX={8}
1113
- maxDurationMs={3000}
1114
- onGestureEvent={animatedLongPress ? onLongPressTouchable : undefined}
1115
- waitFor={doubleTapRef}
681
+ return (
682
+ <View
683
+ style={[message.pinned && { backgroundColor: targetedMessageBackground }]}
684
+ testID='message-wrapper'
1116
685
  >
1117
- <Animated.View testID='message-wrapper'>
1118
- <TapGestureHandler
1119
- enabled={!preventPress}
1120
- numberOfTaps={2}
1121
- onGestureEvent={onDoubleTap}
1122
- ref={doubleTapRef}
686
+ <View
687
+ style={[
688
+ style,
689
+ {
690
+ backgroundColor: showUnreadUnderlay ? bg_gradient_start : undefined,
691
+ },
692
+ ]}
693
+ >
694
+ <View
695
+ style={[
696
+ isTargetedMessage
697
+ ? { backgroundColor: targetedMessageBackground, ...targetedMessageUnderlay }
698
+ : {},
699
+ ]}
1123
700
  >
1124
- <Animated.View
1125
- style={[
1126
- style,
1127
- {
1128
- backgroundColor: showUnreadUnderlay ? bg_gradient_start : undefined,
1129
- },
1130
- scaleStyle,
1131
- ]}
1132
- >
1133
- <Animated.View
1134
- style={[
1135
- StyleSheet.absoluteFillObject,
1136
- targetedMessageUnderlay,
1137
- { backgroundColor: targetedMessageBackground },
1138
- targetedStyle,
1139
- ]}
1140
- />
1141
- <MessageProvider value={messageContext}>
1142
- <MessageSimple />
1143
- </MessageProvider>
1144
- </Animated.View>
1145
- </TapGestureHandler>
1146
- </Animated.View>
1147
- </TapGestureHandler>
1148
- ) : null;
701
+ <MessageProvider value={messageContext}>
702
+ <MessageSimple />
703
+ </MessageProvider>
704
+ </View>
705
+ </View>
706
+ </View>
707
+ );
1149
708
  };
1150
709
 
1151
710
  const areEqual = <
@@ -1162,23 +721,28 @@ const areEqual = <
1162
721
  ) => {
1163
722
  const {
1164
723
  goToMessage: prevGoToMessage,
724
+ isTargetedMessage: prevIsTargetedMessage,
1165
725
  lastReceivedId: prevLastReceivedId,
726
+ members: prevMembers,
1166
727
  message: prevMessage,
1167
728
  mutedUsers: prevMutedUsers,
1168
729
  showUnreadUnderlay: prevShowUnreadUnderlay,
1169
730
  t: prevT,
1170
- targetedMessage: prevTargetedMessage,
1171
731
  } = prevProps;
1172
732
  const {
1173
733
  goToMessage: nextGoToMessage,
734
+ isTargetedMessage: nextIsTargetedMessage,
1174
735
  lastReceivedId: nextLastReceivedId,
736
+ members: nextMembers,
1175
737
  message: nextMessage,
1176
738
  mutedUsers: nextMutedUsers,
1177
739
  showUnreadUnderlay: nextShowUnreadUnderlay,
1178
740
  t: nextT,
1179
- targetedMessage: nextTargetedMessage,
1180
741
  } = nextProps;
1181
742
 
743
+ const membersEqual = Object.keys(prevMembers).length === Object.keys(nextMembers).length;
744
+ if (!membersEqual) return false;
745
+
1182
746
  const repliesEqual = prevMessage.reply_count === nextMessage.reply_count;
1183
747
  if (!repliesEqual) return false;
1184
748
 
@@ -1196,20 +760,27 @@ const areEqual = <
1196
760
 
1197
761
  if (goToMessageChangedAndMatters) return false;
1198
762
 
763
+ const isPrevMessageTypeDeleted = prevMessage.type === 'deleted';
764
+ const isNextMessageTypeDeleted = nextMessage.type === 'deleted';
765
+
1199
766
  const messageEqual =
1200
- prevMessage.deleted_at === nextMessage.deleted_at &&
767
+ isPrevMessageTypeDeleted === isNextMessageTypeDeleted &&
1201
768
  (isMessageWithStylesReadByAndDateSeparator(prevMessage) && prevMessage.readBy) ===
1202
769
  (isMessageWithStylesReadByAndDateSeparator(nextMessage) && nextMessage.readBy) &&
1203
770
  prevMessage.status === nextMessage.status &&
1204
771
  prevMessage.type === nextMessage.type &&
1205
772
  prevMessage.text === nextMessage.text &&
1206
- prevMessage.updated_at === nextMessage.updated_at;
773
+ prevMessage.updated_at === nextMessage.updated_at &&
774
+ prevMessage.pinned === nextMessage.pinned;
1207
775
 
1208
776
  if (!messageEqual) return false;
1209
777
 
778
+ const isPrevQuotedMessageTypeDeleted = prevMessage.quoted_message?.type === 'deleted';
779
+ const isNextQuotedMessageTypeDeleted = nextMessage.quoted_message?.type === 'deleted';
780
+
1210
781
  const quotedMessageEqual =
1211
782
  prevMessage.quoted_message?.id === nextMessage.quoted_message?.id &&
1212
- prevMessage.quoted_message?.deleted_at === nextMessage.quoted_message?.deleted_at;
783
+ isPrevQuotedMessageTypeDeleted === isNextQuotedMessageTypeDeleted;
1213
784
 
1214
785
  if (!quotedMessageEqual) return false;
1215
786
 
@@ -1252,7 +823,7 @@ const areEqual = <
1252
823
  const tEqual = prevT === nextT;
1253
824
  if (!tEqual) return false;
1254
825
 
1255
- const targetedMessageEqual = prevTargetedMessage === nextTargetedMessage;
826
+ const targetedMessageEqual = prevIsTargetedMessage === nextIsTargetedMessage;
1256
827
  if (!targetedMessageEqual) return false;
1257
828
 
1258
829
  return true;
@@ -1288,15 +859,8 @@ export const Message = <
1288
859
  >(
1289
860
  props: MessageProps<At, Ch, Co, Ev, Me, Re, Us>,
1290
861
  ) => {
1291
- const {
1292
- channel,
1293
- disabled,
1294
- enforceUniqueReaction,
1295
- isAdmin,
1296
- isModerator,
1297
- members,
1298
- readEventsEnabled,
1299
- } = useChannelContext<At, Ch, Co, Ev, Me, Re, Us>();
862
+ const { channel, disabled, enforceUniqueReaction, members } =
863
+ useChannelContext<At, Ch, Co, Ev, Me, Re, Us>();
1300
864
  const { client, mutedUsers } = useChatContext<At, Ch, Co, Ev, Me, Re, Us>();
1301
865
  const { dismissKeyboard } = useKeyboardContext();
1302
866
  const { setData } = useMessageOverlayContext<At, Ch, Co, Ev, Me, Re, Us>();
@@ -1314,13 +878,10 @@ export const Message = <
1314
878
  disabled,
1315
879
  dismissKeyboard,
1316
880
  enforceUniqueReaction,
1317
- isAdmin,
1318
- isModerator,
1319
881
  members,
1320
882
  messagesContext,
1321
883
  mutedUsers,
1322
884
  openThread,
1323
- readEventsEnabled,
1324
885
  setData,
1325
886
  setOverlay,
1326
887
  t,