@sendbird/uikit-react 3.5.0-rc.1 → 3.5.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 (936) hide show
  1. package/App.js +312 -235
  2. package/App.js.map +1 -1
  3. package/CHANGELOG.md +544 -0
  4. package/Channel/components/ChannelHeader.js +46 -41
  5. package/Channel/components/ChannelHeader.js.map +1 -1
  6. package/Channel/components/ChannelUI.js +104 -131
  7. package/Channel/components/ChannelUI.js.map +1 -1
  8. package/Channel/components/FileViewer.js +56 -52
  9. package/Channel/components/FileViewer.js.map +1 -1
  10. package/Channel/components/FrozenNotification.js +12 -7
  11. package/Channel/components/FrozenNotification.js.map +1 -1
  12. package/Channel/components/Message.js +240 -230
  13. package/Channel/components/Message.js.map +1 -1
  14. package/Channel/components/MessageInput.js +152 -129
  15. package/Channel/components/MessageInput.js.map +1 -1
  16. package/Channel/components/MessageList.js +260 -175
  17. package/Channel/components/MessageList.js.map +1 -1
  18. package/Channel/components/RemoveMessageModal.js +34 -30
  19. package/Channel/components/RemoveMessageModal.js.map +1 -1
  20. package/Channel/components/SuggestedMentionList.js +139 -193
  21. package/Channel/components/SuggestedMentionList.js.map +1 -1
  22. package/Channel/components/TypingIndicator.js +44 -61
  23. package/Channel/components/TypingIndicator.js.map +1 -1
  24. package/Channel/components/UnreadCount.js +18 -20
  25. package/Channel/components/UnreadCount.js.map +1 -1
  26. package/Channel/context.js +12 -19
  27. package/Channel/context.js.map +1 -1
  28. package/Channel.js +69 -44
  29. package/Channel.js.map +1 -1
  30. package/ChannelList/components/AddChannel.js +29 -30
  31. package/ChannelList/components/AddChannel.js.map +1 -1
  32. package/ChannelList/components/ChannelListHeader.js +32 -28
  33. package/ChannelList/components/ChannelListHeader.js.map +1 -1
  34. package/ChannelList/components/ChannelListUI.js +101 -142
  35. package/ChannelList/components/ChannelListUI.js.map +1 -1
  36. package/ChannelList/components/ChannelPreview.js +72 -82
  37. package/ChannelList/components/ChannelPreview.js.map +1 -1
  38. package/ChannelList/components/ChannelPreviewAction.js +36 -36
  39. package/ChannelList/components/ChannelPreviewAction.js.map +1 -1
  40. package/ChannelList/context.js +7 -8
  41. package/ChannelList/context.js.map +1 -1
  42. package/ChannelList.js +32 -31
  43. package/ChannelList.js.map +1 -1
  44. package/{ChannelListProvider-1d36e2e9.js → ChannelListProvider-4cf5c0f5.js} +233 -285
  45. package/ChannelListProvider-4cf5c0f5.js.map +1 -0
  46. package/{ChannelProvider-289cd35f.js → ChannelProvider-6e8e99df.js} +659 -726
  47. package/ChannelProvider-6e8e99df.js.map +1 -0
  48. package/ChannelSettings/components/ChannelProfile.js +33 -46
  49. package/ChannelSettings/components/ChannelProfile.js.map +1 -1
  50. package/ChannelSettings/components/ChannelSettingsUI.js +45 -48
  51. package/ChannelSettings/components/ChannelSettingsUI.js.map +1 -1
  52. package/ChannelSettings/components/EditDetailsModal.js +47 -58
  53. package/ChannelSettings/components/EditDetailsModal.js.map +1 -1
  54. package/ChannelSettings/components/LeaveChannel.js +40 -46
  55. package/ChannelSettings/components/LeaveChannel.js.map +1 -1
  56. package/ChannelSettings/components/ModerationPanel.js +522 -605
  57. package/ChannelSettings/components/ModerationPanel.js.map +1 -1
  58. package/ChannelSettings/components/UserListItem.js +71 -72
  59. package/ChannelSettings/components/UserListItem.js.map +1 -1
  60. package/ChannelSettings/components/UserPanel.js +29 -32
  61. package/ChannelSettings/components/UserPanel.js.map +1 -1
  62. package/ChannelSettings/context.js +53 -57
  63. package/ChannelSettings/context.js.map +1 -1
  64. package/ChannelSettings.js +20 -20
  65. package/ChannelSettings.js.map +1 -1
  66. package/CreateChannel/components/CreateChannelUI.js +24 -24
  67. package/CreateChannel/components/CreateChannelUI.js.map +1 -1
  68. package/CreateChannel/components/InviteUsers.js +102 -124
  69. package/CreateChannel/components/InviteUsers.js.map +1 -1
  70. package/CreateChannel/components/SelectChannelType.js +41 -42
  71. package/CreateChannel/components/SelectChannelType.js.map +1 -1
  72. package/CreateChannel/context.js +4 -4
  73. package/CreateChannel.js +22 -21
  74. package/CreateChannel.js.map +1 -1
  75. package/CreateChannelProvider-34603fa5.js +44 -0
  76. package/CreateChannelProvider-34603fa5.js.map +1 -0
  77. package/CreateOpenChannel/components/CreateOpenChannelUI.js +33 -43
  78. package/CreateOpenChannel/components/CreateOpenChannelUI.js.map +1 -1
  79. package/CreateOpenChannel/context.js +33 -33
  80. package/CreateOpenChannel/context.js.map +1 -1
  81. package/CreateOpenChannel.js +18 -17
  82. package/CreateOpenChannel.js.map +1 -1
  83. package/EditUserProfile/components/EditUserProfileUI.js +12 -13
  84. package/EditUserProfile/components/EditUserProfileUI.js.map +1 -1
  85. package/EditUserProfile/context.js +0 -2
  86. package/EditUserProfile/context.js.map +1 -1
  87. package/EditUserProfile.js +18 -17
  88. package/EditUserProfile.js.map +1 -1
  89. package/LocalizationContext-04c0c9dc.js +20 -0
  90. package/{LocalizationContext-289c1917.js.map → LocalizationContext-04c0c9dc.js.map} +1 -1
  91. package/MediaQueryContext-ff9dca2b.js +87 -0
  92. package/MediaQueryContext-ff9dca2b.js.map +1 -0
  93. package/MemberList-9bf26111.js +403 -0
  94. package/MemberList-9bf26111.js.map +1 -0
  95. package/Message/context.js +31 -0
  96. package/Message/context.js.map +1 -0
  97. package/MessageSearch/components/MessageSearchUI.js +62 -71
  98. package/MessageSearch/components/MessageSearchUI.js.map +1 -1
  99. package/MessageSearch/context.js +201 -224
  100. package/MessageSearch/context.js.map +1 -1
  101. package/MessageSearch.js +46 -58
  102. package/MessageSearch.js.map +1 -1
  103. package/OpenChannel/components/FrozenChannelNotification.js +8 -6
  104. package/OpenChannel/components/FrozenChannelNotification.js.map +1 -1
  105. package/OpenChannel/components/OpenChannelHeader.js +27 -25
  106. package/OpenChannel/components/OpenChannelHeader.js.map +1 -1
  107. package/OpenChannel/components/OpenChannelInput.js +50 -35
  108. package/OpenChannel/components/OpenChannelInput.js.map +1 -1
  109. package/OpenChannel/components/OpenChannelMessage.js +174 -191
  110. package/OpenChannel/components/OpenChannelMessage.js.map +1 -1
  111. package/OpenChannel/components/OpenChannelMessageList.js +72 -92
  112. package/OpenChannel/components/OpenChannelMessageList.js.map +1 -1
  113. package/OpenChannel/components/OpenChannelUI.js +52 -49
  114. package/OpenChannel/components/OpenChannelUI.js.map +1 -1
  115. package/OpenChannel/context.js +8 -9
  116. package/OpenChannel/context.js.map +1 -1
  117. package/OpenChannel.js +36 -30
  118. package/OpenChannel.js.map +1 -1
  119. package/OpenChannelList/components/OpenChannelListUI.js +61 -76
  120. package/OpenChannelList/components/OpenChannelListUI.js.map +1 -1
  121. package/OpenChannelList/components/OpenChannelPreview.js +21 -22
  122. package/OpenChannelList/components/OpenChannelPreview.js.map +1 -1
  123. package/OpenChannelList/context.js +3 -4
  124. package/OpenChannelList/context.js.map +1 -1
  125. package/OpenChannelList.js +26 -24
  126. package/OpenChannelList.js.map +1 -1
  127. package/OpenChannelListProvider-d7372692.js +429 -0
  128. package/OpenChannelListProvider-d7372692.js.map +1 -0
  129. package/OpenChannelProvider-24cd68b9.js +1885 -0
  130. package/OpenChannelProvider-24cd68b9.js.map +1 -0
  131. package/OpenChannelSettings/components/EditDetailsModal.js +47 -56
  132. package/OpenChannelSettings/components/EditDetailsModal.js.map +1 -1
  133. package/OpenChannelSettings/components/OpenChannelProfile.js +26 -31
  134. package/OpenChannelSettings/components/OpenChannelProfile.js.map +1 -1
  135. package/OpenChannelSettings/components/OpenChannelSettingsUI.js +45 -43
  136. package/OpenChannelSettings/components/OpenChannelSettingsUI.js.map +1 -1
  137. package/OpenChannelSettings/components/OperatorUI.js +516 -586
  138. package/OpenChannelSettings/components/OperatorUI.js.map +1 -1
  139. package/OpenChannelSettings/components/ParticipantUI.js +15 -16
  140. package/OpenChannelSettings/components/ParticipantUI.js.map +1 -1
  141. package/OpenChannelSettings/context.js +56 -69
  142. package/OpenChannelSettings/context.js.map +1 -1
  143. package/OpenChannelSettings.js +19 -20
  144. package/OpenChannelSettings.js.map +1 -1
  145. package/README.md +62 -13
  146. package/RemoveMessageModal-94e2bf9e.js +36 -0
  147. package/RemoveMessageModal-94e2bf9e.js.map +1 -0
  148. package/SendbirdProvider.js +749 -408
  149. package/SendbirdProvider.js.map +1 -1
  150. package/Thread/components/ParentMessageInfo.js +238 -217
  151. package/Thread/components/ParentMessageInfo.js.map +1 -1
  152. package/Thread/components/ParentMessageInfoItem.js +112 -89
  153. package/Thread/components/ParentMessageInfoItem.js.map +1 -1
  154. package/Thread/components/ThreadHeader.js +22 -23
  155. package/Thread/components/ThreadHeader.js.map +1 -1
  156. package/Thread/components/ThreadList.js +108 -83
  157. package/Thread/components/ThreadList.js.map +1 -1
  158. package/Thread/components/ThreadListItem.js +306 -276
  159. package/Thread/components/ThreadListItem.js.map +1 -1
  160. package/Thread/components/ThreadMessageInput.js +146 -113
  161. package/Thread/components/ThreadMessageInput.js.map +1 -1
  162. package/Thread/components/ThreadUI.js +169 -138
  163. package/Thread/components/ThreadUI.js.map +1 -1
  164. package/Thread/context/types.js +9 -14
  165. package/Thread/context/types.js.map +1 -1
  166. package/Thread/context.js +8 -8
  167. package/Thread.js +87 -57
  168. package/Thread.js.map +1 -1
  169. package/ThreadProvider-203b94f3.js +1695 -0
  170. package/ThreadProvider-203b94f3.js.map +1 -0
  171. package/{UserProfileContext-e3530842.js → UserProfileContext-c776d522.js} +1 -4
  172. package/{UserProfileContext-e3530842.js.map → UserProfileContext-c776d522.js.map} +1 -1
  173. package/VoiceMessageInputWrapper-77d8f487.js +170 -0
  174. package/VoiceMessageInputWrapper-77d8f487.js.map +1 -0
  175. package/VoicePlayer/context.js +7 -0
  176. package/{NotificationChannel → VoicePlayer}/context.js.map +1 -1
  177. package/VoicePlayer/useVoicePlayer.js +84 -0
  178. package/VoicePlayer/useVoicePlayer.js.map +1 -0
  179. package/VoiceRecorder/context.js +156 -0
  180. package/VoiceRecorder/context.js.map +1 -0
  181. package/VoiceRecorder/useVoiceRecorder.js +121 -0
  182. package/VoiceRecorder/useVoiceRecorder.js.map +1 -0
  183. package/WebAudioUtils-62e6d3a7.js +123 -0
  184. package/WebAudioUtils-62e6d3a7.js.map +1 -0
  185. package/{_rollupPluginBabelHelpers-519f674b.js → _rollupPluginBabelHelpers-fb0e05a4.js} +17 -11
  186. package/_rollupPluginBabelHelpers-fb0e05a4.js.map +1 -0
  187. package/actionTypes-1db5749d.js +8 -0
  188. package/actionTypes-1db5749d.js.map +1 -0
  189. package/cjs/App.js +312 -235
  190. package/cjs/App.js.map +1 -1
  191. package/cjs/Channel/components/ChannelHeader.js +46 -41
  192. package/cjs/Channel/components/ChannelHeader.js.map +1 -1
  193. package/cjs/Channel/components/ChannelUI.js +102 -129
  194. package/cjs/Channel/components/ChannelUI.js.map +1 -1
  195. package/cjs/Channel/components/FileViewer.js +56 -52
  196. package/cjs/Channel/components/FileViewer.js.map +1 -1
  197. package/cjs/Channel/components/FrozenNotification.js +12 -7
  198. package/cjs/Channel/components/FrozenNotification.js.map +1 -1
  199. package/cjs/Channel/components/Message.js +243 -233
  200. package/cjs/Channel/components/Message.js.map +1 -1
  201. package/cjs/Channel/components/MessageInput.js +151 -128
  202. package/cjs/Channel/components/MessageInput.js.map +1 -1
  203. package/cjs/Channel/components/MessageList.js +260 -175
  204. package/cjs/Channel/components/MessageList.js.map +1 -1
  205. package/cjs/Channel/components/RemoveMessageModal.js +34 -30
  206. package/cjs/Channel/components/RemoveMessageModal.js.map +1 -1
  207. package/cjs/Channel/components/SuggestedMentionList.js +139 -193
  208. package/cjs/Channel/components/SuggestedMentionList.js.map +1 -1
  209. package/cjs/Channel/components/TypingIndicator.js +44 -61
  210. package/cjs/Channel/components/TypingIndicator.js.map +1 -1
  211. package/cjs/Channel/components/UnreadCount.js +18 -20
  212. package/cjs/Channel/components/UnreadCount.js.map +1 -1
  213. package/cjs/Channel/context.js +12 -23
  214. package/cjs/Channel/context.js.map +1 -1
  215. package/cjs/Channel.js +69 -44
  216. package/cjs/Channel.js.map +1 -1
  217. package/cjs/ChannelList/components/AddChannel.js +29 -30
  218. package/cjs/ChannelList/components/AddChannel.js.map +1 -1
  219. package/cjs/ChannelList/components/ChannelListHeader.js +32 -28
  220. package/cjs/ChannelList/components/ChannelListHeader.js.map +1 -1
  221. package/cjs/ChannelList/components/ChannelListUI.js +100 -141
  222. package/cjs/ChannelList/components/ChannelListUI.js.map +1 -1
  223. package/cjs/ChannelList/components/ChannelPreview.js +72 -82
  224. package/cjs/ChannelList/components/ChannelPreview.js.map +1 -1
  225. package/cjs/ChannelList/components/ChannelPreviewAction.js +36 -36
  226. package/cjs/ChannelList/components/ChannelPreviewAction.js.map +1 -1
  227. package/cjs/ChannelList/context.js +7 -8
  228. package/cjs/ChannelList/context.js.map +1 -1
  229. package/cjs/ChannelList.js +32 -31
  230. package/cjs/ChannelList.js.map +1 -1
  231. package/cjs/{ChannelListProvider-0de52d2b.js → ChannelListProvider-e0ce316a.js} +232 -284
  232. package/cjs/ChannelListProvider-e0ce316a.js.map +1 -0
  233. package/cjs/{ChannelProvider-fc58e60e.js → ChannelProvider-0df75472.js} +657 -724
  234. package/cjs/ChannelProvider-0df75472.js.map +1 -0
  235. package/cjs/ChannelSettings/components/ChannelProfile.js +33 -46
  236. package/cjs/ChannelSettings/components/ChannelProfile.js.map +1 -1
  237. package/cjs/ChannelSettings/components/ChannelSettingsUI.js +45 -48
  238. package/cjs/ChannelSettings/components/ChannelSettingsUI.js.map +1 -1
  239. package/cjs/ChannelSettings/components/EditDetailsModal.js +47 -58
  240. package/cjs/ChannelSettings/components/EditDetailsModal.js.map +1 -1
  241. package/cjs/ChannelSettings/components/LeaveChannel.js +40 -46
  242. package/cjs/ChannelSettings/components/LeaveChannel.js.map +1 -1
  243. package/cjs/ChannelSettings/components/ModerationPanel.js +522 -605
  244. package/cjs/ChannelSettings/components/ModerationPanel.js.map +1 -1
  245. package/cjs/ChannelSettings/components/UserListItem.js +71 -72
  246. package/cjs/ChannelSettings/components/UserListItem.js.map +1 -1
  247. package/cjs/ChannelSettings/components/UserPanel.js +29 -32
  248. package/cjs/ChannelSettings/components/UserPanel.js.map +1 -1
  249. package/cjs/ChannelSettings/context.js +55 -59
  250. package/cjs/ChannelSettings/context.js.map +1 -1
  251. package/cjs/ChannelSettings.js +20 -20
  252. package/cjs/ChannelSettings.js.map +1 -1
  253. package/cjs/CreateChannel/components/CreateChannelUI.js +24 -24
  254. package/cjs/CreateChannel/components/CreateChannelUI.js.map +1 -1
  255. package/cjs/CreateChannel/components/InviteUsers.js +102 -124
  256. package/cjs/CreateChannel/components/InviteUsers.js.map +1 -1
  257. package/cjs/CreateChannel/components/SelectChannelType.js +41 -42
  258. package/cjs/CreateChannel/components/SelectChannelType.js.map +1 -1
  259. package/cjs/CreateChannel/context.js +4 -4
  260. package/cjs/CreateChannel.js +22 -21
  261. package/cjs/CreateChannel.js.map +1 -1
  262. package/cjs/CreateChannelProvider-c0fca0a5.js +52 -0
  263. package/cjs/CreateChannelProvider-c0fca0a5.js.map +1 -0
  264. package/cjs/CreateOpenChannel/components/CreateOpenChannelUI.js +33 -43
  265. package/cjs/CreateOpenChannel/components/CreateOpenChannelUI.js.map +1 -1
  266. package/cjs/CreateOpenChannel/context.js +33 -33
  267. package/cjs/CreateOpenChannel/context.js.map +1 -1
  268. package/cjs/CreateOpenChannel.js +18 -17
  269. package/cjs/CreateOpenChannel.js.map +1 -1
  270. package/cjs/EditUserProfile/components/EditUserProfileUI.js +12 -13
  271. package/cjs/EditUserProfile/components/EditUserProfileUI.js.map +1 -1
  272. package/cjs/EditUserProfile/context.js +0 -2
  273. package/cjs/EditUserProfile/context.js.map +1 -1
  274. package/cjs/EditUserProfile.js +18 -17
  275. package/cjs/EditUserProfile.js.map +1 -1
  276. package/cjs/{LocalizationContext-bddc5c2b.js → LocalizationContext-0e429c3d.js} +9 -11
  277. package/cjs/{LocalizationContext-bddc5c2b.js.map → LocalizationContext-0e429c3d.js.map} +1 -1
  278. package/cjs/MediaQueryContext-33fc3b17.js +94 -0
  279. package/cjs/MediaQueryContext-33fc3b17.js.map +1 -0
  280. package/cjs/MemberList-a45a51c4.js +409 -0
  281. package/cjs/MemberList-a45a51c4.js.map +1 -0
  282. package/cjs/Message/context.js +40 -0
  283. package/cjs/Message/context.js.map +1 -0
  284. package/cjs/MessageSearch/components/MessageSearchUI.js +61 -70
  285. package/cjs/MessageSearch/components/MessageSearchUI.js.map +1 -1
  286. package/cjs/MessageSearch/context.js +201 -224
  287. package/cjs/MessageSearch/context.js.map +1 -1
  288. package/cjs/MessageSearch.js +46 -58
  289. package/cjs/MessageSearch.js.map +1 -1
  290. package/cjs/OpenChannel/components/FrozenChannelNotification.js +8 -6
  291. package/cjs/OpenChannel/components/FrozenChannelNotification.js.map +1 -1
  292. package/cjs/OpenChannel/components/OpenChannelHeader.js +27 -25
  293. package/cjs/OpenChannel/components/OpenChannelHeader.js.map +1 -1
  294. package/cjs/OpenChannel/components/OpenChannelInput.js +50 -35
  295. package/cjs/OpenChannel/components/OpenChannelInput.js.map +1 -1
  296. package/cjs/OpenChannel/components/OpenChannelMessage.js +174 -191
  297. package/cjs/OpenChannel/components/OpenChannelMessage.js.map +1 -1
  298. package/cjs/OpenChannel/components/OpenChannelMessageList.js +72 -92
  299. package/cjs/OpenChannel/components/OpenChannelMessageList.js.map +1 -1
  300. package/cjs/OpenChannel/components/OpenChannelUI.js +52 -49
  301. package/cjs/OpenChannel/components/OpenChannelUI.js.map +1 -1
  302. package/cjs/OpenChannel/context.js +8 -9
  303. package/cjs/OpenChannel/context.js.map +1 -1
  304. package/cjs/OpenChannel.js +36 -30
  305. package/cjs/OpenChannel.js.map +1 -1
  306. package/cjs/OpenChannelList/components/OpenChannelListUI.js +61 -76
  307. package/cjs/OpenChannelList/components/OpenChannelListUI.js.map +1 -1
  308. package/cjs/OpenChannelList/components/OpenChannelPreview.js +21 -22
  309. package/cjs/OpenChannelList/components/OpenChannelPreview.js.map +1 -1
  310. package/cjs/OpenChannelList/context.js +3 -4
  311. package/cjs/OpenChannelList/context.js.map +1 -1
  312. package/cjs/OpenChannelList.js +26 -24
  313. package/cjs/OpenChannelList.js.map +1 -1
  314. package/cjs/OpenChannelListProvider-fc8b53ee.js +439 -0
  315. package/cjs/OpenChannelListProvider-fc8b53ee.js.map +1 -0
  316. package/cjs/OpenChannelProvider-217a8ac2.js +1894 -0
  317. package/cjs/OpenChannelProvider-217a8ac2.js.map +1 -0
  318. package/cjs/OpenChannelSettings/components/EditDetailsModal.js +47 -56
  319. package/cjs/OpenChannelSettings/components/EditDetailsModal.js.map +1 -1
  320. package/cjs/OpenChannelSettings/components/OpenChannelProfile.js +26 -31
  321. package/cjs/OpenChannelSettings/components/OpenChannelProfile.js.map +1 -1
  322. package/cjs/OpenChannelSettings/components/OpenChannelSettingsUI.js +45 -43
  323. package/cjs/OpenChannelSettings/components/OpenChannelSettingsUI.js.map +1 -1
  324. package/cjs/OpenChannelSettings/components/OperatorUI.js +516 -586
  325. package/cjs/OpenChannelSettings/components/OperatorUI.js.map +1 -1
  326. package/cjs/OpenChannelSettings/components/ParticipantUI.js +15 -16
  327. package/cjs/OpenChannelSettings/components/ParticipantUI.js.map +1 -1
  328. package/cjs/OpenChannelSettings/context.js +57 -70
  329. package/cjs/OpenChannelSettings/context.js.map +1 -1
  330. package/cjs/OpenChannelSettings.js +19 -20
  331. package/cjs/OpenChannelSettings.js.map +1 -1
  332. package/cjs/{RemoveMessageModal-9169766a.js → RemoveMessageModal-5903f232.js} +19 -14
  333. package/cjs/RemoveMessageModal-5903f232.js.map +1 -0
  334. package/cjs/SendbirdProvider.js +748 -408
  335. package/cjs/SendbirdProvider.js.map +1 -1
  336. package/cjs/Thread/components/ParentMessageInfo.js +237 -216
  337. package/cjs/Thread/components/ParentMessageInfo.js.map +1 -1
  338. package/cjs/Thread/components/ParentMessageInfoItem.js +111 -88
  339. package/cjs/Thread/components/ParentMessageInfoItem.js.map +1 -1
  340. package/cjs/Thread/components/ThreadHeader.js +22 -23
  341. package/cjs/Thread/components/ThreadHeader.js.map +1 -1
  342. package/cjs/Thread/components/ThreadList.js +108 -83
  343. package/cjs/Thread/components/ThreadList.js.map +1 -1
  344. package/cjs/Thread/components/ThreadListItem.js +305 -275
  345. package/cjs/Thread/components/ThreadListItem.js.map +1 -1
  346. package/cjs/Thread/components/ThreadMessageInput.js +146 -113
  347. package/cjs/Thread/components/ThreadMessageInput.js.map +1 -1
  348. package/cjs/Thread/components/ThreadUI.js +170 -139
  349. package/cjs/Thread/components/ThreadUI.js.map +1 -1
  350. package/cjs/Thread/context/types.js +13 -14
  351. package/cjs/Thread/context/types.js.map +1 -1
  352. package/cjs/Thread/context.js +8 -8
  353. package/cjs/Thread.js +87 -57
  354. package/cjs/Thread.js.map +1 -1
  355. package/cjs/ThreadProvider-8ee179c2.js +1704 -0
  356. package/cjs/ThreadProvider-8ee179c2.js.map +1 -0
  357. package/cjs/{UserProfileContext-8d0dee57.js → UserProfileContext-87580795.js} +1 -4
  358. package/cjs/{UserProfileContext-8d0dee57.js.map → UserProfileContext-87580795.js.map} +1 -1
  359. package/cjs/VoiceMessageInputWrapper-4fdc8ef1.js +176 -0
  360. package/cjs/VoiceMessageInputWrapper-4fdc8ef1.js.map +1 -0
  361. package/cjs/VoicePlayer/context.js +17 -0
  362. package/cjs/{NotificationChannel → VoicePlayer}/context.js.map +1 -1
  363. package/cjs/VoicePlayer/useVoicePlayer.js +88 -0
  364. package/cjs/VoicePlayer/useVoicePlayer.js.map +1 -0
  365. package/cjs/VoiceRecorder/context.js +166 -0
  366. package/cjs/VoiceRecorder/context.js.map +1 -0
  367. package/cjs/VoiceRecorder/useVoiceRecorder.js +126 -0
  368. package/cjs/VoiceRecorder/useVoiceRecorder.js.map +1 -0
  369. package/cjs/WebAudioUtils-e226789c.js +126 -0
  370. package/cjs/WebAudioUtils-e226789c.js.map +1 -0
  371. package/cjs/{_rollupPluginBabelHelpers-fed1e122.js → _rollupPluginBabelHelpers-c89f311a.js} +17 -10
  372. package/cjs/_rollupPluginBabelHelpers-c89f311a.js.map +1 -0
  373. package/cjs/actionTypes-0fa2943d.js +10 -0
  374. package/cjs/actionTypes-0fa2943d.js.map +1 -0
  375. package/cjs/{color-f47044b3.js → color-bada0fc7.js} +13 -21
  376. package/cjs/color-bada0fc7.js.map +1 -0
  377. package/cjs/{compareIds-4124b297.js → compareIds-ccccfe86.js} +5 -6
  378. package/cjs/compareIds-ccccfe86.js.map +1 -0
  379. package/cjs/const-a85f3364.js +20 -0
  380. package/cjs/const-a85f3364.js.map +1 -0
  381. package/cjs/{const-fd64914b.js → const-d8cece19.js} +4 -4
  382. package/cjs/const-d8cece19.js.map +1 -0
  383. package/cjs/consts-1c3020ad.js +6 -0
  384. package/cjs/consts-1c3020ad.js.map +1 -0
  385. package/cjs/consts-1d94dc61.js +6 -0
  386. package/cjs/consts-1d94dc61.js.map +1 -0
  387. package/cjs/consts-5e0f96b3.js +41 -0
  388. package/cjs/consts-5e0f96b3.js.map +1 -0
  389. package/cjs/consts-740f60b8.js +6 -0
  390. package/cjs/consts-740f60b8.js.map +1 -0
  391. package/cjs/{context-7a0e057b.js → context-8e7e8457.js} +6 -5
  392. package/cjs/{context-7a0e057b.js.map → context-8e7e8457.js.map} +1 -1
  393. package/cjs/dist/index.css +1640 -1187
  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/{index-d14a43c4.js → index-016f7106.js} +1 -1
  398. package/cjs/{index-d14a43c4.js.map → index-016f7106.js.map} +1 -1
  399. package/cjs/{index-9ca07037.js → index-1613ae03.js} +29 -37
  400. package/cjs/index-1613ae03.js.map +1 -0
  401. package/cjs/index-2be14d85.js +57 -0
  402. package/cjs/index-2be14d85.js.map +1 -0
  403. package/cjs/index-3b30939e.js +79 -0
  404. package/cjs/index-3b30939e.js.map +1 -0
  405. package/cjs/index-5231fde8.js +585 -0
  406. package/cjs/index-5231fde8.js.map +1 -0
  407. package/cjs/index-648c06ed.js +330 -0
  408. package/cjs/index-648c06ed.js.map +1 -0
  409. package/cjs/{index-5d5497c2.js → index-6cb0d040.js} +11 -25
  410. package/cjs/index-6cb0d040.js.map +1 -0
  411. package/cjs/{index-c475c3c8.js → index-71fdaa1b.js} +55 -63
  412. package/cjs/index-71fdaa1b.js.map +1 -0
  413. package/cjs/{index-343cd84a.js → index-7d125728.js} +2 -2
  414. package/cjs/{index-343cd84a.js.map → index-7d125728.js.map} +1 -1
  415. package/cjs/{index-3a4f8219.js → index-7f6bbe0c.js} +42 -51
  416. package/cjs/index-7f6bbe0c.js.map +1 -0
  417. package/cjs/{index-8de8f28a.js → index-869e9a94.js} +2 -2
  418. package/cjs/{index-8de8f28a.js.map → index-869e9a94.js.map} +1 -1
  419. package/cjs/index-89d81dad.js +456 -0
  420. package/cjs/index-89d81dad.js.map +1 -0
  421. package/cjs/{index-abbc8024.js → index-8affdde5.js} +57 -3
  422. package/cjs/index-8affdde5.js.map +1 -0
  423. package/cjs/index-99f16473.js +202 -0
  424. package/cjs/index-99f16473.js.map +1 -0
  425. package/cjs/index-c9d348b6.js +367 -0
  426. package/cjs/index-c9d348b6.js.map +1 -0
  427. package/cjs/index-e8c0080f.js +161 -0
  428. package/cjs/index-e8c0080f.js.map +1 -0
  429. package/cjs/{index-c5cd589d.js → index-f570d25c.js} +1 -1
  430. package/cjs/index-f570d25c.js.map +1 -0
  431. package/cjs/index.js +84 -63
  432. package/cjs/index.js.map +1 -1
  433. package/cjs/index.module-0585715f.js +6 -0
  434. package/cjs/index.module-0585715f.js.map +1 -0
  435. package/cjs/lame.all.js +2541 -0
  436. package/cjs/lame.all.js.map +1 -0
  437. package/cjs/resolvedReplyType-67e78c63.js +32 -0
  438. package/cjs/resolvedReplyType-67e78c63.js.map +1 -0
  439. package/cjs/sendbirdSelectors.js +307 -417
  440. package/cjs/sendbirdSelectors.js.map +1 -1
  441. package/cjs/{stringSet-3e6167ef.js → stringSet-106da549.js} +112 -90
  442. package/cjs/stringSet-106da549.js.map +1 -0
  443. package/cjs/tokenize-2aa0f876.js +164 -0
  444. package/cjs/tokenize-2aa0f876.js.map +1 -0
  445. package/cjs/topics-b384e6b3.js +18 -0
  446. package/cjs/topics-b384e6b3.js.map +1 -0
  447. package/cjs/types-e0b77c8c.js +17 -0
  448. package/cjs/types-e0b77c8c.js.map +1 -0
  449. package/cjs/ui/Accordion.js +21 -24
  450. package/cjs/ui/Accordion.js.map +1 -1
  451. package/cjs/ui/AccordionGroup.js +10 -13
  452. package/cjs/ui/AccordionGroup.js.map +1 -1
  453. package/cjs/ui/AdminMessage.js +10 -13
  454. package/cjs/ui/AdminMessage.js.map +1 -1
  455. package/cjs/ui/Avatar.js +57 -79
  456. package/cjs/ui/Avatar.js.map +1 -1
  457. package/cjs/ui/Badge.js +16 -15
  458. package/cjs/ui/Badge.js.map +1 -1
  459. package/cjs/ui/BottomSheet.js +14 -12
  460. package/cjs/ui/BottomSheet.js.map +1 -1
  461. package/cjs/ui/Button.js +20 -35
  462. package/cjs/ui/Button.js.map +1 -1
  463. package/cjs/ui/ChannelAvatar.js +38 -41
  464. package/cjs/ui/ChannelAvatar.js.map +1 -1
  465. package/cjs/ui/Checkbox.js +11 -13
  466. package/cjs/ui/Checkbox.js.map +1 -1
  467. package/cjs/ui/ConnectionStatus.js +7 -5
  468. package/cjs/ui/ConnectionStatus.js.map +1 -1
  469. package/cjs/ui/ContextMenu.js +175 -199
  470. package/cjs/ui/ContextMenu.js.map +1 -1
  471. package/cjs/ui/DateSeparator.js +12 -14
  472. package/cjs/ui/DateSeparator.js.map +1 -1
  473. package/cjs/ui/EmojiReactions.js +299 -107
  474. package/cjs/ui/EmojiReactions.js.map +1 -1
  475. package/cjs/ui/FileMessageItemBody.js +22 -23
  476. package/cjs/ui/FileMessageItemBody.js.map +1 -1
  477. package/cjs/ui/FileViewer.js +36 -36
  478. package/cjs/ui/FileViewer.js.map +1 -1
  479. package/cjs/ui/Icon.js +447 -623
  480. package/cjs/ui/Icon.js.map +1 -1
  481. package/cjs/ui/IconButton.js +20 -31
  482. package/cjs/ui/IconButton.js.map +1 -1
  483. package/cjs/ui/ImageRenderer.js +34 -43
  484. package/cjs/ui/ImageRenderer.js.map +1 -1
  485. package/cjs/ui/Input.js +16 -16
  486. package/cjs/ui/Input.js.map +1 -1
  487. package/cjs/ui/Label.js +2 -2
  488. package/cjs/ui/LinkLabel.js +4 -3
  489. package/cjs/ui/LinkLabel.js.map +1 -1
  490. package/cjs/ui/Loader.js +10 -12
  491. package/cjs/ui/Loader.js.map +1 -1
  492. package/cjs/ui/MentionLabel.js +58 -65
  493. package/cjs/ui/MentionLabel.js.map +1 -1
  494. package/cjs/ui/MentionUserLabel.js +12 -10
  495. package/cjs/ui/MentionUserLabel.js.map +1 -1
  496. package/cjs/ui/MessageContent.js +212 -548
  497. package/cjs/ui/MessageContent.js.map +1 -1
  498. package/cjs/ui/MessageInput.js +392 -119
  499. package/cjs/ui/MessageInput.js.map +1 -1
  500. package/cjs/ui/MessageItemMenu.js +83 -83
  501. package/cjs/ui/MessageItemMenu.js.map +1 -1
  502. package/cjs/ui/MessageItemReactionMenu.js +58 -62
  503. package/cjs/ui/MessageItemReactionMenu.js.map +1 -1
  504. package/cjs/ui/MessageSearchFileItem.js +56 -51
  505. package/cjs/ui/MessageSearchFileItem.js.map +1 -1
  506. package/cjs/ui/MessageSearchItem.js +42 -41
  507. package/cjs/ui/MessageSearchItem.js.map +1 -1
  508. package/cjs/ui/MessageStatus.js +10 -11
  509. package/cjs/ui/MessageStatus.js.map +1 -1
  510. package/cjs/ui/Modal.js +52 -46
  511. package/cjs/ui/Modal.js.map +1 -1
  512. package/cjs/ui/MutedAvatarOverlay.js +10 -10
  513. package/cjs/ui/MutedAvatarOverlay.js.map +1 -1
  514. package/cjs/ui/OGMessageItemBody.js +67 -63
  515. package/cjs/ui/OGMessageItemBody.js.map +1 -1
  516. package/cjs/ui/OpenChannelAdminMessage.js +8 -7
  517. package/cjs/ui/OpenChannelAdminMessage.js.map +1 -1
  518. package/cjs/ui/OpenChannelAvatar.js +18 -17
  519. package/cjs/ui/OpenChannelAvatar.js.map +1 -1
  520. package/cjs/ui/OpenchannelConversationHeader.js +17 -13
  521. package/cjs/ui/OpenchannelConversationHeader.js.map +1 -1
  522. package/cjs/ui/OpenchannelFileMessage.js +140 -151
  523. package/cjs/ui/OpenchannelFileMessage.js.map +1 -1
  524. package/cjs/ui/OpenchannelOGMessage.js +204 -233
  525. package/cjs/ui/OpenchannelOGMessage.js.map +1 -1
  526. package/cjs/ui/OpenchannelThumbnailMessage.js +215 -222
  527. package/cjs/ui/OpenchannelThumbnailMessage.js.map +1 -1
  528. package/cjs/ui/OpenchannelUserMessage.js +168 -178
  529. package/cjs/ui/OpenchannelUserMessage.js.map +1 -1
  530. package/cjs/ui/PlaceHolder.js +5 -6
  531. package/cjs/ui/PlaceHolder.js.map +1 -1
  532. package/cjs/ui/PlaybackTime.js +35 -0
  533. package/cjs/ui/PlaybackTime.js.map +1 -0
  534. package/cjs/ui/ProgressBar.js +40 -0
  535. package/cjs/ui/ProgressBar.js.map +1 -0
  536. package/cjs/ui/QuoteMessage.js +50 -44
  537. package/cjs/ui/QuoteMessage.js.map +1 -1
  538. package/cjs/ui/QuoteMessageInput.js +31 -29
  539. package/cjs/ui/QuoteMessageInput.js.map +1 -1
  540. package/cjs/ui/ReactionBadge.js +13 -21
  541. package/cjs/ui/ReactionBadge.js.map +1 -1
  542. package/cjs/ui/ReactionButton.js +30 -27
  543. package/cjs/ui/ReactionButton.js.map +1 -1
  544. package/cjs/ui/SortByRow.js +14 -18
  545. package/cjs/ui/SortByRow.js.map +1 -1
  546. package/cjs/ui/TextButton.js +13 -21
  547. package/cjs/ui/TextButton.js.map +1 -1
  548. package/cjs/ui/TextMessageItemBody.js +41 -48
  549. package/cjs/ui/TextMessageItemBody.js.map +1 -1
  550. package/cjs/ui/ThreadReplies.js +25 -22
  551. package/cjs/ui/ThreadReplies.js.map +1 -1
  552. package/cjs/ui/ThumbnailMessageItemBody.js +36 -45
  553. package/cjs/ui/ThumbnailMessageItemBody.js.map +1 -1
  554. package/cjs/ui/Toggle.js +202 -0
  555. package/cjs/ui/Toggle.js.map +1 -0
  556. package/cjs/ui/Tooltip.js +8 -9
  557. package/cjs/ui/Tooltip.js.map +1 -1
  558. package/cjs/ui/TooltipWrapper.js +17 -20
  559. package/cjs/ui/TooltipWrapper.js.map +1 -1
  560. package/cjs/ui/UnknownMessageItemBody.js +21 -22
  561. package/cjs/ui/UnknownMessageItemBody.js.map +1 -1
  562. package/cjs/ui/UserListItem.js +76 -76
  563. package/cjs/ui/UserListItem.js.map +1 -1
  564. package/cjs/ui/UserProfile.js +31 -29
  565. package/cjs/ui/UserProfile.js.map +1 -1
  566. package/cjs/ui/VoiceMessageItemBody.js +119 -0
  567. package/cjs/ui/VoiceMessageItemBody.js.map +1 -0
  568. package/cjs/ui/VoiceMessgeInput.js +22 -0
  569. package/cjs/ui/VoiceMessgeInput.js.map +1 -0
  570. package/cjs/ui/Word.js +31 -39
  571. package/cjs/ui/Word.js.map +1 -1
  572. package/cjs/useDirtyGetMentions-b8ca5675.js +77 -0
  573. package/cjs/useDirtyGetMentions-b8ca5675.js.map +1 -0
  574. package/cjs/useLongPress-8037894e.js +87 -0
  575. package/cjs/useLongPress-8037894e.js.map +1 -0
  576. package/cjs/useSendbirdStateContext.js +2 -3
  577. package/cjs/useSendbirdStateContext.js.map +1 -1
  578. package/cjs/utils/message/getOutgoingMessageState.js +16 -21
  579. package/cjs/utils/message/getOutgoingMessageState.js.map +1 -1
  580. package/cjs/utils/message/isVoiceMessage.js +12 -0
  581. package/cjs/utils/message/isVoiceMessage.js.map +1 -0
  582. package/cjs/{utils-5f86a394.js → utils-01ff5332.js} +3 -7
  583. package/cjs/{utils-5f86a394.js.map → utils-01ff5332.js.map} +1 -1
  584. package/cjs/utils-2edcddc8.js +35 -0
  585. package/cjs/utils-2edcddc8.js.map +1 -0
  586. package/cjs/utils-5ac3db44.js +31 -0
  587. package/cjs/utils-5ac3db44.js.map +1 -0
  588. package/cjs/{utils-374d57b4.js → utils-ad7b5b82.js} +1 -1
  589. package/cjs/{utils-374d57b4.js.map → utils-ad7b5b82.js.map} +1 -1
  590. package/cjs/uuid-12b01f73.js +15 -0
  591. package/cjs/{uuid-2475ef6c.js.map → uuid-12b01f73.js.map} +1 -1
  592. package/cjs/withSendbird.js +5 -6
  593. package/cjs/withSendbird.js.map +1 -1
  594. package/{color-163ba24d.js → color-347926b6.js} +5 -14
  595. package/{color-163ba24d.js.map → color-347926b6.js.map} +1 -1
  596. package/{compareIds-ef41eb2c.js → compareIds-3a43c11b.js} +5 -6
  597. package/compareIds-3a43c11b.js.map +1 -0
  598. package/const-18dba7a4.js +13 -0
  599. package/const-18dba7a4.js.map +1 -0
  600. package/{const-76d87f47.js → const-c608f749.js} +4 -4
  601. package/const-c608f749.js.map +1 -0
  602. package/consts-6bca01c7.js +4 -0
  603. package/consts-6bca01c7.js.map +1 -0
  604. package/consts-7a169a0f.js +4 -0
  605. package/consts-7a169a0f.js.map +1 -0
  606. package/consts-c1baf70a.js +27 -0
  607. package/consts-c1baf70a.js.map +1 -0
  608. package/consts-fb4d475a.js +4 -0
  609. package/consts-fb4d475a.js.map +1 -0
  610. package/context-786ef1a2.js +13 -0
  611. package/{context-10475c77.js.map → context-786ef1a2.js.map} +1 -1
  612. package/dist/index.css +1640 -1187
  613. package/dist/index.css.map +1 -1
  614. package/handlers/OpenChannelHandler.js.map +1 -1
  615. package/handlers/SessionHandler.js.map +1 -1
  616. package/{index-12754b45.js → index-06b854f7.js} +55 -63
  617. package/index-06b854f7.js.map +1 -0
  618. package/index-2673effb.js +360 -0
  619. package/index-2673effb.js.map +1 -0
  620. package/{index-4ebfc7a7.js → index-319984d0.js} +1 -1
  621. package/{index-4ebfc7a7.js.map → index-319984d0.js.map} +1 -1
  622. package/{index-3c013a28.js → index-4455855e.js} +2 -2
  623. package/{index-3c013a28.js.map → index-4455855e.js.map} +1 -1
  624. package/index-6663ce18.js +450 -0
  625. package/index-6663ce18.js.map +1 -0
  626. package/{index-a02da5bd.js → index-6c252d25.js} +2 -2
  627. package/{index-a02da5bd.js.map → index-6c252d25.js.map} +1 -1
  628. package/index-71a20863.js +320 -0
  629. package/index-71a20863.js.map +1 -0
  630. package/index-7d71b26c.js +154 -0
  631. package/index-7d71b26c.js.map +1 -0
  632. package/{index-2f346069.js → index-9a4e0846.js} +1 -1
  633. package/index-9a4e0846.js.map +1 -0
  634. package/{index-232388fa.js → index-9cd77b08.js} +29 -37
  635. package/index-9cd77b08.js.map +1 -0
  636. package/index-c149ea48.js +187 -0
  637. package/index-c149ea48.js.map +1 -0
  638. package/index-cf3939c6.js +76 -0
  639. package/index-cf3939c6.js.map +1 -0
  640. package/index-cf859f03.js +540 -0
  641. package/index-cf859f03.js.map +1 -0
  642. package/{index-2784bdd8.js → index-e33f7f55.js} +11 -25
  643. package/index-e33f7f55.js.map +1 -0
  644. package/{index-aea7b7d6.js → index-eabd1e7e.js} +39 -48
  645. package/index-eabd1e7e.js.map +1 -0
  646. package/index-ebb62af1.js +51 -0
  647. package/index-ebb62af1.js.map +1 -0
  648. package/{index-751f97ce.js → index-edf844f0.js} +57 -4
  649. package/index-edf844f0.js.map +1 -0
  650. package/index.d.ts +176 -124
  651. package/index.js +84 -63
  652. package/index.js.map +1 -1
  653. package/index.module-6b7ed635.js +4 -0
  654. package/index.module-6b7ed635.js.map +1 -0
  655. package/lame.all.js +2537 -0
  656. package/lame.all.js.map +1 -0
  657. package/package.json +62 -41
  658. package/resolvedReplyType-8776d777.js +29 -0
  659. package/resolvedReplyType-8776d777.js.map +1 -0
  660. package/sendbirdSelectors.js +307 -417
  661. package/sendbirdSelectors.js.map +1 -1
  662. package/{stringSet-9ae71b7d.js → stringSet-e0ee1265.js} +112 -90
  663. package/stringSet-e0ee1265.js.map +1 -0
  664. package/tokenize-1b053c86.js +159 -0
  665. package/tokenize-1b053c86.js.map +1 -0
  666. package/topics-70f569e9.js +16 -0
  667. package/topics-70f569e9.js.map +1 -0
  668. package/types-77bbdda6.js +15 -0
  669. package/types-77bbdda6.js.map +1 -0
  670. package/ui/Accordion.js +21 -24
  671. package/ui/Accordion.js.map +1 -1
  672. package/ui/AccordionGroup.js +10 -13
  673. package/ui/AccordionGroup.js.map +1 -1
  674. package/ui/AdminMessage.js +10 -13
  675. package/ui/AdminMessage.js.map +1 -1
  676. package/ui/Avatar.js +57 -79
  677. package/ui/Avatar.js.map +1 -1
  678. package/ui/Badge.js +16 -15
  679. package/ui/Badge.js.map +1 -1
  680. package/ui/BottomSheet.js +14 -12
  681. package/ui/BottomSheet.js.map +1 -1
  682. package/ui/Button.js +20 -35
  683. package/ui/Button.js.map +1 -1
  684. package/ui/ChannelAvatar.js +38 -41
  685. package/ui/ChannelAvatar.js.map +1 -1
  686. package/ui/Checkbox.js +11 -13
  687. package/ui/Checkbox.js.map +1 -1
  688. package/ui/ConnectionStatus.js +7 -5
  689. package/ui/ConnectionStatus.js.map +1 -1
  690. package/ui/ContextMenu.js +176 -200
  691. package/ui/ContextMenu.js.map +1 -1
  692. package/ui/DateSeparator.js +12 -14
  693. package/ui/DateSeparator.js.map +1 -1
  694. package/ui/EmojiReactions.js +300 -108
  695. package/ui/EmojiReactions.js.map +1 -1
  696. package/ui/FileMessageItemBody.js +22 -23
  697. package/ui/FileMessageItemBody.js.map +1 -1
  698. package/ui/FileViewer.js +36 -36
  699. package/ui/FileViewer.js.map +1 -1
  700. package/ui/Icon.js +448 -622
  701. package/ui/Icon.js.map +1 -1
  702. package/ui/IconButton.js +20 -31
  703. package/ui/IconButton.js.map +1 -1
  704. package/ui/ImageRenderer.js +34 -43
  705. package/ui/ImageRenderer.js.map +1 -1
  706. package/ui/Input.js +16 -16
  707. package/ui/Input.js.map +1 -1
  708. package/ui/Label.js +2 -2
  709. package/ui/LinkLabel.js +4 -3
  710. package/ui/LinkLabel.js.map +1 -1
  711. package/ui/Loader.js +10 -12
  712. package/ui/Loader.js.map +1 -1
  713. package/ui/MentionLabel.js +58 -65
  714. package/ui/MentionLabel.js.map +1 -1
  715. package/ui/MentionUserLabel.js +12 -10
  716. package/ui/MentionUserLabel.js.map +1 -1
  717. package/ui/MessageContent.js +215 -551
  718. package/ui/MessageContent.js.map +1 -1
  719. package/ui/MessageInput.js +392 -120
  720. package/ui/MessageInput.js.map +1 -1
  721. package/ui/MessageItemMenu.js +83 -83
  722. package/ui/MessageItemMenu.js.map +1 -1
  723. package/ui/MessageItemReactionMenu.js +58 -62
  724. package/ui/MessageItemReactionMenu.js.map +1 -1
  725. package/ui/MessageSearchFileItem.js +55 -50
  726. package/ui/MessageSearchFileItem.js.map +1 -1
  727. package/ui/MessageSearchItem.js +41 -40
  728. package/ui/MessageSearchItem.js.map +1 -1
  729. package/ui/MessageStatus.js +10 -11
  730. package/ui/MessageStatus.js.map +1 -1
  731. package/ui/Modal.js +52 -46
  732. package/ui/Modal.js.map +1 -1
  733. package/ui/MutedAvatarOverlay.js +10 -10
  734. package/ui/MutedAvatarOverlay.js.map +1 -1
  735. package/ui/OGMessageItemBody.js +68 -64
  736. package/ui/OGMessageItemBody.js.map +1 -1
  737. package/ui/OpenChannelAdminMessage.js +8 -7
  738. package/ui/OpenChannelAdminMessage.js.map +1 -1
  739. package/ui/OpenChannelAvatar.js +18 -17
  740. package/ui/OpenChannelAvatar.js.map +1 -1
  741. package/ui/OpenchannelConversationHeader.js +17 -13
  742. package/ui/OpenchannelConversationHeader.js.map +1 -1
  743. package/ui/OpenchannelFileMessage.js +140 -151
  744. package/ui/OpenchannelFileMessage.js.map +1 -1
  745. package/ui/OpenchannelOGMessage.js +204 -233
  746. package/ui/OpenchannelOGMessage.js.map +1 -1
  747. package/ui/OpenchannelThumbnailMessage.js +215 -222
  748. package/ui/OpenchannelThumbnailMessage.js.map +1 -1
  749. package/ui/OpenchannelUserMessage.js +168 -178
  750. package/ui/OpenchannelUserMessage.js.map +1 -1
  751. package/ui/PlaceHolder.js +5 -6
  752. package/ui/PlaceHolder.js.map +1 -1
  753. package/ui/PlaybackTime.js +26 -0
  754. package/ui/PlaybackTime.js.map +1 -0
  755. package/ui/ProgressBar.js +30 -0
  756. package/ui/ProgressBar.js.map +1 -0
  757. package/ui/QuoteMessage.js +50 -44
  758. package/ui/QuoteMessage.js.map +1 -1
  759. package/ui/QuoteMessageInput.js +31 -29
  760. package/ui/QuoteMessageInput.js.map +1 -1
  761. package/ui/ReactionBadge.js +13 -21
  762. package/ui/ReactionBadge.js.map +1 -1
  763. package/ui/ReactionButton.js +30 -27
  764. package/ui/ReactionButton.js.map +1 -1
  765. package/ui/SortByRow.js +14 -18
  766. package/ui/SortByRow.js.map +1 -1
  767. package/ui/TextButton.js +13 -21
  768. package/ui/TextButton.js.map +1 -1
  769. package/ui/TextMessageItemBody.js +41 -48
  770. package/ui/TextMessageItemBody.js.map +1 -1
  771. package/ui/ThreadReplies.js +25 -22
  772. package/ui/ThreadReplies.js.map +1 -1
  773. package/ui/ThumbnailMessageItemBody.js +36 -45
  774. package/ui/ThumbnailMessageItemBody.js.map +1 -1
  775. package/ui/Toggle.js +191 -0
  776. package/ui/Toggle.js.map +1 -0
  777. package/ui/Tooltip.js +8 -9
  778. package/ui/Tooltip.js.map +1 -1
  779. package/ui/TooltipWrapper.js +17 -20
  780. package/ui/TooltipWrapper.js.map +1 -1
  781. package/ui/UnknownMessageItemBody.js +21 -22
  782. package/ui/UnknownMessageItemBody.js.map +1 -1
  783. package/ui/UserListItem.js +76 -76
  784. package/ui/UserListItem.js.map +1 -1
  785. package/ui/UserProfile.js +31 -29
  786. package/ui/UserProfile.js.map +1 -1
  787. package/ui/VoiceMessageItemBody.js +110 -0
  788. package/ui/VoiceMessageItemBody.js.map +1 -0
  789. package/ui/VoiceMessgeInput.js +14 -0
  790. package/ui/VoiceMessgeInput.js.map +1 -0
  791. package/ui/Word.js +31 -39
  792. package/ui/Word.js.map +1 -1
  793. package/useDirtyGetMentions-f00f1f94.js +75 -0
  794. package/useDirtyGetMentions-f00f1f94.js.map +1 -0
  795. package/useLongPress-1ab49410.js +85 -0
  796. package/useLongPress-1ab49410.js.map +1 -0
  797. package/useSendbirdStateContext.js +2 -3
  798. package/useSendbirdStateContext.js.map +1 -1
  799. package/utils/message/getOutgoingMessageState.js +9 -15
  800. package/utils/message/getOutgoingMessageState.js.map +1 -1
  801. package/utils/message/isVoiceMessage.js +8 -0
  802. package/utils/message/isVoiceMessage.js.map +1 -0
  803. package/{utils-ea66f822.js → utils-56cb7de5.js} +1 -1
  804. package/{utils-ea66f822.js.map → utils-56cb7de5.js.map} +1 -1
  805. package/utils-77f7e8b2.js +29 -0
  806. package/utils-77f7e8b2.js.map +1 -0
  807. package/{utils-ddb0df4c.js → utils-7f3d0d8c.js} +3 -7
  808. package/{utils-ddb0df4c.js.map → utils-7f3d0d8c.js.map} +1 -1
  809. package/utils-af9b1c06.js +31 -0
  810. package/utils-af9b1c06.js.map +1 -0
  811. package/uuid-92d22300.js +13 -0
  812. package/{uuid-7e004f47.js.map → uuid-92d22300.js.map} +1 -1
  813. package/withSendbird.js +5 -6
  814. package/withSendbird.js.map +1 -1
  815. package/ChannelListProvider-1d36e2e9.js.map +0 -1
  816. package/ChannelProvider-289cd35f.js.map +0 -1
  817. package/CreateChannelProvider-72b655e9.js +0 -55
  818. package/CreateChannelProvider-72b655e9.js.map +0 -1
  819. package/LocalizationContext-289c1917.js +0 -22
  820. package/MediaQueryContext-273d29f6.js +0 -90
  821. package/MediaQueryContext-273d29f6.js.map +0 -1
  822. package/MemberList-7ad0fa0b.js +0 -435
  823. package/MemberList-7ad0fa0b.js.map +0 -1
  824. package/NotificationChannel/components/NotificationChannelUI.js +0 -119
  825. package/NotificationChannel/components/NotificationChannelUI.js.map +0 -1
  826. package/NotificationChannel/components/NotificationList.js +0 -111
  827. package/NotificationChannel/components/NotificationList.js.map +0 -1
  828. package/NotificationChannel/components/NotificationMessageWrap.js +0 -136
  829. package/NotificationChannel/components/NotificationMessageWrap.js.map +0 -1
  830. package/NotificationChannel/context.js +0 -12
  831. package/NotificationChannel.js +0 -58
  832. package/NotificationChannel.js.map +0 -1
  833. package/NotificationChannelProvider-ad556c64.js +0 -535
  834. package/NotificationChannelProvider-ad556c64.js.map +0 -1
  835. package/OpenChannelListProvider-0febf8b2.js +0 -434
  836. package/OpenChannelListProvider-0febf8b2.js.map +0 -1
  837. package/OpenChannelProvider-c254c663.js +0 -2000
  838. package/OpenChannelProvider-c254c663.js.map +0 -1
  839. package/RemoveMessageModal-d6cbf9fa.js +0 -31
  840. package/RemoveMessageModal-d6cbf9fa.js.map +0 -1
  841. package/ThreadProvider-8696ef31.js +0 -1644
  842. package/ThreadProvider-8696ef31.js.map +0 -1
  843. package/_rollupPluginBabelHelpers-519f674b.js.map +0 -1
  844. package/actionTypes-9f87e87f.js +0 -6
  845. package/actionTypes-9f87e87f.js.map +0 -1
  846. package/cjs/ChannelListProvider-0de52d2b.js.map +0 -1
  847. package/cjs/ChannelProvider-fc58e60e.js.map +0 -1
  848. package/cjs/CreateChannelProvider-a82d20f4.js +0 -62
  849. package/cjs/CreateChannelProvider-a82d20f4.js.map +0 -1
  850. package/cjs/MediaQueryContext-4711a81f.js +0 -97
  851. package/cjs/MediaQueryContext-4711a81f.js.map +0 -1
  852. package/cjs/MemberList-b2623166.js +0 -441
  853. package/cjs/MemberList-b2623166.js.map +0 -1
  854. package/cjs/NotificationChannel/components/NotificationChannelUI.js +0 -125
  855. package/cjs/NotificationChannel/components/NotificationChannelUI.js.map +0 -1
  856. package/cjs/NotificationChannel/components/NotificationList.js +0 -117
  857. package/cjs/NotificationChannel/components/NotificationList.js.map +0 -1
  858. package/cjs/NotificationChannel/components/NotificationMessageWrap.js +0 -142
  859. package/cjs/NotificationChannel/components/NotificationMessageWrap.js.map +0 -1
  860. package/cjs/NotificationChannel/context.js +0 -21
  861. package/cjs/NotificationChannel.js +0 -64
  862. package/cjs/NotificationChannel.js.map +0 -1
  863. package/cjs/NotificationChannelProvider-2cdc7ff4.js +0 -543
  864. package/cjs/NotificationChannelProvider-2cdc7ff4.js.map +0 -1
  865. package/cjs/OpenChannelListProvider-60bc3c69.js +0 -443
  866. package/cjs/OpenChannelListProvider-60bc3c69.js.map +0 -1
  867. package/cjs/OpenChannelProvider-3ed4eb6e.js +0 -2009
  868. package/cjs/OpenChannelProvider-3ed4eb6e.js.map +0 -1
  869. package/cjs/RemoveMessageModal-9169766a.js.map +0 -1
  870. package/cjs/ThreadProvider-389f5031.js +0 -1653
  871. package/cjs/ThreadProvider-389f5031.js.map +0 -1
  872. package/cjs/_rollupPluginBabelHelpers-fed1e122.js.map +0 -1
  873. package/cjs/actionTypes-2f90e726.js +0 -10
  874. package/cjs/actionTypes-2f90e726.js.map +0 -1
  875. package/cjs/color-f47044b3.js.map +0 -1
  876. package/cjs/compareIds-4124b297.js.map +0 -1
  877. package/cjs/const-015e5589.js +0 -20
  878. package/cjs/const-015e5589.js.map +0 -1
  879. package/cjs/const-fd64914b.js.map +0 -1
  880. package/cjs/index-30c97863.js +0 -194
  881. package/cjs/index-30c97863.js.map +0 -1
  882. package/cjs/index-3a4f8219.js.map +0 -1
  883. package/cjs/index-40e4653a.js +0 -59
  884. package/cjs/index-40e4653a.js.map +0 -1
  885. package/cjs/index-5d5497c2.js.map +0 -1
  886. package/cjs/index-62c1bdfc.js +0 -701
  887. package/cjs/index-62c1bdfc.js.map +0 -1
  888. package/cjs/index-9ca07037.js.map +0 -1
  889. package/cjs/index-9f3670d0.js +0 -360
  890. package/cjs/index-9f3670d0.js.map +0 -1
  891. package/cjs/index-abbc8024.js.map +0 -1
  892. package/cjs/index-c475c3c8.js.map +0 -1
  893. package/cjs/index-c5cd589d.js.map +0 -1
  894. package/cjs/stringSet-3e6167ef.js.map +0 -1
  895. package/cjs/topics-56842e14.js +0 -22
  896. package/cjs/topics-56842e14.js.map +0 -1
  897. package/cjs/tslib.es6-b8ba50ef.js +0 -110
  898. package/cjs/tslib.es6-b8ba50ef.js.map +0 -1
  899. package/cjs/useLongPress-99c66f7f.js +0 -118
  900. package/cjs/useLongPress-99c66f7f.js.map +0 -1
  901. package/cjs/utils-9adfd244.js +0 -38
  902. package/cjs/utils-9adfd244.js.map +0 -1
  903. package/cjs/utils-f6a96ebf.js +0 -32
  904. package/cjs/utils-f6a96ebf.js.map +0 -1
  905. package/cjs/uuid-2475ef6c.js +0 -19
  906. package/compareIds-ef41eb2c.js.map +0 -1
  907. package/const-76d87f47.js.map +0 -1
  908. package/const-da6f3d34.js +0 -14
  909. package/const-da6f3d34.js.map +0 -1
  910. package/context-10475c77.js +0 -12
  911. package/index-12754b45.js.map +0 -1
  912. package/index-1e46e582.js +0 -179
  913. package/index-1e46e582.js.map +0 -1
  914. package/index-232388fa.js.map +0 -1
  915. package/index-2784bdd8.js.map +0 -1
  916. package/index-2f346069.js.map +0 -1
  917. package/index-4637b0de.js +0 -57
  918. package/index-4637b0de.js.map +0 -1
  919. package/index-4900e890.js +0 -353
  920. package/index-4900e890.js.map +0 -1
  921. package/index-751f97ce.js.map +0 -1
  922. package/index-855ef33d.js +0 -662
  923. package/index-855ef33d.js.map +0 -1
  924. package/index-aea7b7d6.js.map +0 -1
  925. package/stringSet-9ae71b7d.js.map +0 -1
  926. package/topics-e2963bba.js +0 -13
  927. package/topics-e2963bba.js.map +0 -1
  928. package/tslib.es6-72df3331.js +0 -104
  929. package/tslib.es6-72df3331.js.map +0 -1
  930. package/useLongPress-1a777e9e.js +0 -116
  931. package/useLongPress-1a777e9e.js.map +0 -1
  932. package/utils-2976f2c1.js +0 -30
  933. package/utils-2976f2c1.js.map +0 -1
  934. package/utils-6b69fb18.js +0 -34
  935. package/utils-6b69fb18.js.map +0 -1
  936. package/uuid-7e004f47.js +0 -17
@@ -0,0 +1,1885 @@
1
+ import React__default, { useEffect, useCallback, useState, useReducer, useRef, useMemo } from 'react';
2
+ import { f as format } from './index-4455855e.js';
3
+ import { U as UserProfileProvider } from './UserProfileContext-c776d522.js';
4
+ import { _ as _objectSpread2 } from './_rollupPluginBabelHelpers-fb0e05a4.js';
5
+ import { c as compareIds } from './compareIds-3a43c11b.js';
6
+ import { P as PUBSUB_TOPICS } from './topics-70f569e9.js';
7
+ import { ChannelType } from '@sendbird/chat';
8
+ import { OpenChannelHandler } from '@sendbird/chat/openChannel';
9
+ import { u as uuidv4 } from './uuid-92d22300.js';
10
+ import useSendbirdStateContext from './useSendbirdStateContext.js';
11
+
12
+ const getMessageCreatedAt = message => format(message.createdAt, 'p');
13
+ const shouldFetchMore = (messageLength, maxMessages) => {
14
+ if (typeof maxMessages !== 'number') {
15
+ return true;
16
+ }
17
+ if (typeof maxMessages === 'number' && maxMessages > messageLength) {
18
+ return true;
19
+ }
20
+ return false;
21
+ };
22
+
23
+ /* eslint-disable default-param-last */
24
+ const scrollIntoLast = function () {
25
+ let initialTry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
26
+ let scrollRef = arguments.length > 1 ? arguments[1] : undefined;
27
+ const MAX_TRIES = 10;
28
+ const currentTry = initialTry;
29
+ if (currentTry > MAX_TRIES) {
30
+ return;
31
+ }
32
+ try {
33
+ const scrollDOM = (scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current) || document.querySelector('.sendbird-openchannel-conversation-scroll__container__item-container');
34
+ // eslint-disable-next-line no-multi-assign
35
+ scrollDOM.scrollTop = scrollDOM.scrollHeight;
36
+ } catch (error) {
37
+ setTimeout(() => {
38
+ scrollIntoLast(currentTry + 1, scrollRef);
39
+ }, 500 * currentTry);
40
+ }
41
+ };
42
+ const isSameGroup = (message, comparingMessage) => {
43
+ var _sender, _sender2, _message_$sender, _comparingMessage_$se;
44
+ if (!(message && comparingMessage && message !== null && message !== void 0 && message.messageType && message.messageType !== 'admin' && comparingMessage !== null && comparingMessage !== void 0 && comparingMessage.messageType && comparingMessage.messageType !== 'admin' && message !== null && message !== void 0 && message.sender && comparingMessage !== null && comparingMessage !== void 0 && comparingMessage.sender && message !== null && message !== void 0 && message.createdAt && comparingMessage !== null && comparingMessage !== void 0 && comparingMessage.createdAt && message !== null && message !== void 0 && (_sender = message.sender) !== null && _sender !== void 0 && _sender.userId && comparingMessage !== null && comparingMessage !== void 0 && (_sender2 = comparingMessage.sender) !== null && _sender2 !== void 0 && _sender2.userId)) {
45
+ return false;
46
+ }
47
+ // to fix typecasting
48
+ const message_ = message;
49
+ const comparingMessage_ = comparingMessage;
50
+ return (message_ === null || message_ === void 0 ? void 0 : message_.sendingStatus) === (comparingMessage_ === null || comparingMessage_ === void 0 ? void 0 : comparingMessage_.sendingStatus) && (message_ === null || message_ === void 0 ? void 0 : (_message_$sender = message_.sender) === null || _message_$sender === void 0 ? void 0 : _message_$sender.userId) === (comparingMessage_ === null || comparingMessage_ === void 0 ? void 0 : (_comparingMessage_$se = comparingMessage_.sender) === null || _comparingMessage_$se === void 0 ? void 0 : _comparingMessage_$se.userId) && getMessageCreatedAt(message) === getMessageCreatedAt(comparingMessage);
51
+ };
52
+ const compareMessagesForGrouping = (prevMessage, currMessage, nextMessage) => [isSameGroup(prevMessage, currMessage), isSameGroup(currMessage, nextMessage)];
53
+ const kFormatter = num => {
54
+ if (Math.abs(num) > 999999) {
55
+ return `${(Math.abs(num) / 1000000).toFixed(1)}M`;
56
+ }
57
+ if (Math.abs(num) > 999) {
58
+ return `${(Math.abs(num) / 1000).toFixed(1)}K`;
59
+ }
60
+ return `${num}`;
61
+ };
62
+ const isOperator = (openChannel, userId) => {
63
+ const operators = openChannel === null || openChannel === void 0 ? void 0 : openChannel.operators;
64
+ if (operators.map(operator => operator.userId).indexOf(userId) < 0) {
65
+ return false;
66
+ }
67
+ return true;
68
+ };
69
+ const isDisabledBecauseFrozen = (openChannel, userId) => {
70
+ const isFrozen = openChannel === null || openChannel === void 0 ? void 0 : openChannel.isFrozen;
71
+ return isFrozen && !isOperator(openChannel, userId);
72
+ };
73
+ const isDisabledBecauseMuted = (mutedParticipantIds, userId) => {
74
+ return mutedParticipantIds.indexOf(userId) > -1;
75
+ };
76
+ const fetchWithListQuery = (listQuery, logger, eachQueryNextCallback) => {
77
+ const fetchList = query => {
78
+ const {
79
+ hasNext
80
+ } = query;
81
+ if (hasNext) {
82
+ query.next().then(users => {
83
+ eachQueryNextCallback(users);
84
+ fetchList(query);
85
+ }).catch(error => {
86
+ logger.warning('OpenChannel | FetchUserList failed', error);
87
+ });
88
+ } else {
89
+ logger.info('OpenChannel | FetchUserList finished');
90
+ }
91
+ };
92
+ logger.info('OpenChannel | FetchUserList start', listQuery);
93
+ fetchList(listQuery);
94
+ };
95
+ const pxToNumber = px => {
96
+ if (typeof px === 'number') {
97
+ return px;
98
+ }
99
+ if (typeof px === 'string') {
100
+ const parsed = Number.parseFloat(px);
101
+ if (!Number.isNaN(parsed)) {
102
+ return parsed;
103
+ }
104
+ }
105
+ return null;
106
+ };
107
+
108
+ const SET_CURRENT_CHANNEL = 'SET_CURRENT_CHANNEL';
109
+ const SET_CHANNEL_INVALID = 'SET_CHANNEL_INVALID';
110
+ const RESET_MESSAGES = 'RESET_MESSAGES';
111
+ const EXIT_CURRENT_CHANNEL = 'EXIT_CURRENT_CHANNEL';
112
+ const GET_PREV_MESSAGES_START = 'GET_PREV_MESSAGES_START';
113
+ const GET_PREV_MESSAGES_SUCESS = 'GET_PREV_MESSAGES_SUCESS';
114
+ const GET_PREV_MESSAGES_FAIL = 'GET_PREV_MESSAGES_FAIL';
115
+ const SENDING_MESSAGE_FAILED = 'SENDING_MESSAGE_FAILED';
116
+ const SENDING_MESSAGE_SUCCEEDED = 'SENDING_MESSAGE_SUCCEEDED';
117
+ const SENDING_MESSAGE_START = 'SENDING_MESSAGE_START';
118
+ const RESENDING_MESSAGE_START = 'RESENDING_MESSAGE_START';
119
+ const FETCH_PARTICIPANT_LIST = 'FETCH_PARTICIPANT_LIST';
120
+ const FETCH_BANNED_USER_LIST = 'FETCH_BANNED_USER_LIST';
121
+ const FETCH_MUTED_USER_LIST = 'FETCH_MUTED_USER_LIST';
122
+ const TRIM_MESSAGE_LIST = 'TRIM_MESSAGE_LIST';
123
+
124
+ // event handlers
125
+ const ON_MESSAGE_RECEIVED = 'ON_MESSAGE_RECEIVED';
126
+ const ON_MESSAGE_UPDATED = 'ON_MESSAGE_UPDATED';
127
+ const ON_MESSAGE_DELETED = 'ON_MESSAGE_DELETED';
128
+ const ON_MESSAGE_DELETED_BY_REQ_ID = 'ON_MESSAGE_DELETED_BY_REQ_ID';
129
+ const ON_OPERATOR_UPDATED = 'ON_OPERATOR_UPDATED';
130
+ const ON_USER_ENTERED = 'ON_USER_ENTERED';
131
+ const ON_USER_EXITED = 'ON_USER_EXITED';
132
+ const ON_USER_MUTED = 'ON_USER_MUTED';
133
+ const ON_USER_UNMUTED = 'ON_USER_UNMUTED';
134
+ const ON_USER_BANNED = 'ON_USER_BANNED';
135
+ const ON_USER_UNBANNED = 'ON_USER_UNBANNED';
136
+ const ON_CHANNEL_FROZEN = 'ON_CHANNEL_FROZEN';
137
+ const ON_CHANNEL_UNFROZEN = 'ON_CHANNEL_UNFROZEN';
138
+ const ON_CHANNEL_CHANGED = 'ON_CHANNEL_CHANGED';
139
+ const ON_CHANNEL_DELETED = 'ON_CHANNEL_DELETED';
140
+ const ON_META_DATA_CREATED = 'ON_META_DATA_CREATED';
141
+ const ON_META_DATA_UPDATED = 'ON_META_DATA_UPDATED';
142
+ const ON_META_DATA_DELETED = 'ON_META_DATA_DELETED';
143
+ const ON_META_COUNTERS_CREATED = 'ON_META_COUNTERS_CREATED';
144
+ const ON_META_COUNTERS_UPDATED = 'ON_META_COUNTERS_UPDATED';
145
+ const ON_META_COUNTERS_DELETED = 'ON_META_COUNTERS_DELETED';
146
+ const ON_MENTION_RECEIVED = 'ON_MENTION_RECEIVED';
147
+
148
+ /* eslint-disable @typescript-eslint/no-explicit-any */ // @ts-ignore: Unreachable code error
149
+ function reducer(state, action) {
150
+ switch (action.type) {
151
+ case RESET_MESSAGES:
152
+ {
153
+ return _objectSpread2(_objectSpread2({}, state), {}, {
154
+ allMessages: []
155
+ });
156
+ }
157
+ case EXIT_CURRENT_CHANNEL:
158
+ {
159
+ var _action$payload, _state$currentOpenCha;
160
+ if (((_action$payload = action.payload) === null || _action$payload === void 0 ? void 0 : _action$payload.url) === ((_state$currentOpenCha = state.currentOpenChannel) === null || _state$currentOpenCha === void 0 ? void 0 : _state$currentOpenCha.url)) {
161
+ return _objectSpread2(_objectSpread2({}, state), {}, {
162
+ currentOpenChannel: null
163
+ });
164
+ }
165
+ return state;
166
+ }
167
+ case SET_CURRENT_CHANNEL:
168
+ {
169
+ const gottenChannel = action.payload;
170
+ const operators = gottenChannel.operators;
171
+ if (!state.isInvalid && state.currentOpenChannel && state.currentOpenChannel.url && state.currentOpenChannel.url === gottenChannel.url) {
172
+ return state;
173
+ }
174
+ return _objectSpread2(_objectSpread2({}, state), {}, {
175
+ currentOpenChannel: gottenChannel,
176
+ isInvalid: false,
177
+ operators: operators,
178
+ participants: operators,
179
+ bannedParticipantIds: [],
180
+ mutedParticipantIds: []
181
+ });
182
+ }
183
+ case SET_CHANNEL_INVALID:
184
+ {
185
+ return _objectSpread2(_objectSpread2({}, state), {}, {
186
+ isInvalid: true
187
+ });
188
+ }
189
+ case GET_PREV_MESSAGES_START:
190
+ {
191
+ return _objectSpread2(_objectSpread2({}, state), {}, {
192
+ loading: true
193
+ });
194
+ }
195
+ case GET_PREV_MESSAGES_SUCESS:
196
+ case GET_PREV_MESSAGES_FAIL:
197
+ {
198
+ const isFailed = action.type === GET_PREV_MESSAGES_FAIL;
199
+ const {
200
+ currentOpenChannel = {},
201
+ messages = [],
202
+ hasMore,
203
+ lastMessageTimestamp
204
+ } = action.payload;
205
+ const actionChannelUrl = currentOpenChannel.url;
206
+ const receivedMessages = isFailed ? [] : messages;
207
+ const _hasMore = isFailed ? false : hasMore;
208
+ const _lastMessageTimestamp = isFailed ? 0 : lastMessageTimestamp;
209
+ const stateChannel = state.currentOpenChannel;
210
+ const stateChannelUrl = stateChannel.url;
211
+ if (actionChannelUrl !== stateChannelUrl) {
212
+ return state;
213
+ }
214
+ const filteredAllMessages = state.allMessages.filter(message => !receivedMessages.find(_ref => {
215
+ let {
216
+ messageId
217
+ } = _ref;
218
+ return compareIds(messageId, message.messageId);
219
+ }));
220
+ return _objectSpread2(_objectSpread2({}, state), {}, {
221
+ loading: false,
222
+ initialized: true,
223
+ hasMore: _hasMore,
224
+ lastMessageTimestamp: _lastMessageTimestamp,
225
+ allMessages: [...receivedMessages, ...filteredAllMessages]
226
+ });
227
+ }
228
+ case SENDING_MESSAGE_START:
229
+ {
230
+ const {
231
+ message,
232
+ channel
233
+ } = action.payload;
234
+ if ((channel === null || channel === void 0 ? void 0 : channel.url) !== state.currentOpenChannel.url || state.allMessages.some(m => m.reqId === message.reqId)
235
+ // Handing failed first than sending start issue
236
+ ) {
237
+ return state;
238
+ }
239
+ return _objectSpread2(_objectSpread2({}, state), {}, {
240
+ allMessages: [...state.allMessages, message]
241
+ });
242
+ }
243
+ case SENDING_MESSAGE_SUCCEEDED:
244
+ {
245
+ const sentMessage = action.payload;
246
+ const newMessages = state.allMessages.map(m => compareIds(m.reqId, sentMessage.reqId) ? sentMessage : m);
247
+ return _objectSpread2(_objectSpread2({}, state), {}, {
248
+ allMessages: newMessages
249
+ });
250
+ }
251
+ case SENDING_MESSAGE_FAILED:
252
+ {
253
+ const sentMessage = action.payload;
254
+ sentMessage.sendingStatus = 'failed';
255
+ if (!state.allMessages.some(m => (m === null || m === void 0 ? void 0 : m.reqId) === (sentMessage === null || sentMessage === void 0 ? void 0 : sentMessage.reqId))) {
256
+ // Handling failed first than sending start issue
257
+ return _objectSpread2(_objectSpread2({}, state), {}, {
258
+ allMessages: [...state.allMessages.filter(m => !compareIds(m.reqId, sentMessage)), sentMessage]
259
+ });
260
+ } else {
261
+ return _objectSpread2(_objectSpread2({}, state), {}, {
262
+ allMessages: state.allMessages.map(m => compareIds(m.reqId, sentMessage.reqId) ? sentMessage : m)
263
+ });
264
+ }
265
+ }
266
+ case TRIM_MESSAGE_LIST:
267
+ {
268
+ var _action$payload2;
269
+ const {
270
+ allMessages
271
+ } = state;
272
+ const messageLimit = (_action$payload2 = action.payload) === null || _action$payload2 === void 0 ? void 0 : _action$payload2.messageLimit;
273
+ if (messageLimit && messageLimit > 0 && (allMessages === null || allMessages === void 0 ? void 0 : allMessages.length) > messageLimit) {
274
+ const sliceAt = allMessages.length - messageLimit;
275
+ return _objectSpread2(_objectSpread2({}, state), {}, {
276
+ allMessages: allMessages.slice(sliceAt)
277
+ });
278
+ }
279
+ return state;
280
+ }
281
+ case RESENDING_MESSAGE_START:
282
+ {
283
+ const eventedChannel = action.payload.channel;
284
+ const resentMessage = action.payload.message;
285
+ if (eventedChannel.url !== state.currentOpenChannel.url) {
286
+ return state;
287
+ }
288
+ return _objectSpread2(_objectSpread2({}, state), {}, {
289
+ allMessages: state.allMessages.map(m => compareIds(m.reqId, resentMessage.reqId) ? resentMessage : m)
290
+ });
291
+ }
292
+ case FETCH_PARTICIPANT_LIST:
293
+ {
294
+ const eventedChannel = action.payload.channel;
295
+ const fetchedParticipantList = action.payload.users;
296
+ if (eventedChannel.url !== state.currentOpenChannel.url) {
297
+ return state;
298
+ }
299
+ return _objectSpread2(_objectSpread2({}, state), {}, {
300
+ participants: [...state.participants, ...fetchedParticipantList]
301
+ // Should check duplication
302
+ });
303
+ }
304
+
305
+ case FETCH_BANNED_USER_LIST:
306
+ {
307
+ const eventedChannel = action.payload.channel;
308
+ const fetchedBannedUserList = action.payload.users;
309
+ if (eventedChannel.url !== state.currentOpenChannel.url || !fetchedBannedUserList.every(user => typeof user.userId === 'string')) {
310
+ return state;
311
+ }
312
+ return _objectSpread2(_objectSpread2({}, state), {}, {
313
+ bannedParticipantIds: [...state.bannedParticipantIds, ...fetchedBannedUserList.map(user => user.userId)]
314
+ // Should check duplication
315
+ });
316
+ }
317
+
318
+ case FETCH_MUTED_USER_LIST:
319
+ {
320
+ const eventedChannel = action.payload.channel;
321
+ const fetchedMutedUserList = action.payload.users;
322
+ if (eventedChannel.url !== state.currentOpenChannel.url || !fetchedMutedUserList.every(user => typeof user.userId === 'string')) {
323
+ return state;
324
+ }
325
+ return _objectSpread2(_objectSpread2({}, state), {}, {
326
+ mutedParticipantIds: [...state.mutedParticipantIds, ...fetchedMutedUserList.map(user => user.userId)]
327
+ // Should check duplication
328
+ });
329
+ }
330
+ // events
331
+ case ON_MESSAGE_RECEIVED:
332
+ {
333
+ const eventedChannel = action.payload.channel;
334
+ const receivedMessage = action.payload.message;
335
+ const {
336
+ currentOpenChannel
337
+ } = state;
338
+ if (!compareIds(eventedChannel.url, currentOpenChannel.url) || !(state.allMessages.map(message => message.messageId).indexOf(receivedMessage.messageId) < 0)) {
339
+ return state;
340
+ }
341
+ return _objectSpread2(_objectSpread2({}, state), {}, {
342
+ allMessages: [...state.allMessages, receivedMessage]
343
+ });
344
+ }
345
+ case ON_MESSAGE_UPDATED:
346
+ {
347
+ const eventedChannel = action.payload.channel;
348
+ const updatedMessage = action.payload.message;
349
+ const currentChannel = state.currentOpenChannel;
350
+ if (!currentChannel || currentChannel.url && currentChannel.url !== eventedChannel.url) {
351
+ return state;
352
+ }
353
+ return _objectSpread2(_objectSpread2({}, state), {}, {
354
+ allMessages: state.allMessages.map(message => message.isIdentical(updatedMessage) ? updatedMessage : message)
355
+ });
356
+ }
357
+ case ON_MESSAGE_DELETED:
358
+ {
359
+ const eventedChannel = action.payload.channel;
360
+ const deletedMessageId = action.payload.messageId;
361
+ const currentChannel = state.currentOpenChannel;
362
+ if (!currentChannel || currentChannel.url && currentChannel.url !== eventedChannel.url) {
363
+ return state;
364
+ }
365
+ return _objectSpread2(_objectSpread2({}, state), {}, {
366
+ allMessages: state.allMessages.filter(message => !compareIds(message.messageId, deletedMessageId))
367
+ });
368
+ }
369
+ case ON_MESSAGE_DELETED_BY_REQ_ID:
370
+ {
371
+ return _objectSpread2(_objectSpread2({}, state), {}, {
372
+ allMessages: state.allMessages.filter(m => !compareIds(m.reqId, action.payload))
373
+ });
374
+ }
375
+ case ON_OPERATOR_UPDATED:
376
+ {
377
+ const eventedChannel = action.payload.channel;
378
+ const updatedOperators = action.payload.operators;
379
+ const currentChannel = state.currentOpenChannel;
380
+ if (!currentChannel || currentChannel.url && currentChannel.url !== eventedChannel.url) {
381
+ return state;
382
+ }
383
+ return _objectSpread2(_objectSpread2({}, state), {}, {
384
+ currentOpenChannel: eventedChannel,
385
+ operators: updatedOperators
386
+ });
387
+ }
388
+ case ON_USER_ENTERED:
389
+ {
390
+ const eventedChannel = action.payload.channel;
391
+ const enteredUser = action.payload.user;
392
+ const currentChannel = state.currentOpenChannel;
393
+ if (!currentChannel || currentChannel.url && currentChannel.url !== eventedChannel.url) {
394
+ return state;
395
+ }
396
+ return _objectSpread2(_objectSpread2({}, state), {}, {
397
+ participants: [...state.participants, enteredUser]
398
+ });
399
+ }
400
+ case ON_USER_EXITED:
401
+ {
402
+ const eventedChannel = action.payload.channel;
403
+ const exitedUser = action.payload.user;
404
+ const currentChannel = state.currentOpenChannel;
405
+ if (!currentChannel || currentChannel.url && currentChannel.url !== eventedChannel.url) {
406
+ return state;
407
+ }
408
+ return _objectSpread2(_objectSpread2({}, state), {}, {
409
+ participants: state.participants.filter(participant => !compareIds(participant.userId, exitedUser.userId))
410
+ });
411
+ }
412
+ case ON_USER_MUTED:
413
+ {
414
+ const eventedChannel = action.payload.channel;
415
+ const mutedUser = action.payload.user;
416
+ const currentChannel = state.currentOpenChannel;
417
+ if (!currentChannel || currentChannel.url && currentChannel.url !== eventedChannel.url || state.mutedParticipantIds.indexOf(mutedUser.userId) >= 0) {
418
+ return state;
419
+ }
420
+ return _objectSpread2(_objectSpread2({}, state), {}, {
421
+ mutedParticipantIds: [...state.mutedParticipantIds, mutedUser.userId]
422
+ });
423
+ }
424
+ case ON_USER_UNMUTED:
425
+ {
426
+ const eventedChannel = action.payload.channel;
427
+ const unmutedUser = action.payload.user;
428
+ const currentChannel = state.currentOpenChannel;
429
+ if (!currentChannel || currentChannel.url && currentChannel.url !== eventedChannel.url || state.mutedParticipantIds.indexOf(unmutedUser.userId) < 0) {
430
+ return state;
431
+ }
432
+ return _objectSpread2(_objectSpread2({}, state), {}, {
433
+ mutedParticipantIds: state.mutedParticipantIds.filter(userId => userId !== unmutedUser.userId)
434
+ });
435
+ }
436
+ case ON_USER_BANNED:
437
+ {
438
+ const eventedChannel = action.payload.channel;
439
+ const bannedUser = action.payload.user;
440
+ const currentUser = action.payload.currentUser;
441
+ const currentChannel = state.currentOpenChannel;
442
+ if ((currentChannel === null || currentChannel === void 0 ? void 0 : currentChannel.url) === (eventedChannel === null || eventedChannel === void 0 ? void 0 : eventedChannel.url) && (bannedUser === null || bannedUser === void 0 ? void 0 : bannedUser.userId) === (currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId)) {
443
+ return _objectSpread2(_objectSpread2({}, state), {}, {
444
+ currentOpenChannel: null
445
+ });
446
+ } else if ((currentChannel === null || currentChannel === void 0 ? void 0 : currentChannel.url) === (eventedChannel === null || eventedChannel === void 0 ? void 0 : eventedChannel.url)) {
447
+ return _objectSpread2(_objectSpread2({}, state), {}, {
448
+ bannedParticipantIds: [...state.bannedParticipantIds, bannedUser.userId]
449
+ });
450
+ }
451
+ return state;
452
+ }
453
+ case ON_USER_UNBANNED:
454
+ {
455
+ const eventedChannel = action.payload.channel;
456
+ const unbannedUser = action.payload.user;
457
+ const currentChannel = state.currentOpenChannel;
458
+ if ((currentChannel === null || currentChannel === void 0 ? void 0 : currentChannel.url) === (eventedChannel === null || eventedChannel === void 0 ? void 0 : eventedChannel.url)) {
459
+ return _objectSpread2(_objectSpread2({}, state), {}, {
460
+ bannedParticipantIds: state.bannedParticipantIds.filter(userId => userId !== unbannedUser.userId)
461
+ });
462
+ }
463
+ return state;
464
+ }
465
+ case ON_CHANNEL_FROZEN:
466
+ {
467
+ const frozenChannel = action.payload;
468
+ const currentChannel = state.currentOpenChannel;
469
+ if (!currentChannel || currentChannel.url && currentChannel.url !== frozenChannel.url) {
470
+ return state;
471
+ }
472
+ return _objectSpread2(_objectSpread2({}, state), {}, {
473
+ frozen: true
474
+ });
475
+ }
476
+ case ON_CHANNEL_UNFROZEN:
477
+ {
478
+ const unfrozenChannel = action.payload;
479
+ const currentChannel = state.currentOpenChannel;
480
+ if (!currentChannel || currentChannel.url && currentChannel.url !== unfrozenChannel.url) {
481
+ return state;
482
+ }
483
+ return _objectSpread2(_objectSpread2({}, state), {}, {
484
+ frozen: false
485
+ });
486
+ }
487
+ case ON_CHANNEL_CHANGED:
488
+ {
489
+ const changedChannel = action.payload;
490
+ const currentChannel = state.currentOpenChannel;
491
+ if (!currentChannel || currentChannel.url && currentChannel.url !== changedChannel.url) {
492
+ return state;
493
+ }
494
+ return _objectSpread2(_objectSpread2({}, state), {}, {
495
+ currentOpenChannel: changedChannel
496
+ });
497
+ }
498
+ case ON_CHANNEL_DELETED:
499
+ {
500
+ const deletedChannelUrl = action.payload;
501
+ const currentChannel = state === null || state === void 0 ? void 0 : state.currentOpenChannel;
502
+ if ((currentChannel === null || currentChannel === void 0 ? void 0 : currentChannel.url) === deletedChannelUrl) {
503
+ return _objectSpread2(_objectSpread2({}, state), {}, {
504
+ currentOpenChannel: null
505
+ });
506
+ }
507
+ return state;
508
+ }
509
+ case ON_META_DATA_CREATED:
510
+ {
511
+ // const eventedChannel = action.payload.channel;
512
+ // const createdMetaData = action.payload.metaData;
513
+ // return {
514
+ // ...state
515
+ // };
516
+ return state;
517
+ }
518
+ case ON_META_DATA_UPDATED:
519
+ {
520
+ // const eventedChannel = action.payload.channel;
521
+ // const updatedMetaData = action.payload.metaData;
522
+ // return {
523
+ // ...state
524
+ // };
525
+ return state;
526
+ }
527
+ case ON_META_DATA_DELETED:
528
+ {
529
+ // const eventedChannel = action.payload.channel;
530
+ // const deletedMetaDataKeys = action.payload.metaDataKeys;
531
+ // return {
532
+ // ...state
533
+ // };
534
+ return state;
535
+ }
536
+ case ON_META_COUNTERS_CREATED:
537
+ {
538
+ // const eventedChannel = action.payload.channel;
539
+ // const createdMetaCounter = action.payload.metaCounter;
540
+ // return {
541
+ // ...state
542
+ // };
543
+ return state;
544
+ }
545
+ case ON_META_COUNTERS_UPDATED:
546
+ {
547
+ // const eventedChannel = action.payload.channel;
548
+ // const updatedMetaCounter = action.payload.metaCounter;
549
+ // return {
550
+ // ...state
551
+ // };
552
+ return state;
553
+ }
554
+ case ON_META_COUNTERS_DELETED:
555
+ {
556
+ // const eventedChannel = action.payload.channel;
557
+ // const deletedMetaCounterKeys = action.payload.metaCounterKeys;
558
+ // return {
559
+ // ...state
560
+ // };
561
+ return state;
562
+ }
563
+ case ON_MENTION_RECEIVED:
564
+ {
565
+ // const eventedChannel = action.payload.channel;
566
+ // const mentionedMessage = action.payload.message;
567
+ // return {
568
+ // ...state
569
+ // };
570
+ return state;
571
+ }
572
+ default:
573
+ return state;
574
+ }
575
+ }
576
+
577
+ const initialState = {
578
+ allMessages: [],
579
+ loading: false,
580
+ initialized: false,
581
+ currentOpenChannel: null,
582
+ isInvalid: false,
583
+ hasMore: false,
584
+ lastMessageTimestamp: 0,
585
+ frozen: false,
586
+ operators: [],
587
+ participants: [],
588
+ bannedParticipantIds: [],
589
+ mutedParticipantIds: []
590
+ };
591
+
592
+ function useSetChannel(_ref, _ref2) {
593
+ let {
594
+ channelUrl,
595
+ sdkInit,
596
+ fetchingParticipants,
597
+ userId,
598
+ currentOpenChannel
599
+ } = _ref;
600
+ let {
601
+ sdk,
602
+ logger,
603
+ messagesDispatcher
604
+ } = _ref2;
605
+ useEffect(() => {
606
+ if (channelUrl && sdkInit && sdk !== null && sdk !== void 0 && sdk.openChannel) {
607
+ if (currentOpenChannel && currentOpenChannel !== null && currentOpenChannel !== void 0 && currentOpenChannel.exit) {
608
+ var _currentOpenChannel$e;
609
+ (_currentOpenChannel$e = currentOpenChannel.exit) === null || _currentOpenChannel$e === void 0 ? void 0 : _currentOpenChannel$e.call(currentOpenChannel).then(() => {
610
+ logger.info('OpenChannel | useSetChannel: Exit from the previous open channel', currentOpenChannel === null || currentOpenChannel === void 0 ? void 0 : currentOpenChannel.url);
611
+ messagesDispatcher({
612
+ type: EXIT_CURRENT_CHANNEL,
613
+ payload: currentOpenChannel
614
+ });
615
+ });
616
+ }
617
+ logger.info('OpenChannel | useSetChannel: Fetching channel', channelUrl);
618
+ sdk.openChannel.getChannel(channelUrl).then(openChannel => {
619
+ logger.info('OpenChannel | useSetChannel: Succeeded to fetch channel', openChannel);
620
+ messagesDispatcher({
621
+ type: SET_CURRENT_CHANNEL,
622
+ payload: openChannel
623
+ });
624
+ openChannel.enter().then(() => {
625
+ if (openChannel.isOperator(userId)) {
626
+ // only operator has a permission to fetch these list
627
+ const bannedParticipantListQuery = openChannel.createBannedUserListQuery();
628
+ const mutedParticipantListQuery = openChannel.createMutedUserListQuery();
629
+ fetchWithListQuery(bannedParticipantListQuery, logger, users => {
630
+ messagesDispatcher({
631
+ type: FETCH_BANNED_USER_LIST,
632
+ payload: {
633
+ channel: openChannel,
634
+ users
635
+ }
636
+ });
637
+ });
638
+ fetchWithListQuery(mutedParticipantListQuery, logger, users => {
639
+ messagesDispatcher({
640
+ type: FETCH_MUTED_USER_LIST,
641
+ payload: {
642
+ channel: openChannel,
643
+ users
644
+ }
645
+ });
646
+ });
647
+ } else {
648
+ openChannel.getMyMutedInfo().then(mutedInfo => {
649
+ if (mutedInfo !== null && mutedInfo !== void 0 && mutedInfo.isMuted) {
650
+ messagesDispatcher({
651
+ type: FETCH_MUTED_USER_LIST,
652
+ payload: {
653
+ channel: openChannel,
654
+ users: [sdk === null || sdk === void 0 ? void 0 : sdk.currentUser]
655
+ }
656
+ });
657
+ }
658
+ });
659
+ }
660
+ if (fetchingParticipants) {
661
+ // fetch participants list
662
+ const participantListQuery = openChannel.createParticipantListQuery({
663
+ limit: openChannel.participantCount
664
+ });
665
+ fetchWithListQuery(participantListQuery, logger, users => {
666
+ messagesDispatcher({
667
+ type: FETCH_PARTICIPANT_LIST,
668
+ payload: {
669
+ channel: openChannel,
670
+ users
671
+ }
672
+ });
673
+ });
674
+ }
675
+ }).catch(error => {
676
+ logger.warning('OpenChannel | useSetChannel: Failed to enter channel', {
677
+ channelUrl,
678
+ error
679
+ });
680
+ messagesDispatcher({
681
+ type: SET_CHANNEL_INVALID,
682
+ payload: null
683
+ });
684
+ });
685
+ }).catch(error => {
686
+ logger.warning('OpenChannel | useSetChannel: Failed to fetch channel', {
687
+ channelUrl,
688
+ error
689
+ });
690
+ messagesDispatcher({
691
+ type: SET_CHANNEL_INVALID,
692
+ payload: null
693
+ });
694
+ });
695
+ }
696
+ }, [channelUrl, sdkInit, fetchingParticipants]);
697
+ }
698
+
699
+ function useHandleChannelEvents(_ref, _ref2) {
700
+ let {
701
+ currentOpenChannel,
702
+ checkScrollBottom
703
+ } = _ref;
704
+ let {
705
+ sdk,
706
+ logger,
707
+ messagesDispatcher,
708
+ scrollRef
709
+ } = _ref2;
710
+ useEffect(() => {
711
+ var _sdk$openChannel;
712
+ const messageReceiverId = uuidv4();
713
+ if (currentOpenChannel && currentOpenChannel.url && sdk !== null && sdk !== void 0 && (_sdk$openChannel = sdk.openChannel) !== null && _sdk$openChannel !== void 0 && _sdk$openChannel.addOpenChannelHandler) {
714
+ var _sdk$openChannel2;
715
+ logger.info('OpenChannel | useHandleChannelEvents: Setup evnet handler', messageReceiverId);
716
+ const channelHandlerParams = {
717
+ onMessageReceived: (channel, message) => {
718
+ const scrollToEnd = checkScrollBottom();
719
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
720
+ logger.info('OpenChannel | useHandleChannelEvents: onMessageReceived', {
721
+ channelUrl,
722
+ message
723
+ });
724
+ messagesDispatcher({
725
+ type: ON_MESSAGE_RECEIVED,
726
+ payload: {
727
+ channel,
728
+ message
729
+ }
730
+ });
731
+ if (scrollToEnd) {
732
+ try {
733
+ setTimeout(() => {
734
+ scrollIntoLast(0, scrollRef);
735
+ });
736
+ } catch (error) {
737
+ logger.warning('OpenChannel | onMessageReceived | scroll to end failed');
738
+ }
739
+ }
740
+ },
741
+ onMessageUpdated: (channel, message) => {
742
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
743
+ logger.info('OpenChannel | useHandleChannelEvents: onMessageUpdated', {
744
+ channelUrl,
745
+ message
746
+ });
747
+ messagesDispatcher({
748
+ type: ON_MESSAGE_UPDATED,
749
+ payload: {
750
+ channel,
751
+ message
752
+ }
753
+ });
754
+ },
755
+ onMessageDeleted: (channel, messageId) => {
756
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
757
+ logger.info('OpenChannel | useHandleChannelEvents: onMessageDeleted', {
758
+ channelUrl,
759
+ messageId
760
+ });
761
+ messagesDispatcher({
762
+ type: ON_MESSAGE_DELETED,
763
+ payload: {
764
+ channel,
765
+ messageId
766
+ }
767
+ });
768
+ },
769
+ onOperatorUpdated: (channel, operators) => {
770
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
771
+ logger.info('OpenChannel | useHandleChannelEvents: onOperatorUpdated', {
772
+ channelUrl,
773
+ operators
774
+ });
775
+ messagesDispatcher({
776
+ type: ON_OPERATOR_UPDATED,
777
+ payload: {
778
+ channel,
779
+ operators
780
+ }
781
+ });
782
+ },
783
+ onUserEntered: (channel, user) => {
784
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
785
+ logger.info('OpenChannel | useHandleChannelEvents: onUserEntered', {
786
+ channelUrl,
787
+ user
788
+ });
789
+ messagesDispatcher({
790
+ type: ON_USER_ENTERED,
791
+ payload: {
792
+ channel,
793
+ user
794
+ }
795
+ });
796
+ },
797
+ onUserExited: (channel, user) => {
798
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
799
+ logger.info('OpenChannel | useHandleChannelEvents: onUserExited', {
800
+ channelUrl,
801
+ user
802
+ });
803
+ messagesDispatcher({
804
+ type: ON_USER_EXITED,
805
+ payload: {
806
+ channel,
807
+ user
808
+ }
809
+ });
810
+ },
811
+ onUserMuted: (channel, user) => {
812
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
813
+ logger.info('OpenChannel | useHandleChannelEvents: onUserMuted', {
814
+ channelUrl,
815
+ user
816
+ });
817
+ messagesDispatcher({
818
+ type: ON_USER_MUTED,
819
+ payload: {
820
+ channel,
821
+ user
822
+ }
823
+ });
824
+ },
825
+ onUserUnmuted: (channel, user) => {
826
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
827
+ logger.info('OpenChannel | useHandleChannelEvents: onUserUnmuted', {
828
+ channelUrl,
829
+ user
830
+ });
831
+ messagesDispatcher({
832
+ type: ON_USER_UNMUTED,
833
+ payload: {
834
+ channel,
835
+ user
836
+ }
837
+ });
838
+ },
839
+ onUserBanned: (channel, user) => {
840
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
841
+ logger.info('OpenChannel | useHandleChannelEvents: onUserBanned', {
842
+ channelUrl,
843
+ user
844
+ });
845
+ messagesDispatcher({
846
+ type: ON_USER_BANNED,
847
+ payload: {
848
+ channel,
849
+ user,
850
+ currentUser: sdk === null || sdk === void 0 ? void 0 : sdk.currentUser
851
+ }
852
+ });
853
+ },
854
+ onUserUnbanned: (channel, user) => {
855
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
856
+ logger.info('OpenChannel | useHandleChannelEvents: onUserUnbanned', {
857
+ channelUrl,
858
+ user
859
+ });
860
+ messagesDispatcher({
861
+ type: ON_USER_UNBANNED,
862
+ payload: {
863
+ channel,
864
+ user
865
+ }
866
+ });
867
+ },
868
+ onChannelFrozen: channel => {
869
+ logger.info('OpenChannel | useHandleChannelEvents: onChannelFrozen', channel);
870
+ messagesDispatcher({
871
+ type: ON_CHANNEL_FROZEN,
872
+ payload: channel
873
+ });
874
+ },
875
+ onChannelUnfrozen: channel => {
876
+ logger.info('OpenChannel | useHandleChannelEvents: onChannelUnfrozen', channel);
877
+ messagesDispatcher({
878
+ type: ON_CHANNEL_UNFROZEN,
879
+ payload: channel
880
+ });
881
+ },
882
+ onChannelChanged: channel => {
883
+ logger.info('OpenChannel | useHandleChannelEvents: onChannelChanged', channel);
884
+ messagesDispatcher({
885
+ type: ON_CHANNEL_CHANGED,
886
+ payload: channel
887
+ });
888
+ },
889
+ onMetaDataCreated: (channel, metaData) => {
890
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
891
+ logger.info('OpenChannel | useHandleChannelEvents: onMetaDataCreated', {
892
+ channelUrl,
893
+ metaData
894
+ });
895
+ messagesDispatcher({
896
+ type: ON_META_DATA_CREATED,
897
+ payload: {
898
+ channel,
899
+ metaData
900
+ }
901
+ });
902
+ },
903
+ onMetaDataUpdated: (channel, metaData) => {
904
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
905
+ logger.info('OpenChannel | useHandleChannelEvents: onMetaDataUpdated', {
906
+ channelUrl,
907
+ metaData
908
+ });
909
+ messagesDispatcher({
910
+ type: ON_META_DATA_UPDATED,
911
+ payload: {
912
+ channel,
913
+ metaData
914
+ }
915
+ });
916
+ },
917
+ onMetaDataDeleted: (channel, metaDataKeys) => {
918
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
919
+ logger.info('OpenChannel | useHandleChannelEvents: onMetaDataDeleted', {
920
+ channelUrl,
921
+ metaDataKeys
922
+ });
923
+ messagesDispatcher({
924
+ type: ON_META_DATA_DELETED,
925
+ payload: {
926
+ channel,
927
+ metaDataKeys
928
+ }
929
+ });
930
+ },
931
+ onMetaCounterCreated: (channel, metaCounter) => {
932
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
933
+ logger.info('OpenChannel | useHandleChannelEvents: onMetaCountersCreated', {
934
+ channelUrl,
935
+ metaCounter
936
+ });
937
+ messagesDispatcher({
938
+ type: ON_META_COUNTERS_CREATED,
939
+ payload: {
940
+ channel,
941
+ metaCounter
942
+ }
943
+ });
944
+ },
945
+ onMetaCounterUpdated: (channel, metaCounter) => {
946
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
947
+ logger.info('OpenChannel | useHandleChannelEvents: onMetaCountersUpdated', {
948
+ channelUrl,
949
+ metaCounter
950
+ });
951
+ messagesDispatcher({
952
+ type: ON_META_COUNTERS_UPDATED,
953
+ payload: {
954
+ channel,
955
+ metaCounter
956
+ }
957
+ });
958
+ },
959
+ onMetaCounterDeleted: (channel, metaCounterKeys) => {
960
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
961
+ logger.info('OpenChannel | useHandleChannelEvents: onMetaCountersDeleted', {
962
+ channelUrl,
963
+ metaCounterKeys
964
+ });
965
+ messagesDispatcher({
966
+ type: ON_META_COUNTERS_DELETED,
967
+ payload: {
968
+ channel,
969
+ metaCounterKeys
970
+ }
971
+ });
972
+ },
973
+ onMentionReceived: (channel, message) => {
974
+ const channelUrl = channel === null || channel === void 0 ? void 0 : channel.url;
975
+ logger.info('OpenChannel | useHandleChannelEvents: onMentionReceived', {
976
+ channelUrl,
977
+ message
978
+ });
979
+ messagesDispatcher({
980
+ type: ON_MENTION_RECEIVED,
981
+ payload: {
982
+ channel,
983
+ message
984
+ }
985
+ });
986
+ },
987
+ onChannelDeleted: (channelUrl, channelType) => {
988
+ if (channelType === ChannelType.OPEN && (currentOpenChannel === null || currentOpenChannel === void 0 ? void 0 : currentOpenChannel.url) === channelUrl) {
989
+ messagesDispatcher({
990
+ type: ON_CHANNEL_DELETED,
991
+ payload: channelUrl
992
+ });
993
+ }
994
+ }
995
+ };
996
+ const ChannelHandler = new OpenChannelHandler(channelHandlerParams);
997
+ sdk === null || sdk === void 0 ? void 0 : (_sdk$openChannel2 = sdk.openChannel) === null || _sdk$openChannel2 === void 0 ? void 0 : _sdk$openChannel2.addOpenChannelHandler(messageReceiverId, ChannelHandler);
998
+ }
999
+ return () => {
1000
+ var _sdk$openChannel3;
1001
+ if (sdk !== null && sdk !== void 0 && (_sdk$openChannel3 = sdk.openChannel) !== null && _sdk$openChannel3 !== void 0 && _sdk$openChannel3.removeOpenChannelHandler) {
1002
+ logger.info('OpenChannel | useHandleChannelEvents: Removing message receiver handler', messageReceiverId);
1003
+ sdk.openChannel.removeOpenChannelHandler(messageReceiverId);
1004
+ }
1005
+ };
1006
+ }, [currentOpenChannel]);
1007
+ }
1008
+
1009
+ function useInitialMessagesFetch(_ref, _ref2) {
1010
+ let {
1011
+ currentOpenChannel,
1012
+ userFilledMessageListParams
1013
+ } = _ref;
1014
+ let {
1015
+ logger,
1016
+ messagesDispatcher,
1017
+ scrollRef
1018
+ } = _ref2;
1019
+ useEffect(() => {
1020
+ logger.info('OpenChannel | useInitialMessagesFetch: Setup started', currentOpenChannel);
1021
+ messagesDispatcher({
1022
+ type: RESET_MESSAGES,
1023
+ payload: null
1024
+ });
1025
+ if (currentOpenChannel && currentOpenChannel.getMessagesByTimestamp) {
1026
+ const messageListParams = {
1027
+ nextResultSize: 0,
1028
+ prevResultSize: 30,
1029
+ isInclusive: true,
1030
+ includeReactions: false
1031
+ };
1032
+ if (userFilledMessageListParams) {
1033
+ Object.keys(userFilledMessageListParams).forEach(key => {
1034
+ messageListParams[key] = userFilledMessageListParams[key];
1035
+ });
1036
+ logger.info('OpenChannel | useInitialMessagesFetch: Used customizedMessageListParams');
1037
+ }
1038
+ logger.info('OpenChannel | useInitialMessagesFetch: Fetching messages', {
1039
+ currentOpenChannel,
1040
+ messageListParams
1041
+ });
1042
+ messagesDispatcher({
1043
+ type: GET_PREV_MESSAGES_START,
1044
+ payload: null
1045
+ });
1046
+ currentOpenChannel.getMessagesByTimestamp(new Date().getTime(), messageListParams).then(messages => {
1047
+ logger.info('OpenChannel | useInitialMessagesFetch: Fetching messages succeeded', messages);
1048
+ const hasMore = messages && messages.length > 0;
1049
+ const lastMessageTimestamp = hasMore ? messages[0].createdAt : null;
1050
+ messagesDispatcher({
1051
+ type: GET_PREV_MESSAGES_SUCESS,
1052
+ payload: {
1053
+ currentOpenChannel,
1054
+ messages,
1055
+ hasMore,
1056
+ lastMessageTimestamp
1057
+ }
1058
+ });
1059
+ setTimeout(() => {
1060
+ scrollIntoLast(0, scrollRef);
1061
+ });
1062
+ }).catch(error => {
1063
+ logger.error('OpenChannel | useInitialMessagesFetch: Fetching messages failed', error);
1064
+ messagesDispatcher({
1065
+ type: GET_PREV_MESSAGES_FAIL,
1066
+ payload: {
1067
+ currentOpenChannel,
1068
+ messages: [],
1069
+ hasMore: false,
1070
+ lastMessageTimestamp: 0
1071
+ }
1072
+ });
1073
+ });
1074
+ }
1075
+ }, [currentOpenChannel, userFilledMessageListParams]);
1076
+ }
1077
+
1078
+ function useScrollCallback(_ref, _ref2) {
1079
+ let {
1080
+ currentOpenChannel,
1081
+ lastMessageTimestamp,
1082
+ fetchMore
1083
+ } = _ref;
1084
+ let {
1085
+ sdk,
1086
+ logger,
1087
+ messagesDispatcher,
1088
+ hasMore,
1089
+ userFilledMessageListParams
1090
+ } = _ref2;
1091
+ return useCallback(callback => {
1092
+ if (fetchMore && hasMore) {
1093
+ logger.info('OpenChannel | useScrollCallback: start');
1094
+ const messageListParams = {
1095
+ prevResultSize: 30,
1096
+ includeReactions: false,
1097
+ nextResultSize: 0
1098
+ };
1099
+ if (userFilledMessageListParams) {
1100
+ Object.keys(userFilledMessageListParams).forEach(key => {
1101
+ messageListParams[key] = userFilledMessageListParams[key];
1102
+ });
1103
+ logger.info('OpenChannel | useScrollCallback: Used userFilledMessageListParams', userFilledMessageListParams);
1104
+ }
1105
+ logger.info('OpenChannel | useScrollCallback: Fetching messages', {
1106
+ currentOpenChannel,
1107
+ messageListParams
1108
+ });
1109
+ currentOpenChannel.getMessagesByTimestamp(lastMessageTimestamp || new Date().getTime(), messageListParams).then(messages => {
1110
+ logger.info('OpenChannel | useScrollCallback: Fetching messages succeeded', messages);
1111
+ const hasMore = messages && messages.length > 0;
1112
+ const lastMessageTimestamp = hasMore ? messages[0].createdAt : null;
1113
+ messagesDispatcher({
1114
+ type: GET_PREV_MESSAGES_SUCESS,
1115
+ payload: {
1116
+ currentOpenChannel,
1117
+ messages,
1118
+ hasMore,
1119
+ lastMessageTimestamp
1120
+ }
1121
+ });
1122
+ setTimeout(() => {
1123
+ callback();
1124
+ });
1125
+ }).catch(error => {
1126
+ logger.error('OpenChannel | useScrollCallback: Fetching messages failed', error);
1127
+ messagesDispatcher({
1128
+ type: GET_PREV_MESSAGES_FAIL,
1129
+ payload: {
1130
+ currentOpenChannel,
1131
+ messages: [],
1132
+ hasMore: false,
1133
+ lastMessageTimestamp: 0
1134
+ }
1135
+ });
1136
+ });
1137
+ }
1138
+ }, [currentOpenChannel, lastMessageTimestamp, fetchMore, sdk]);
1139
+ }
1140
+
1141
+ function useCheckScrollBottom(_ref, _ref2) {
1142
+ let {
1143
+ conversationScrollRef
1144
+ } = _ref;
1145
+ let {
1146
+ logger
1147
+ } = _ref2;
1148
+ return useCallback(() => {
1149
+ let isBottom = true;
1150
+ if (conversationScrollRef && conversationScrollRef !== null && conversationScrollRef !== void 0 && conversationScrollRef.current) {
1151
+ try {
1152
+ const conversationScroll = conversationScrollRef.current;
1153
+ isBottom = conversationScroll.scrollHeight <= conversationScroll.scrollTop + conversationScroll.clientHeight;
1154
+ } catch (error) {
1155
+ logger.error('OpenChannel | useCheckScrollBottom', error);
1156
+ }
1157
+ }
1158
+ return isBottom;
1159
+ }, [conversationScrollRef]);
1160
+ }
1161
+
1162
+ function useSendMessageCallback(_ref, _ref2) {
1163
+ let {
1164
+ currentOpenChannel,
1165
+ onBeforeSendUserMessage,
1166
+ checkScrollBottom,
1167
+ messageInputRef
1168
+ } = _ref;
1169
+ let {
1170
+ sdk,
1171
+ logger,
1172
+ messagesDispatcher,
1173
+ scrollRef
1174
+ } = _ref2;
1175
+ return useCallback(() => {
1176
+ if (sdk) {
1177
+ const text = messageInputRef.current.innerText;
1178
+ const createParamsDefault = txt => {
1179
+ const message = txt;
1180
+ const params = {
1181
+ message: message
1182
+ };
1183
+ return params;
1184
+ };
1185
+ const createCustomParams = onBeforeSendUserMessage && typeof onBeforeSendUserMessage === 'function';
1186
+ if (createCustomParams) {
1187
+ logger.info('OpenChannel | useSendMessageCallback: Creating params using onBeforeSendUserMessage', onBeforeSendUserMessage);
1188
+ }
1189
+ const params = onBeforeSendUserMessage ? onBeforeSendUserMessage(text) : createParamsDefault(text);
1190
+ logger.info('OpenChannel | useSendMessageCallback: Sending message has started', params);
1191
+ const isBottom = checkScrollBottom();
1192
+ let pendingMsg = null;
1193
+ currentOpenChannel.sendUserMessage(params).onPending(pendingMessage => {
1194
+ messagesDispatcher({
1195
+ type: SENDING_MESSAGE_START,
1196
+ payload: {
1197
+ message: pendingMessage,
1198
+ channel: currentOpenChannel
1199
+ }
1200
+ });
1201
+ pendingMsg = pendingMessage;
1202
+ }).onSucceeded(message => {
1203
+ logger.info('OpenChannel | useSendMessageCallback: Sending message succeeded', message);
1204
+ messagesDispatcher({
1205
+ type: SENDING_MESSAGE_SUCCEEDED,
1206
+ payload: message
1207
+ });
1208
+ if (isBottom) {
1209
+ setTimeout(() => {
1210
+ scrollIntoLast(0, scrollRef);
1211
+ });
1212
+ }
1213
+ }).onFailed(error => {
1214
+ logger.warning('OpenChannel | useSendMessageCallback: Sending message failed', error);
1215
+ messagesDispatcher({
1216
+ type: SENDING_MESSAGE_FAILED,
1217
+ payload: pendingMsg
1218
+ });
1219
+ // https://sendbird.com/docs/chat/v3/javascript/guides/error-codes#2-server-error-codes
1220
+ // TODO: Do we need to handle the error cases?
1221
+ // @ts-ignore
1222
+ if ((error === null || error === void 0 ? void 0 : error.code) === 900041) {
1223
+ messagesDispatcher({
1224
+ type: ON_USER_MUTED,
1225
+ payload: {
1226
+ channel: currentOpenChannel,
1227
+ user: sdk.currentUser
1228
+ }
1229
+ });
1230
+ }
1231
+ });
1232
+ }
1233
+ }, [currentOpenChannel, onBeforeSendUserMessage, checkScrollBottom, messageInputRef]);
1234
+ }
1235
+
1236
+ function useFileUploadCallback(_ref, _ref2) {
1237
+ let {
1238
+ currentOpenChannel,
1239
+ checkScrollBottom,
1240
+ imageCompression = {},
1241
+ onBeforeSendFileMessage
1242
+ } = _ref;
1243
+ let {
1244
+ sdk,
1245
+ logger,
1246
+ messagesDispatcher,
1247
+ scrollRef
1248
+ } = _ref2;
1249
+ return useCallback(file => {
1250
+ if (sdk) {
1251
+ const {
1252
+ compressionRate,
1253
+ resizingWidth,
1254
+ resizingHeight
1255
+ } = imageCompression;
1256
+ const createCustomParams = onBeforeSendFileMessage && typeof onBeforeSendFileMessage === 'function';
1257
+ const compressibleFileType = file.type === 'image/jpg' || file.type === 'image/png' || file.type === 'image/jpeg';
1258
+ const compressibleRatio = compressionRate > 0 && compressionRate < 1;
1259
+ // pxToNumber returns null if values are invalid
1260
+ const compressibleDiamensions = pxToNumber(resizingWidth) || pxToNumber(resizingHeight);
1261
+ const canCompressImage = compressibleFileType && (compressibleRatio || compressibleDiamensions);
1262
+ const createParamsDefault = file_ => {
1263
+ const params = {};
1264
+ params.file = file_;
1265
+ return params;
1266
+ };
1267
+ if (canCompressImage) {
1268
+ // Using image compression
1269
+ try {
1270
+ const image = document.createElement('img');
1271
+ image.src = URL.createObjectURL(file);
1272
+ image.onload = () => {
1273
+ URL.revokeObjectURL(image.src);
1274
+ const canvas = document.createElement('canvas');
1275
+ const imageWidth = image.naturalWidth || image.width;
1276
+ const imageHeight = image.naturalHeight || image.height;
1277
+ let targetWidth = pxToNumber(resizingWidth) || imageWidth;
1278
+ let targetHeight = pxToNumber(resizingHeight) || imageHeight;
1279
+
1280
+ // In canvas.toBlob(callback, mimeType, qualityArgument)
1281
+ // qualityArgument doesnt work
1282
+ // so in case compressibleDiamensions are not present, we use ratio
1283
+ if (file.type === 'image/png' && !compressibleDiamensions) {
1284
+ targetWidth *= compressionRate;
1285
+ targetHeight *= compressionRate;
1286
+ }
1287
+ canvas.width = targetWidth;
1288
+ canvas.height = targetHeight;
1289
+ const context = canvas.getContext('2d');
1290
+ context.drawImage(image, 0, 0, targetWidth, targetHeight);
1291
+ context.canvas.toBlob(newImageBlob => {
1292
+ const compressedFile = new File([newImageBlob], file.name, {
1293
+ type: file.type
1294
+ });
1295
+ if (createCustomParams) {
1296
+ logger.info('OpenChannel | useFileUploadCallback: Creating params using onBeforeSendFileMessage', onBeforeSendFileMessage);
1297
+ }
1298
+ const params = onBeforeSendFileMessage ? onBeforeSendFileMessage(compressedFile) : createParamsDefault(compressedFile);
1299
+ logger.info('OpenChannel | useFileUploadCallback: Uploading file message start', params);
1300
+ const isBottom = checkScrollBottom();
1301
+ currentOpenChannel.sendFileMessage(params).onPending(pendingMessage => {
1302
+ messagesDispatcher({
1303
+ type: SENDING_MESSAGE_START,
1304
+ payload: {
1305
+ message: _objectSpread2(_objectSpread2({}, pendingMessage), {}, {
1306
+ url: URL.createObjectURL(file),
1307
+ // pending thumbnail message seems to be failed
1308
+ requestState: 'pending'
1309
+ }),
1310
+ channel: currentOpenChannel
1311
+ }
1312
+ });
1313
+ }).onSucceeded(message => {
1314
+ logger.info('OpenChannel | useFileUploadCallback: Sending message succeeded', message);
1315
+ messagesDispatcher({
1316
+ type: SENDING_MESSAGE_SUCCEEDED,
1317
+ payload: message
1318
+ });
1319
+ if (isBottom) {
1320
+ setTimeout(() => {
1321
+ scrollIntoLast(0, scrollRef);
1322
+ });
1323
+ }
1324
+ }).onFailed((error, message) => {
1325
+ logger.error('OpenChannel | useFileUploadCallback: Sending file message failed', {
1326
+ message,
1327
+ error
1328
+ });
1329
+ // @ts-ignore
1330
+ message.localUrl = URL.createObjectURL(file);
1331
+ // @ts-ignore
1332
+ message.file = file;
1333
+ messagesDispatcher({
1334
+ type: SENDING_MESSAGE_FAILED,
1335
+ payload: message
1336
+ });
1337
+ });
1338
+ }, file.type, compressionRate);
1339
+ };
1340
+ } catch (error) {
1341
+ logger.warning('OpenChannel | useFileUploadCallback: Sending file message with image compression failed', error);
1342
+ }
1343
+ } else {
1344
+ // Not using image compression
1345
+ if (createCustomParams) {
1346
+ logger.info('OpenChannel | useFileUploadCallback: Creating params using onBeforeSendFileMessage', onBeforeSendFileMessage);
1347
+ }
1348
+ const params = onBeforeSendFileMessage ? onBeforeSendFileMessage(file) : createParamsDefault(file);
1349
+ logger.info('OpenChannel | useFileUploadCallback: Uploading file message start', params);
1350
+ const isBottom = checkScrollBottom();
1351
+ currentOpenChannel.sendFileMessage(params).onPending(pendingMessage => {
1352
+ messagesDispatcher({
1353
+ type: SENDING_MESSAGE_START,
1354
+ payload: {
1355
+ message: _objectSpread2(_objectSpread2({}, pendingMessage), {}, {
1356
+ url: URL.createObjectURL(file),
1357
+ // pending thumbnail message seems to be failed
1358
+ requestState: 'pending'
1359
+ }),
1360
+ channel: currentOpenChannel
1361
+ }
1362
+ });
1363
+ }).onSucceeded(message => {
1364
+ logger.info('OpenChannel | useFileUploadCallback: Sending message succeeded', message);
1365
+ messagesDispatcher({
1366
+ type: SENDING_MESSAGE_SUCCEEDED,
1367
+ payload: message
1368
+ });
1369
+ if (isBottom) {
1370
+ setTimeout(() => {
1371
+ scrollIntoLast(0, scrollRef);
1372
+ });
1373
+ }
1374
+ }).onFailed((error, message) => {
1375
+ logger.error('OpenChannel | useFileUploadCallback: Sending file message failed', {
1376
+ message,
1377
+ error
1378
+ });
1379
+ // @ts-ignore
1380
+ message.localUrl = URL.createObjectURL(file);
1381
+ // @ts-ignore
1382
+ message.file = file;
1383
+ messagesDispatcher({
1384
+ type: SENDING_MESSAGE_FAILED,
1385
+ payload: message
1386
+ });
1387
+ });
1388
+ }
1389
+ }
1390
+ }, [currentOpenChannel, onBeforeSendFileMessage, checkScrollBottom, imageCompression]);
1391
+ }
1392
+
1393
+ function useUpdateMessageCallback(_ref, _ref2) {
1394
+ let {
1395
+ currentOpenChannel,
1396
+ onBeforeSendUserMessage
1397
+ } = _ref;
1398
+ let {
1399
+ logger,
1400
+ messagesDispatcher
1401
+ } = _ref2;
1402
+ return useCallback((messageId, text, callback) => {
1403
+ const createParamsDefault = txt => {
1404
+ const params = {
1405
+ message: txt
1406
+ };
1407
+ return params;
1408
+ };
1409
+ if (onBeforeSendUserMessage && typeof onBeforeSendUserMessage === 'function') {
1410
+ logger.info('OpenChannel | useUpdateMessageCallback: Creating params using onBeforeUpdateUserMessage');
1411
+ }
1412
+ const params = onBeforeSendUserMessage ? onBeforeSendUserMessage(text) : createParamsDefault(text);
1413
+ currentOpenChannel.updateUserMessage(messageId, params).then(message => {
1414
+ if (callback) {
1415
+ callback();
1416
+ }
1417
+ logger.info('OpenChannel | useUpdateMessageCallback: Updating message succeeded', {
1418
+ message,
1419
+ params
1420
+ });
1421
+ messagesDispatcher({
1422
+ type: ON_MESSAGE_UPDATED,
1423
+ payload: {
1424
+ channel: currentOpenChannel,
1425
+ message
1426
+ }
1427
+ });
1428
+ });
1429
+ }, [currentOpenChannel, onBeforeSendUserMessage]);
1430
+ }
1431
+
1432
+ function useDeleteMessageCallback(_ref, _ref2) {
1433
+ let {
1434
+ currentOpenChannel
1435
+ } = _ref;
1436
+ let {
1437
+ logger,
1438
+ messagesDispatcher
1439
+ } = _ref2;
1440
+ return useCallback((message, callback) => {
1441
+ logger.info('OpenChannel | useDeleteMessageCallback: Deleting message', message);
1442
+ const {
1443
+ sendingStatus
1444
+ } = message;
1445
+ logger.info('OpenChannel | useDeleteMessageCallback: Deleting message requestState', sendingStatus);
1446
+ if (sendingStatus === 'failed' || sendingStatus === 'pending') {
1447
+ logger.info('OpenChannel | useDeleteMessageCallback: Deleted message from local', message);
1448
+ messagesDispatcher({
1449
+ type: ON_MESSAGE_DELETED_BY_REQ_ID,
1450
+ payload: message.reqId
1451
+ });
1452
+ if (callback) {
1453
+ callback();
1454
+ }
1455
+ } else {
1456
+ if (!(message.messageType === 'file' || message.messageType === 'user')) {
1457
+ return;
1458
+ }
1459
+ const messageToDelete = message;
1460
+ currentOpenChannel.deleteMessage(messageToDelete).then(() => {
1461
+ logger.info('OpenChannel | useDeleteMessageCallback: Deleting message on server', sendingStatus);
1462
+ if (callback) {
1463
+ callback();
1464
+ }
1465
+ logger.info('OpenChannel | useDeleteMessageCallback: Deleting message succeeded', message);
1466
+ messagesDispatcher({
1467
+ type: ON_MESSAGE_DELETED,
1468
+ payload: {
1469
+ channel: currentOpenChannel,
1470
+ messageId: message.messageId
1471
+ }
1472
+ });
1473
+ }).catch(error => {
1474
+ logger.warning('OpenChannel | useDeleteMessageCallback: Deleting message failed', error);
1475
+ });
1476
+ }
1477
+ }, [currentOpenChannel]);
1478
+ }
1479
+
1480
+ function useResendMessageCallback(_ref, _ref2) {
1481
+ let {
1482
+ currentOpenChannel
1483
+ } = _ref;
1484
+ let {
1485
+ logger,
1486
+ messagesDispatcher
1487
+ } = _ref2;
1488
+ return useCallback(failedMessage => {
1489
+ logger.info('OpenChannel | useResendMessageCallback: Resending message has started', failedMessage);
1490
+ // eslint-disable-next-line no-param-reassign
1491
+ const {
1492
+ messageType,
1493
+ file
1494
+ } = failedMessage;
1495
+ if (failedMessage && typeof failedMessage.isResendable === 'function' && failedMessage.isResendable) {
1496
+ // eslint-disable-next-line no-param-reassign
1497
+ failedMessage.requestState = 'pending';
1498
+ messagesDispatcher({
1499
+ type: RESENDING_MESSAGE_START,
1500
+ payload: {
1501
+ channel: currentOpenChannel,
1502
+ message: failedMessage
1503
+ }
1504
+ });
1505
+
1506
+ // userMessage
1507
+ if (messageType === 'user' && failedMessage.messageType === 'user') {
1508
+ currentOpenChannel.resendUserMessage(failedMessage).then(message => {
1509
+ logger.info('OpenChannel | useResendMessageCallback: Reseding message succeeded', message);
1510
+ messagesDispatcher({
1511
+ type: SENDING_MESSAGE_SUCCEEDED,
1512
+ payload: message
1513
+ });
1514
+ }).catch(error => {
1515
+ logger.warning('OpenChannel | useResendMessageCallback: Resending message failed', error);
1516
+ // eslint-disable-next-line no-param-reassign
1517
+ failedMessage.requestState = 'failed';
1518
+ messagesDispatcher({
1519
+ type: SENDING_MESSAGE_FAILED,
1520
+ payload: failedMessage
1521
+ });
1522
+ });
1523
+ }
1524
+
1525
+ // fileMessage
1526
+ if (messageType === 'file' && failedMessage.messageType === 'file') {
1527
+ currentOpenChannel.resendFileMessage(failedMessage, file).then(message => {
1528
+ logger.info('OpenChannel | useResendMessageCallback: Resending file message succeeded', message);
1529
+ messagesDispatcher({
1530
+ type: SENDING_MESSAGE_SUCCEEDED,
1531
+ payload: message
1532
+ });
1533
+ }).catch(error => {
1534
+ logger.warning('OpenChannel | useResendMessageCallback: Resending file message failed', error);
1535
+ // eslint-disable-next-line no-param-reassign
1536
+ failedMessage.requestState = 'failed';
1537
+ messagesDispatcher({
1538
+ type: SENDING_MESSAGE_FAILED,
1539
+ payload: failedMessage
1540
+ });
1541
+ });
1542
+ }
1543
+ } else {
1544
+ // to alert user on console
1545
+ // eslint-disable-next-line no-console
1546
+ console.error('OpenChannel | useResendMessageCallback: Message is not resendable');
1547
+ logger.warning('OpenChannel | useResendMessageCallback: Message is not resendable', failedMessage);
1548
+ }
1549
+ }, [currentOpenChannel]);
1550
+ }
1551
+
1552
+ const THROTTLE_TIMER = 5000;
1553
+
1554
+ // to trim message list so that we wont keep thousands of messages in memory
1555
+ // We are throttling here; not debouncing
1556
+ // it will be called once very 5 sec if messagesLength, messageLimit changes
1557
+ // we check if messagesLength > messageLimit before dispatching action
1558
+ function useTrimMessageList(_ref, _ref2) {
1559
+ let {
1560
+ messagesLength,
1561
+ messageLimit
1562
+ } = _ref;
1563
+ let {
1564
+ messagesDispatcher,
1565
+ logger
1566
+ } = _ref2;
1567
+ const [inProgress, setInProgress] = useState(false);
1568
+ useEffect(() => {
1569
+ if (inProgress) {
1570
+ return;
1571
+ }
1572
+ if (typeof messagesLength === 'number' && messagesLength > messageLimit) {
1573
+ logger.info('Trimming MessageList');
1574
+ messagesDispatcher({
1575
+ type: TRIM_MESSAGE_LIST,
1576
+ payload: {
1577
+ messageLimit
1578
+ }
1579
+ });
1580
+ }
1581
+ setInProgress(true);
1582
+ setTimeout(() => {
1583
+ setInProgress(false);
1584
+ }, THROTTLE_TIMER);
1585
+ }, [messagesLength, messageLimit]);
1586
+ }
1587
+
1588
+ const OpenChannelContext = /*#__PURE__*/React__default.createContext(undefined);
1589
+ const OpenChannelProvider = props => {
1590
+ var _globalStore$stores, _globalStore$stores$s, _globalStore$stores2, _globalStore$stores2$, _globalStore$stores3, _globalStore$stores3$;
1591
+ const {
1592
+ channelUrl,
1593
+ children,
1594
+ isMessageGroupingEnabled = true,
1595
+ queries,
1596
+ onBeforeSendUserMessage,
1597
+ messageLimit,
1598
+ onBeforeSendFileMessage,
1599
+ onChatHeaderActionClick,
1600
+ onBackClick
1601
+ } = props;
1602
+
1603
+ // We didn't decide to support fetching participant list
1604
+ const fetchingParticipants = false;
1605
+ const globalStore = useSendbirdStateContext();
1606
+ const sdk = globalStore === null || globalStore === void 0 ? void 0 : (_globalStore$stores = globalStore.stores) === null || _globalStore$stores === void 0 ? void 0 : (_globalStore$stores$s = _globalStore$stores.sdkStore) === null || _globalStore$stores$s === void 0 ? void 0 : _globalStore$stores$s.sdk;
1607
+ const sdkInit = globalStore === null || globalStore === void 0 ? void 0 : (_globalStore$stores2 = globalStore.stores) === null || _globalStore$stores2 === void 0 ? void 0 : (_globalStore$stores2$ = _globalStore$stores2.sdkStore) === null || _globalStore$stores2$ === void 0 ? void 0 : _globalStore$stores2$.initialized;
1608
+ const user = globalStore === null || globalStore === void 0 ? void 0 : (_globalStore$stores3 = globalStore.stores) === null || _globalStore$stores3 === void 0 ? void 0 : (_globalStore$stores3$ = _globalStore$stores3.userStore) === null || _globalStore$stores3$ === void 0 ? void 0 : _globalStore$stores3$.user;
1609
+ const config = globalStore === null || globalStore === void 0 ? void 0 : globalStore.config;
1610
+ const {
1611
+ userId,
1612
+ isOnline,
1613
+ logger,
1614
+ pubSub,
1615
+ imageCompression
1616
+ } = config;
1617
+
1618
+ // hook variables
1619
+ const [messagesStore, messagesDispatcher] = useReducer(reducer, initialState);
1620
+ const {
1621
+ allMessages,
1622
+ loading,
1623
+ initialized,
1624
+ currentOpenChannel,
1625
+ isInvalid,
1626
+ hasMore,
1627
+ lastMessageTimestamp,
1628
+ operators,
1629
+ bannedParticipantIds,
1630
+ mutedParticipantIds
1631
+ } = messagesStore;
1632
+ // ref
1633
+ const messageInputRef = useRef(null); // useSendMessageCallback
1634
+ const conversationScrollRef = useRef(null); // useScrollAfterSendMessageCallback
1635
+
1636
+ // const
1637
+ const userFilledMessageListParams = queries === null || queries === void 0 ? void 0 : queries.messageListParams;
1638
+ const disabled = !initialized || !isOnline || isDisabledBecauseFrozen(currentOpenChannel, userId) || isDisabledBecauseMuted(mutedParticipantIds, userId);
1639
+
1640
+ // useMemo
1641
+ const amIBanned = useMemo(() => {
1642
+ return bannedParticipantIds.indexOf(user.userId) >= 0;
1643
+ }, [channelUrl, bannedParticipantIds, user]);
1644
+ const amIMuted = useMemo(() => {
1645
+ return mutedParticipantIds.indexOf(user.userId) >= 0;
1646
+ }, [channelUrl, mutedParticipantIds, user]);
1647
+ const amIOperator = useMemo(() => {
1648
+ return operators.map(operator => operator.userId).indexOf(user.userId) >= 0;
1649
+ }, [channelUrl, operators, user]);
1650
+
1651
+ // use hooks
1652
+ useSetChannel({
1653
+ channelUrl,
1654
+ sdkInit,
1655
+ fetchingParticipants,
1656
+ userId,
1657
+ currentOpenChannel
1658
+ }, {
1659
+ sdk,
1660
+ logger,
1661
+ messagesDispatcher
1662
+ });
1663
+ const checkScrollBottom = useCheckScrollBottom({
1664
+ conversationScrollRef
1665
+ }, {
1666
+ logger
1667
+ });
1668
+ useHandleChannelEvents({
1669
+ currentOpenChannel,
1670
+ checkScrollBottom
1671
+ }, {
1672
+ sdk,
1673
+ logger,
1674
+ messagesDispatcher,
1675
+ scrollRef: conversationScrollRef
1676
+ });
1677
+ useInitialMessagesFetch({
1678
+ currentOpenChannel,
1679
+ userFilledMessageListParams
1680
+ }, {
1681
+ logger,
1682
+ messagesDispatcher,
1683
+ scrollRef: conversationScrollRef
1684
+ });
1685
+ const fetchMore = shouldFetchMore(allMessages === null || allMessages === void 0 ? void 0 : allMessages.length, messageLimit);
1686
+ // donot fetch more for streaming
1687
+ const onScroll = useScrollCallback({
1688
+ currentOpenChannel,
1689
+ lastMessageTimestamp,
1690
+ fetchMore
1691
+ }, {
1692
+ sdk,
1693
+ logger,
1694
+ messagesDispatcher,
1695
+ hasMore,
1696
+ userFilledMessageListParams
1697
+ });
1698
+ const handleSendMessage = useSendMessageCallback({
1699
+ currentOpenChannel,
1700
+ onBeforeSendUserMessage,
1701
+ checkScrollBottom,
1702
+ messageInputRef
1703
+ }, {
1704
+ sdk,
1705
+ logger,
1706
+ messagesDispatcher,
1707
+ scrollRef: conversationScrollRef
1708
+ });
1709
+ const handleFileUpload = useFileUploadCallback({
1710
+ currentOpenChannel,
1711
+ onBeforeSendFileMessage,
1712
+ checkScrollBottom,
1713
+ imageCompression
1714
+ }, {
1715
+ sdk,
1716
+ logger,
1717
+ messagesDispatcher,
1718
+ scrollRef: conversationScrollRef
1719
+ });
1720
+ const updateMessage = useUpdateMessageCallback({
1721
+ currentOpenChannel,
1722
+ onBeforeSendUserMessage
1723
+ }, {
1724
+ logger,
1725
+ messagesDispatcher
1726
+ });
1727
+ const deleteMessage = useDeleteMessageCallback({
1728
+ currentOpenChannel
1729
+ }, {
1730
+ logger,
1731
+ messagesDispatcher
1732
+ });
1733
+ const resendMessage = useResendMessageCallback({
1734
+ currentOpenChannel
1735
+ }, {
1736
+ logger,
1737
+ messagesDispatcher
1738
+ });
1739
+ useTrimMessageList({
1740
+ messagesLength: allMessages === null || allMessages === void 0 ? void 0 : allMessages.length,
1741
+ messageLimit
1742
+ }, {
1743
+ messagesDispatcher,
1744
+ logger
1745
+ });
1746
+
1747
+ // handle API calls from withSendbird
1748
+ useEffect(() => {
1749
+ const subscriber = new Map();
1750
+ if (!pubSub || !pubSub.subscribe) {
1751
+ return;
1752
+ }
1753
+ subscriber.set(PUBSUB_TOPICS.SEND_USER_MESSAGE, pubSub.subscribe(PUBSUB_TOPICS.SEND_USER_MESSAGE, msg => {
1754
+ const {
1755
+ channel,
1756
+ message
1757
+ } = msg;
1758
+ scrollIntoLast(0, conversationScrollRef);
1759
+ if (channel && channelUrl === (channel === null || channel === void 0 ? void 0 : channel.url)) {
1760
+ messagesDispatcher({
1761
+ type: SENDING_MESSAGE_SUCCEEDED,
1762
+ payload: message
1763
+ });
1764
+ }
1765
+ }));
1766
+ subscriber.set(PUBSUB_TOPICS.SEND_MESSAGE_START, pubSub.subscribe(PUBSUB_TOPICS.SEND_MESSAGE_START, msg => {
1767
+ const {
1768
+ channel,
1769
+ message
1770
+ } = msg;
1771
+ if (channel && channelUrl === (channel === null || channel === void 0 ? void 0 : channel.url)) {
1772
+ messagesDispatcher({
1773
+ type: SENDING_MESSAGE_START,
1774
+ payload: {
1775
+ message,
1776
+ channel
1777
+ }
1778
+ });
1779
+ }
1780
+ }));
1781
+ subscriber.set(PUBSUB_TOPICS.SEND_FILE_MESSAGE, pubSub.subscribe(PUBSUB_TOPICS.SEND_FILE_MESSAGE, msg => {
1782
+ const {
1783
+ channel,
1784
+ message
1785
+ } = msg;
1786
+ scrollIntoLast(0, conversationScrollRef);
1787
+ if (channel && channelUrl === (channel === null || channel === void 0 ? void 0 : channel.url)) {
1788
+ messagesDispatcher({
1789
+ type: SENDING_MESSAGE_SUCCEEDED,
1790
+ payload: {
1791
+ message,
1792
+ channel
1793
+ }
1794
+ });
1795
+ }
1796
+ }));
1797
+ subscriber.set(PUBSUB_TOPICS.UPDATE_USER_MESSAGE, pubSub.subscribe(PUBSUB_TOPICS.UPDATE_USER_MESSAGE, msg => {
1798
+ const {
1799
+ channel,
1800
+ message,
1801
+ fromSelector
1802
+ } = msg;
1803
+ if (fromSelector && channel && channelUrl === (channel === null || channel === void 0 ? void 0 : channel.url)) {
1804
+ messagesDispatcher({
1805
+ type: ON_MESSAGE_UPDATED,
1806
+ payload: {
1807
+ channel,
1808
+ message
1809
+ }
1810
+ });
1811
+ }
1812
+ }));
1813
+ subscriber.set(PUBSUB_TOPICS.DELETE_MESSAGE, pubSub.subscribe(PUBSUB_TOPICS.DELETE_MESSAGE, msg => {
1814
+ const {
1815
+ channel,
1816
+ messageId
1817
+ } = msg;
1818
+ if (channel && channelUrl === (channel === null || channel === void 0 ? void 0 : channel.url)) {
1819
+ messagesDispatcher({
1820
+ type: ON_MESSAGE_DELETED,
1821
+ payload: messageId
1822
+ });
1823
+ }
1824
+ }));
1825
+ return () => {
1826
+ if (subscriber) {
1827
+ subscriber.forEach(s => {
1828
+ try {
1829
+ s.remove();
1830
+ } catch (_unused) {
1831
+ //
1832
+ }
1833
+ });
1834
+ }
1835
+ };
1836
+ }, [channelUrl, sdkInit]);
1837
+ return /*#__PURE__*/React__default.createElement(OpenChannelContext.Provider, {
1838
+ value: {
1839
+ // props
1840
+ channelUrl,
1841
+ children,
1842
+ isMessageGroupingEnabled,
1843
+ queries,
1844
+ onBeforeSendUserMessage,
1845
+ messageLimit,
1846
+ onBeforeSendFileMessage,
1847
+ onChatHeaderActionClick,
1848
+ onBackClick,
1849
+ // store
1850
+ allMessages,
1851
+ loading,
1852
+ initialized,
1853
+ currentOpenChannel,
1854
+ isInvalid,
1855
+ hasMore,
1856
+ lastMessageTimestamp,
1857
+ operators,
1858
+ bannedParticipantIds,
1859
+ mutedParticipantIds,
1860
+ // derived/utils
1861
+ messageInputRef,
1862
+ conversationScrollRef,
1863
+ disabled,
1864
+ amIBanned,
1865
+ amIMuted,
1866
+ amIOperator,
1867
+ checkScrollBottom,
1868
+ fetchMore,
1869
+ onScroll,
1870
+ handleSendMessage,
1871
+ handleFileUpload,
1872
+ updateMessage,
1873
+ deleteMessage,
1874
+ resendMessage
1875
+ }
1876
+ }, /*#__PURE__*/React__default.createElement(UserProfileProvider, {
1877
+ isOpenChannel: true,
1878
+ renderUserProfile: props === null || props === void 0 ? void 0 : props.renderUserProfile,
1879
+ disableUserProfile: props === null || props === void 0 ? void 0 : props.disableUserProfile
1880
+ }, children));
1881
+ };
1882
+ const useOpenChannelContext = () => React__default.useContext(OpenChannelContext);
1883
+
1884
+ export { OpenChannelProvider as O, compareMessagesForGrouping as c, kFormatter as k, useOpenChannelContext as u };
1885
+ //# sourceMappingURL=OpenChannelProvider-24cd68b9.js.map