@sendbird/uikit-react 3.4.6 → 3.4.7-rc.0

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