@sendbird/uikit-react 3.6.11-beta.3 → 3.7.0-rc.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 (994) hide show
  1. package/App.js +272 -345
  2. package/App.js.map +1 -1
  3. package/CHANGELOG.md +134 -0
  4. package/Channel/components/ChannelHeader.js +45 -50
  5. package/Channel/components/ChannelHeader.js.map +1 -1
  6. package/Channel/components/ChannelUI.js +76 -77
  7. package/Channel/components/ChannelUI.js.map +1 -1
  8. package/Channel/components/FileViewer.js +53 -58
  9. package/Channel/components/FileViewer.js.map +1 -1
  10. package/Channel/components/FrozenNotification.js +9 -12
  11. package/Channel/components/FrozenNotification.js.map +1 -1
  12. package/Channel/components/Message.js +198 -176
  13. package/Channel/components/Message.js.map +1 -1
  14. package/Channel/components/MessageInput.js +137 -130
  15. package/Channel/components/MessageInput.js.map +1 -1
  16. package/Channel/components/MessageList.js +171 -161
  17. package/Channel/components/MessageList.js.map +1 -1
  18. package/Channel/components/RemoveMessageModal.js +40 -41
  19. package/Channel/components/RemoveMessageModal.js.map +1 -1
  20. package/Channel/components/SuggestedMentionList.js +156 -136
  21. package/Channel/components/SuggestedMentionList.js.map +1 -1
  22. package/Channel/components/TypingIndicator.js +47 -48
  23. package/Channel/components/TypingIndicator.js.map +1 -1
  24. package/Channel/components/UnreadCount.js +17 -18
  25. package/Channel/components/UnreadCount.js.map +1 -1
  26. package/Channel/context.js +17 -17
  27. package/Channel/utils/compareMessagesForGrouping.js +11 -11
  28. package/Channel/utils/compareMessagesForGrouping.js.map +1 -1
  29. package/Channel/utils/getMessagePartsInfo.js +32 -26
  30. package/Channel/utils/getMessagePartsInfo.js.map +1 -1
  31. package/Channel.js +54 -51
  32. package/Channel.js.map +1 -1
  33. package/ChannelList/components/AddChannel.js +32 -30
  34. package/ChannelList/components/AddChannel.js.map +1 -1
  35. package/ChannelList/components/ChannelListHeader.js +22 -31
  36. package/ChannelList/components/ChannelListHeader.js.map +1 -1
  37. package/ChannelList/components/ChannelListUI.js +93 -88
  38. package/ChannelList/components/ChannelListUI.js.map +1 -1
  39. package/ChannelList/components/ChannelPreview.js +79 -75
  40. package/ChannelList/components/ChannelPreview.js.map +1 -1
  41. package/ChannelList/components/ChannelPreviewAction.js +85 -91
  42. package/ChannelList/components/ChannelPreviewAction.js.map +1 -1
  43. package/ChannelList/context.js +9 -10
  44. package/ChannelList/context.js.map +1 -1
  45. package/ChannelList.js +39 -41
  46. package/ChannelList.js.map +1 -1
  47. package/ChannelListProvider-f520f5b3.js +1051 -0
  48. package/ChannelListProvider-f520f5b3.js.map +1 -0
  49. package/ChannelProvider-7f6fd1f8.js +2080 -0
  50. package/ChannelProvider-7f6fd1f8.js.map +1 -0
  51. package/ChannelSettings/components/ChannelProfile.js +42 -37
  52. package/ChannelSettings/components/ChannelProfile.js.map +1 -1
  53. package/ChannelSettings/components/ChannelSettingsUI.js +44 -47
  54. package/ChannelSettings/components/ChannelSettingsUI.js.map +1 -1
  55. package/ChannelSettings/components/EditDetailsModal.js +54 -52
  56. package/ChannelSettings/components/EditDetailsModal.js.map +1 -1
  57. package/ChannelSettings/components/LeaveChannel.js +39 -41
  58. package/ChannelSettings/components/LeaveChannel.js.map +1 -1
  59. package/ChannelSettings/components/ModerationPanel.js +552 -509
  60. package/ChannelSettings/components/ModerationPanel.js.map +1 -1
  61. package/ChannelSettings/components/UserListItem.js +66 -66
  62. package/ChannelSettings/components/UserListItem.js.map +1 -1
  63. package/ChannelSettings/components/UserPanel.js +29 -26
  64. package/ChannelSettings/components/UserPanel.js.map +1 -1
  65. package/ChannelSettings/context.js +52 -57
  66. package/ChannelSettings/context.js.map +1 -1
  67. package/ChannelSettings.js +20 -19
  68. package/ChannelSettings.js.map +1 -1
  69. package/CreateChannel/components/CreateChannelUI.js +23 -25
  70. package/CreateChannel/components/CreateChannelUI.js.map +1 -1
  71. package/CreateChannel/components/InviteUsers.js +106 -102
  72. package/CreateChannel/components/InviteUsers.js.map +1 -1
  73. package/CreateChannel/components/SelectChannelType.js +38 -43
  74. package/CreateChannel/components/SelectChannelType.js.map +1 -1
  75. package/CreateChannel/context.js +4 -4
  76. package/CreateChannel.js +22 -23
  77. package/CreateChannel.js.map +1 -1
  78. package/CreateChannelProvider-c25dd81b.js +48 -0
  79. package/{CreateChannelProvider-0b4bc562.js.map → CreateChannelProvider-c25dd81b.js.map} +1 -1
  80. package/CreateOpenChannel/components/CreateOpenChannelUI.js +38 -36
  81. package/CreateOpenChannel/components/CreateOpenChannelUI.js.map +1 -1
  82. package/CreateOpenChannel/context.js +29 -34
  83. package/CreateOpenChannel/context.js.map +1 -1
  84. package/CreateOpenChannel.js +20 -21
  85. package/CreateOpenChannel.js.map +1 -1
  86. package/EditUserProfile/components/EditUserProfileUI.js +152 -21
  87. package/EditUserProfile/components/EditUserProfileUI.js.map +1 -1
  88. package/EditUserProfile/context.js +13 -13
  89. package/EditUserProfile/context.js.map +1 -1
  90. package/EditUserProfile.js +19 -19
  91. package/EditUserProfile.js.map +1 -1
  92. package/LocalizationContext-d18a86d8.js +20 -0
  93. package/{LocalizationContext-5cbe4df3.js.map → LocalizationContext-d18a86d8.js.map} +1 -1
  94. package/MediaQueryContext-3eeeec4f.js +85 -0
  95. package/MediaQueryContext-3eeeec4f.js.map +1 -0
  96. package/MemberList-469dae9b.js +422 -0
  97. package/{MemberList-d407bcd0.js.map → MemberList-469dae9b.js.map} +1 -1
  98. package/Message/context.js +11 -12
  99. package/Message/context.js.map +1 -1
  100. package/Message/hooks/useDirtyGetMentions.js +21 -26
  101. package/Message/hooks/useDirtyGetMentions.js.map +1 -1
  102. package/MessageSearch/components/MessageSearchUI.js +56 -61
  103. package/MessageSearch/components/MessageSearchUI.js.map +1 -1
  104. package/MessageSearch/context.js +166 -177
  105. package/MessageSearch/context.js.map +1 -1
  106. package/MessageSearch.js +49 -47
  107. package/MessageSearch.js.map +1 -1
  108. package/OpenChannel/components/FrozenChannelNotification.js +6 -8
  109. package/OpenChannel/components/FrozenChannelNotification.js.map +1 -1
  110. package/OpenChannel/components/OpenChannelHeader.js +22 -27
  111. package/OpenChannel/components/OpenChannelHeader.js.map +1 -1
  112. package/OpenChannel/components/OpenChannelInput.js +32 -35
  113. package/OpenChannel/components/OpenChannelInput.js.map +1 -1
  114. package/OpenChannel/components/OpenChannelMessage.js +170 -171
  115. package/OpenChannel/components/OpenChannelMessage.js.map +1 -1
  116. package/OpenChannel/components/OpenChannelMessageList.js +70 -64
  117. package/OpenChannel/components/OpenChannelMessageList.js.map +1 -1
  118. package/OpenChannel/components/OpenChannelUI.js +53 -54
  119. package/OpenChannel/components/OpenChannelUI.js.map +1 -1
  120. package/OpenChannel/context.js +8 -9
  121. package/OpenChannel/context.js.map +1 -1
  122. package/OpenChannel.js +37 -35
  123. package/OpenChannel.js.map +1 -1
  124. package/OpenChannelList/components/OpenChannelListUI.js +63 -61
  125. package/OpenChannelList/components/OpenChannelListUI.js.map +1 -1
  126. package/OpenChannelList/components/OpenChannelPreview.js +22 -21
  127. package/OpenChannelList/components/OpenChannelPreview.js.map +1 -1
  128. package/OpenChannelList/context.js +3 -3
  129. package/OpenChannelList.js +27 -27
  130. package/OpenChannelList.js.map +1 -1
  131. package/{OpenChannelListProvider-40f481e4.js → OpenChannelListProvider-24e735a1.js} +156 -178
  132. package/{OpenChannelListProvider-40f481e4.js.map → OpenChannelListProvider-24e735a1.js.map} +1 -1
  133. package/OpenChannelProvider-e9cb0f98.js +1850 -0
  134. package/{OpenChannelProvider-ca26866f.js.map → OpenChannelProvider-e9cb0f98.js.map} +1 -1
  135. package/OpenChannelSettings/components/EditDetailsModal.js +52 -51
  136. package/OpenChannelSettings/components/EditDetailsModal.js.map +1 -1
  137. package/OpenChannelSettings/components/OpenChannelProfile.js +30 -29
  138. package/OpenChannelSettings/components/OpenChannelProfile.js.map +1 -1
  139. package/OpenChannelSettings/components/OpenChannelSettingsUI.js +39 -47
  140. package/OpenChannelSettings/components/OpenChannelSettingsUI.js.map +1 -1
  141. package/OpenChannelSettings/components/OperatorUI.js +550 -518
  142. package/OpenChannelSettings/components/OperatorUI.js.map +1 -1
  143. package/OpenChannelSettings/components/ParticipantUI.js +16 -15
  144. package/OpenChannelSettings/components/ParticipantUI.js.map +1 -1
  145. package/OpenChannelSettings/context.js +58 -57
  146. package/OpenChannelSettings/context.js.map +1 -1
  147. package/OpenChannelSettings.js +20 -19
  148. package/OpenChannelSettings.js.map +1 -1
  149. package/README.md +4 -4
  150. package/RemoveMessageModal-f0cd37a5.js +33 -0
  151. package/RemoveMessageModal-f0cd37a5.js.map +1 -0
  152. package/SendbirdProvider.js +726 -690
  153. package/SendbirdProvider.js.map +1 -1
  154. package/Thread/components/ParentMessageInfo.js +194 -181
  155. package/Thread/components/ParentMessageInfo.js.map +1 -1
  156. package/Thread/components/ParentMessageInfoItem.js +86 -79
  157. package/Thread/components/ParentMessageInfoItem.js.map +1 -1
  158. package/Thread/components/ThreadHeader.js +22 -22
  159. package/Thread/components/ThreadHeader.js.map +1 -1
  160. package/Thread/components/ThreadList.js +126 -94
  161. package/Thread/components/ThreadList.js.map +1 -1
  162. package/Thread/components/ThreadListItem.js +260 -241
  163. package/Thread/components/ThreadListItem.js.map +1 -1
  164. package/Thread/components/ThreadMessageInput.js +121 -120
  165. package/Thread/components/ThreadMessageInput.js.map +1 -1
  166. package/Thread/components/ThreadUI.js +128 -144
  167. package/Thread/components/ThreadUI.js.map +1 -1
  168. package/Thread/context/types.js +9 -9
  169. package/Thread/context/types.js.map +1 -1
  170. package/Thread/context.js +1678 -19
  171. package/Thread/context.js.map +1 -1
  172. package/Thread.js +76 -73
  173. package/Thread.js.map +1 -1
  174. package/UserProfileContext-26e71f9a.js +34 -0
  175. package/UserProfileContext-26e71f9a.js.map +1 -0
  176. package/VoicePlayer/context.js +3 -3
  177. package/VoicePlayer/useVoicePlayer.js +52 -46
  178. package/VoicePlayer/useVoicePlayer.js.map +1 -1
  179. package/VoiceRecorder/context.js +68 -64
  180. package/VoiceRecorder/context.js.map +1 -1
  181. package/VoiceRecorder/useVoiceRecorder.js +50 -52
  182. package/VoiceRecorder/useVoiceRecorder.js.map +1 -1
  183. package/{WebAudioUtils-e85ef476.js → WebAudioUtils-dbb010a5.js} +38 -38
  184. package/{WebAudioUtils-e85ef476.js.map → WebAudioUtils-dbb010a5.js.map} +1 -1
  185. package/{_rollupPluginBabelHelpers-ef032169.js → _rollupPluginBabelHelpers-07dcbc2b.js} +17 -17
  186. package/_rollupPluginBabelHelpers-07dcbc2b.js.map +1 -0
  187. package/{actionTypes-d32207ad.js → actionTypes-3cd49b5c.js} +2 -2
  188. package/{actionTypes-d32207ad.js.map → actionTypes-3cd49b5c.js.map} +1 -1
  189. package/cjs/App.js +270 -344
  190. package/cjs/App.js.map +1 -1
  191. package/cjs/Channel/components/ChannelHeader.js +44 -49
  192. package/cjs/Channel/components/ChannelHeader.js.map +1 -1
  193. package/cjs/Channel/components/ChannelUI.js +79 -80
  194. package/cjs/Channel/components/ChannelUI.js.map +1 -1
  195. package/cjs/Channel/components/FileViewer.js +52 -57
  196. package/cjs/Channel/components/FileViewer.js.map +1 -1
  197. package/cjs/Channel/components/FrozenNotification.js +9 -12
  198. package/cjs/Channel/components/FrozenNotification.js.map +1 -1
  199. package/cjs/Channel/components/Message.js +197 -175
  200. package/cjs/Channel/components/Message.js.map +1 -1
  201. package/cjs/Channel/components/MessageInput.js +136 -129
  202. package/cjs/Channel/components/MessageInput.js.map +1 -1
  203. package/cjs/Channel/components/MessageList.js +173 -163
  204. package/cjs/Channel/components/MessageList.js.map +1 -1
  205. package/cjs/Channel/components/RemoveMessageModal.js +41 -42
  206. package/cjs/Channel/components/RemoveMessageModal.js.map +1 -1
  207. package/cjs/Channel/components/SuggestedMentionList.js +155 -135
  208. package/cjs/Channel/components/SuggestedMentionList.js.map +1 -1
  209. package/cjs/Channel/components/TypingIndicator.js +46 -47
  210. package/cjs/Channel/components/TypingIndicator.js.map +1 -1
  211. package/cjs/Channel/components/UnreadCount.js +17 -18
  212. package/cjs/Channel/components/UnreadCount.js.map +1 -1
  213. package/cjs/Channel/context.js +17 -17
  214. package/cjs/Channel/utils/compareMessagesForGrouping.js +11 -11
  215. package/cjs/Channel/utils/compareMessagesForGrouping.js.map +1 -1
  216. package/cjs/Channel/utils/getMessagePartsInfo.js +32 -26
  217. package/cjs/Channel/utils/getMessagePartsInfo.js.map +1 -1
  218. package/cjs/Channel.js +54 -51
  219. package/cjs/Channel.js.map +1 -1
  220. package/cjs/ChannelList/components/AddChannel.js +31 -29
  221. package/cjs/ChannelList/components/AddChannel.js.map +1 -1
  222. package/cjs/ChannelList/components/ChannelListHeader.js +21 -30
  223. package/cjs/ChannelList/components/ChannelListHeader.js.map +1 -1
  224. package/cjs/ChannelList/components/ChannelListUI.js +96 -91
  225. package/cjs/ChannelList/components/ChannelListUI.js.map +1 -1
  226. package/cjs/ChannelList/components/ChannelPreview.js +78 -74
  227. package/cjs/ChannelList/components/ChannelPreview.js.map +1 -1
  228. package/cjs/ChannelList/components/ChannelPreviewAction.js +84 -91
  229. package/cjs/ChannelList/components/ChannelPreviewAction.js.map +1 -1
  230. package/cjs/ChannelList/context.js +9 -10
  231. package/cjs/ChannelList/context.js.map +1 -1
  232. package/cjs/ChannelList.js +39 -41
  233. package/cjs/ChannelList.js.map +1 -1
  234. package/cjs/ChannelListProvider-a418de2e.js +1060 -0
  235. package/cjs/ChannelListProvider-a418de2e.js.map +1 -0
  236. package/cjs/ChannelProvider-7fa98120.js +2088 -0
  237. package/cjs/ChannelProvider-7fa98120.js.map +1 -0
  238. package/cjs/ChannelSettings/components/ChannelProfile.js +41 -36
  239. package/cjs/ChannelSettings/components/ChannelProfile.js.map +1 -1
  240. package/cjs/ChannelSettings/components/ChannelSettingsUI.js +44 -47
  241. package/cjs/ChannelSettings/components/ChannelSettingsUI.js.map +1 -1
  242. package/cjs/ChannelSettings/components/EditDetailsModal.js +54 -52
  243. package/cjs/ChannelSettings/components/EditDetailsModal.js.map +1 -1
  244. package/cjs/ChannelSettings/components/LeaveChannel.js +38 -40
  245. package/cjs/ChannelSettings/components/LeaveChannel.js.map +1 -1
  246. package/cjs/ChannelSettings/components/ModerationPanel.js +559 -516
  247. package/cjs/ChannelSettings/components/ModerationPanel.js.map +1 -1
  248. package/cjs/ChannelSettings/components/UserListItem.js +66 -66
  249. package/cjs/ChannelSettings/components/UserListItem.js.map +1 -1
  250. package/cjs/ChannelSettings/components/UserPanel.js +29 -26
  251. package/cjs/ChannelSettings/components/UserPanel.js.map +1 -1
  252. package/cjs/ChannelSettings/context.js +51 -56
  253. package/cjs/ChannelSettings/context.js.map +1 -1
  254. package/cjs/ChannelSettings.js +20 -19
  255. package/cjs/ChannelSettings.js.map +1 -1
  256. package/cjs/CreateChannel/components/CreateChannelUI.js +23 -25
  257. package/cjs/CreateChannel/components/CreateChannelUI.js.map +1 -1
  258. package/cjs/CreateChannel/components/InviteUsers.js +106 -102
  259. package/cjs/CreateChannel/components/InviteUsers.js.map +1 -1
  260. package/cjs/CreateChannel/components/SelectChannelType.js +37 -42
  261. package/cjs/CreateChannel/components/SelectChannelType.js.map +1 -1
  262. package/cjs/CreateChannel/context.js +4 -4
  263. package/cjs/CreateChannel.js +22 -23
  264. package/cjs/CreateChannel.js.map +1 -1
  265. package/cjs/CreateChannelProvider-70c9cb7c.js +55 -0
  266. package/cjs/{CreateChannelProvider-7c5b1342.js.map → CreateChannelProvider-70c9cb7c.js.map} +1 -1
  267. package/cjs/CreateOpenChannel/components/CreateOpenChannelUI.js +39 -37
  268. package/cjs/CreateOpenChannel/components/CreateOpenChannelUI.js.map +1 -1
  269. package/cjs/CreateOpenChannel/context.js +28 -33
  270. package/cjs/CreateOpenChannel/context.js.map +1 -1
  271. package/cjs/CreateOpenChannel.js +20 -21
  272. package/cjs/CreateOpenChannel.js.map +1 -1
  273. package/cjs/EditUserProfile/components/EditUserProfileUI.js +153 -22
  274. package/cjs/EditUserProfile/components/EditUserProfileUI.js.map +1 -1
  275. package/cjs/EditUserProfile/context.js +13 -13
  276. package/cjs/EditUserProfile/context.js.map +1 -1
  277. package/cjs/EditUserProfile.js +21 -21
  278. package/cjs/EditUserProfile.js.map +1 -1
  279. package/cjs/{LocalizationContext-c223b781.js → LocalizationContext-5009012e.js} +9 -9
  280. package/cjs/{LocalizationContext-c223b781.js.map → LocalizationContext-5009012e.js.map} +1 -1
  281. package/cjs/MediaQueryContext-d6fdbe43.js +92 -0
  282. package/cjs/MediaQueryContext-d6fdbe43.js.map +1 -0
  283. package/cjs/MemberList-529a0086.js +428 -0
  284. package/cjs/{MemberList-ee792073.js.map → MemberList-529a0086.js.map} +1 -1
  285. package/cjs/Message/context.js +11 -12
  286. package/cjs/Message/context.js.map +1 -1
  287. package/cjs/Message/hooks/useDirtyGetMentions.js +21 -26
  288. package/cjs/Message/hooks/useDirtyGetMentions.js.map +1 -1
  289. package/cjs/MessageSearch/components/MessageSearchUI.js +60 -65
  290. package/cjs/MessageSearch/components/MessageSearchUI.js.map +1 -1
  291. package/cjs/MessageSearch/context.js +165 -176
  292. package/cjs/MessageSearch/context.js.map +1 -1
  293. package/cjs/MessageSearch.js +49 -47
  294. package/cjs/MessageSearch.js.map +1 -1
  295. package/cjs/OpenChannel/components/FrozenChannelNotification.js +6 -8
  296. package/cjs/OpenChannel/components/FrozenChannelNotification.js.map +1 -1
  297. package/cjs/OpenChannel/components/OpenChannelHeader.js +22 -27
  298. package/cjs/OpenChannel/components/OpenChannelHeader.js.map +1 -1
  299. package/cjs/OpenChannel/components/OpenChannelInput.js +32 -35
  300. package/cjs/OpenChannel/components/OpenChannelInput.js.map +1 -1
  301. package/cjs/OpenChannel/components/OpenChannelMessage.js +169 -170
  302. package/cjs/OpenChannel/components/OpenChannelMessage.js.map +1 -1
  303. package/cjs/OpenChannel/components/OpenChannelMessageList.js +69 -63
  304. package/cjs/OpenChannel/components/OpenChannelMessageList.js.map +1 -1
  305. package/cjs/OpenChannel/components/OpenChannelUI.js +56 -57
  306. package/cjs/OpenChannel/components/OpenChannelUI.js.map +1 -1
  307. package/cjs/OpenChannel/context.js +8 -9
  308. package/cjs/OpenChannel/context.js.map +1 -1
  309. package/cjs/OpenChannel.js +37 -35
  310. package/cjs/OpenChannel.js.map +1 -1
  311. package/cjs/OpenChannelList/components/OpenChannelListUI.js +66 -64
  312. package/cjs/OpenChannelList/components/OpenChannelListUI.js.map +1 -1
  313. package/cjs/OpenChannelList/components/OpenChannelPreview.js +22 -21
  314. package/cjs/OpenChannelList/components/OpenChannelPreview.js.map +1 -1
  315. package/cjs/OpenChannelList/context.js +3 -3
  316. package/cjs/OpenChannelList.js +27 -27
  317. package/cjs/OpenChannelList.js.map +1 -1
  318. package/cjs/OpenChannelListProvider-0b8cd3bf.js +416 -0
  319. package/cjs/{OpenChannelListProvider-d9f4a5b4.js.map → OpenChannelListProvider-0b8cd3bf.js.map} +1 -1
  320. package/cjs/OpenChannelProvider-d8cc11fe.js +1859 -0
  321. package/cjs/{OpenChannelProvider-30a24b84.js.map → OpenChannelProvider-d8cc11fe.js.map} +1 -1
  322. package/cjs/OpenChannelSettings/components/EditDetailsModal.js +53 -52
  323. package/cjs/OpenChannelSettings/components/EditDetailsModal.js.map +1 -1
  324. package/cjs/OpenChannelSettings/components/OpenChannelProfile.js +29 -28
  325. package/cjs/OpenChannelSettings/components/OpenChannelProfile.js.map +1 -1
  326. package/cjs/OpenChannelSettings/components/OpenChannelSettingsUI.js +40 -48
  327. package/cjs/OpenChannelSettings/components/OpenChannelSettingsUI.js.map +1 -1
  328. package/cjs/OpenChannelSettings/components/OperatorUI.js +557 -525
  329. package/cjs/OpenChannelSettings/components/OperatorUI.js.map +1 -1
  330. package/cjs/OpenChannelSettings/components/ParticipantUI.js +16 -15
  331. package/cjs/OpenChannelSettings/components/ParticipantUI.js.map +1 -1
  332. package/cjs/OpenChannelSettings/context.js +57 -56
  333. package/cjs/OpenChannelSettings/context.js.map +1 -1
  334. package/cjs/OpenChannelSettings.js +20 -19
  335. package/cjs/OpenChannelSettings.js.map +1 -1
  336. package/cjs/RemoveMessageModal-f029d40e.js +39 -0
  337. package/cjs/RemoveMessageModal-f029d40e.js.map +1 -0
  338. package/cjs/SendbirdProvider.js +733 -693
  339. package/cjs/SendbirdProvider.js.map +1 -1
  340. package/cjs/Thread/components/ParentMessageInfo.js +193 -180
  341. package/cjs/Thread/components/ParentMessageInfo.js.map +1 -1
  342. package/cjs/Thread/components/ParentMessageInfoItem.js +86 -79
  343. package/cjs/Thread/components/ParentMessageInfoItem.js.map +1 -1
  344. package/cjs/Thread/components/ThreadHeader.js +22 -22
  345. package/cjs/Thread/components/ThreadHeader.js.map +1 -1
  346. package/cjs/Thread/components/ThreadList.js +125 -93
  347. package/cjs/Thread/components/ThreadList.js.map +1 -1
  348. package/cjs/Thread/components/ThreadListItem.js +263 -244
  349. package/cjs/Thread/components/ThreadListItem.js.map +1 -1
  350. package/cjs/Thread/components/ThreadMessageInput.js +120 -119
  351. package/cjs/Thread/components/ThreadMessageInput.js.map +1 -1
  352. package/cjs/Thread/components/ThreadUI.js +134 -150
  353. package/cjs/Thread/components/ThreadUI.js.map +1 -1
  354. package/cjs/Thread/context/types.js +9 -13
  355. package/cjs/Thread/context/types.js.map +1 -1
  356. package/cjs/Thread/context.js +1680 -21
  357. package/cjs/Thread/context.js.map +1 -1
  358. package/cjs/Thread.js +76 -73
  359. package/cjs/Thread.js.map +1 -1
  360. package/cjs/UserProfileContext-922a43ec.js +41 -0
  361. package/cjs/UserProfileContext-922a43ec.js.map +1 -0
  362. package/cjs/VoicePlayer/context.js +3 -3
  363. package/cjs/VoicePlayer/useVoicePlayer.js +52 -46
  364. package/cjs/VoicePlayer/useVoicePlayer.js.map +1 -1
  365. package/cjs/VoiceRecorder/context.js +67 -63
  366. package/cjs/VoiceRecorder/context.js.map +1 -1
  367. package/cjs/VoiceRecorder/useVoiceRecorder.js +49 -51
  368. package/cjs/VoiceRecorder/useVoiceRecorder.js.map +1 -1
  369. package/cjs/{WebAudioUtils-dad5a0b9.js → WebAudioUtils-29717597.js} +38 -38
  370. package/cjs/{WebAudioUtils-dad5a0b9.js.map → WebAudioUtils-29717597.js.map} +1 -1
  371. package/cjs/{_rollupPluginBabelHelpers-4693667a.js → _rollupPluginBabelHelpers-94c18dc1.js} +16 -17
  372. package/cjs/_rollupPluginBabelHelpers-94c18dc1.js.map +1 -0
  373. package/cjs/{actionTypes-5e5d1266.js → actionTypes-7fa02f94.js} +2 -2
  374. package/cjs/{actionTypes-5e5d1266.js.map → actionTypes-7fa02f94.js.map} +1 -1
  375. package/cjs/{color-5fe1a19c.js → color-477ddbd4.js} +12 -13
  376. package/cjs/color-477ddbd4.js.map +1 -0
  377. package/cjs/{compareIds-02121052.js → compareIds-de541666.js} +7 -6
  378. package/cjs/compareIds-de541666.js.map +1 -0
  379. package/cjs/{const-796fc77a.js → const-640252c1.js} +4 -4
  380. package/cjs/{const-796fc77a.js.map → const-640252c1.js.map} +1 -1
  381. package/cjs/const-9def5c09.js +19 -0
  382. package/cjs/{const-2044f15a.js.map → const-9def5c09.js.map} +1 -1
  383. package/cjs/consts-54f5c12d.js +6 -0
  384. package/cjs/consts-54f5c12d.js.map +1 -0
  385. package/cjs/consts-85cd42fa.js +6 -0
  386. package/cjs/{consts-f2c42e3a.js.map → consts-85cd42fa.js.map} +1 -1
  387. package/cjs/{consts-240f7639.js → consts-95462b21.js} +18 -25
  388. package/cjs/{consts-240f7639.js.map → consts-95462b21.js.map} +1 -1
  389. package/cjs/consts-a3b7ae99.js +6 -0
  390. package/cjs/{consts-14256e43.js.map → consts-a3b7ae99.js.map} +1 -1
  391. package/cjs/{context-8af95992.js → context-9814fafe.js} +5 -6
  392. package/cjs/{context-8af95992.js.map → context-9814fafe.js.map} +1 -1
  393. package/cjs/dist/index.css +71 -56
  394. package/cjs/dist/index.css.map +1 -1
  395. package/cjs/handlers/OpenChannelHandler.js.map +1 -1
  396. package/cjs/handlers/SessionHandler.js.map +1 -1
  397. package/cjs/hooks/useModal.js +84 -0
  398. package/cjs/hooks/useModal.js.map +1 -0
  399. package/cjs/{index-5c7818e3.js → index-0a25b9b2.js} +166 -154
  400. package/cjs/index-0a25b9b2.js.map +1 -0
  401. package/cjs/index-0ec5a831.js +308 -0
  402. package/cjs/{index-2e84e87d.js.map → index-0ec5a831.js.map} +1 -1
  403. package/cjs/{index-46bcc5b2.js → index-35820a94.js} +2 -2
  404. package/cjs/{index-46bcc5b2.js.map → index-35820a94.js.map} +1 -1
  405. package/cjs/index-609b07a2.js +7 -0
  406. package/cjs/index-609b07a2.js.map +1 -0
  407. package/cjs/index-6b0644d7.js +369 -0
  408. package/cjs/index-6b0644d7.js.map +1 -0
  409. package/cjs/{index-84f919de.js → index-7b0c6630.js} +104 -114
  410. package/cjs/index-7b0c6630.js.map +1 -0
  411. package/cjs/index-80a11b6a.js +197 -0
  412. package/cjs/{index-d58de514.js.map → index-80a11b6a.js.map} +1 -1
  413. package/cjs/{index-c8592ba1.js → index-826b76d5.js} +2 -4
  414. package/cjs/index-826b76d5.js.map +1 -0
  415. package/cjs/{index-7b61bfbc.js → index-83d2aed9.js} +3 -12
  416. package/cjs/index-83d2aed9.js.map +1 -0
  417. package/cjs/index-aeb36f01.js +173 -0
  418. package/cjs/index-aeb36f01.js.map +1 -0
  419. package/cjs/{index-aaa23e06.js → index-b6d51e74.js} +56 -193
  420. package/cjs/index-b6d51e74.js.map +1 -0
  421. package/cjs/index-b995f638.js +741 -0
  422. package/cjs/index-b995f638.js.map +1 -0
  423. package/cjs/{index-d0755040.js → index-bdf7089c.js} +72 -80
  424. package/cjs/{index-d0755040.js.map → index-bdf7089c.js.map} +1 -1
  425. package/cjs/{index-14572b37.js → index-c22e0cbf.js} +25 -28
  426. package/cjs/{index-14572b37.js.map → index-c22e0cbf.js.map} +1 -1
  427. package/cjs/index-daf80c58.js +20 -0
  428. package/cjs/index-daf80c58.js.map +1 -0
  429. package/cjs/index-e81e2882.js +59 -0
  430. package/cjs/{index-1914edda.js.map → index-e81e2882.js.map} +1 -1
  431. package/cjs/{index-933397f2.js → index-ee3bf381.js} +39 -37
  432. package/cjs/{index-933397f2.js.map → index-ee3bf381.js.map} +1 -1
  433. package/cjs/{index-00aa7289.js → index-fd8a0abb.js} +10 -30
  434. package/cjs/index-fd8a0abb.js.map +1 -0
  435. package/cjs/index.js +66 -63
  436. package/cjs/index.js.map +1 -1
  437. package/cjs/lame.all.js.map +1 -1
  438. package/cjs/package.json +2 -49
  439. package/cjs/{topics-df8731af.js → pubSub/topics.js} +6 -2
  440. package/cjs/pubSub/topics.js.map +1 -0
  441. package/cjs/{resolvedReplyType-6d095a63.js → resolvedReplyType-c20ef661.js} +1 -1
  442. package/cjs/{resolvedReplyType-6d095a63.js.map → resolvedReplyType-c20ef661.js.map} +1 -1
  443. package/cjs/sendbirdSelectors.js +381 -333
  444. package/cjs/sendbirdSelectors.js.map +1 -1
  445. package/cjs/stringFormatterUtils-e324636c.js +16 -0
  446. package/cjs/{stringFormatterUtils-f768db2f.js.map → stringFormatterUtils-e324636c.js.map} +1 -1
  447. package/cjs/{stringSet-286c9fb2.js → stringSet-98b52c49.js} +9 -2
  448. package/cjs/stringSet-98b52c49.js.map +1 -0
  449. package/cjs/{tokenize-d4732550.js → tokenize-91bdbeb0.js} +56 -61
  450. package/cjs/{tokenize-d4732550.js.map → tokenize-91bdbeb0.js.map} +1 -1
  451. package/cjs/tslib.es6-2f2b0bca.js +102 -0
  452. package/cjs/tslib.es6-2f2b0bca.js.map +1 -0
  453. package/cjs/types-31ed2276.js +11 -0
  454. package/cjs/types-31ed2276.js.map +1 -0
  455. package/cjs/types-66554668.js +15 -0
  456. package/cjs/types-66554668.js.map +1 -0
  457. package/cjs/ui/Accordion.js +18 -19
  458. package/cjs/ui/Accordion.js.map +1 -1
  459. package/cjs/ui/AccordionGroup.js +11 -10
  460. package/cjs/ui/AccordionGroup.js.map +1 -1
  461. package/cjs/ui/AdminMessage.js +10 -10
  462. package/cjs/ui/AdminMessage.js.map +1 -1
  463. package/cjs/ui/Avatar.js +59 -55
  464. package/cjs/ui/Avatar.js.map +1 -1
  465. package/cjs/ui/Badge.js +15 -16
  466. package/cjs/ui/Badge.js.map +1 -1
  467. package/cjs/ui/BottomSheet.js +15 -17
  468. package/cjs/ui/BottomSheet.js.map +1 -1
  469. package/cjs/ui/Button.js +31 -33
  470. package/cjs/ui/Button.js.map +1 -1
  471. package/cjs/ui/ChannelAvatar.js +41 -38
  472. package/cjs/ui/ChannelAvatar.js.map +1 -1
  473. package/cjs/ui/Checkbox.js +10 -9
  474. package/cjs/ui/Checkbox.js.map +1 -1
  475. package/cjs/ui/ConnectionStatus.js +5 -7
  476. package/cjs/ui/ConnectionStatus.js.map +1 -1
  477. package/cjs/ui/ContextMenu.js +143 -144
  478. package/cjs/ui/ContextMenu.js.map +1 -1
  479. package/cjs/ui/DateSeparator.js +14 -12
  480. package/cjs/ui/DateSeparator.js.map +1 -1
  481. package/cjs/ui/EmojiReactions.js +206 -176
  482. package/cjs/ui/EmojiReactions.js.map +1 -1
  483. package/cjs/ui/FileMessageItemBody.js +23 -23
  484. package/cjs/ui/FileMessageItemBody.js.map +1 -1
  485. package/cjs/ui/FileViewer.js +14 -12
  486. package/cjs/ui/FileViewer.js.map +1 -1
  487. package/cjs/ui/Icon.js +16 -16
  488. package/cjs/ui/Icon.js.map +1 -1
  489. package/cjs/ui/IconButton.js +28 -20
  490. package/cjs/ui/IconButton.js.map +1 -1
  491. package/cjs/ui/ImageRenderer.js +84 -64
  492. package/cjs/ui/ImageRenderer.js.map +1 -1
  493. package/cjs/ui/Input.js +14 -16
  494. package/cjs/ui/Input.js.map +1 -1
  495. package/cjs/ui/Label.js +2 -2
  496. package/cjs/ui/LinkLabel.js +2 -2
  497. package/cjs/ui/LinkLabel.js.map +1 -1
  498. package/cjs/ui/Loader.js +12 -10
  499. package/cjs/ui/Loader.js.map +1 -1
  500. package/cjs/ui/MentionLabel.js +63 -59
  501. package/cjs/ui/MentionLabel.js.map +1 -1
  502. package/cjs/ui/MentionUserLabel.js +10 -10
  503. package/cjs/ui/MentionUserLabel.js.map +1 -1
  504. package/cjs/ui/MessageContent.js +187 -171
  505. package/cjs/ui/MessageContent.js.map +1 -1
  506. package/cjs/ui/MessageInput/hooks/usePaste.js +5 -4
  507. package/cjs/ui/MessageInput/hooks/usePaste.js.map +1 -1
  508. package/cjs/ui/MessageInput.js +55 -57
  509. package/cjs/ui/MessageInput.js.map +1 -1
  510. package/cjs/ui/MessageItemMenu.js +93 -72
  511. package/cjs/ui/MessageItemMenu.js.map +1 -1
  512. package/cjs/ui/MessageItemReactionMenu.js +64 -56
  513. package/cjs/ui/MessageItemReactionMenu.js.map +1 -1
  514. package/cjs/ui/MessageSearchFileItem.js +40 -49
  515. package/cjs/ui/MessageSearchFileItem.js.map +1 -1
  516. package/cjs/ui/MessageSearchItem.js +32 -40
  517. package/cjs/ui/MessageSearchItem.js.map +1 -1
  518. package/cjs/ui/MessageStatus.js +11 -11
  519. package/cjs/ui/Modal.js +57 -59
  520. package/cjs/ui/Modal.js.map +1 -1
  521. package/cjs/ui/MutedAvatarOverlay.js +10 -10
  522. package/cjs/ui/MutedAvatarOverlay.js.map +1 -1
  523. package/cjs/ui/OGMessageItemBody.js +47 -47
  524. package/cjs/ui/OGMessageItemBody.js.map +1 -1
  525. package/cjs/ui/OpenChannelAdminMessage.js +7 -8
  526. package/cjs/ui/OpenChannelAdminMessage.js.map +1 -1
  527. package/cjs/ui/OpenChannelAvatar.js +17 -18
  528. package/cjs/ui/OpenChannelAvatar.js.map +1 -1
  529. package/cjs/ui/OpenchannelConversationHeader.js +13 -17
  530. package/cjs/ui/OpenchannelConversationHeader.js.map +1 -1
  531. package/cjs/ui/OpenchannelFileMessage.js +147 -139
  532. package/cjs/ui/OpenchannelFileMessage.js.map +1 -1
  533. package/cjs/ui/OpenchannelOGMessage.js +185 -178
  534. package/cjs/ui/OpenchannelOGMessage.js.map +1 -1
  535. package/cjs/ui/OpenchannelThumbnailMessage.js +220 -213
  536. package/cjs/ui/OpenchannelThumbnailMessage.js.map +1 -1
  537. package/cjs/ui/OpenchannelUserMessage.js +172 -164
  538. package/cjs/ui/OpenchannelUserMessage.js.map +1 -1
  539. package/cjs/ui/PlaceHolder.js +108 -10
  540. package/cjs/ui/PlaceHolder.js.map +1 -1
  541. package/cjs/ui/PlaybackTime.js +16 -15
  542. package/cjs/ui/PlaybackTime.js.map +1 -1
  543. package/cjs/ui/ProgressBar.js +15 -13
  544. package/cjs/ui/ProgressBar.js.map +1 -1
  545. package/cjs/ui/QuoteMessage.js +41 -44
  546. package/cjs/ui/QuoteMessage.js.map +1 -1
  547. package/cjs/ui/QuoteMessageInput.js +45 -31
  548. package/cjs/ui/QuoteMessageInput.js.map +1 -1
  549. package/cjs/ui/ReactionBadge.js +17 -13
  550. package/cjs/ui/ReactionBadge.js.map +1 -1
  551. package/cjs/ui/ReactionButton.js +19 -19
  552. package/cjs/ui/ReactionButton.js.map +1 -1
  553. package/cjs/ui/SortByRow.js +14 -14
  554. package/cjs/ui/SortByRow.js.map +1 -1
  555. package/cjs/ui/TextButton.js +21 -13
  556. package/cjs/ui/TextButton.js.map +1 -1
  557. package/cjs/ui/TextMessageItemBody.js +33 -31
  558. package/cjs/ui/TextMessageItemBody.js.map +1 -1
  559. package/cjs/ui/ThreadReplies.js +21 -25
  560. package/cjs/ui/ThreadReplies.js.map +1 -1
  561. package/cjs/ui/ThumbnailMessageItemBody.js +37 -28
  562. package/cjs/ui/ThumbnailMessageItemBody.js.map +1 -1
  563. package/cjs/ui/Toggle.js +85 -77
  564. package/cjs/ui/Toggle.js.map +1 -1
  565. package/cjs/ui/Tooltip.js +9 -8
  566. package/cjs/ui/Tooltip.js.map +1 -1
  567. package/cjs/ui/TooltipWrapper.js +18 -17
  568. package/cjs/ui/TooltipWrapper.js.map +1 -1
  569. package/cjs/ui/UnknownMessageItemBody.js +19 -20
  570. package/cjs/ui/UnknownMessageItemBody.js.map +1 -1
  571. package/cjs/ui/UserListItem.js +80 -75
  572. package/cjs/ui/UserListItem.js.map +1 -1
  573. package/cjs/ui/UserProfile.js +28 -33
  574. package/cjs/ui/UserProfile.js.map +1 -1
  575. package/cjs/ui/VoiceMessageItemBody.js +49 -43
  576. package/cjs/ui/VoiceMessageItemBody.js.map +1 -1
  577. package/cjs/ui/VoiceMessgeInput.js +8 -7
  578. package/cjs/ui/VoiceMessgeInput.js.map +1 -1
  579. package/cjs/ui/Word.js +29 -27
  580. package/cjs/ui/Word.js.map +1 -1
  581. package/cjs/{useHandleUploadFiles-08fadd6f.js → useHandleUploadFiles-fbe6ad64.js} +114 -127
  582. package/cjs/useHandleUploadFiles-fbe6ad64.js.map +1 -0
  583. package/cjs/useLongPress-c1da8ba7.js +105 -0
  584. package/cjs/useLongPress-c1da8ba7.js.map +1 -0
  585. package/cjs/useSendMultipleFilesMessage-87e0ffa3.js +316 -0
  586. package/cjs/useSendMultipleFilesMessage-87e0ffa3.js.map +1 -0
  587. package/cjs/useSendbirdStateContext.js +8 -3
  588. package/cjs/useSendbirdStateContext.js.map +1 -1
  589. package/cjs/useStatefulFileInfoList-aa70b6b9.js +228 -0
  590. package/cjs/useStatefulFileInfoList-aa70b6b9.js.map +1 -0
  591. package/cjs/utils/message/getOutgoingMessageState.js +14 -16
  592. package/cjs/utils/message/getOutgoingMessageState.js.map +1 -1
  593. package/cjs/utils/message/isVoiceMessage.js +4 -4
  594. package/cjs/utils/message/isVoiceMessage.js.map +1 -1
  595. package/cjs/utils-0fac6ad1.js +27 -0
  596. package/cjs/utils-0fac6ad1.js.map +1 -0
  597. package/cjs/utils-180c6bc8.js +10 -0
  598. package/cjs/utils-180c6bc8.js.map +1 -0
  599. package/cjs/{utils-6dd678d6.js → utils-46483130.js} +3 -3
  600. package/cjs/{utils-6dd678d6.js.map → utils-46483130.js.map} +1 -1
  601. package/cjs/utils-55fc6797.js +170 -0
  602. package/cjs/utils-55fc6797.js.map +1 -0
  603. package/cjs/utils-851724e0.js +62 -0
  604. package/cjs/utils-851724e0.js.map +1 -0
  605. package/cjs/utils-e313131f.js +35 -0
  606. package/cjs/utils-e313131f.js.map +1 -0
  607. package/cjs/uuid-c74bbbb6.js +17 -0
  608. package/cjs/{uuid-dee72498.js.map → uuid-c74bbbb6.js.map} +1 -1
  609. package/cjs/withSendbird.js +16 -22
  610. package/cjs/withSendbird.js.map +1 -1
  611. package/{color-e8886e80.js → color-1383d4ab.js} +5 -5
  612. package/{color-e8886e80.js.map → color-1383d4ab.js.map} +1 -1
  613. package/compareIds-b56b02f1.js +16 -0
  614. package/compareIds-b56b02f1.js.map +1 -0
  615. package/{const-264270af.js → const-4bc3721f.js} +4 -4
  616. package/{const-264270af.js.map → const-4bc3721f.js.map} +1 -1
  617. package/const-e3326913.js +13 -0
  618. package/{const-997b7e92.js.map → const-e3326913.js.map} +1 -1
  619. package/consts-7f4d53a3.js +4 -0
  620. package/consts-7f4d53a3.js.map +1 -0
  621. package/consts-833420ed.js +4 -0
  622. package/{consts-3e2a0b41.js.map → consts-833420ed.js.map} +1 -1
  623. package/consts-aa64aca8.js +30 -0
  624. package/{consts-2144a35b.js.map → consts-aa64aca8.js.map} +1 -1
  625. package/consts-f0ba9b80.js +4 -0
  626. package/consts-f0ba9b80.js.map +1 -0
  627. package/context-ae47ac54.js +12 -0
  628. package/{context-a2108ea4.js.map → context-ae47ac54.js.map} +1 -1
  629. package/dist/index.css +71 -56
  630. package/dist/index.css.map +1 -1
  631. package/handlers/OpenChannelHandler.js.map +1 -1
  632. package/handlers/SessionHandler.js.map +1 -1
  633. package/hooks/useModal.js +73 -0
  634. package/hooks/useModal.js.map +1 -0
  635. package/{index-cd36caca.js → index-12103973.js} +2 -2
  636. package/{index-cd36caca.js.map → index-12103973.js.map} +1 -1
  637. package/index-124a5766.js +298 -0
  638. package/{index-4214d5e5.js.map → index-124a5766.js.map} +1 -1
  639. package/{index-f8b1f2fd.js → index-1432c287.js} +2 -4
  640. package/index-1432c287.js.map +1 -0
  641. package/{index-137fbab9.js → index-1969ccd8.js} +25 -28
  642. package/{index-137fbab9.js.map → index-1969ccd8.js.map} +1 -1
  643. package/index-3d508585.js +53 -0
  644. package/{index-ac325b55.js.map → index-3d508585.js.map} +1 -1
  645. package/{index-f27e3f26.js → index-40447645.js} +73 -81
  646. package/{index-f27e3f26.js.map → index-40447645.js.map} +1 -1
  647. package/{index-35c34277.js → index-7a1085b6.js} +99 -109
  648. package/index-7a1085b6.js.map +1 -0
  649. package/index-89b3b8ba.js +362 -0
  650. package/index-89b3b8ba.js.map +1 -0
  651. package/index-8c72f0bd.js +182 -0
  652. package/{index-df44531d.js.map → index-8c72f0bd.js.map} +1 -1
  653. package/index-942c5fa2.js +161 -0
  654. package/index-942c5fa2.js.map +1 -0
  655. package/index-c6095960.js +4 -0
  656. package/index-c6095960.js.map +1 -0
  657. package/index-c7ed4aef.js +13 -0
  658. package/index-c7ed4aef.js.map +1 -0
  659. package/{index-0bbeff0d.js → index-c81fd6ec.js} +56 -193
  660. package/index-c81fd6ec.js.map +1 -0
  661. package/{index-c9a60ebd.js → index-d3f61405.js} +10 -30
  662. package/index-d3f61405.js.map +1 -0
  663. package/{index-3c2e063e.js → index-dc1827ea.js} +3 -12
  664. package/index-dc1827ea.js.map +1 -0
  665. package/{index-2ac3fe5b.js → index-ec0c048b.js} +39 -37
  666. package/{index-2ac3fe5b.js.map → index-ec0c048b.js.map} +1 -1
  667. package/{index-f14314d9.js → index-eec0ce47.js} +166 -154
  668. package/index-eec0ce47.js.map +1 -0
  669. package/index-fc1642cb.js +692 -0
  670. package/index-fc1642cb.js.map +1 -0
  671. package/index.d.ts +143 -79
  672. package/index.js +66 -63
  673. package/index.js.map +1 -1
  674. package/lame.all.js.map +1 -1
  675. package/package.json +3 -3
  676. package/{topics-baecd5b0.js → pubSub/topics.js} +4 -3
  677. package/pubSub/topics.js.map +1 -0
  678. package/{resolvedReplyType-9e0d7d55.js → resolvedReplyType-0532593c.js} +1 -1
  679. package/{resolvedReplyType-9e0d7d55.js.map → resolvedReplyType-0532593c.js.map} +1 -1
  680. package/sendbirdSelectors.js +381 -333
  681. package/sendbirdSelectors.js.map +1 -1
  682. package/stringFormatterUtils-444f6f4c.js +14 -0
  683. package/{stringFormatterUtils-1656fed9.js.map → stringFormatterUtils-444f6f4c.js.map} +1 -1
  684. package/{stringSet-2ab6570e.js → stringSet-1106c8ec.js} +9 -2
  685. package/stringSet-1106c8ec.js.map +1 -0
  686. package/{tokenize-25f71231.js → tokenize-d17bf862.js} +56 -61
  687. package/{tokenize-25f71231.js.map → tokenize-d17bf862.js.map} +1 -1
  688. package/tslib.es6-0c779aab.js +97 -0
  689. package/tslib.es6-0c779aab.js.map +1 -0
  690. package/types-4ffc52f6.js +15 -0
  691. package/types-4ffc52f6.js.map +1 -0
  692. package/types-50e412d8.js +9 -0
  693. package/types-50e412d8.js.map +1 -0
  694. package/ui/Accordion.js +18 -19
  695. package/ui/Accordion.js.map +1 -1
  696. package/ui/AccordionGroup.js +11 -10
  697. package/ui/AccordionGroup.js.map +1 -1
  698. package/ui/AdminMessage.js +10 -10
  699. package/ui/AdminMessage.js.map +1 -1
  700. package/ui/Avatar.js +59 -55
  701. package/ui/Avatar.js.map +1 -1
  702. package/ui/Badge.js +15 -16
  703. package/ui/Badge.js.map +1 -1
  704. package/ui/BottomSheet.js +15 -17
  705. package/ui/BottomSheet.js.map +1 -1
  706. package/ui/Button.js +19 -26
  707. package/ui/Button.js.map +1 -1
  708. package/ui/ChannelAvatar.js +41 -38
  709. package/ui/ChannelAvatar.js.map +1 -1
  710. package/ui/Checkbox.js +10 -9
  711. package/ui/Checkbox.js.map +1 -1
  712. package/ui/ConnectionStatus.js +5 -7
  713. package/ui/ConnectionStatus.js.map +1 -1
  714. package/ui/ContextMenu.js +143 -144
  715. package/ui/ContextMenu.js.map +1 -1
  716. package/ui/DateSeparator.js +14 -12
  717. package/ui/DateSeparator.js.map +1 -1
  718. package/ui/EmojiReactions.js +207 -177
  719. package/ui/EmojiReactions.js.map +1 -1
  720. package/ui/FileMessageItemBody.js +23 -23
  721. package/ui/FileMessageItemBody.js.map +1 -1
  722. package/ui/FileViewer.js +14 -12
  723. package/ui/FileViewer.js.map +1 -1
  724. package/ui/Icon.js +2 -2
  725. package/ui/Icon.js.map +1 -1
  726. package/ui/IconButton.js +28 -20
  727. package/ui/IconButton.js.map +1 -1
  728. package/ui/ImageRenderer.js +84 -65
  729. package/ui/ImageRenderer.js.map +1 -1
  730. package/ui/Input.js +14 -16
  731. package/ui/Input.js.map +1 -1
  732. package/ui/Label.js +2 -2
  733. package/ui/LinkLabel.js +2 -2
  734. package/ui/LinkLabel.js.map +1 -1
  735. package/ui/Loader.js +12 -10
  736. package/ui/Loader.js.map +1 -1
  737. package/ui/MentionLabel.js +64 -60
  738. package/ui/MentionLabel.js.map +1 -1
  739. package/ui/MentionUserLabel.js +10 -10
  740. package/ui/MentionUserLabel.js.map +1 -1
  741. package/ui/MessageContent.js +186 -170
  742. package/ui/MessageContent.js.map +1 -1
  743. package/ui/MessageInput/hooks/usePaste.js +5 -4
  744. package/ui/MessageInput/hooks/usePaste.js.map +1 -1
  745. package/ui/MessageInput.js +48 -50
  746. package/ui/MessageInput.js.map +1 -1
  747. package/ui/MessageItemMenu.js +93 -72
  748. package/ui/MessageItemMenu.js.map +1 -1
  749. package/ui/MessageItemReactionMenu.js +64 -56
  750. package/ui/MessageItemReactionMenu.js.map +1 -1
  751. package/ui/MessageSearchFileItem.js +40 -49
  752. package/ui/MessageSearchFileItem.js.map +1 -1
  753. package/ui/MessageSearchItem.js +32 -40
  754. package/ui/MessageSearchItem.js.map +1 -1
  755. package/ui/MessageStatus.js +11 -11
  756. package/ui/Modal.js +57 -59
  757. package/ui/Modal.js.map +1 -1
  758. package/ui/MutedAvatarOverlay.js +10 -10
  759. package/ui/MutedAvatarOverlay.js.map +1 -1
  760. package/ui/OGMessageItemBody.js +47 -47
  761. package/ui/OGMessageItemBody.js.map +1 -1
  762. package/ui/OpenChannelAdminMessage.js +7 -8
  763. package/ui/OpenChannelAdminMessage.js.map +1 -1
  764. package/ui/OpenChannelAvatar.js +17 -18
  765. package/ui/OpenChannelAvatar.js.map +1 -1
  766. package/ui/OpenchannelConversationHeader.js +13 -17
  767. package/ui/OpenchannelConversationHeader.js.map +1 -1
  768. package/ui/OpenchannelFileMessage.js +147 -139
  769. package/ui/OpenchannelFileMessage.js.map +1 -1
  770. package/ui/OpenchannelOGMessage.js +185 -178
  771. package/ui/OpenchannelOGMessage.js.map +1 -1
  772. package/ui/OpenchannelThumbnailMessage.js +220 -213
  773. package/ui/OpenchannelThumbnailMessage.js.map +1 -1
  774. package/ui/OpenchannelUserMessage.js +172 -164
  775. package/ui/OpenchannelUserMessage.js.map +1 -1
  776. package/ui/PlaceHolder.js +106 -8
  777. package/ui/PlaceHolder.js.map +1 -1
  778. package/ui/PlaybackTime.js +16 -15
  779. package/ui/PlaybackTime.js.map +1 -1
  780. package/ui/ProgressBar.js +15 -13
  781. package/ui/ProgressBar.js.map +1 -1
  782. package/ui/QuoteMessage.js +41 -44
  783. package/ui/QuoteMessage.js.map +1 -1
  784. package/ui/QuoteMessageInput.js +45 -31
  785. package/ui/QuoteMessageInput.js.map +1 -1
  786. package/ui/ReactionBadge.js +17 -13
  787. package/ui/ReactionBadge.js.map +1 -1
  788. package/ui/ReactionButton.js +19 -19
  789. package/ui/ReactionButton.js.map +1 -1
  790. package/ui/SortByRow.js +14 -14
  791. package/ui/SortByRow.js.map +1 -1
  792. package/ui/TextButton.js +21 -13
  793. package/ui/TextButton.js.map +1 -1
  794. package/ui/TextMessageItemBody.js +33 -31
  795. package/ui/TextMessageItemBody.js.map +1 -1
  796. package/ui/ThreadReplies.js +21 -25
  797. package/ui/ThreadReplies.js.map +1 -1
  798. package/ui/ThumbnailMessageItemBody.js +37 -28
  799. package/ui/ThumbnailMessageItemBody.js.map +1 -1
  800. package/ui/Toggle.js +86 -78
  801. package/ui/Toggle.js.map +1 -1
  802. package/ui/Tooltip.js +9 -8
  803. package/ui/Tooltip.js.map +1 -1
  804. package/ui/TooltipWrapper.js +18 -17
  805. package/ui/TooltipWrapper.js.map +1 -1
  806. package/ui/UnknownMessageItemBody.js +19 -20
  807. package/ui/UnknownMessageItemBody.js.map +1 -1
  808. package/ui/UserListItem.js +80 -75
  809. package/ui/UserListItem.js.map +1 -1
  810. package/ui/UserProfile.js +29 -34
  811. package/ui/UserProfile.js.map +1 -1
  812. package/ui/VoiceMessageItemBody.js +49 -43
  813. package/ui/VoiceMessageItemBody.js.map +1 -1
  814. package/ui/VoiceMessgeInput.js +8 -7
  815. package/ui/VoiceMessgeInput.js.map +1 -1
  816. package/ui/Word.js +29 -27
  817. package/ui/Word.js.map +1 -1
  818. package/{useHandleUploadFiles-8134431f.js → useHandleUploadFiles-33aff88e.js} +111 -124
  819. package/useHandleUploadFiles-33aff88e.js.map +1 -0
  820. package/useLongPress-322bb6a3.js +103 -0
  821. package/useLongPress-322bb6a3.js.map +1 -0
  822. package/useSendMultipleFilesMessage-4489a0f6.js +283 -0
  823. package/useSendMultipleFilesMessage-4489a0f6.js.map +1 -0
  824. package/useSendbirdStateContext.js +5 -3
  825. package/useSendbirdStateContext.js.map +1 -1
  826. package/useStatefulFileInfoList-dd95f949.js +219 -0
  827. package/useStatefulFileInfoList-dd95f949.js.map +1 -0
  828. package/utils/message/getOutgoingMessageState.js +8 -9
  829. package/utils/message/getOutgoingMessageState.js.map +1 -1
  830. package/utils/message/isVoiceMessage.js +4 -4
  831. package/utils/message/isVoiceMessage.js.map +1 -1
  832. package/{utils-d558dc74.js → utils-158c1683.js} +3 -3
  833. package/{utils-d558dc74.js.map → utils-158c1683.js.map} +1 -1
  834. package/utils-3660243c.js +25 -0
  835. package/utils-3660243c.js.map +1 -0
  836. package/utils-40040f8e.js +157 -0
  837. package/utils-40040f8e.js.map +1 -0
  838. package/utils-48a3ef27.js +31 -0
  839. package/utils-48a3ef27.js.map +1 -0
  840. package/utils-74c161a0.js +7 -0
  841. package/utils-74c161a0.js.map +1 -0
  842. package/utils-e98a7f8c.js +57 -0
  843. package/utils-e98a7f8c.js.map +1 -0
  844. package/uuid-3c77ef7b.js +15 -0
  845. package/{uuid-94f10232.js.map → uuid-3c77ef7b.js.map} +1 -1
  846. package/withSendbird.js +16 -22
  847. package/withSendbird.js.map +1 -1
  848. package/ChannelListProvider-f365e22f.js +0 -1041
  849. package/ChannelListProvider-f365e22f.js.map +0 -1
  850. package/ChannelProvider-6aedab94.js +0 -1933
  851. package/ChannelProvider-6aedab94.js.map +0 -1
  852. package/CreateChannelProvider-0b4bc562.js +0 -44
  853. package/LocalizationContext-5cbe4df3.js +0 -20
  854. package/MediaQueryContext-8fcfd909.js +0 -87
  855. package/MediaQueryContext-8fcfd909.js.map +0 -1
  856. package/MemberList-d407bcd0.js +0 -404
  857. package/OpenChannelProvider-ca26866f.js +0 -1890
  858. package/RemoveMessageModal-db97f3f9.js +0 -38
  859. package/RemoveMessageModal-db97f3f9.js.map +0 -1
  860. package/ThreadProvider-b5a2ad03.js +0 -1778
  861. package/ThreadProvider-b5a2ad03.js.map +0 -1
  862. package/UserProfileContext-5b8c391a.js +0 -41
  863. package/UserProfileContext-5b8c391a.js.map +0 -1
  864. package/_rollupPluginBabelHelpers-ef032169.js.map +0 -1
  865. package/cjs/ChannelListProvider-bb62fccb.js +0 -1050
  866. package/cjs/ChannelListProvider-bb62fccb.js.map +0 -1
  867. package/cjs/ChannelProvider-b225ab76.js +0 -1941
  868. package/cjs/ChannelProvider-b225ab76.js.map +0 -1
  869. package/cjs/CreateChannelProvider-7c5b1342.js +0 -52
  870. package/cjs/MediaQueryContext-ccb12e3d.js +0 -94
  871. package/cjs/MediaQueryContext-ccb12e3d.js.map +0 -1
  872. package/cjs/MemberList-ee792073.js +0 -410
  873. package/cjs/OpenChannelListProvider-d9f4a5b4.js +0 -439
  874. package/cjs/OpenChannelProvider-30a24b84.js +0 -1899
  875. package/cjs/RemoveMessageModal-4dd9431b.js +0 -44
  876. package/cjs/RemoveMessageModal-4dd9431b.js.map +0 -1
  877. package/cjs/ThreadProvider-43c54d9b.js +0 -1787
  878. package/cjs/ThreadProvider-43c54d9b.js.map +0 -1
  879. package/cjs/UserProfileContext-d59fe64f.js +0 -49
  880. package/cjs/UserProfileContext-d59fe64f.js.map +0 -1
  881. package/cjs/_rollupPluginBabelHelpers-4693667a.js.map +0 -1
  882. package/cjs/color-5fe1a19c.js.map +0 -1
  883. package/cjs/compareIds-02121052.js.map +0 -1
  884. package/cjs/const-2044f15a.js +0 -20
  885. package/cjs/consts-14256e43.js +0 -6
  886. package/cjs/consts-f2c42e3a.js +0 -6
  887. package/cjs/consts-faf545e7.js +0 -6
  888. package/cjs/consts-faf545e7.js.map +0 -1
  889. package/cjs/index-00aa7289.js.map +0 -1
  890. package/cjs/index-154b368d.js +0 -368
  891. package/cjs/index-154b368d.js.map +0 -1
  892. package/cjs/index-1914edda.js +0 -57
  893. package/cjs/index-2e84e87d.js +0 -330
  894. package/cjs/index-5c7818e3.js.map +0 -1
  895. package/cjs/index-73a1cca8.js +0 -647
  896. package/cjs/index-73a1cca8.js.map +0 -1
  897. package/cjs/index-7b61bfbc.js.map +0 -1
  898. package/cjs/index-7c4a1c63.js +0 -9
  899. package/cjs/index-7c4a1c63.js.map +0 -1
  900. package/cjs/index-84f919de.js.map +0 -1
  901. package/cjs/index-8cc5f0ba.js +0 -164
  902. package/cjs/index-8cc5f0ba.js.map +0 -1
  903. package/cjs/index-a085d7e2.js +0 -171
  904. package/cjs/index-a085d7e2.js.map +0 -1
  905. package/cjs/index-aaa23e06.js.map +0 -1
  906. package/cjs/index-c8592ba1.js.map +0 -1
  907. package/cjs/index-d2b3d08f.js +0 -139
  908. package/cjs/index-d2b3d08f.js.map +0 -1
  909. package/cjs/index-d58de514.js +0 -202
  910. package/cjs/index-e722362c.js +0 -58
  911. package/cjs/index-e722362c.js.map +0 -1
  912. package/cjs/index-ffcf63bb.js +0 -118
  913. package/cjs/index-ffcf63bb.js.map +0 -1
  914. package/cjs/index.module-223a3af8.js +0 -6
  915. package/cjs/index.module-223a3af8.js.map +0 -1
  916. package/cjs/stringFormatterUtils-f768db2f.js +0 -16
  917. package/cjs/stringSet-286c9fb2.js.map +0 -1
  918. package/cjs/topics-df8731af.js.map +0 -1
  919. package/cjs/types-7b6072a7.js +0 -17
  920. package/cjs/types-7b6072a7.js.map +0 -1
  921. package/cjs/useHandleUploadFiles-08fadd6f.js.map +0 -1
  922. package/cjs/useLongPress-233f8ca8.js +0 -87
  923. package/cjs/useLongPress-233f8ca8.js.map +0 -1
  924. package/cjs/useSendMultipleFilesMessage-5c5cab5f.js +0 -109
  925. package/cjs/useSendMultipleFilesMessage-5c5cab5f.js.map +0 -1
  926. package/cjs/utils-013de0ea.js +0 -35
  927. package/cjs/utils-013de0ea.js.map +0 -1
  928. package/cjs/utils-1cab5821.js +0 -345
  929. package/cjs/utils-1cab5821.js.map +0 -1
  930. package/cjs/utils-576a3067.js +0 -31
  931. package/cjs/utils-576a3067.js.map +0 -1
  932. package/cjs/utils-89a0ca39.js +0 -6
  933. package/cjs/utils-89a0ca39.js.map +0 -1
  934. package/cjs/utils-c2d36ac9.js +0 -62
  935. package/cjs/utils-c2d36ac9.js.map +0 -1
  936. package/cjs/uuid-dee72498.js +0 -15
  937. package/compareIds-e6958df7.js +0 -15
  938. package/compareIds-e6958df7.js.map +0 -1
  939. package/const-997b7e92.js +0 -13
  940. package/consts-0808a594.js +0 -4
  941. package/consts-0808a594.js.map +0 -1
  942. package/consts-2144a35b.js +0 -37
  943. package/consts-3e2a0b41.js +0 -4
  944. package/consts-6a76be86.js +0 -4
  945. package/consts-6a76be86.js.map +0 -1
  946. package/context-a2108ea4.js +0 -13
  947. package/index-0bbeff0d.js.map +0 -1
  948. package/index-35c34277.js.map +0 -1
  949. package/index-3c2e063e.js.map +0 -1
  950. package/index-4214d5e5.js +0 -320
  951. package/index-4f2e8b24.js +0 -7
  952. package/index-4f2e8b24.js.map +0 -1
  953. package/index-4f3b01f7.js +0 -132
  954. package/index-4f3b01f7.js.map +0 -1
  955. package/index-58e190df.js +0 -51
  956. package/index-58e190df.js.map +0 -1
  957. package/index-91b8ea75.js +0 -152
  958. package/index-91b8ea75.js.map +0 -1
  959. package/index-ac325b55.js +0 -51
  960. package/index-c9a60ebd.js.map +0 -1
  961. package/index-cd3a8abb.js +0 -164
  962. package/index-cd3a8abb.js.map +0 -1
  963. package/index-dc0853cb.js +0 -110
  964. package/index-dc0853cb.js.map +0 -1
  965. package/index-df44531d.js +0 -187
  966. package/index-e2382507.js +0 -361
  967. package/index-e2382507.js.map +0 -1
  968. package/index-e7cbecf4.js +0 -598
  969. package/index-e7cbecf4.js.map +0 -1
  970. package/index-f14314d9.js.map +0 -1
  971. package/index-f8b1f2fd.js.map +0 -1
  972. package/index.module-74c51bef.js +0 -4
  973. package/index.module-74c51bef.js.map +0 -1
  974. package/stringFormatterUtils-1656fed9.js +0 -14
  975. package/stringSet-2ab6570e.js.map +0 -1
  976. package/topics-baecd5b0.js.map +0 -1
  977. package/types-76bdfba5.js +0 -15
  978. package/types-76bdfba5.js.map +0 -1
  979. package/useHandleUploadFiles-8134431f.js.map +0 -1
  980. package/useLongPress-eb0dfa7a.js +0 -85
  981. package/useLongPress-eb0dfa7a.js.map +0 -1
  982. package/useSendMultipleFilesMessage-c351cca7.js +0 -107
  983. package/useSendMultipleFilesMessage-c351cca7.js.map +0 -1
  984. package/utils-1babe991.js +0 -4
  985. package/utils-1babe991.js.map +0 -1
  986. package/utils-9f1492f3.js +0 -31
  987. package/utils-9f1492f3.js.map +0 -1
  988. package/utils-c6ec2848.js +0 -306
  989. package/utils-c6ec2848.js.map +0 -1
  990. package/utils-d6b42051.js +0 -57
  991. package/utils-d6b42051.js.map +0 -1
  992. package/utils-e6c58e2d.js +0 -29
  993. package/utils-e6c58e2d.js.map +0 -1
  994. package/uuid-94f10232.js +0 -13
@@ -0,0 +1,2080 @@
1
+ import React__default, { useEffect, useState, useCallback, useRef, useReducer, useMemo } from 'react';
2
+ import { U as UserProfileProvider } from './UserProfileContext-26e71f9a.js';
3
+ import { useSendbirdStateContext } from './useSendbirdStateContext.js';
4
+ import { P as PREV_RESULT_SIZE, N as NEXT_RESULT_SIZE, T as ThreadReplySelectType } from './const-e3326913.js';
5
+ import { m as mergeAndSortMessages, p as passUnsuccessfullMessages, s as scrollIntoLast, a as scrollToRenderedMessage, b as pxToNumber, g as getAllEmojisMapFromEmojiContainer, c as getNicknamesMapFromMembers } from './utils-40040f8e.js';
6
+ import { _ as __assign, c as __spreadArray } from './tslib.es6-0c779aab.js';
7
+ import { f as format } from './index-c81fd6ec.js';
8
+ import { SendingStatus, ReplyType, MessageMetaArray } from '@sendbird/chat/message';
9
+ import { K, S } from './index-c6095960.js';
10
+ import { R as RESET_MESSAGES, F as FETCH_INITIAL_MESSAGES_START, a as FETCH_INITIAL_MESSAGES_SUCCESS, b as FETCH_PREV_MESSAGES_SUCCESS, c as FETCH_NEXT_MESSAGES_SUCCESS, d as FETCH_INITIAL_MESSAGES_FAILURE, e as FETCH_PREV_MESSAGES_FAILURE, f as FETCH_NEXT_MESSAGES_FAILURE, S as SEND_MESSAGE_START, g as SEND_MESSAGE_SUCCESS, h as SEND_MESSAGE_FAILURE, i as SET_CURRENT_CHANNEL, j as SET_CHANNEL_INVALID, O as ON_MESSAGE_RECEIVED, k as ON_MESSAGE_UPDATED, l as ON_MESSAGE_THREAD_INFO_UPDATED, m as RESEND_MESSAGE_START, M as MARK_AS_READ, n as ON_MESSAGE_DELETED, o as ON_MESSAGE_DELETED_BY_REQ_ID, p as SET_EMOJI_CONTAINER, q as ON_REACTION_UPDATED, r as MESSAGE_LIST_PARAMS_CHANGED, s as ON_FILE_INFO_UPLOADED, P as PublishingModuleType, u as useSendMultipleFilesMessage, t as channelActions } from './useSendMultipleFilesMessage-4489a0f6.js';
11
+ import { c as compareIds } from './compareIds-b56b02f1.js';
12
+ import { a as isSendableMessage, b as filterMessageListParams, c as isMultipleFilesMessage } from './index-fc1642cb.js';
13
+ import { GroupChannelHandler } from '@sendbird/chat/groupChannel';
14
+ import { u as uuidv4 } from './uuid-3c77ef7b.js';
15
+ import { PUBSUB_TOPICS } from './pubSub/topics.js';
16
+ import { a as _objectSpread2 } from './_rollupPluginBabelHelpers-07dcbc2b.js';
17
+ import { c as VOICE_MESSAGE_FILE_NAME, d as VOICE_MESSAGE_MIME_TYPE, M as META_ARRAY_VOICE_DURATION_KEY, e as META_ARRAY_MESSAGE_TYPE_KEY, f as META_ARRAY_MESSAGE_TYPE_VALUE__VOICE } from './consts-aa64aca8.js';
18
+ import { a as getCaseResolvedThreadReplySelectType } from './resolvedReplyType-0532593c.js';
19
+
20
+ /**
21
+ * This function helps consider the every condition
22
+ * related to enabling emoji reaction feature.
23
+ */
24
+ function getIsReactionEnabled(_a) {
25
+ var _b = _a.isBroadcast,
26
+ isBroadcast = _b === void 0 ? false : _b,
27
+ _c = _a.isSuper,
28
+ isSuper = _c === void 0 ? false : _c,
29
+ _d = _a.globalLevel,
30
+ globalLevel = _d === void 0 ? true : _d,
31
+ moduleLevel = _a.moduleLevel;
32
+ return !(isBroadcast || isSuper) && (moduleLevel !== null && moduleLevel !== void 0 ? moduleLevel : globalLevel);
33
+ }
34
+
35
+ var initialState = {
36
+ initialized: false,
37
+ loading: true,
38
+ allMessages: [],
39
+ /**
40
+ * localMessages: pending & failed messages
41
+ */
42
+ localMessages: [],
43
+ currentGroupChannel: null,
44
+ // for scrollup
45
+ hasMorePrev: false,
46
+ oldestMessageTimeStamp: 0,
47
+ // for scroll down
48
+ // onScrollDownCallback is added for navigation to different timestamps on messageSearch
49
+ // hasMorePrev, onScrollCallback -> scroll up(default behavior)
50
+ // hasMoreNext, onScrollDownCallback -> scroll down
51
+ hasMoreNext: false,
52
+ latestMessageTimeStamp: 0,
53
+ emojiContainer: {
54
+ emojiCategories: [],
55
+ emojiHash: ''
56
+ },
57
+ unreadSince: null,
58
+ /**
59
+ * unreadSince is a formatted date information string
60
+ * It's used only for the {unreadSince && <UnreadCount time={unreadSince} />}
61
+ */
62
+ isInvalid: false,
63
+ readStatus: null,
64
+ messageListParams: null
65
+ };
66
+
67
+ var getOldestMessageTimeStamp = function (messages) {
68
+ if (messages === void 0) {
69
+ messages = [];
70
+ }
71
+ var oldestMessage = messages[0];
72
+ return oldestMessage && oldestMessage.createdAt || null;
73
+ };
74
+ var getLatestMessageTimeStamp = function (messages) {
75
+ if (messages === void 0) {
76
+ messages = [];
77
+ }
78
+ var latestMessage = messages[messages.length - 1];
79
+ return latestMessage && latestMessage.createdAt || null;
80
+ };
81
+ function hasReqId(message) {
82
+ return 'reqId' in message;
83
+ }
84
+ function channelReducer(state, action) {
85
+ return K(action).with({
86
+ type: RESET_MESSAGES
87
+ }, function () {
88
+ return __assign(__assign({}, state), {
89
+ // when user switches channel, if the previous channel `hasMorePrev`
90
+ // the onScroll gets called twice, setting hasMorePrev false prevents this
91
+ hasMorePrev: false,
92
+ hasMoreNext: false,
93
+ allMessages: []
94
+ });
95
+ }).with({
96
+ type: FETCH_INITIAL_MESSAGES_START
97
+ }, function () {
98
+ return __assign(__assign({}, state), {
99
+ loading: true,
100
+ allMessages: state.allMessages.filter(function (m) {
101
+ return isSendableMessage(m) ? m.sendingStatus !== SendingStatus.SUCCEEDED : true;
102
+ })
103
+ });
104
+ }).with({
105
+ type: FETCH_INITIAL_MESSAGES_SUCCESS
106
+ }, function (action) {
107
+ var _a;
108
+ var _b = action.payload,
109
+ currentGroupChannel = _b.currentGroupChannel,
110
+ messages = _b.messages;
111
+ if (!((currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.url) === ((_a = state.currentGroupChannel) === null || _a === void 0 ? void 0 : _a.url))) {
112
+ return state;
113
+ }
114
+ var oldestMessageTimeStamp = getOldestMessageTimeStamp(messages);
115
+ var latestMessageTimeStamp = getLatestMessageTimeStamp(messages);
116
+ return __assign(__assign({}, state), {
117
+ loading: false,
118
+ initialized: true,
119
+ hasMorePrev: true,
120
+ hasMoreNext: true,
121
+ oldestMessageTimeStamp: oldestMessageTimeStamp,
122
+ latestMessageTimeStamp: latestMessageTimeStamp,
123
+ allMessages: __spreadArray([], messages, true)
124
+ });
125
+ }).with({
126
+ type: FETCH_PREV_MESSAGES_SUCCESS
127
+ }, function (action) {
128
+ var _a, _b, _c, _d;
129
+ var _e = action.payload,
130
+ currentGroupChannel = _e.currentGroupChannel,
131
+ messages = _e.messages;
132
+ if (!((currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.url) === ((_a = state.currentGroupChannel) === null || _a === void 0 ? void 0 : _a.url))) {
133
+ return state;
134
+ }
135
+ var hasMorePrev = ((_b = messages === null || messages === void 0 ? void 0 : messages.length) !== null && _b !== void 0 ? _b : 0) >= ((_d = (_c = state === null || state === void 0 ? void 0 : state.messageListParams) === null || _c === void 0 ? void 0 : _c.prevResultSize) !== null && _d !== void 0 ? _d : PREV_RESULT_SIZE) + 1;
136
+ var oldestMessageTimeStamp = getOldestMessageTimeStamp(messages);
137
+ // Remove duplicated messages
138
+ var duplicatedMessageIds = [];
139
+ var updatedOldMessages = state.allMessages.map(function (msg) {
140
+ var duplicatedMessage = messages.find(function (_a) {
141
+ var messageId = _a.messageId;
142
+ return compareIds(messageId, msg.messageId);
143
+ });
144
+ if (!duplicatedMessage) {
145
+ return msg;
146
+ }
147
+ duplicatedMessageIds.push(duplicatedMessage.messageId);
148
+ return duplicatedMessage.updatedAt > msg.updatedAt ? duplicatedMessage : msg;
149
+ });
150
+ var filteredNewMessages = duplicatedMessageIds.length > 0 ? messages.filter(function (msg) {
151
+ return !duplicatedMessageIds.find(function (messageId) {
152
+ return compareIds(messageId, msg.messageId);
153
+ });
154
+ }) : messages;
155
+ return __assign(__assign({}, state), {
156
+ hasMorePrev: hasMorePrev,
157
+ oldestMessageTimeStamp: oldestMessageTimeStamp,
158
+ allMessages: __spreadArray(__spreadArray([], filteredNewMessages, true), updatedOldMessages, true)
159
+ });
160
+ }).with({
161
+ type: FETCH_NEXT_MESSAGES_SUCCESS
162
+ }, function (action) {
163
+ var _a, _b, _c, _d;
164
+ var _e = action.payload,
165
+ currentGroupChannel = _e.currentGroupChannel,
166
+ messages = _e.messages;
167
+ if (!((currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.url) === ((_a = state.currentGroupChannel) === null || _a === void 0 ? void 0 : _a.url))) {
168
+ return state;
169
+ }
170
+ var hasMoreNext = ((_b = messages === null || messages === void 0 ? void 0 : messages.length) !== null && _b !== void 0 ? _b : 0) === ((_d = (_c = state === null || state === void 0 ? void 0 : state.messageListParams) === null || _c === void 0 ? void 0 : _c.nextResultSize) !== null && _d !== void 0 ? _d : NEXT_RESULT_SIZE) + 1;
171
+ var latestMessageTimeStamp = getLatestMessageTimeStamp(messages);
172
+ // sort ~
173
+ var sortedMessages = mergeAndSortMessages(state.allMessages, messages);
174
+ return __assign(__assign({}, state), {
175
+ hasMoreNext: hasMoreNext,
176
+ latestMessageTimeStamp: latestMessageTimeStamp,
177
+ allMessages: sortedMessages
178
+ });
179
+ }).with({
180
+ type: S.union(FETCH_INITIAL_MESSAGES_FAILURE, FETCH_PREV_MESSAGES_FAILURE, FETCH_NEXT_MESSAGES_FAILURE)
181
+ }, function (action) {
182
+ var _a;
183
+ var currentGroupChannel = action.payload.currentGroupChannel;
184
+ if ((currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.url) !== ((_a = state === null || state === void 0 ? void 0 : state.currentGroupChannel) === null || _a === void 0 ? void 0 : _a.url)) {
185
+ return state;
186
+ }
187
+ return __assign(__assign({}, state), {
188
+ loading: false,
189
+ initialized: false,
190
+ allMessages: [],
191
+ hasMorePrev: false,
192
+ hasMoreNext: false,
193
+ oldestMessageTimeStamp: null,
194
+ latestMessageTimeStamp: null
195
+ });
196
+ }).with({
197
+ type: SEND_MESSAGE_START
198
+ }, function (action) {
199
+ // Message should not be spread here
200
+ // it will loose some methods like `isUserMessage`
201
+ return __assign(__assign({}, state), {
202
+ localMessages: __spreadArray(__spreadArray([], state.localMessages, true), [action.payload], false)
203
+ });
204
+ }).with({
205
+ type: SEND_MESSAGE_SUCCESS
206
+ }, function (action) {
207
+ var message = action.payload;
208
+ var filteredMessages = state.allMessages.filter(function (m) {
209
+ return hasReqId(m) && (m === null || m === void 0 ? void 0 : m.reqId) !== (message === null || message === void 0 ? void 0 : message.reqId);
210
+ });
211
+ // [Policy] Pending messages and failed messages
212
+ // must always be at the end of the message list
213
+ return __assign(__assign({}, state), {
214
+ allMessages: __spreadArray(__spreadArray([], filteredMessages, true), [message], false),
215
+ localMessages: state.localMessages.filter(function (m) {
216
+ return hasReqId(m) && (m === null || m === void 0 ? void 0 : m.reqId) !== (message === null || message === void 0 ? void 0 : message.reqId);
217
+ })
218
+ });
219
+ }).with({
220
+ type: SEND_MESSAGE_FAILURE
221
+ }, function (action) {
222
+ // @ts-ignore
223
+ action.payload.failed = true;
224
+ return __assign(__assign({}, state), {
225
+ localMessages: state.localMessages.map(function (m) {
226
+ return compareIds(hasReqId(m) && m.reqId, action.payload.reqId) ? action.payload : m;
227
+ })
228
+ });
229
+ }).with({
230
+ type: SET_CURRENT_CHANNEL
231
+ }, function (action) {
232
+ return __assign(__assign({}, state), {
233
+ currentGroupChannel: action.payload,
234
+ isInvalid: false
235
+ });
236
+ }).with({
237
+ type: SET_CHANNEL_INVALID
238
+ }, function () {
239
+ return __assign(__assign({}, state), {
240
+ currentGroupChannel: null,
241
+ isInvalid: true
242
+ });
243
+ }).with({
244
+ type: ON_MESSAGE_RECEIVED
245
+ }, function (action) {
246
+ var _a = action.payload,
247
+ channel = _a.channel,
248
+ message = _a.message;
249
+ var members = channel.members;
250
+ var sender = message.sender;
251
+ var currentGroupChannel = state.currentGroupChannel,
252
+ unreadSince = state.unreadSince;
253
+ var currentGroupChannelUrl = currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.url;
254
+ if (!compareIds(channel === null || channel === void 0 ? void 0 : channel.url, currentGroupChannelUrl)) {
255
+ return state;
256
+ }
257
+ // Excluded overlapping messages
258
+ if (state.allMessages.some(function (msg) {
259
+ return msg.messageId === message.messageId;
260
+ })) {
261
+ return state;
262
+ }
263
+ // Filter by userFilledQuery
264
+ if (state.messageListParams && !filterMessageListParams(state.messageListParams, message)) {
265
+ return state;
266
+ }
267
+ if (message.isAdminMessage && message.isAdminMessage()) {
268
+ return __assign(__assign({}, state), {
269
+ allMessages: passUnsuccessfullMessages(state.allMessages, message)
270
+ });
271
+ }
272
+ // Update members when sender profileUrl, nickname, friendName has been changed
273
+ var senderMember = members === null || members === void 0 ? void 0 : members.find(function (m) {
274
+ return (m === null || m === void 0 ? void 0 : m.userId) === (sender === null || sender === void 0 ? void 0 : sender.userId);
275
+ });
276
+ if ((senderMember === null || senderMember === void 0 ? void 0 : senderMember.profileUrl) !== (sender === null || sender === void 0 ? void 0 : sender.profileUrl) || (senderMember === null || senderMember === void 0 ? void 0 : senderMember.friendName) !== (sender === null || sender === void 0 ? void 0 : sender.friendName) || (senderMember === null || senderMember === void 0 ? void 0 : senderMember.nickname) !== (sender === null || sender === void 0 ? void 0 : sender.nickname)) {
277
+ // @ts-ignore
278
+ channel.members = members.map(function (member) {
279
+ if (member.userId === sender.userId) {
280
+ return sender;
281
+ }
282
+ return member;
283
+ });
284
+ }
285
+ return __assign(__assign({}, state), {
286
+ currentGroupChannel: channel,
287
+ unreadSince: (state === null || state === void 0 ? void 0 : state.unreadSince) ? unreadSince : format(new Date(), 'p MMM dd'),
288
+ allMessages: passUnsuccessfullMessages(state.allMessages, message)
289
+ });
290
+ }).with({
291
+ type: ON_MESSAGE_UPDATED
292
+ }, function (action) {
293
+ var _a;
294
+ var _b = action.payload,
295
+ channel = _b.channel,
296
+ message = _b.message;
297
+ var currentGroupChannelUrl = ((_a = state === null || state === void 0 ? void 0 : state.currentGroupChannel) === null || _a === void 0 ? void 0 : _a.url) || '';
298
+ if (!compareIds(channel === null || channel === void 0 ? void 0 : channel.url, currentGroupChannelUrl)) {
299
+ return state; // Ignore event when it is not for the current channel
300
+ }
301
+
302
+ if (state.messageListParams && !filterMessageListParams(state.messageListParams, message)) {
303
+ // Delete the message if it doesn't match to the params anymore
304
+ return __assign(__assign({}, state), {
305
+ allMessages: state.allMessages.filter(function (m) {
306
+ return !compareIds(m.messageId, message === null || message === void 0 ? void 0 : message.messageId);
307
+ })
308
+ });
309
+ }
310
+ return __assign(__assign({}, state), {
311
+ allMessages: state.allMessages.map(function (m) {
312
+ if (compareIds(m.messageId, message.messageId)) {
313
+ return message;
314
+ }
315
+ if (compareIds(m.parentMessageId, message.messageId)) {
316
+ m.parentMessage = message; // eslint-disable-line no-param-reassign
317
+ }
318
+
319
+ return m;
320
+ })
321
+ });
322
+ }).with({
323
+ type: ON_MESSAGE_THREAD_INFO_UPDATED
324
+ }, function (action) {
325
+ var _a;
326
+ var _b = action.payload,
327
+ channel = _b.channel,
328
+ event = _b.event;
329
+ var channelUrl = event.channelUrl,
330
+ threadInfo = event.threadInfo,
331
+ targetMessageId = event.targetMessageId;
332
+ var currentGroupChannelUrl = ((_a = state === null || state === void 0 ? void 0 : state.currentGroupChannel) === null || _a === void 0 ? void 0 : _a.url) || '';
333
+ if (!compareIds(channel === null || channel === void 0 ? void 0 : channel.url, currentGroupChannelUrl) || !compareIds(channel === null || channel === void 0 ? void 0 : channel.url, channelUrl)) {
334
+ return state; // Ignore event when it is not for the current channel
335
+ }
336
+
337
+ return __assign(__assign({}, state), {
338
+ allMessages: state.allMessages.map(function (m) {
339
+ if (compareIds(m.messageId, targetMessageId)) {
340
+ // eslint-disable-next-line no-param-reassign
341
+ m.threadInfo = threadInfo; // Upsert threadInfo to the target message
342
+ }
343
+
344
+ return m;
345
+ })
346
+ });
347
+ }).with({
348
+ type: RESEND_MESSAGE_START
349
+ }, function (action) {
350
+ return __assign(__assign({}, state), {
351
+ allMessages: state.allMessages.map(function (m) {
352
+ return compareIds(hasReqId(m) && m.reqId, action.payload.reqId) ? action.payload : m;
353
+ })
354
+ });
355
+ }).with({
356
+ type: MARK_AS_READ
357
+ }, function (action) {
358
+ var _a, _b, _c;
359
+ if (((_a = state.currentGroupChannel) === null || _a === void 0 ? void 0 : _a.url) !== ((_c = (_b = action.payload) === null || _b === void 0 ? void 0 : _b.channel) === null || _c === void 0 ? void 0 : _c.url)) {
360
+ return state;
361
+ }
362
+ return __assign(__assign({}, state), {
363
+ unreadSince: null
364
+ });
365
+ }).with({
366
+ type: ON_MESSAGE_DELETED
367
+ }, function (action) {
368
+ return __assign(__assign({}, state), {
369
+ allMessages: state.allMessages.filter(function (m) {
370
+ return !compareIds(m.messageId, action.payload);
371
+ })
372
+ });
373
+ }).with({
374
+ type: ON_MESSAGE_DELETED_BY_REQ_ID
375
+ }, function (action) {
376
+ return __assign(__assign({}, state), {
377
+ localMessages: state.localMessages.filter(function (m) {
378
+ return !compareIds(hasReqId(m) && m.reqId, action.payload);
379
+ })
380
+ });
381
+ }).with({
382
+ type: SET_EMOJI_CONTAINER
383
+ }, function (action) {
384
+ return __assign(__assign({}, state), {
385
+ emojiContainer: action.payload
386
+ });
387
+ }).with({
388
+ type: ON_REACTION_UPDATED
389
+ }, function (action) {
390
+ return __assign(__assign({}, state), {
391
+ allMessages: state.allMessages.map(function (m) {
392
+ if (compareIds(m.messageId, action.payload.messageId)) {
393
+ if (m.applyReactionEvent && typeof m.applyReactionEvent === 'function') {
394
+ m.applyReactionEvent(action.payload);
395
+ }
396
+ return m;
397
+ }
398
+ return m;
399
+ })
400
+ });
401
+ }).with({
402
+ type: MESSAGE_LIST_PARAMS_CHANGED
403
+ }, function (action) {
404
+ return __assign(__assign({}, state), {
405
+ messageListParams: action.payload
406
+ });
407
+ }).with({
408
+ type: ON_FILE_INFO_UPLOADED
409
+ }, function (action) {
410
+ var _a, _b;
411
+ var _c = action.payload,
412
+ channelUrl = _c.channelUrl,
413
+ requestId = _c.requestId,
414
+ index = _c.index,
415
+ uploadableFileInfo = _c.uploadableFileInfo,
416
+ error = _c.error;
417
+ if (!compareIds(channelUrl, (_a = state === null || state === void 0 ? void 0 : state.currentGroupChannel) === null || _a === void 0 ? void 0 : _a.url)) {
418
+ return state;
419
+ }
420
+ /**
421
+ * We don't have to do anything here because
422
+ * onFailed() will be called so handle error there instead.
423
+ */
424
+ if (error) return state;
425
+ var localMessages = state.localMessages;
426
+ var messageToUpdate = localMessages.find(function (message) {
427
+ return compareIds(hasReqId(message) && message.reqId, requestId);
428
+ });
429
+ var fileInfoList = (_b = messageToUpdate.messageParams) === null || _b === void 0 ? void 0 : _b.fileInfoList;
430
+ if (Array.isArray(fileInfoList)) {
431
+ fileInfoList[index] = uploadableFileInfo;
432
+ }
433
+ return __assign(__assign({}, state), {
434
+ localMessages: localMessages
435
+ });
436
+ }).otherwise(function () {
437
+ return state;
438
+ });
439
+ }
440
+
441
+ var DELIVERY_RECIPT = 'delivery_receipt';
442
+ function useHandleChannelEvents(_a, _b) {
443
+ var _c, _d, _e;
444
+ var sdkInit = _a.sdkInit,
445
+ currentUserId = _a.currentUserId,
446
+ currentGroupChannel = _a.currentGroupChannel,
447
+ disableMarkAsRead = _a.disableMarkAsRead;
448
+ var sdk = _b.sdk,
449
+ logger = _b.logger,
450
+ scrollRef = _b.scrollRef,
451
+ setQuoteMessage = _b.setQuoteMessage,
452
+ messagesDispatcher = _b.messagesDispatcher;
453
+ var store = useSendbirdStateContext();
454
+ var _f = store.config,
455
+ markAsReadScheduler = _f.markAsReadScheduler,
456
+ markAsDeliveredScheduler = _f.markAsDeliveredScheduler,
457
+ disableMarkAsDelivered = _f.disableMarkAsDelivered;
458
+ var canSetMarkAsDelivered = (_e = (_d = (_c = store.stores.sdkStore.sdk) === null || _c === void 0 ? void 0 : _c.appInfo) === null || _d === void 0 ? void 0 : _d.premiumFeatureList) === null || _e === void 0 ? void 0 : _e.find(function (feature) {
459
+ return feature === DELIVERY_RECIPT;
460
+ });
461
+ useEffect(function () {
462
+ var _a;
463
+ var channelUrl = currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.url;
464
+ var channelHandlerId = uuidv4();
465
+ if (channelUrl && sdkInit) {
466
+ var channelHandler = {
467
+ onMessageReceived: function (channel, message) {
468
+ var _a, _b;
469
+ if (compareIds(channel === null || channel === void 0 ? void 0 : channel.url, channelUrl)) {
470
+ var scrollToEnd = false;
471
+ try {
472
+ var current = scrollRef.current;
473
+ scrollToEnd = current.offsetHeight + current.scrollTop >= current.scrollHeight - 10;
474
+ // 10 is a buffer
475
+ } catch (error) {
476
+ //
477
+ }
478
+ logger.info('Channel | useHandleChannelEvents: onMessageReceived', message);
479
+ messagesDispatcher({
480
+ type: ON_MESSAGE_RECEIVED,
481
+ payload: {
482
+ channel: channel,
483
+ message: message
484
+ }
485
+ });
486
+ if (scrollToEnd && ((_a = document.getElementById('sendbird-dropdown-portal')) === null || _a === void 0 ? void 0 : _a.childElementCount) === 0 && ((_b = document.getElementById('sendbird-emoji-list-portal')) === null || _b === void 0 ? void 0 : _b.childElementCount) === 0) {
487
+ // and !openContextMenu
488
+ try {
489
+ setTimeout(function () {
490
+ scrollIntoLast(0, scrollRef);
491
+ });
492
+ if (!disableMarkAsRead) {
493
+ markAsReadScheduler.push(currentGroupChannel);
494
+ }
495
+ if (canSetMarkAsDelivered && !disableMarkAsDelivered) {
496
+ markAsDeliveredScheduler.push(currentGroupChannel);
497
+ }
498
+ } catch (error) {
499
+ logger.warning('Channel | onMessageReceived | scroll to end failed');
500
+ }
501
+ }
502
+ }
503
+ },
504
+ onUnreadMemberStatusUpdated: function (channel) {
505
+ logger.info('Channel | useHandleChannelEvents: onUnreadMemberStatusUpdated', channel);
506
+ if (compareIds(channel === null || channel === void 0 ? void 0 : channel.url, channelUrl)) {
507
+ messagesDispatcher({
508
+ type: SET_CURRENT_CHANNEL,
509
+ payload: channel
510
+ });
511
+ }
512
+ },
513
+ // before(onDeliveryReceiptUpdated)
514
+ onUndeliveredMemberStatusUpdated: function (channel) {
515
+ if (compareIds(channel === null || channel === void 0 ? void 0 : channel.url, channelUrl)) {
516
+ logger.info('Channel | useHandleChannelEvents: onDeliveryReceiptUpdated', channel);
517
+ messagesDispatcher({
518
+ type: SET_CURRENT_CHANNEL,
519
+ payload: channel
520
+ });
521
+ }
522
+ },
523
+ onMessageUpdated: function (channel, message) {
524
+ logger.info('Channel | useHandleChannelEvents: onMessageUpdated', message);
525
+ messagesDispatcher({
526
+ type: ON_MESSAGE_UPDATED,
527
+ payload: {
528
+ channel: channel,
529
+ message: message
530
+ }
531
+ });
532
+ },
533
+ onThreadInfoUpdated: function (channel, threadInfoUpdateEvent) {
534
+ logger.info('Channel | useHandleChannelEvents: onThreadInfoUpdated', {
535
+ channel: channel,
536
+ threadInfoUpdateEvent: threadInfoUpdateEvent
537
+ });
538
+ messagesDispatcher({
539
+ type: ON_MESSAGE_THREAD_INFO_UPDATED,
540
+ payload: {
541
+ channel: channel,
542
+ event: threadInfoUpdateEvent
543
+ }
544
+ });
545
+ },
546
+ onMessageDeleted: function (channel, messageId) {
547
+ logger.info('Channel | useHandleChannelEvents: onMessageDeleted', {
548
+ channel: channel,
549
+ messageId: messageId
550
+ });
551
+ setQuoteMessage(null);
552
+ messagesDispatcher({
553
+ type: ON_MESSAGE_DELETED,
554
+ payload: messageId
555
+ });
556
+ },
557
+ onReactionUpdated: function (channel, reactionEvent) {
558
+ logger.info('Channel | useHandleChannelEvents: onReactionUpdated', {
559
+ channel: channel,
560
+ reactionEvent: reactionEvent
561
+ });
562
+ messagesDispatcher({
563
+ type: ON_REACTION_UPDATED,
564
+ payload: reactionEvent
565
+ });
566
+ },
567
+ onChannelChanged: function (channel) {
568
+ if (compareIds(channel === null || channel === void 0 ? void 0 : channel.url, channelUrl)) {
569
+ logger.info('Channel | useHandleChannelEvents: onChannelChanged', channel);
570
+ messagesDispatcher({
571
+ type: SET_CURRENT_CHANNEL,
572
+ payload: channel
573
+ });
574
+ }
575
+ },
576
+ onChannelFrozen: function (channel) {
577
+ if (compareIds(channel === null || channel === void 0 ? void 0 : channel.url, channelUrl)) {
578
+ logger.info('Channel | useHandleChannelEvents: onChannelFrozen', channel);
579
+ messagesDispatcher({
580
+ type: SET_CURRENT_CHANNEL,
581
+ payload: channel
582
+ });
583
+ }
584
+ },
585
+ onChannelUnfrozen: function (channel) {
586
+ if (compareIds(channel === null || channel === void 0 ? void 0 : channel.url, channelUrl)) {
587
+ logger.info('Channel | useHandleChannelEvents: onChannelUnFrozen', channel);
588
+ messagesDispatcher({
589
+ type: SET_CURRENT_CHANNEL,
590
+ payload: channel
591
+ });
592
+ }
593
+ },
594
+ onUserMuted: function (channel, user) {
595
+ if (compareIds(channel === null || channel === void 0 ? void 0 : channel.url, channelUrl)) {
596
+ logger.info('Channel | useHandleChannelEvents: onUserMuted', {
597
+ channel: channel,
598
+ user: user
599
+ });
600
+ messagesDispatcher({
601
+ type: SET_CURRENT_CHANNEL,
602
+ payload: channel
603
+ });
604
+ }
605
+ },
606
+ onUserUnmuted: function (channel, user) {
607
+ if (compareIds(channel === null || channel === void 0 ? void 0 : channel.url, channelUrl)) {
608
+ logger.info('Channel | useHandleChannelEvents: onUserUnmuted', {
609
+ channel: channel,
610
+ user: user
611
+ });
612
+ messagesDispatcher({
613
+ type: SET_CURRENT_CHANNEL,
614
+ payload: channel
615
+ });
616
+ }
617
+ },
618
+ onUserBanned: function (channel, user) {
619
+ var _a;
620
+ if (compareIds(channel === null || channel === void 0 ? void 0 : channel.url, channelUrl) && (user === null || user === void 0 ? void 0 : user.userId) === ((_a = sdk === null || sdk === void 0 ? void 0 : sdk.currentUser) === null || _a === void 0 ? void 0 : _a.userId)) {
621
+ logger.info('Channel | useHandleChannelEvents: onUserBanned', {
622
+ channel: channel,
623
+ user: user
624
+ });
625
+ messagesDispatcher({
626
+ type: SET_CURRENT_CHANNEL,
627
+ payload: null
628
+ });
629
+ }
630
+ },
631
+ onOperatorUpdated: function (channel, users) {
632
+ if (compareIds(channel === null || channel === void 0 ? void 0 : channel.url, channelUrl)) {
633
+ logger.info('Channel | useHandleChannelEvents: onOperatorUpdated', {
634
+ channel: channel,
635
+ users: users
636
+ });
637
+ messagesDispatcher({
638
+ type: SET_CURRENT_CHANNEL,
639
+ payload: channel
640
+ });
641
+ }
642
+ },
643
+ onUserLeft: function (channel, user) {
644
+ if (compareIds(channel === null || channel === void 0 ? void 0 : channel.url, channelUrl)) {
645
+ logger.info('Channel | useHandleChannelEvents: onUserLeft', {
646
+ channel: channel,
647
+ user: user
648
+ });
649
+ if ((user === null || user === void 0 ? void 0 : user.userId) === currentUserId) {
650
+ messagesDispatcher({
651
+ type: SET_CURRENT_CHANNEL,
652
+ payload: null
653
+ });
654
+ }
655
+ }
656
+ }
657
+ };
658
+ logger.info('Channel | useHandleChannelEvents: Setup event handler', {
659
+ channelHandlerId: channelHandlerId,
660
+ channelHandler: channelHandler
661
+ });
662
+ // Add this group channel handler to the Sendbird chat instance
663
+ (_a = sdk.groupChannel) === null || _a === void 0 ? void 0 : _a.addGroupChannelHandler(channelHandlerId, new GroupChannelHandler(channelHandler));
664
+ }
665
+ return function () {
666
+ var _a;
667
+ if ((_a = sdk === null || sdk === void 0 ? void 0 : sdk.groupChannel) === null || _a === void 0 ? void 0 : _a.removeGroupChannelHandler) {
668
+ logger.info('Channel | useHandleChannelEvents: Removing message reciver handler', channelHandlerId);
669
+ sdk.groupChannel.removeGroupChannelHandler(channelHandlerId);
670
+ } else if (sdk === null || sdk === void 0 ? void 0 : sdk.groupChannel) {
671
+ logger.error('Channel | useHandleChannelEvents: Not found the removeGroupChannelHandler');
672
+ }
673
+ };
674
+ }, [currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.url, sdkInit]);
675
+ }
676
+
677
+ function useSetChannel(_ref, _ref2) {
678
+ let {
679
+ channelUrl,
680
+ sdkInit,
681
+ disableMarkAsRead
682
+ } = _ref;
683
+ let {
684
+ messagesDispatcher,
685
+ sdk,
686
+ logger,
687
+ markAsReadScheduler
688
+ } = _ref2;
689
+ useEffect(() => {
690
+ if (channelUrl && sdkInit && sdk && sdk.groupChannel) {
691
+ logger.info('Channel | useSetChannel fetching channel', channelUrl);
692
+ sdk.groupChannel.getChannel(channelUrl).then(groupChannel => {
693
+ logger.info('Channel | useSetChannel fetched channel', groupChannel);
694
+ messagesDispatcher({
695
+ type: SET_CURRENT_CHANNEL,
696
+ payload: groupChannel
697
+ });
698
+ logger.info('Channel: Mark as read', groupChannel);
699
+ if (!disableMarkAsRead) {
700
+ markAsReadScheduler.push(groupChannel);
701
+ }
702
+ }).catch(e => {
703
+ logger.warning('Channel | useSetChannel fetch channel failed', {
704
+ channelUrl,
705
+ e
706
+ });
707
+ messagesDispatcher({
708
+ type: SET_CHANNEL_INVALID
709
+ });
710
+ });
711
+ sdk.getAllEmoji().then(emojiContainer_ => {
712
+ logger.info('Channel: Getting emojis success', emojiContainer_);
713
+ messagesDispatcher({
714
+ type: SET_EMOJI_CONTAINER,
715
+ payload: emojiContainer_
716
+ });
717
+ }).catch(err => {
718
+ logger.error('Channel: Getting emojis failed', err);
719
+ });
720
+ }
721
+ }, [channelUrl, sdkInit]);
722
+ }
723
+
724
+ function useInitialMessagesFetch(_a, _b) {
725
+ var currentGroupChannel = _a.currentGroupChannel,
726
+ initialTimeStamp = _a.initialTimeStamp,
727
+ userFilledMessageListQuery = _a.userFilledMessageListQuery,
728
+ replyType = _a.replyType,
729
+ setIsScrolled = _a.setIsScrolled;
730
+ var logger = _b.logger,
731
+ scrollRef = _b.scrollRef,
732
+ messagesDispatcher = _b.messagesDispatcher;
733
+ var channelUrl = currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.url;
734
+ useEffect(function () {
735
+ logger.info('Channel useInitialMessagesFetch: Setup started', currentGroupChannel);
736
+ setIsScrolled(false);
737
+ messagesDispatcher({
738
+ type: RESET_MESSAGES,
739
+ payload: null
740
+ });
741
+ if (currentGroupChannel && (currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.getMessagesByTimestamp)) {
742
+ var messageListParams_1 = {
743
+ prevResultSize: PREV_RESULT_SIZE,
744
+ isInclusive: true,
745
+ includeReactions: true,
746
+ includeMetaArray: true
747
+ };
748
+ if (initialTimeStamp) {
749
+ messageListParams_1.nextResultSize = NEXT_RESULT_SIZE;
750
+ }
751
+ if (replyType === 'QUOTE_REPLY' || replyType === 'THREAD') {
752
+ messageListParams_1.includeThreadInfo = true;
753
+ messageListParams_1.includeParentMessageInfo = true;
754
+ messageListParams_1.replyType = ReplyType.ONLY_REPLY_TO_CHANNEL;
755
+ }
756
+ if (userFilledMessageListQuery) {
757
+ Object.keys(userFilledMessageListQuery).forEach(function (key) {
758
+ messageListParams_1[key] = userFilledMessageListQuery[key];
759
+ });
760
+ }
761
+ if (replyType && (replyType === 'QUOTE_REPLY' || replyType === 'THREAD') || userFilledMessageListQuery) {
762
+ logger.info('Channel useInitialMessagesFetch: Setup messageListParams', messageListParams_1);
763
+ messagesDispatcher({
764
+ type: MESSAGE_LIST_PARAMS_CHANGED,
765
+ payload: messageListParams_1
766
+ });
767
+ }
768
+ logger.info('Channel: Fetching messages', {
769
+ currentGroupChannel: currentGroupChannel,
770
+ userFilledMessageListQuery: userFilledMessageListQuery
771
+ });
772
+ messagesDispatcher({
773
+ type: FETCH_INITIAL_MESSAGES_START,
774
+ payload: null
775
+ });
776
+ var multipleFilesMessageCount_1 = 0;
777
+ currentGroupChannel.getMessagesByTimestamp(initialTimeStamp || new Date().getTime(), messageListParams_1).then(function (messages) {
778
+ messagesDispatcher({
779
+ type: FETCH_INITIAL_MESSAGES_SUCCESS,
780
+ payload: {
781
+ currentGroupChannel: currentGroupChannel,
782
+ messages: messages
783
+ }
784
+ });
785
+ multipleFilesMessageCount_1 = messages.filter(function (message) {
786
+ return isMultipleFilesMessage(message);
787
+ }).length;
788
+ }).catch(function (error) {
789
+ logger.error('Channel: Fetching messages failed', error);
790
+ messagesDispatcher({
791
+ type: FETCH_INITIAL_MESSAGES_FAILURE,
792
+ payload: {
793
+ currentGroupChannel: currentGroupChannel
794
+ }
795
+ });
796
+ }).finally(function () {
797
+ if (!initialTimeStamp) {
798
+ setTimeout(function () {
799
+ return scrollIntoLast(0, scrollRef, setIsScrolled);
800
+ },
801
+ /**
802
+ * Rendering MFM takes long time so we need this.
803
+ * But later we should find better solution.
804
+ */
805
+ Math.min(multipleFilesMessageCount_1 * 100, 1000));
806
+ } else {
807
+ setTimeout(function () {
808
+ scrollToRenderedMessage(scrollRef, initialTimeStamp, setIsScrolled);
809
+ }, 500);
810
+ }
811
+ });
812
+ }
813
+ }, [channelUrl, userFilledMessageListQuery, initialTimeStamp]);
814
+ /**
815
+ * Note - useEffect(() => {}, [currentGroupChannel])
816
+ * was buggy, that is why we did
817
+ * const channelUrl = currentGroupChannel && currentGroupChannel.url;
818
+ * useEffect(() => {}, [channelUrl])
819
+ * Again, this hook is supposed to execute when currentGroupChannel changes
820
+ * The 'channelUrl' here is not the same memory reference from Conversation.props
821
+ */
822
+ }
823
+
824
+ function useReconnectOnIdle(isOnline, currentGroupChannel, reconnectOnIdle) {
825
+ if (reconnectOnIdle === void 0) {
826
+ reconnectOnIdle = true;
827
+ }
828
+ var _a = useState(false),
829
+ isTabHidden = _a[0],
830
+ setIsTabHidden = _a[1];
831
+ var wasOffline = !isOnline;
832
+ useEffect(function () {
833
+ var handleVisibilityChange = function () {
834
+ if (reconnectOnIdle) {
835
+ setIsTabHidden(document.hidden);
836
+ }
837
+ };
838
+ document.addEventListener('visibilitychange', handleVisibilityChange);
839
+ return function () {
840
+ document.removeEventListener('visibilitychange', handleVisibilityChange);
841
+ };
842
+ }, [reconnectOnIdle, document.hidden]);
843
+ var shouldReconnect = wasOffline && (currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.url) != null && !isTabHidden;
844
+ return {
845
+ shouldReconnect: shouldReconnect
846
+ };
847
+ }
848
+
849
+ function useHandleReconnect(_a, _b) {
850
+ var isOnline = _a.isOnline,
851
+ replyType = _a.replyType,
852
+ disableMarkAsRead = _a.disableMarkAsRead,
853
+ reconnectOnIdle = _a.reconnectOnIdle;
854
+ var logger = _b.logger,
855
+ sdk = _b.sdk,
856
+ scrollRef = _b.scrollRef,
857
+ currentGroupChannel = _b.currentGroupChannel,
858
+ messagesDispatcher = _b.messagesDispatcher,
859
+ markAsReadScheduler = _b.markAsReadScheduler,
860
+ userFilledMessageListQuery = _b.userFilledMessageListQuery;
861
+ var shouldReconnect = useReconnectOnIdle(isOnline, currentGroupChannel, reconnectOnIdle).shouldReconnect;
862
+ useEffect(function () {
863
+ return function () {
864
+ var _a, _b;
865
+ // state changed from offline to online AND tab is visible
866
+ if (shouldReconnect) {
867
+ logger.info('Refreshing conversation state');
868
+ var isReactionEnabled = ((_a = sdk === null || sdk === void 0 ? void 0 : sdk.appInfo) === null || _a === void 0 ? void 0 : _a.useReaction) || false;
869
+ var messageListParams_1 = {
870
+ prevResultSize: PREV_RESULT_SIZE,
871
+ isInclusive: true,
872
+ includeReactions: isReactionEnabled,
873
+ nextResultSize: NEXT_RESULT_SIZE
874
+ };
875
+ if (replyType && replyType === 'QUOTE_REPLY') {
876
+ messageListParams_1.includeThreadInfo = true;
877
+ messageListParams_1.includeParentMessageInfo = true;
878
+ messageListParams_1.replyType = ReplyType.ONLY_REPLY_TO_CHANNEL;
879
+ }
880
+ if (userFilledMessageListQuery) {
881
+ Object.keys(userFilledMessageListQuery).forEach(function (key) {
882
+ messageListParams_1[key] = userFilledMessageListQuery[key];
883
+ });
884
+ }
885
+ logger.info('Channel: Fetching messages', {
886
+ currentGroupChannel: currentGroupChannel,
887
+ userFilledMessageListQuery: userFilledMessageListQuery
888
+ });
889
+ messagesDispatcher({
890
+ type: FETCH_INITIAL_MESSAGES_START,
891
+ payload: null
892
+ });
893
+ (_b = sdk === null || sdk === void 0 ? void 0 : sdk.groupChannel) === null || _b === void 0 ? void 0 : _b.getChannel(currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.url).then(function (groupChannel) {
894
+ var lastMessageTime = new Date().getTime();
895
+ groupChannel.getMessagesByTimestamp(lastMessageTime, messageListParams_1).then(function (messages) {
896
+ messagesDispatcher({
897
+ type: FETCH_INITIAL_MESSAGES_SUCCESS,
898
+ payload: {
899
+ currentGroupChannel: currentGroupChannel,
900
+ messages: messages
901
+ }
902
+ });
903
+ setTimeout(function () {
904
+ return scrollIntoLast(0, scrollRef);
905
+ });
906
+ }).catch(function (error) {
907
+ logger.error('Channel: Fetching messages failed', error);
908
+ messagesDispatcher({
909
+ type: FETCH_INITIAL_MESSAGES_FAILURE,
910
+ payload: {
911
+ currentGroupChannel: currentGroupChannel
912
+ }
913
+ });
914
+ });
915
+ if (!disableMarkAsRead) {
916
+ markAsReadScheduler.push(currentGroupChannel);
917
+ }
918
+ });
919
+ }
920
+ };
921
+ }, [shouldReconnect, replyType]);
922
+ }
923
+
924
+ function useScrollCallback(_a, _b) {
925
+ var currentGroupChannel = _a.currentGroupChannel,
926
+ oldestMessageTimeStamp = _a.oldestMessageTimeStamp,
927
+ userFilledMessageListQuery = _a.userFilledMessageListQuery,
928
+ replyType = _a.replyType;
929
+ var hasMorePrev = _b.hasMorePrev,
930
+ logger = _b.logger,
931
+ messagesDispatcher = _b.messagesDispatcher,
932
+ sdk = _b.sdk;
933
+ return useCallback(function () {
934
+ var _a, _b;
935
+ if (!hasMorePrev) {
936
+ return;
937
+ }
938
+ var messageListParams = {
939
+ prevResultSize: PREV_RESULT_SIZE,
940
+ isInclusive: true,
941
+ includeMetaArray: true,
942
+ includeReactions: (_b = (_a = sdk === null || sdk === void 0 ? void 0 : sdk.appInfo) === null || _a === void 0 ? void 0 : _a.useReaction) !== null && _b !== void 0 ? _b : false
943
+ };
944
+ if (replyType === 'QUOTE_REPLY' || replyType === 'THREAD') {
945
+ messageListParams.includeThreadInfo = true;
946
+ messageListParams.includeParentMessageInfo = true;
947
+ messageListParams.replyType = ReplyType.ONLY_REPLY_TO_CHANNEL;
948
+ }
949
+ if (userFilledMessageListQuery) {
950
+ Object.keys(userFilledMessageListQuery).forEach(function (key) {
951
+ messageListParams[key] = userFilledMessageListQuery[key];
952
+ });
953
+ }
954
+ logger.info('Channel: Fetching messages', {
955
+ currentGroupChannel: currentGroupChannel,
956
+ userFilledMessageListQuery: userFilledMessageListQuery
957
+ });
958
+ currentGroupChannel.getMessagesByTimestamp(oldestMessageTimeStamp || new Date().getTime(), messageListParams).then(function (messages) {
959
+ messagesDispatcher({
960
+ type: FETCH_PREV_MESSAGES_SUCCESS,
961
+ payload: {
962
+ currentGroupChannel: currentGroupChannel,
963
+ messages: messages
964
+ }
965
+ });
966
+ }).catch(function () {
967
+ messagesDispatcher({
968
+ type: FETCH_PREV_MESSAGES_FAILURE,
969
+ payload: {
970
+ currentGroupChannel: currentGroupChannel
971
+ }
972
+ });
973
+ });
974
+ }, [currentGroupChannel, oldestMessageTimeStamp, replyType]);
975
+ }
976
+
977
+ function useScrollDownCallback(_ref, _ref2) {
978
+ let {
979
+ currentGroupChannel,
980
+ latestMessageTimeStamp,
981
+ userFilledMessageListQuery,
982
+ hasMoreNext,
983
+ replyType
984
+ } = _ref;
985
+ let {
986
+ logger,
987
+ messagesDispatcher,
988
+ sdk
989
+ } = _ref2;
990
+ return useCallback(cb => {
991
+ if (!hasMoreNext) {
992
+ return;
993
+ }
994
+ const {
995
+ appInfo = {}
996
+ } = sdk;
997
+ const isReactionEnabled = appInfo.useReaction || false;
998
+ const messageListParams = {
999
+ nextResultSize: NEXT_RESULT_SIZE,
1000
+ isInclusive: true,
1001
+ includeReactions: isReactionEnabled
1002
+ };
1003
+ messageListParams.includeMetaArray = true;
1004
+ if (replyType && (replyType === 'QUOTE_REPLY' || replyType === 'THREAD')) {
1005
+ messageListParams.includeThreadInfo = true;
1006
+ messageListParams.includeParentMessageInfo = true;
1007
+ messageListParams.replyType = ReplyType.ONLY_REPLY_TO_CHANNEL;
1008
+ }
1009
+ if (userFilledMessageListQuery) {
1010
+ Object.keys(userFilledMessageListQuery).forEach(key => {
1011
+ messageListParams[key] = userFilledMessageListQuery[key];
1012
+ });
1013
+ }
1014
+ logger.info('Channel: Fetching later messages', {
1015
+ currentGroupChannel,
1016
+ userFilledMessageListQuery
1017
+ });
1018
+ currentGroupChannel.getMessagesByTimestamp(latestMessageTimeStamp || new Date().getTime(), messageListParams).then(messages => {
1019
+ messagesDispatcher({
1020
+ type: FETCH_NEXT_MESSAGES_SUCCESS,
1021
+ payload: {
1022
+ currentGroupChannel,
1023
+ messages
1024
+ }
1025
+ });
1026
+ cb([messages, null]);
1027
+ }).catch(error => {
1028
+ logger.error('Channel: Fetching later messages failed', error);
1029
+ messagesDispatcher({
1030
+ type: FETCH_NEXT_MESSAGES_FAILURE,
1031
+ payload: {
1032
+ currentGroupChannel
1033
+ }
1034
+ });
1035
+ cb([null, error]);
1036
+ });
1037
+ }, [currentGroupChannel, latestMessageTimeStamp, hasMoreNext, replyType]);
1038
+ }
1039
+
1040
+ function useDeleteMessageCallback(_ref, _ref2) {
1041
+ let {
1042
+ currentGroupChannel,
1043
+ messagesDispatcher
1044
+ } = _ref;
1045
+ let {
1046
+ logger
1047
+ } = _ref2;
1048
+ return useCallback(message => {
1049
+ logger.info('Channel | useDeleteMessageCallback: Deleting message', message);
1050
+ const {
1051
+ sendingStatus
1052
+ } = message;
1053
+ return new Promise((resolve, reject) => {
1054
+ logger.info('Channel | useDeleteMessageCallback: Deleting message requestState:', sendingStatus);
1055
+ // Message is only on local
1056
+ if (sendingStatus === 'failed' || sendingStatus === 'pending') {
1057
+ logger.info('Channel | useDeleteMessageCallback: Deleted message from local:', message);
1058
+ messagesDispatcher({
1059
+ type: ON_MESSAGE_DELETED_BY_REQ_ID,
1060
+ payload: message.reqId
1061
+ });
1062
+ resolve(message);
1063
+ } else {
1064
+ logger.info('Channel | useDeleteMessageCallback: Deleting message from remote:', sendingStatus);
1065
+ currentGroupChannel.deleteMessage(message).then(() => {
1066
+ logger.info('Channel | useDeleteMessageCallback: Deleting message success!', message);
1067
+ messagesDispatcher({
1068
+ type: ON_MESSAGE_DELETED,
1069
+ payload: message.messageId
1070
+ });
1071
+ resolve(message);
1072
+ }).catch(err => {
1073
+ logger.warning('Channel | useDeleteMessageCallback: Deleting message failed!', err);
1074
+ reject(err);
1075
+ });
1076
+ }
1077
+ });
1078
+ }, [currentGroupChannel, messagesDispatcher]);
1079
+ }
1080
+
1081
+ function useUpdateMessageCallback(_ref, _ref2) {
1082
+ let {
1083
+ currentGroupChannel,
1084
+ messagesDispatcher,
1085
+ onBeforeUpdateUserMessage,
1086
+ isMentionEnabled
1087
+ } = _ref;
1088
+ let {
1089
+ logger,
1090
+ pubSub
1091
+ } = _ref2;
1092
+ return useCallback((props, callback) => {
1093
+ const {
1094
+ messageId,
1095
+ message,
1096
+ mentionedUsers,
1097
+ mentionTemplate
1098
+ } = props;
1099
+ const createParamsDefault = () => {
1100
+ const params = {};
1101
+ params.message = message;
1102
+ if (isMentionEnabled && (mentionedUsers === null || mentionedUsers === void 0 ? void 0 : mentionedUsers.length) > 0) {
1103
+ params.mentionedUsers = mentionedUsers;
1104
+ }
1105
+ if (isMentionEnabled && mentionTemplate) {
1106
+ params.mentionedMessageTemplate = mentionTemplate;
1107
+ } else {
1108
+ params.mentionedMessageTemplate = message;
1109
+ }
1110
+ return params;
1111
+ };
1112
+ const createCustomPrams = onBeforeUpdateUserMessage && typeof onBeforeUpdateUserMessage === 'function';
1113
+ if (createCustomPrams) {
1114
+ logger.info('Channel: creating params using onBeforeUpdateUserMessage', onBeforeUpdateUserMessage);
1115
+ }
1116
+ const params = onBeforeUpdateUserMessage ? onBeforeUpdateUserMessage(message) : createParamsDefault();
1117
+ logger.info('Channel: Updating message!', params);
1118
+ currentGroupChannel.updateUserMessage(messageId, params).then((msg, err) => {
1119
+ if (callback) {
1120
+ callback(err, msg);
1121
+ }
1122
+ logger.info('Channel: Updating message success!', msg);
1123
+ messagesDispatcher({
1124
+ type: ON_MESSAGE_UPDATED,
1125
+ payload: {
1126
+ channel: currentGroupChannel,
1127
+ message: msg
1128
+ }
1129
+ });
1130
+ pubSub.publish(PUBSUB_TOPICS.UPDATE_USER_MESSAGE, {
1131
+ message: msg,
1132
+ channel: currentGroupChannel,
1133
+ publishingModules: [PublishingModuleType.CHANNEL]
1134
+ });
1135
+ });
1136
+ }, [currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.url, messagesDispatcher, onBeforeUpdateUserMessage]);
1137
+ }
1138
+
1139
+ function useResendMessageCallback(_ref, _ref2) {
1140
+ let {
1141
+ currentGroupChannel,
1142
+ messagesDispatcher
1143
+ } = _ref;
1144
+ let {
1145
+ logger
1146
+ } = _ref2;
1147
+ return useCallback(failedMessage => {
1148
+ logger.info('Channel: Resending message has started', failedMessage);
1149
+ const {
1150
+ messageType,
1151
+ file
1152
+ } = failedMessage;
1153
+ if (failedMessage !== null && failedMessage !== void 0 && failedMessage.isResendable) {
1154
+ // Move the logic setting sendingStatus to pending into the reducer
1155
+ // eslint-disable-next-line no-param-reassign
1156
+ failedMessage.requestState = 'pending';
1157
+ // eslint-disable-next-line no-param-reassign
1158
+ failedMessage.sendingStatus = 'pending';
1159
+ messagesDispatcher({
1160
+ type: RESEND_MESSAGE_START,
1161
+ payload: failedMessage
1162
+ });
1163
+
1164
+ // userMessage
1165
+ if (messageType === 'user') {
1166
+ currentGroupChannel.resendUserMessage(failedMessage).then(message => {
1167
+ logger.info('Channel: Resending message success!', message);
1168
+ messagesDispatcher({
1169
+ type: SEND_MESSAGE_SUCCESS,
1170
+ payload: message
1171
+ });
1172
+ }).catch(e => {
1173
+ logger.warning('Channel: Resending message failed!', e);
1174
+ // eslint-disable-next-line no-param-reassign
1175
+ failedMessage.requestState = 'failed';
1176
+ // eslint-disable-next-line no-param-reassign
1177
+ failedMessage.sendingStatus = 'failed';
1178
+ messagesDispatcher({
1179
+ type: SEND_MESSAGE_FAILURE,
1180
+ payload: failedMessage
1181
+ });
1182
+ });
1183
+
1184
+ // eslint-disable-next-line no-param-reassign
1185
+ failedMessage.requestState = 'pending';
1186
+ // eslint-disable-next-line no-param-reassign
1187
+ failedMessage.sendingStatus = 'pending';
1188
+ messagesDispatcher({
1189
+ type: RESEND_MESSAGE_START,
1190
+ payload: failedMessage
1191
+ });
1192
+ return;
1193
+ }
1194
+ if (messageType === 'file') {
1195
+ currentGroupChannel.resendFileMessage(failedMessage, file).then(message => {
1196
+ logger.info('Channel: Resending file message success!', message);
1197
+ messagesDispatcher({
1198
+ type: SEND_MESSAGE_SUCCESS,
1199
+ payload: message
1200
+ });
1201
+ }).catch(e => {
1202
+ logger.warning('Channel: Resending file message failed!', e);
1203
+ // eslint-disable-next-line no-param-reassign
1204
+ failedMessage.requestState = 'failed';
1205
+ // eslint-disable-next-line no-param-reassign
1206
+ failedMessage.sendingStatus = 'failed';
1207
+ messagesDispatcher({
1208
+ type: SEND_MESSAGE_FAILURE,
1209
+ payload: failedMessage
1210
+ });
1211
+ });
1212
+
1213
+ // eslint-disable-next-line no-param-reassign
1214
+ failedMessage.requestState = 'pending';
1215
+ // eslint-disable-next-line no-param-reassign
1216
+ failedMessage.sendingStatus = 'pending';
1217
+ messagesDispatcher({
1218
+ type: RESEND_MESSAGE_START,
1219
+ payload: failedMessage
1220
+ });
1221
+ }
1222
+ if (isMultipleFilesMessage(failedMessage)) {
1223
+ currentGroupChannel.resendMessage(failedMessage).onPending(message => {
1224
+ messagesDispatcher({
1225
+ type: RESEND_MESSAGE_START,
1226
+ payload: message
1227
+ });
1228
+ })
1229
+ // TODO: Handle on file info upload event.
1230
+ .onSucceeded(message => {
1231
+ logger.info('Channel: Resending multiple files message success!', message);
1232
+ messagesDispatcher({
1233
+ type: SEND_MESSAGE_SUCCESS,
1234
+ payload: message
1235
+ });
1236
+ }).onFailed((e, message) => {
1237
+ logger.warning('Channel: Resending multiple files message failed!', e);
1238
+ messagesDispatcher({
1239
+ type: SEND_MESSAGE_FAILURE,
1240
+ payload: message
1241
+ });
1242
+ });
1243
+ }
1244
+ } else {
1245
+ // to alert user on console
1246
+ // eslint-disable-next-line no-console
1247
+ console.error('Message is not resendable');
1248
+ logger.warning('Message is not resendable', failedMessage);
1249
+ }
1250
+ }, [currentGroupChannel, messagesDispatcher]);
1251
+ }
1252
+
1253
+ function useSendMessageCallback(_ref, _ref2) {
1254
+ let {
1255
+ isMentionEnabled,
1256
+ currentGroupChannel,
1257
+ onBeforeSendUserMessage
1258
+ } = _ref;
1259
+ let {
1260
+ logger,
1261
+ pubSub,
1262
+ scrollRef,
1263
+ messagesDispatcher
1264
+ } = _ref2;
1265
+ const messageInputRef = useRef(null);
1266
+ const sendMessage = useCallback(props => {
1267
+ const {
1268
+ quoteMessage = null,
1269
+ message,
1270
+ mentionTemplate,
1271
+ // mentionedUserIds,
1272
+ mentionedUsers
1273
+ } = props;
1274
+ const createParamsDefault = () => {
1275
+ const params = {};
1276
+ params.message = message;
1277
+ // if (isMentionEnabled && mentionedUserIds?.length > 0) {
1278
+ if (isMentionEnabled && (mentionedUsers === null || mentionedUsers === void 0 ? void 0 : mentionedUsers.length) > 0) {
1279
+ // params.mentionedUserIds = mentionedUserIds;
1280
+ params.mentionedUsers = mentionedUsers;
1281
+ }
1282
+ // if (isMentionEnabled && mentionTemplate && mentionedUserIds?.length > 0) {
1283
+ if (isMentionEnabled && mentionTemplate && (mentionedUsers === null || mentionedUsers === void 0 ? void 0 : mentionedUsers.length) > 0) {
1284
+ params.mentionedMessageTemplate = mentionTemplate;
1285
+ }
1286
+ if (quoteMessage) {
1287
+ params.isReplyToChannel = true;
1288
+ params.parentMessageId = quoteMessage.messageId;
1289
+ }
1290
+ return params;
1291
+ };
1292
+ const createCustomPrams = onBeforeSendUserMessage && typeof onBeforeSendUserMessage === 'function';
1293
+ if (createCustomPrams) {
1294
+ logger.info('Channel: creating params using onBeforeSendUserMessage', onBeforeSendUserMessage);
1295
+ }
1296
+ const params = onBeforeSendUserMessage ? onBeforeSendUserMessage(message, quoteMessage) : createParamsDefault();
1297
+ logger.info('Channel: Sending message has started', params);
1298
+ currentGroupChannel.sendUserMessage(params).onPending(pendingMsg => {
1299
+ pubSub.publish(PUBSUB_TOPICS.SEND_MESSAGE_START, {
1300
+ /* pubSub is used instead of messagesDispatcher
1301
+ to avoid redundantly calling `messageActionTypes.SEND_MESSAGE_START` */
1302
+ message: pendingMsg,
1303
+ channel: currentGroupChannel,
1304
+ publishingModules: [PublishingModuleType.CHANNEL]
1305
+ });
1306
+ setTimeout(() => scrollIntoLast(0, scrollRef));
1307
+ }).onFailed((err, msg) => {
1308
+ logger.warning('Channel: Sending message failed!', {
1309
+ message: msg,
1310
+ error: err
1311
+ });
1312
+ messagesDispatcher({
1313
+ type: SEND_MESSAGE_FAILURE,
1314
+ payload: msg
1315
+ });
1316
+ }).onSucceeded(msg => {
1317
+ logger.info('Channel: Sending message success!', msg);
1318
+ messagesDispatcher({
1319
+ type: SEND_MESSAGE_SUCCESS,
1320
+ payload: msg
1321
+ });
1322
+ });
1323
+ }, [currentGroupChannel, onBeforeSendUserMessage]);
1324
+ return [messageInputRef, sendMessage];
1325
+ }
1326
+
1327
+ function useSendFileMessageCallback(_ref, _ref2) {
1328
+ let {
1329
+ currentGroupChannel,
1330
+ onBeforeSendFileMessage,
1331
+ imageCompression = {}
1332
+ } = _ref;
1333
+ let {
1334
+ logger,
1335
+ pubSub,
1336
+ scrollRef,
1337
+ messagesDispatcher
1338
+ } = _ref2;
1339
+ const sendMessage = useCallback(function (file) {
1340
+ let quoteMessage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1341
+ return new Promise((resolve, reject) => {
1342
+ const {
1343
+ compressionRate,
1344
+ resizingWidth,
1345
+ resizingHeight
1346
+ } = imageCompression;
1347
+ const createCustomParams = onBeforeSendFileMessage && typeof onBeforeSendFileMessage === 'function';
1348
+ const compressibleFileType = file.type === 'image/jpg' || file.type === 'image/png' || file.type === 'image/jpeg';
1349
+ const compressibleRatio = compressionRate > 0 && compressionRate < 1;
1350
+ // pxToNumber returns null if values are invalid
1351
+ const compressibleDiamensions = pxToNumber(resizingWidth) || pxToNumber(resizingHeight);
1352
+ const canCompressImage = compressibleFileType && (compressibleRatio || compressibleDiamensions);
1353
+ const createParamsDefault = file_ => {
1354
+ const params = {};
1355
+ params.file = file_;
1356
+ if (quoteMessage) {
1357
+ params.isReplyToChannel = true;
1358
+ params.parentMessageId = quoteMessage.messageId;
1359
+ }
1360
+ return params;
1361
+ };
1362
+ if (canCompressImage) {
1363
+ // Using image compression
1364
+ try {
1365
+ const image = document.createElement('img');
1366
+ image.src = URL.createObjectURL(file);
1367
+ image.onload = () => {
1368
+ URL.revokeObjectURL(image.src);
1369
+ const canvas = document.createElement('canvas');
1370
+ const imageWdith = image.naturalWidth || image.width;
1371
+ const imageHeight = image.naturalHeight || image.height;
1372
+ let targetWidth = pxToNumber(resizingWidth) || imageWdith;
1373
+ let targetHeight = pxToNumber(resizingHeight) || imageHeight;
1374
+
1375
+ // In canvas.toBlob(callback, mimeType, qualityArgument)
1376
+ // qualityArgument doesnt work
1377
+ // so in case compressibleDiamensions are not present, we use ratio
1378
+ if (file.type === 'image/png' && !compressibleDiamensions) {
1379
+ targetWidth *= compressionRate;
1380
+ targetHeight *= compressionRate;
1381
+ }
1382
+ canvas.width = targetWidth;
1383
+ canvas.height = targetHeight;
1384
+ const context = canvas.getContext('2d');
1385
+ context.drawImage(image, 0, 0, targetWidth, targetHeight);
1386
+ context.canvas.toBlob(newImageBlob => {
1387
+ const compressedFile = new File([newImageBlob], file.name, {
1388
+ type: file.type
1389
+ });
1390
+ if (createCustomParams) {
1391
+ logger.info('Channel: Creating params using onBeforeSendFileMessage', onBeforeSendFileMessage);
1392
+ }
1393
+ const params = createCustomParams ? onBeforeSendFileMessage(compressedFile, quoteMessage) : createParamsDefault(compressedFile);
1394
+ logger.info('Channel: Uploading file message start!', params);
1395
+ currentGroupChannel.sendFileMessage(params).onPending(pendingMessage => {
1396
+ pubSub.publish(PUBSUB_TOPICS.SEND_MESSAGE_START, {
1397
+ /* pubSub is used instead of messagesDispatcher
1398
+ to avoid redundantly calling `messageActionTypes.SEND_MESSAGE_START` */
1399
+ message: _objectSpread2(_objectSpread2({}, pendingMessage), {}, {
1400
+ url: URL.createObjectURL(compressedFile),
1401
+ // pending thumbnail message seems to be failed
1402
+ requestState: 'pending'
1403
+ }),
1404
+ channel: currentGroupChannel,
1405
+ publishingModules: [PublishingModuleType.CHANNEL]
1406
+ });
1407
+ setTimeout(() => scrollIntoLast(0, scrollRef), 1000);
1408
+ }).onFailed((err, failedMessage) => {
1409
+ logger.error('Channel: Sending file message failed!', {
1410
+ failedMessage,
1411
+ err
1412
+ });
1413
+ // eslint-disable-next-line no-param-reassign
1414
+ failedMessage.localUrl = URL.createObjectURL(compressedFile);
1415
+ // eslint-disable-next-line no-param-reassign
1416
+ failedMessage.file = compressedFile;
1417
+ messagesDispatcher({
1418
+ type: SEND_MESSAGE_FAILURE,
1419
+ payload: failedMessage
1420
+ });
1421
+ reject(err);
1422
+ }).onSucceeded(succeededMessage => {
1423
+ logger.info('Channel: Sending file message success!', succeededMessage);
1424
+ messagesDispatcher({
1425
+ type: SEND_MESSAGE_SUCCESS,
1426
+ payload: succeededMessage
1427
+ });
1428
+ resolve(succeededMessage);
1429
+ });
1430
+ }, file.type, compressionRate);
1431
+ };
1432
+ } catch (error) {
1433
+ logger.error('Channel: Sending file message failed!', error);
1434
+ reject(error);
1435
+ }
1436
+ } else {
1437
+ // Not using image compression
1438
+ if (createCustomParams) {
1439
+ logger.info('Channel: creating params using onBeforeSendFileMessage', onBeforeSendFileMessage);
1440
+ }
1441
+ const params = onBeforeSendFileMessage ? onBeforeSendFileMessage(file, quoteMessage) : createParamsDefault(file);
1442
+ logger.info('Channel: Uploading file message start!', params);
1443
+ currentGroupChannel.sendFileMessage(params).onPending(pendingMsg => {
1444
+ pubSub.publish(PUBSUB_TOPICS.SEND_MESSAGE_START, {
1445
+ /* pubSub is used instead of messagesDispatcher
1446
+ to avoid redundantly calling `messageActionTypes.SEND_MESSAGE_START` */
1447
+ message: _objectSpread2(_objectSpread2({}, pendingMsg), {}, {
1448
+ url: URL.createObjectURL(file),
1449
+ // pending thumbnail message seems to be failed
1450
+ requestState: 'pending'
1451
+ }),
1452
+ channel: currentGroupChannel,
1453
+ publishingModules: [PublishingModuleType.CHANNEL]
1454
+ });
1455
+ setTimeout(() => scrollIntoLast(0, scrollRef), 1000);
1456
+ }).onFailed((error, message) => {
1457
+ logger.error('Channel: Sending file message failed!', {
1458
+ message,
1459
+ error
1460
+ });
1461
+ // eslint-disable-next-line no-param-reassign
1462
+ message.localUrl = URL.createObjectURL(file);
1463
+ // eslint-disable-next-line no-param-reassign
1464
+ message.file = file;
1465
+ messagesDispatcher({
1466
+ type: SEND_MESSAGE_FAILURE,
1467
+ payload: message
1468
+ });
1469
+ reject(error);
1470
+ }).onSucceeded(message => {
1471
+ logger.info('Channel: Sending message success!', message);
1472
+ messagesDispatcher({
1473
+ type: SEND_MESSAGE_SUCCESS,
1474
+ payload: message
1475
+ });
1476
+ resolve(message);
1477
+ });
1478
+ }
1479
+ });
1480
+ }, [currentGroupChannel, onBeforeSendFileMessage, imageCompression]);
1481
+ return [sendMessage];
1482
+ }
1483
+
1484
+ function useToggleReactionCallback(_ref, _ref2) {
1485
+ let {
1486
+ currentGroupChannel
1487
+ } = _ref;
1488
+ let {
1489
+ logger
1490
+ } = _ref2;
1491
+ return useCallback((message, key, isReacted) => {
1492
+ if (isReacted) {
1493
+ currentGroupChannel.deleteReaction(message, key).then(res => {
1494
+ logger.info('Delete reaction success', res);
1495
+ }).catch(err => {
1496
+ logger.warning('Delete reaction failed', err);
1497
+ });
1498
+ return;
1499
+ }
1500
+ currentGroupChannel.addReaction(message, key).then(res => {
1501
+ logger.info('Add reaction success', res);
1502
+ }).catch(err => {
1503
+ logger.warning('Add reaction failed', err);
1504
+ });
1505
+ }, [currentGroupChannel]);
1506
+ }
1507
+
1508
+ // To prevent multiple clicks on the message in the channel while scrolling
1509
+ function deactivateClick(scrollRef) {
1510
+ var element = scrollRef.current;
1511
+ var parentNode = element === null || element === void 0 ? void 0 : element.parentNode;
1512
+ if (element && parentNode) {
1513
+ element.style.pointerEvents = 'none';
1514
+ parentNode.style.cursor = 'wait';
1515
+ }
1516
+ }
1517
+ function activateClick(scrollRef) {
1518
+ var element = scrollRef.current;
1519
+ var parentNode = element === null || element === void 0 ? void 0 : element.parentNode;
1520
+ if (element && parentNode) {
1521
+ element.style.pointerEvents = 'auto';
1522
+ parentNode.style.cursor = 'auto';
1523
+ }
1524
+ }
1525
+ function useScrollToMessage(_a, _b) {
1526
+ var setInitialTimeStamp = _a.setInitialTimeStamp,
1527
+ setAnimatedMessageId = _a.setAnimatedMessageId,
1528
+ allMessages = _a.allMessages,
1529
+ scrollRef = _a.scrollRef;
1530
+ var logger = _b.logger;
1531
+ return useCallback(function (createdAt, messageId) {
1532
+ var isPresent = allMessages.find(function (m) {
1533
+ return m.messageId === messageId;
1534
+ });
1535
+ setAnimatedMessageId(null);
1536
+ setTimeout(function () {
1537
+ try {
1538
+ logger.info('Channel: scroll to message - disabling mouse events');
1539
+ deactivateClick(scrollRef);
1540
+ if (isPresent) {
1541
+ logger.info('Channel: scroll to message - message is present');
1542
+ setAnimatedMessageId(messageId);
1543
+ scrollToRenderedMessage(scrollRef, createdAt);
1544
+ } else {
1545
+ logger.info('Channel: scroll to message - fetching older messages');
1546
+ setInitialTimeStamp(null);
1547
+ setInitialTimeStamp(createdAt);
1548
+ setAnimatedMessageId(messageId);
1549
+ }
1550
+ } finally {
1551
+ logger.info('Channel: scroll to message - enabled mouse events');
1552
+ activateClick(scrollRef);
1553
+ }
1554
+ });
1555
+ }, [setInitialTimeStamp, setAnimatedMessageId, allMessages]);
1556
+ }
1557
+
1558
+ var useSendVoiceMessageCallback = function (_a, _b) {
1559
+ var currentGroupChannel = _a.currentGroupChannel,
1560
+ onBeforeSendVoiceMessage = _a.onBeforeSendVoiceMessage;
1561
+ var logger = _b.logger,
1562
+ pubSub = _b.pubSub,
1563
+ scrollRef = _b.scrollRef,
1564
+ messagesDispatcher = _b.messagesDispatcher;
1565
+ var sendMessage = useCallback(function (file, duration, quoteMessage) {
1566
+ if (!currentGroupChannel) {
1567
+ return;
1568
+ }
1569
+ var messageParams = onBeforeSendVoiceMessage && typeof onBeforeSendVoiceMessage === 'function' ? onBeforeSendVoiceMessage(file, quoteMessage) : {
1570
+ file: file,
1571
+ fileName: VOICE_MESSAGE_FILE_NAME,
1572
+ mimeType: VOICE_MESSAGE_MIME_TYPE,
1573
+ metaArrays: [new MessageMetaArray({
1574
+ key: META_ARRAY_VOICE_DURATION_KEY,
1575
+ value: ["".concat(duration)]
1576
+ }), new MessageMetaArray({
1577
+ key: META_ARRAY_MESSAGE_TYPE_KEY,
1578
+ value: [META_ARRAY_MESSAGE_TYPE_VALUE__VOICE]
1579
+ })]
1580
+ };
1581
+ if (quoteMessage) {
1582
+ messageParams.isReplyToChannel = true;
1583
+ messageParams.parentMessageId = quoteMessage.messageId;
1584
+ }
1585
+ logger.info('Channel: Start sending voice message', messageParams);
1586
+ currentGroupChannel.sendFileMessage(messageParams).onPending(function (pendingMessage) {
1587
+ pubSub.publish(PUBSUB_TOPICS.SEND_MESSAGE_START, {
1588
+ /* pubSub is used instead of messagesDispatcher
1589
+ to avoid redundantly calling `messageActionTypes.SEND_MESSAGE_START` */
1590
+ message: pendingMessage,
1591
+ channel: currentGroupChannel,
1592
+ publishingModules: [PublishingModuleType.CHANNEL]
1593
+ });
1594
+ setTimeout(function () {
1595
+ return scrollIntoLast(0, scrollRef);
1596
+ }, 1000);
1597
+ }).onFailed(function (err, failedMessage) {
1598
+ logger.error('Channel: Sending voice message failed!', {
1599
+ failedMessage: failedMessage,
1600
+ err: err
1601
+ });
1602
+ messagesDispatcher({
1603
+ type: SEND_MESSAGE_FAILURE,
1604
+ payload: failedMessage
1605
+ });
1606
+ }).onSucceeded(function (succeededMessage) {
1607
+ logger.info('Channel: Sending voice message success!', succeededMessage);
1608
+ messagesDispatcher({
1609
+ type: SEND_MESSAGE_SUCCESS,
1610
+ payload: succeededMessage
1611
+ });
1612
+ });
1613
+ }, [currentGroupChannel, onBeforeSendVoiceMessage]);
1614
+ return [sendMessage];
1615
+ };
1616
+
1617
+ var useHandleChannelPubsubEvents = function (_a) {
1618
+ var channelUrl = _a.channelUrl,
1619
+ sdkInit = _a.sdkInit,
1620
+ pubSub = _a.pubSub,
1621
+ dispatcher = _a.dispatcher,
1622
+ scrollRef = _a.scrollRef;
1623
+ useEffect(function () {
1624
+ var subscriber = new Map();
1625
+ if (pubSub === null || pubSub === void 0 ? void 0 : pubSub.subscribe) {
1626
+ subscriber.set(PUBSUB_TOPICS.SEND_USER_MESSAGE, pubSub.subscribe(PUBSUB_TOPICS.SEND_USER_MESSAGE, function (props) {
1627
+ var channel = props.channel,
1628
+ message = props.message;
1629
+ scrollIntoLast(0, scrollRef);
1630
+ if (channelUrl === (channel === null || channel === void 0 ? void 0 : channel.url)) {
1631
+ dispatcher({
1632
+ type: SEND_MESSAGE_SUCCESS,
1633
+ payload: message
1634
+ });
1635
+ }
1636
+ }));
1637
+ subscriber.set(PUBSUB_TOPICS.SEND_MESSAGE_START, pubSub.subscribe(PUBSUB_TOPICS.SEND_MESSAGE_START, function (props) {
1638
+ var _a = props,
1639
+ channel = _a.channel,
1640
+ message = _a.message,
1641
+ publishingModules = _a.publishingModules;
1642
+ if (channelUrl === (channel === null || channel === void 0 ? void 0 : channel.url) && publishingModules.includes(PublishingModuleType.CHANNEL)) {
1643
+ dispatcher({
1644
+ type: SEND_MESSAGE_START,
1645
+ payload: message
1646
+ });
1647
+ }
1648
+ }));
1649
+ subscriber.set(PUBSUB_TOPICS.ON_FILE_INFO_UPLOADED, pubSub.subscribe(PUBSUB_TOPICS.ON_FILE_INFO_UPLOADED, function (props) {
1650
+ var _a = props,
1651
+ response = _a.response,
1652
+ publishingModules = _a.publishingModules;
1653
+ if (channelUrl === response.channelUrl && publishingModules.includes(PublishingModuleType.CHANNEL)) {
1654
+ dispatcher({
1655
+ type: ON_FILE_INFO_UPLOADED,
1656
+ payload: response
1657
+ });
1658
+ }
1659
+ }));
1660
+ subscriber.set(PUBSUB_TOPICS.SEND_MESSAGE_FAILED, pubSub.subscribe(PUBSUB_TOPICS.SEND_MESSAGE_FAILED, function (props) {
1661
+ var _a = props,
1662
+ channel = _a.channel,
1663
+ message = _a.message,
1664
+ publishingModules = _a.publishingModules;
1665
+ if (channelUrl === (channel === null || channel === void 0 ? void 0 : channel.url) && publishingModules.includes(PublishingModuleType.CHANNEL)) {
1666
+ dispatcher({
1667
+ type: SEND_MESSAGE_FAILURE,
1668
+ payload: message
1669
+ });
1670
+ }
1671
+ }));
1672
+ subscriber.set(PUBSUB_TOPICS.SEND_FILE_MESSAGE, pubSub.subscribe(PUBSUB_TOPICS.SEND_FILE_MESSAGE, function (props) {
1673
+ var channel = props.channel,
1674
+ message = props.message;
1675
+ scrollIntoLast(0, scrollRef);
1676
+ if (channelUrl === (channel === null || channel === void 0 ? void 0 : channel.url)) {
1677
+ dispatcher({
1678
+ type: SEND_MESSAGE_SUCCESS,
1679
+ payload: message
1680
+ });
1681
+ }
1682
+ }));
1683
+ subscriber.set(PUBSUB_TOPICS.UPDATE_USER_MESSAGE, pubSub.subscribe(PUBSUB_TOPICS.UPDATE_USER_MESSAGE, function (props) {
1684
+ var channel = props.channel,
1685
+ message = props.message,
1686
+ fromSelector = props.fromSelector;
1687
+ if (fromSelector && channelUrl === (channel === null || channel === void 0 ? void 0 : channel.url)) {
1688
+ dispatcher({
1689
+ type: ON_MESSAGE_UPDATED,
1690
+ payload: {
1691
+ channel: channel,
1692
+ message: message
1693
+ }
1694
+ });
1695
+ }
1696
+ }));
1697
+ subscriber.set(PUBSUB_TOPICS.DELETE_MESSAGE, pubSub.subscribe(PUBSUB_TOPICS.DELETE_MESSAGE, function (props) {
1698
+ var channel = props.channel,
1699
+ messageId = props.messageId;
1700
+ if (channelUrl === (channel === null || channel === void 0 ? void 0 : channel.url)) {
1701
+ dispatcher({
1702
+ type: ON_MESSAGE_DELETED,
1703
+ payload: messageId
1704
+ });
1705
+ }
1706
+ }));
1707
+ }
1708
+ return function () {
1709
+ subscriber.forEach(function (s) {
1710
+ try {
1711
+ s.remove();
1712
+ } catch (_a) {
1713
+ //
1714
+ }
1715
+ });
1716
+ };
1717
+ }, [channelUrl, sdkInit]);
1718
+ };
1719
+
1720
+ var ChannelContext = /*#__PURE__*/React__default.createContext(undefined);
1721
+ var ChannelProvider = function (props) {
1722
+ var _a, _b, _c, _d, _e, _f;
1723
+ var channelUrl = props.channelUrl,
1724
+ children = props.children,
1725
+ isReactionEnabled = props.isReactionEnabled,
1726
+ _g = props.isMessageGroupingEnabled,
1727
+ isMessageGroupingEnabled = _g === void 0 ? true : _g,
1728
+ _h = props.isMultipleFilesMessageEnabled,
1729
+ isMultipleFilesMessageEnabled = _h === void 0 ? false : _h,
1730
+ showSearchIcon = props.showSearchIcon,
1731
+ animatedMessage = props.animatedMessage,
1732
+ highlightedMessage = props.highlightedMessage,
1733
+ startingPoint = props.startingPoint,
1734
+ onBeforeSendUserMessage = props.onBeforeSendUserMessage,
1735
+ onBeforeSendFileMessage = props.onBeforeSendFileMessage,
1736
+ onBeforeUpdateUserMessage = props.onBeforeUpdateUserMessage,
1737
+ onBeforeSendVoiceMessage = props.onBeforeSendVoiceMessage,
1738
+ onBeforeSendMultipleFilesMessage = props.onBeforeSendMultipleFilesMessage,
1739
+ onChatHeaderActionClick = props.onChatHeaderActionClick,
1740
+ onSearchClick = props.onSearchClick,
1741
+ onBackClick = props.onBackClick,
1742
+ channelReplyType = props.replyType,
1743
+ threadReplySelectType = props.threadReplySelectType,
1744
+ queries = props.queries,
1745
+ filterMessageList = props.filterMessageList,
1746
+ _j = props.disableMarkAsRead,
1747
+ disableMarkAsRead = _j === void 0 ? false : _j,
1748
+ onReplyInThread = props.onReplyInThread,
1749
+ onQuoteMessageClick = props.onQuoteMessageClick,
1750
+ onMessageAnimated = props.onMessageAnimated,
1751
+ onMessageHighlighted = props.onMessageHighlighted,
1752
+ _k = props.scrollBehavior,
1753
+ scrollBehavior = _k === void 0 ? 'auto' : _k,
1754
+ _l = props.reconnectOnIdle,
1755
+ reconnectOnIdle = _l === void 0 ? true : _l;
1756
+ var globalStore = useSendbirdStateContext();
1757
+ var config = globalStore.config;
1758
+ var replyType = channelReplyType !== null && channelReplyType !== void 0 ? channelReplyType : config.replyType;
1759
+ var pubSub = config.pubSub,
1760
+ logger = config.logger,
1761
+ userId = config.userId,
1762
+ isOnline = config.isOnline,
1763
+ imageCompression = config.imageCompression,
1764
+ isMentionEnabled = config.isMentionEnabled,
1765
+ isVoiceMessageEnabled = config.isVoiceMessageEnabled,
1766
+ onUserProfileMessage = config.onUserProfileMessage,
1767
+ markAsReadScheduler = config.markAsReadScheduler,
1768
+ groupChannel = config.groupChannel;
1769
+ var sdk = (_b = (_a = globalStore === null || globalStore === void 0 ? void 0 : globalStore.stores) === null || _a === void 0 ? void 0 : _a.sdkStore) === null || _b === void 0 ? void 0 : _b.sdk;
1770
+ var sdkInit = (_d = (_c = globalStore === null || globalStore === void 0 ? void 0 : globalStore.stores) === null || _c === void 0 ? void 0 : _c.sdkStore) === null || _d === void 0 ? void 0 : _d.initialized;
1771
+ var globalConfigs = globalStore === null || globalStore === void 0 ? void 0 : globalStore.config;
1772
+ var _m = useState(startingPoint),
1773
+ initialTimeStamp = _m[0],
1774
+ setInitialTimeStamp = _m[1];
1775
+ useEffect(function () {
1776
+ setInitialTimeStamp(startingPoint);
1777
+ }, [startingPoint, channelUrl]);
1778
+ var _o = useState(0),
1779
+ animatedMessageId = _o[0],
1780
+ setAnimatedMessageId = _o[1];
1781
+ var _p = useState(highlightedMessage),
1782
+ highLightedMessageId = _p[0],
1783
+ setHighLightedMessageId = _p[1];
1784
+ useEffect(function () {
1785
+ setHighLightedMessageId(highlightedMessage);
1786
+ }, [highlightedMessage]);
1787
+ var userFilledMessageListQuery = queries === null || queries === void 0 ? void 0 : queries.messageListParams;
1788
+ var _q = useState(null),
1789
+ quoteMessage = _q[0],
1790
+ setQuoteMessage = _q[1];
1791
+ var _r = useState(false),
1792
+ isScrolled = _r[0],
1793
+ setIsScrolled = _r[1];
1794
+ var _s = useReducer(channelReducer, initialState),
1795
+ messagesStore = _s[0],
1796
+ messagesDispatcher = _s[1];
1797
+ var scrollRef = useRef(null);
1798
+ var allMessages = messagesStore.allMessages,
1799
+ localMessages = messagesStore.localMessages,
1800
+ loading = messagesStore.loading,
1801
+ initialized = messagesStore.initialized,
1802
+ unreadSince = messagesStore.unreadSince,
1803
+ isInvalid = messagesStore.isInvalid,
1804
+ currentGroupChannel = messagesStore.currentGroupChannel,
1805
+ hasMorePrev = messagesStore.hasMorePrev,
1806
+ oldestMessageTimeStamp = messagesStore.oldestMessageTimeStamp,
1807
+ hasMoreNext = messagesStore.hasMoreNext,
1808
+ latestMessageTimeStamp = messagesStore.latestMessageTimeStamp,
1809
+ emojiContainer = messagesStore.emojiContainer,
1810
+ readStatus = messagesStore.readStatus;
1811
+ var isSuper = (currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.isSuper) || false;
1812
+ var isBroadcast = (currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.isBroadcast) || false;
1813
+ var usingReaction = getIsReactionEnabled({
1814
+ isBroadcast: isBroadcast,
1815
+ isSuper: isSuper,
1816
+ globalLevel: config === null || config === void 0 ? void 0 : config.isReactionEnabled,
1817
+ moduleLevel: isReactionEnabled
1818
+ });
1819
+ var emojiAllMap = useMemo(function () {
1820
+ return usingReaction ? getAllEmojisMapFromEmojiContainer(emojiContainer) : new Map();
1821
+ }, [emojiContainer]);
1822
+ var nicknamesMap = useMemo(function () {
1823
+ return usingReaction && currentGroupChannel ? getNicknamesMapFromMembers(currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.members) : new Map();
1824
+ }, [currentGroupChannel === null || currentGroupChannel === void 0 ? void 0 : currentGroupChannel.members]);
1825
+ // Animate message
1826
+ useEffect(function () {
1827
+ if (animatedMessage) {
1828
+ setAnimatedMessageId(animatedMessage);
1829
+ }
1830
+ }, [animatedMessage]);
1831
+ // Scrollup is default scroll for channel
1832
+ var onScrollCallback = useScrollCallback({
1833
+ currentGroupChannel: currentGroupChannel,
1834
+ oldestMessageTimeStamp: oldestMessageTimeStamp,
1835
+ userFilledMessageListQuery: userFilledMessageListQuery,
1836
+ replyType: replyType
1837
+ }, {
1838
+ hasMorePrev: hasMorePrev,
1839
+ logger: logger,
1840
+ messagesDispatcher: messagesDispatcher,
1841
+ sdk: sdk
1842
+ });
1843
+ var scrollToMessage = useScrollToMessage({
1844
+ setInitialTimeStamp: setInitialTimeStamp,
1845
+ setAnimatedMessageId: setAnimatedMessageId,
1846
+ allMessages: allMessages,
1847
+ scrollRef: scrollRef
1848
+ }, {
1849
+ logger: logger
1850
+ });
1851
+ // onScrollDownCallback is added for navigation to different timestamps on messageSearch
1852
+ // hasMorePrev, onScrollCallback -> scroll up(default behavior)
1853
+ // hasMoreNext, onScrollDownCallback -> scroll down
1854
+ var onScrollDownCallback = useScrollDownCallback({
1855
+ currentGroupChannel: currentGroupChannel,
1856
+ latestMessageTimeStamp: latestMessageTimeStamp,
1857
+ userFilledMessageListQuery: userFilledMessageListQuery,
1858
+ hasMoreNext: hasMoreNext,
1859
+ replyType: replyType,
1860
+ isVoiceMessageEnabled: isVoiceMessageEnabled
1861
+ }, {
1862
+ logger: logger,
1863
+ messagesDispatcher: messagesDispatcher,
1864
+ sdk: sdk
1865
+ });
1866
+ var toggleReaction = useToggleReactionCallback({
1867
+ currentGroupChannel: currentGroupChannel
1868
+ }, {
1869
+ logger: logger
1870
+ });
1871
+ // to create message-datasource
1872
+ // this hook sets currentGroupChannel asynchronously
1873
+ useSetChannel({
1874
+ channelUrl: channelUrl,
1875
+ sdkInit: sdkInit,
1876
+ disableMarkAsRead: disableMarkAsRead
1877
+ }, {
1878
+ messagesDispatcher: messagesDispatcher,
1879
+ sdk: sdk,
1880
+ logger: logger,
1881
+ markAsReadScheduler: markAsReadScheduler
1882
+ });
1883
+ // to set quote message as null
1884
+ useEffect(function () {
1885
+ setQuoteMessage(null);
1886
+ }, [channelUrl]);
1887
+ // Hook to handle ChannelEvents and send values to useReducer using messagesDispatcher
1888
+ useHandleChannelEvents({
1889
+ currentGroupChannel: currentGroupChannel,
1890
+ sdkInit: sdkInit,
1891
+ currentUserId: userId,
1892
+ disableMarkAsRead: disableMarkAsRead
1893
+ }, {
1894
+ messagesDispatcher: messagesDispatcher,
1895
+ sdk: sdk,
1896
+ logger: logger,
1897
+ scrollRef: scrollRef,
1898
+ setQuoteMessage: setQuoteMessage
1899
+ });
1900
+ // hook that fetches messages when channel changes
1901
+ // to be clear here useGetChannel sets currentGroupChannel
1902
+ // and useInitialMessagesFetch executes when currentGroupChannel changes
1903
+ // p.s This one executes on initialTimeStamp change too
1904
+ useInitialMessagesFetch({
1905
+ currentGroupChannel: currentGroupChannel,
1906
+ userFilledMessageListQuery: userFilledMessageListQuery,
1907
+ initialTimeStamp: initialTimeStamp,
1908
+ replyType: replyType,
1909
+ setIsScrolled: setIsScrolled
1910
+ }, {
1911
+ logger: logger,
1912
+ scrollRef: scrollRef,
1913
+ messagesDispatcher: messagesDispatcher
1914
+ });
1915
+ // handles API calls from withSendbird
1916
+ useHandleChannelPubsubEvents({
1917
+ channelUrl: channelUrl,
1918
+ sdkInit: sdkInit,
1919
+ pubSub: pubSub,
1920
+ dispatcher: messagesDispatcher,
1921
+ scrollRef: scrollRef
1922
+ });
1923
+ // handling connection breaks
1924
+ useHandleReconnect({
1925
+ isOnline: isOnline,
1926
+ replyType: replyType,
1927
+ disableMarkAsRead: disableMarkAsRead,
1928
+ reconnectOnIdle: reconnectOnIdle
1929
+ }, {
1930
+ logger: logger,
1931
+ sdk: sdk,
1932
+ scrollRef: scrollRef,
1933
+ currentGroupChannel: currentGroupChannel,
1934
+ messagesDispatcher: messagesDispatcher,
1935
+ userFilledMessageListQuery: userFilledMessageListQuery,
1936
+ markAsReadScheduler: markAsReadScheduler
1937
+ });
1938
+ // callbacks for Message CURD actions
1939
+ var deleteMessage = useDeleteMessageCallback({
1940
+ currentGroupChannel: currentGroupChannel,
1941
+ messagesDispatcher: messagesDispatcher
1942
+ }, {
1943
+ logger: logger
1944
+ });
1945
+ var updateMessage = useUpdateMessageCallback({
1946
+ currentGroupChannel: currentGroupChannel,
1947
+ messagesDispatcher: messagesDispatcher,
1948
+ onBeforeUpdateUserMessage: onBeforeUpdateUserMessage,
1949
+ isMentionEnabled: isMentionEnabled
1950
+ }, {
1951
+ logger: logger,
1952
+ pubSub: pubSub
1953
+ });
1954
+ var resendMessage = useResendMessageCallback({
1955
+ currentGroupChannel: currentGroupChannel,
1956
+ messagesDispatcher: messagesDispatcher
1957
+ }, {
1958
+ logger: logger
1959
+ });
1960
+ var _t = useSendMessageCallback({
1961
+ currentGroupChannel: currentGroupChannel,
1962
+ isMentionEnabled: isMentionEnabled,
1963
+ onBeforeSendUserMessage: onBeforeSendUserMessage
1964
+ }, {
1965
+ logger: logger,
1966
+ pubSub: pubSub,
1967
+ scrollRef: scrollRef,
1968
+ messagesDispatcher: messagesDispatcher
1969
+ }),
1970
+ messageInputRef = _t[0],
1971
+ sendMessage = _t[1];
1972
+ var sendFileMessage = useSendFileMessageCallback({
1973
+ currentGroupChannel: currentGroupChannel,
1974
+ imageCompression: imageCompression,
1975
+ onBeforeSendFileMessage: onBeforeSendFileMessage
1976
+ }, {
1977
+ logger: logger,
1978
+ pubSub: pubSub,
1979
+ scrollRef: scrollRef,
1980
+ messagesDispatcher: messagesDispatcher
1981
+ })[0];
1982
+ var sendVoiceMessage = useSendVoiceMessageCallback({
1983
+ currentGroupChannel: currentGroupChannel,
1984
+ onBeforeSendVoiceMessage: onBeforeSendVoiceMessage
1985
+ }, {
1986
+ logger: logger,
1987
+ pubSub: pubSub,
1988
+ scrollRef: scrollRef,
1989
+ messagesDispatcher: messagesDispatcher
1990
+ })[0];
1991
+ var sendMultipleFilesMessage = useSendMultipleFilesMessage({
1992
+ currentChannel: currentGroupChannel,
1993
+ onBeforeSendMultipleFilesMessage: onBeforeSendMultipleFilesMessage,
1994
+ publishingModules: [PublishingModuleType.CHANNEL]
1995
+ }, {
1996
+ logger: logger,
1997
+ pubSub: pubSub,
1998
+ scrollRef: scrollRef
1999
+ })[0];
2000
+ return /*#__PURE__*/React__default.createElement(ChannelContext.Provider, {
2001
+ value: {
2002
+ // props
2003
+ channelUrl: channelUrl,
2004
+ isReactionEnabled: usingReaction,
2005
+ isMessageGroupingEnabled: isMessageGroupingEnabled,
2006
+ isMultipleFilesMessageEnabled: isMultipleFilesMessageEnabled,
2007
+ showSearchIcon: showSearchIcon !== null && showSearchIcon !== void 0 ? showSearchIcon : globalConfigs.showSearchIcon,
2008
+ highlightedMessage: highlightedMessage,
2009
+ startingPoint: startingPoint,
2010
+ onBeforeSendUserMessage: onBeforeSendUserMessage,
2011
+ onBeforeSendFileMessage: onBeforeSendFileMessage,
2012
+ onBeforeUpdateUserMessage: onBeforeUpdateUserMessage,
2013
+ onChatHeaderActionClick: onChatHeaderActionClick,
2014
+ onSearchClick: onSearchClick,
2015
+ onBackClick: onBackClick,
2016
+ replyType: replyType,
2017
+ threadReplySelectType: (_e = threadReplySelectType !== null && threadReplySelectType !== void 0 ? threadReplySelectType : getCaseResolvedThreadReplySelectType(groupChannel.threadReplySelectType).upperCase) !== null && _e !== void 0 ? _e : ThreadReplySelectType.THREAD,
2018
+ queries: queries,
2019
+ filterMessageList: filterMessageList,
2020
+ disableMarkAsRead: disableMarkAsRead,
2021
+ onReplyInThread: onReplyInThread,
2022
+ onQuoteMessageClick: onQuoteMessageClick,
2023
+ onMessageAnimated: onMessageAnimated,
2024
+ onMessageHighlighted: onMessageHighlighted,
2025
+ // messagesStore
2026
+ allMessages: allMessages,
2027
+ localMessages: localMessages,
2028
+ loading: loading,
2029
+ initialized: initialized,
2030
+ unreadSince: unreadSince,
2031
+ isInvalid: isInvalid,
2032
+ currentGroupChannel: currentGroupChannel,
2033
+ hasMorePrev: hasMorePrev,
2034
+ hasMoreNext: hasMoreNext,
2035
+ oldestMessageTimeStamp: oldestMessageTimeStamp,
2036
+ latestMessageTimeStamp: latestMessageTimeStamp,
2037
+ emojiContainer: emojiContainer,
2038
+ readStatus: readStatus,
2039
+ // utils
2040
+ scrollToMessage: scrollToMessage,
2041
+ quoteMessage: quoteMessage,
2042
+ setQuoteMessage: setQuoteMessage,
2043
+ deleteMessage: deleteMessage,
2044
+ updateMessage: updateMessage,
2045
+ resendMessage: resendMessage,
2046
+ messageInputRef: messageInputRef,
2047
+ sendMessage: sendMessage,
2048
+ sendFileMessage: sendFileMessage,
2049
+ sendVoiceMessage: sendVoiceMessage,
2050
+ sendMultipleFilesMessage: sendMultipleFilesMessage,
2051
+ initialTimeStamp: initialTimeStamp,
2052
+ messageActionTypes: channelActions,
2053
+ messagesDispatcher: messagesDispatcher,
2054
+ setInitialTimeStamp: setInitialTimeStamp,
2055
+ setAnimatedMessageId: setAnimatedMessageId,
2056
+ setHighLightedMessageId: setHighLightedMessageId,
2057
+ animatedMessageId: animatedMessageId,
2058
+ highLightedMessageId: highLightedMessageId,
2059
+ nicknamesMap: nicknamesMap,
2060
+ emojiAllMap: emojiAllMap,
2061
+ onScrollCallback: onScrollCallback,
2062
+ onScrollDownCallback: onScrollDownCallback,
2063
+ scrollRef: scrollRef,
2064
+ scrollBehavior: scrollBehavior,
2065
+ toggleReaction: toggleReaction,
2066
+ isScrolled: isScrolled,
2067
+ setIsScrolled: setIsScrolled
2068
+ }
2069
+ }, /*#__PURE__*/React__default.createElement(UserProfileProvider, {
2070
+ disableUserProfile: (_f = props === null || props === void 0 ? void 0 : props.disableUserProfile) !== null && _f !== void 0 ? _f : config === null || config === void 0 ? void 0 : config.disableUserProfile,
2071
+ renderUserProfile: props === null || props === void 0 ? void 0 : props.renderUserProfile,
2072
+ onUserProfileMessage: onUserProfileMessage
2073
+ }, children));
2074
+ };
2075
+ var useChannelContext = function () {
2076
+ return React__default.useContext(ChannelContext);
2077
+ };
2078
+
2079
+ export { ChannelProvider as C, getIsReactionEnabled as g, useChannelContext as u };
2080
+ //# sourceMappingURL=ChannelProvider-7f6fd1f8.js.map