@sendbird/uikit-react-native 2.5.0 → 3.0.0-rc.1

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 (326) hide show
  1. package/README.md +6 -1
  2. package/lib/commonjs/components/{MessageRenderer/MessageTime.js → ChannelInput/AttachmentsButton.js} +20 -17
  3. package/lib/commonjs/components/ChannelInput/AttachmentsButton.js.map +1 -0
  4. package/lib/commonjs/components/ChannelInput/EditInput.js +10 -18
  5. package/lib/commonjs/components/ChannelInput/EditInput.js.map +1 -1
  6. package/lib/commonjs/components/ChannelInput/SendInput.js +220 -163
  7. package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
  8. package/lib/commonjs/components/ChannelInput/index.js +5 -3
  9. package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
  10. package/lib/commonjs/components/ChannelMessageList/index.js +27 -27
  11. package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
  12. package/lib/commonjs/components/ChatFlatList/FlatListInternal.js +33 -0
  13. package/lib/commonjs/components/ChatFlatList/FlatListInternal.js.map +1 -0
  14. package/lib/commonjs/components/{ChatFlatList.js → ChatFlatList/index.js} +5 -7
  15. package/lib/commonjs/components/ChatFlatList/index.js.map +1 -0
  16. package/lib/commonjs/components/{MessageRenderer/MessageDateSeparator.js → GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js} +3 -3
  17. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js.map +1 -0
  18. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js +47 -0
  19. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js.map +1 -0
  20. package/lib/commonjs/components/{MessageRenderer/MessageOutgoingStatus.js → GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.js} +11 -14
  21. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.js.map +1 -0
  22. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +204 -0
  23. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -0
  24. package/lib/commonjs/components/MessageSearchResultItem.js +3 -2
  25. package/lib/commonjs/components/MessageSearchResultItem.js.map +1 -1
  26. package/lib/commonjs/components/OpenChannelMessageRenderer/index.js +15 -9
  27. package/lib/commonjs/components/OpenChannelMessageRenderer/index.js.map +1 -1
  28. package/lib/commonjs/constants.js +1 -7
  29. package/lib/commonjs/constants.js.map +1 -1
  30. package/lib/commonjs/containers/GroupChannelPreviewContainer.js +13 -13
  31. package/lib/commonjs/containers/GroupChannelPreviewContainer.js.map +1 -1
  32. package/lib/commonjs/containers/SendbirdUIKitContainer.js +29 -19
  33. package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
  34. package/lib/commonjs/contexts/SendbirdChatCtx.js +17 -14
  35. package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
  36. package/lib/commonjs/contexts/UserProfileCtx.js +6 -4
  37. package/lib/commonjs/contexts/UserProfileCtx.js.map +1 -1
  38. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput.js +4 -13
  39. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput.js.map +1 -1
  40. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  41. package/lib/commonjs/domain/groupChannelList/component/GroupChannelListList.js +10 -6
  42. package/lib/commonjs/domain/groupChannelList/component/GroupChannelListList.js.map +1 -1
  43. package/lib/commonjs/domain/groupChannelList/component/GroupChannelListTypeSelector.js +3 -3
  44. package/lib/commonjs/domain/groupChannelList/component/GroupChannelListTypeSelector.js.map +1 -1
  45. package/lib/commonjs/domain/groupChannelList/types.js.map +1 -1
  46. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +11 -10
  47. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
  48. package/lib/commonjs/domain/openChannel/component/OpenChannelInput.js +4 -8
  49. package/lib/commonjs/domain/openChannel/component/OpenChannelInput.js.map +1 -1
  50. package/lib/commonjs/domain/openChannel/types.js.map +1 -1
  51. package/lib/commonjs/domain/openChannelList/component/OpenChannelListList.js +3 -1
  52. package/lib/commonjs/domain/openChannelList/component/OpenChannelListList.js.map +1 -1
  53. package/lib/commonjs/domain/openChannelList/types.js.map +1 -1
  54. package/lib/commonjs/fragments/createGroupChannelCreateFragment.js +1 -1
  55. package/lib/commonjs/fragments/createGroupChannelCreateFragment.js.map +1 -1
  56. package/lib/commonjs/fragments/createGroupChannelFragment.js +22 -100
  57. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  58. package/lib/commonjs/fragments/createGroupChannelInviteFragment.js +1 -1
  59. package/lib/commonjs/fragments/createGroupChannelInviteFragment.js.map +1 -1
  60. package/lib/commonjs/fragments/createGroupChannelListFragment.js +8 -13
  61. package/lib/commonjs/fragments/createGroupChannelListFragment.js.map +1 -1
  62. package/lib/commonjs/fragments/createMessageSearchFragment.js +2 -2
  63. package/lib/commonjs/fragments/createMessageSearchFragment.js.map +1 -1
  64. package/lib/commonjs/fragments/createOpenChannelFragment.js +1 -7
  65. package/lib/commonjs/fragments/createOpenChannelFragment.js.map +1 -1
  66. package/lib/commonjs/fragments/createOpenChannelListFragment.js +2 -1
  67. package/lib/commonjs/fragments/createOpenChannelListFragment.js.map +1 -1
  68. package/lib/commonjs/hooks/useConnection.js +11 -7
  69. package/lib/commonjs/hooks/useConnection.js.map +1 -1
  70. package/lib/commonjs/hooks/useMentionTextInput.js +3 -2
  71. package/lib/commonjs/hooks/useMentionTextInput.js.map +1 -1
  72. package/lib/commonjs/index.js +20 -4
  73. package/lib/commonjs/index.js.map +1 -1
  74. package/lib/commonjs/libs/MentionManager.js +8 -9
  75. package/lib/commonjs/libs/MentionManager.js.map +1 -1
  76. package/lib/commonjs/libs/SBUUtils.js +7 -3
  77. package/lib/commonjs/libs/SBUUtils.js.map +1 -1
  78. package/lib/commonjs/localization/StringSet.type.js.map +1 -1
  79. package/lib/commonjs/localization/createBaseStringSet.js +20 -62
  80. package/lib/commonjs/localization/createBaseStringSet.js.map +1 -1
  81. package/lib/commonjs/version.js +1 -1
  82. package/lib/commonjs/version.js.map +1 -1
  83. package/lib/module/components/ChannelInput/AttachmentsButton.js +29 -0
  84. package/lib/module/components/ChannelInput/AttachmentsButton.js.map +1 -0
  85. package/lib/module/components/ChannelInput/EditInput.js +10 -18
  86. package/lib/module/components/ChannelInput/EditInput.js.map +1 -1
  87. package/lib/module/components/ChannelInput/SendInput.js +221 -164
  88. package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
  89. package/lib/module/components/ChannelInput/index.js +5 -3
  90. package/lib/module/components/ChannelInput/index.js.map +1 -1
  91. package/lib/module/components/ChannelMessageList/index.js +28 -28
  92. package/lib/module/components/ChannelMessageList/index.js.map +1 -1
  93. package/lib/module/components/ChatFlatList/FlatListInternal.js +26 -0
  94. package/lib/module/components/ChatFlatList/FlatListInternal.js.map +1 -0
  95. package/lib/module/components/{ChatFlatList.js → ChatFlatList/index.js} +4 -7
  96. package/lib/module/components/ChatFlatList/index.js.map +1 -0
  97. package/lib/module/components/{MessageRenderer/MessageDateSeparator.js → GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js} +3 -3
  98. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js.map +1 -0
  99. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js +38 -0
  100. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js.map +1 -0
  101. package/lib/module/components/{MessageRenderer/MessageOutgoingStatus.js → GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.js} +12 -15
  102. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.js.map +1 -0
  103. package/lib/module/components/GroupChannelMessageRenderer/index.js +196 -0
  104. package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -0
  105. package/lib/module/components/MessageSearchResultItem.js +2 -1
  106. package/lib/module/components/MessageSearchResultItem.js.map +1 -1
  107. package/lib/module/components/OpenChannelMessageRenderer/index.js +16 -10
  108. package/lib/module/components/OpenChannelMessageRenderer/index.js.map +1 -1
  109. package/lib/module/constants.js +0 -5
  110. package/lib/module/constants.js.map +1 -1
  111. package/lib/module/containers/GroupChannelPreviewContainer.js +13 -13
  112. package/lib/module/containers/GroupChannelPreviewContainer.js.map +1 -1
  113. package/lib/module/containers/SendbirdUIKitContainer.js +29 -19
  114. package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
  115. package/lib/module/contexts/SendbirdChatCtx.js +17 -14
  116. package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
  117. package/lib/module/contexts/UserProfileCtx.js +6 -4
  118. package/lib/module/contexts/UserProfileCtx.js.map +1 -1
  119. package/lib/module/domain/groupChannel/component/GroupChannelInput.js +4 -13
  120. package/lib/module/domain/groupChannel/component/GroupChannelInput.js.map +1 -1
  121. package/lib/module/domain/groupChannel/types.js.map +1 -1
  122. package/lib/module/domain/groupChannelList/component/GroupChannelListList.js +9 -4
  123. package/lib/module/domain/groupChannelList/component/GroupChannelListList.js.map +1 -1
  124. package/lib/module/domain/groupChannelList/component/GroupChannelListTypeSelector.js +3 -3
  125. package/lib/module/domain/groupChannelList/component/GroupChannelListTypeSelector.js.map +1 -1
  126. package/lib/module/domain/groupChannelList/types.js.map +1 -1
  127. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +11 -10
  128. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
  129. package/lib/module/domain/openChannel/component/OpenChannelInput.js +4 -8
  130. package/lib/module/domain/openChannel/component/OpenChannelInput.js.map +1 -1
  131. package/lib/module/domain/openChannel/types.js.map +1 -1
  132. package/lib/module/domain/openChannelList/component/OpenChannelListList.js +3 -1
  133. package/lib/module/domain/openChannelList/component/OpenChannelListList.js.map +1 -1
  134. package/lib/module/domain/openChannelList/types.js.map +1 -1
  135. package/lib/module/fragments/createGroupChannelCreateFragment.js +1 -1
  136. package/lib/module/fragments/createGroupChannelCreateFragment.js.map +1 -1
  137. package/lib/module/fragments/createGroupChannelFragment.js +24 -102
  138. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  139. package/lib/module/fragments/createGroupChannelInviteFragment.js +1 -1
  140. package/lib/module/fragments/createGroupChannelInviteFragment.js.map +1 -1
  141. package/lib/module/fragments/createGroupChannelListFragment.js +8 -13
  142. package/lib/module/fragments/createGroupChannelListFragment.js.map +1 -1
  143. package/lib/module/fragments/createMessageSearchFragment.js +1 -1
  144. package/lib/module/fragments/createMessageSearchFragment.js.map +1 -1
  145. package/lib/module/fragments/createOpenChannelFragment.js +2 -8
  146. package/lib/module/fragments/createOpenChannelFragment.js.map +1 -1
  147. package/lib/module/fragments/createOpenChannelListFragment.js +2 -1
  148. package/lib/module/fragments/createOpenChannelListFragment.js.map +1 -1
  149. package/lib/module/hooks/useConnection.js +11 -7
  150. package/lib/module/hooks/useConnection.js.map +1 -1
  151. package/lib/module/hooks/useMentionTextInput.js +3 -2
  152. package/lib/module/hooks/useMentionTextInput.js.map +1 -1
  153. package/lib/module/index.js +5 -2
  154. package/lib/module/index.js.map +1 -1
  155. package/lib/module/libs/MentionManager.js +8 -9
  156. package/lib/module/libs/MentionManager.js.map +1 -1
  157. package/lib/module/libs/SBUUtils.js +7 -3
  158. package/lib/module/libs/SBUUtils.js.map +1 -1
  159. package/lib/module/localization/StringSet.type.js.map +1 -1
  160. package/lib/module/localization/createBaseStringSet.js +20 -62
  161. package/lib/module/localization/createBaseStringSet.js.map +1 -1
  162. package/lib/module/version.js +1 -1
  163. package/lib/module/version.js.map +1 -1
  164. package/lib/typescript/src/components/ChannelInput/AttachmentsButton.d.ts +6 -0
  165. package/lib/typescript/src/components/ChannelInput/index.d.ts +2 -14
  166. package/lib/typescript/src/components/ChannelMessageList/index.d.ts +2 -4
  167. package/lib/typescript/src/components/ChatFlatList/FlatListInternal.d.ts +20 -0
  168. package/lib/typescript/src/components/{ChatFlatList.d.ts → ChatFlatList/index.d.ts} +1 -5
  169. package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.d.ts +6 -0
  170. package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.d.ts +5 -0
  171. package/lib/typescript/src/components/{MessageRenderer/MessageOutgoingStatus.d.ts → GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.d.ts} +3 -1
  172. package/lib/typescript/src/components/{MessageRenderer → GroupChannelMessageRenderer}/index.d.ts +2 -13
  173. package/lib/typescript/src/components/MessageSearchResultItem.d.ts +2 -1
  174. package/lib/typescript/src/components/OpenChannelMessageRenderer/index.d.ts +1 -1
  175. package/lib/typescript/src/constants.d.ts +0 -5
  176. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +16 -11
  177. package/lib/typescript/src/contexts/SendbirdChatCtx.d.ts +33 -19
  178. package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput.d.ts +1 -1
  179. package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +1 -4
  180. package/lib/typescript/src/domain/groupChannel/types.d.ts +2 -9
  181. package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListList.d.ts +1 -1
  182. package/lib/typescript/src/domain/groupChannelList/types.d.ts +8 -23
  183. package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +1 -1
  184. package/lib/typescript/src/domain/openChannel/component/OpenChannelInput.d.ts +1 -1
  185. package/lib/typescript/src/domain/openChannel/component/OpenChannelMessageList.d.ts +1 -1
  186. package/lib/typescript/src/domain/openChannel/types.d.ts +2 -2
  187. package/lib/typescript/src/domain/openChannelList/component/OpenChannelListList.d.ts +1 -1
  188. package/lib/typescript/src/domain/openChannelList/types.d.ts +3 -12
  189. package/lib/typescript/src/index.d.ts +4 -1
  190. package/lib/typescript/src/libs/MentionManager.d.ts +4 -5
  191. package/lib/typescript/src/libs/SBUUtils.d.ts +1 -1
  192. package/lib/typescript/src/localization/StringSet.type.d.ts +2 -43
  193. package/lib/typescript/src/version.d.ts +1 -1
  194. package/package.json +14 -10
  195. package/src/components/ChannelInput/AttachmentsButton.tsx +32 -0
  196. package/src/components/ChannelInput/EditInput.tsx +17 -18
  197. package/src/components/ChannelInput/SendInput.tsx +237 -181
  198. package/src/components/ChannelInput/index.tsx +8 -21
  199. package/src/components/ChannelMessageList/index.tsx +33 -41
  200. package/src/components/ChatFlatList/FlatListInternal.tsx +40 -0
  201. package/src/components/{ChatFlatList.tsx → ChatFlatList/index.tsx} +7 -12
  202. package/src/components/{MessageRenderer/MessageDateSeparator.tsx → GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.tsx} +7 -5
  203. package/src/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.tsx +29 -0
  204. package/src/components/{MessageRenderer/MessageOutgoingStatus.tsx → GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.tsx} +15 -15
  205. package/src/components/GroupChannelMessageRenderer/index.tsx +203 -0
  206. package/src/components/MessageSearchResultItem.tsx +3 -1
  207. package/src/components/OpenChannelMessageRenderer/index.tsx +10 -5
  208. package/src/constants.ts +0 -5
  209. package/src/containers/GroupChannelPreviewContainer.tsx +14 -13
  210. package/src/containers/SendbirdUIKitContainer.tsx +98 -90
  211. package/src/contexts/SendbirdChatCtx.tsx +49 -36
  212. package/src/contexts/UserProfileCtx.tsx +10 -5
  213. package/src/domain/groupChannel/component/GroupChannelInput.tsx +1 -10
  214. package/src/domain/groupChannel/types.ts +1 -14
  215. package/src/domain/groupChannelList/component/GroupChannelListList.tsx +8 -4
  216. package/src/domain/groupChannelList/component/GroupChannelListTypeSelector.tsx +3 -3
  217. package/src/domain/groupChannelList/types.ts +8 -30
  218. package/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.tsx +22 -10
  219. package/src/domain/openChannel/component/OpenChannelInput.tsx +1 -5
  220. package/src/domain/openChannel/types.ts +1 -1
  221. package/src/domain/openChannelList/component/OpenChannelListList.tsx +2 -1
  222. package/src/domain/openChannelList/types.ts +6 -13
  223. package/src/fragments/createGroupChannelCreateFragment.tsx +1 -1
  224. package/src/fragments/createGroupChannelFragment.tsx +21 -97
  225. package/src/fragments/createGroupChannelInviteFragment.tsx +1 -1
  226. package/src/fragments/createGroupChannelListFragment.tsx +9 -15
  227. package/src/fragments/createMessageSearchFragment.tsx +1 -1
  228. package/src/fragments/createOpenChannelFragment.tsx +2 -3
  229. package/src/fragments/createOpenChannelListFragment.tsx +2 -1
  230. package/src/hooks/useConnection.ts +9 -7
  231. package/src/hooks/useMentionTextInput.ts +7 -2
  232. package/src/index.ts +4 -2
  233. package/src/libs/MentionManager.tsx +8 -7
  234. package/src/libs/SBUUtils.ts +7 -3
  235. package/src/localization/StringSet.type.ts +2 -46
  236. package/src/localization/createBaseStringSet.ts +19 -71
  237. package/src/version.ts +1 -1
  238. package/lib/commonjs/components/ChatFlatList.js.map +0 -1
  239. package/lib/commonjs/components/MessageRenderer/AdminMessage/index.js +0 -46
  240. package/lib/commonjs/components/MessageRenderer/AdminMessage/index.js.map +0 -1
  241. package/lib/commonjs/components/MessageRenderer/FileMessage/BaseFileMessage.js +0 -73
  242. package/lib/commonjs/components/MessageRenderer/FileMessage/BaseFileMessage.js.map +0 -1
  243. package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js +0 -93
  244. package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +0 -1
  245. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js +0 -132
  246. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +0 -1
  247. package/lib/commonjs/components/MessageRenderer/FileMessage/index.js +0 -24
  248. package/lib/commonjs/components/MessageRenderer/FileMessage/index.js.map +0 -1
  249. package/lib/commonjs/components/MessageRenderer/MessageContainer.js +0 -27
  250. package/lib/commonjs/components/MessageRenderer/MessageContainer.js.map +0 -1
  251. package/lib/commonjs/components/MessageRenderer/MessageDateSeparator.js.map +0 -1
  252. package/lib/commonjs/components/MessageRenderer/MessageIncomingAvatar.js +0 -41
  253. package/lib/commonjs/components/MessageRenderer/MessageIncomingAvatar.js.map +0 -1
  254. package/lib/commonjs/components/MessageRenderer/MessageIncomingSenderName.js +0 -41
  255. package/lib/commonjs/components/MessageRenderer/MessageIncomingSenderName.js.map +0 -1
  256. package/lib/commonjs/components/MessageRenderer/MessageOutgoingStatus.js.map +0 -1
  257. package/lib/commonjs/components/MessageRenderer/MessageTime.js.map +0 -1
  258. package/lib/commonjs/components/MessageRenderer/UnknownMessage/index.js +0 -46
  259. package/lib/commonjs/components/MessageRenderer/UnknownMessage/index.js.map +0 -1
  260. package/lib/commonjs/components/MessageRenderer/UserMessage/BaseUserMessage.js +0 -113
  261. package/lib/commonjs/components/MessageRenderer/UserMessage/BaseUserMessage.js.map +0 -1
  262. package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js +0 -200
  263. package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +0 -1
  264. package/lib/commonjs/components/MessageRenderer/UserMessage/index.js +0 -22
  265. package/lib/commonjs/components/MessageRenderer/UserMessage/index.js.map +0 -1
  266. package/lib/commonjs/components/MessageRenderer/index.js +0 -186
  267. package/lib/commonjs/components/MessageRenderer/index.js.map +0 -1
  268. package/lib/module/components/ChatFlatList.js.map +0 -1
  269. package/lib/module/components/MessageRenderer/AdminMessage/index.js +0 -38
  270. package/lib/module/components/MessageRenderer/AdminMessage/index.js.map +0 -1
  271. package/lib/module/components/MessageRenderer/FileMessage/BaseFileMessage.js +0 -65
  272. package/lib/module/components/MessageRenderer/FileMessage/BaseFileMessage.js.map +0 -1
  273. package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js +0 -84
  274. package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +0 -1
  275. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js +0 -123
  276. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +0 -1
  277. package/lib/module/components/MessageRenderer/FileMessage/index.js +0 -16
  278. package/lib/module/components/MessageRenderer/FileMessage/index.js.map +0 -1
  279. package/lib/module/components/MessageRenderer/MessageContainer.js +0 -19
  280. package/lib/module/components/MessageRenderer/MessageContainer.js.map +0 -1
  281. package/lib/module/components/MessageRenderer/MessageDateSeparator.js.map +0 -1
  282. package/lib/module/components/MessageRenderer/MessageIncomingAvatar.js +0 -33
  283. package/lib/module/components/MessageRenderer/MessageIncomingAvatar.js.map +0 -1
  284. package/lib/module/components/MessageRenderer/MessageIncomingSenderName.js +0 -33
  285. package/lib/module/components/MessageRenderer/MessageIncomingSenderName.js.map +0 -1
  286. package/lib/module/components/MessageRenderer/MessageOutgoingStatus.js.map +0 -1
  287. package/lib/module/components/MessageRenderer/MessageTime.js +0 -26
  288. package/lib/module/components/MessageRenderer/MessageTime.js.map +0 -1
  289. package/lib/module/components/MessageRenderer/UnknownMessage/index.js +0 -38
  290. package/lib/module/components/MessageRenderer/UnknownMessage/index.js.map +0 -1
  291. package/lib/module/components/MessageRenderer/UserMessage/BaseUserMessage.js +0 -105
  292. package/lib/module/components/MessageRenderer/UserMessage/BaseUserMessage.js.map +0 -1
  293. package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js +0 -190
  294. package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +0 -1
  295. package/lib/module/components/MessageRenderer/UserMessage/index.js +0 -14
  296. package/lib/module/components/MessageRenderer/UserMessage/index.js.map +0 -1
  297. package/lib/module/components/MessageRenderer/index.js +0 -178
  298. package/lib/module/components/MessageRenderer/index.js.map +0 -1
  299. package/lib/typescript/src/components/MessageRenderer/AdminMessage/index.d.ts +0 -5
  300. package/lib/typescript/src/components/MessageRenderer/FileMessage/BaseFileMessage.d.ts +0 -6
  301. package/lib/typescript/src/components/MessageRenderer/FileMessage/ImageFileMessage.d.ts +0 -3
  302. package/lib/typescript/src/components/MessageRenderer/FileMessage/VideoFileMessage.d.ts +0 -3
  303. package/lib/typescript/src/components/MessageRenderer/FileMessage/index.d.ts +0 -15
  304. package/lib/typescript/src/components/MessageRenderer/MessageContainer.d.ts +0 -3
  305. package/lib/typescript/src/components/MessageRenderer/MessageDateSeparator.d.ts +0 -7
  306. package/lib/typescript/src/components/MessageRenderer/MessageIncomingAvatar.d.ts +0 -7
  307. package/lib/typescript/src/components/MessageRenderer/MessageIncomingSenderName.d.ts +0 -7
  308. package/lib/typescript/src/components/MessageRenderer/MessageTime.d.ts +0 -9
  309. package/lib/typescript/src/components/MessageRenderer/UnknownMessage/index.d.ts +0 -4
  310. package/lib/typescript/src/components/MessageRenderer/UserMessage/BaseUserMessage.d.ts +0 -3
  311. package/lib/typescript/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.d.ts +0 -7
  312. package/lib/typescript/src/components/MessageRenderer/UserMessage/index.d.ts +0 -9
  313. package/src/components/MessageRenderer/AdminMessage/index.tsx +0 -40
  314. package/src/components/MessageRenderer/FileMessage/BaseFileMessage.tsx +0 -51
  315. package/src/components/MessageRenderer/FileMessage/ImageFileMessage.tsx +0 -98
  316. package/src/components/MessageRenderer/FileMessage/VideoFileMessage.tsx +0 -113
  317. package/src/components/MessageRenderer/FileMessage/index.tsx +0 -20
  318. package/src/components/MessageRenderer/MessageContainer.tsx +0 -17
  319. package/src/components/MessageRenderer/MessageIncomingAvatar.tsx +0 -34
  320. package/src/components/MessageRenderer/MessageIncomingSenderName.tsx +0 -36
  321. package/src/components/MessageRenderer/MessageTime.tsx +0 -28
  322. package/src/components/MessageRenderer/UnknownMessage/index.tsx +0 -34
  323. package/src/components/MessageRenderer/UserMessage/BaseUserMessage.tsx +0 -102
  324. package/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.tsx +0 -188
  325. package/src/components/MessageRenderer/UserMessage/index.tsx +0 -24
  326. package/src/components/MessageRenderer/index.tsx +0 -198
@@ -28,9 +28,8 @@ import {
28
28
  useFreshCallback,
29
29
  } from '@sendbird/uikit-utils';
30
30
 
31
- import { DEPRECATION_WARNING } from '../../constants';
32
31
  import type { UserProfileContextType } from '../../contexts/UserProfileCtx';
33
- import { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';
32
+ import { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';
34
33
  import SBUUtils from '../../libs/SBUUtils';
35
34
  import type { CommonComponent } from '../../types';
36
35
  import ChatFlatList from '../ChatFlatList';
@@ -67,7 +66,7 @@ export type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpe
67
66
  nextMessage?: SendbirdMessage;
68
67
  onPress?: () => void;
69
68
  onLongPress?: () => void;
70
- onPressAvatar?: UserProfileContextType['show'];
69
+ onShowUserProfile?: UserProfileContextType['show'];
71
70
  channel: T;
72
71
  currentUserId?: ChannelMessageListProps<T>['currentUserId'];
73
72
  enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];
@@ -82,9 +81,6 @@ export type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpe
82
81
  onPress: () => void;
83
82
  }>;
84
83
  flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;
85
-
86
- /** @deprecated Please use `onPressMediaMessage` instead **/
87
- onPressImageMessage?: (message: SendbirdFileMessage, uri: string) => void;
88
84
  } & {
89
85
  ref?: Ref<FlatList<SendbirdMessage>> | undefined;
90
86
  };
@@ -112,12 +108,12 @@ const ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel
112
108
  flatListProps,
113
109
  onPressNewMessagesButton,
114
110
  onPressScrollToBottomButton,
115
- onPressImageMessage,
116
111
  }: ChannelMessageListProps<T>,
117
112
  ref: React.ForwardedRef<FlatList<SendbirdMessage>>,
118
113
  ) => {
119
114
  const { STRINGS } = useLocalization();
120
115
  const { colors } = useUIKitTheme();
116
+ const { show } = useUserProfile();
121
117
  const { left, right } = useSafeAreaInsets();
122
118
  const getMessagePressActions = useGetMessagePressActions({
123
119
  channel,
@@ -125,7 +121,6 @@ const ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel
125
121
  onEditMessage,
126
122
  onDeleteMessage,
127
123
  onResendFailedMessage,
128
- onPressImageMessage,
129
124
  onPressMediaMessage,
130
125
  });
131
126
 
@@ -139,6 +134,7 @@ const ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel
139
134
  nextMessage: messages[index - 1],
140
135
  onPress,
141
136
  onLongPress,
137
+ onShowUserProfile: show,
142
138
  enableMessageGrouping,
143
139
  channel,
144
140
  currentUserId,
@@ -193,17 +189,10 @@ const useGetMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpen
193
189
  onResendFailedMessage,
194
190
  onEditMessage,
195
191
  onDeleteMessage,
196
- onPressImageMessage,
197
192
  onPressMediaMessage,
198
193
  }: Pick<
199
194
  ChannelMessageListProps<T>,
200
- | 'channel'
201
- | 'currentUserId'
202
- | 'onEditMessage'
203
- | 'onDeleteMessage'
204
- | 'onResendFailedMessage'
205
- | 'onPressImageMessage'
206
- | 'onPressMediaMessage'
195
+ 'channel' | 'currentUserId' | 'onEditMessage' | 'onDeleteMessage' | 'onResendFailedMessage' | 'onPressMediaMessage'
207
196
  >) => {
208
197
  const { colors } = useUIKitTheme();
209
198
  const { STRINGS } = useLocalization();
@@ -211,7 +200,7 @@ const useGetMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpen
211
200
  const { openSheet } = useBottomSheet();
212
201
  const { alert } = useAlert();
213
202
  const { clipboardService, fileService } = usePlatformService();
214
- const { features } = useSendbirdChat();
203
+ const { sbOptions } = useSendbirdChat();
215
204
 
216
205
  const handleFailedMessage = (message: HandleableMessage) => {
217
206
  openSheet({
@@ -269,19 +258,21 @@ const useGetMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpen
269
258
  },
270
259
  });
271
260
 
272
- if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {
273
- sheetItems.push(
274
- {
275
- icon: 'edit',
276
- title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,
277
- onPress: () => onEditMessage(msg),
278
- },
279
- {
280
- icon: 'delete',
281
- title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,
282
- onPress: () => confirmDelete(msg),
283
- },
284
- );
261
+ if (!channel.isEphemeral) {
262
+ if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {
263
+ sheetItems.push(
264
+ {
265
+ icon: 'edit',
266
+ title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,
267
+ onPress: () => onEditMessage(msg),
268
+ },
269
+ {
270
+ icon: 'delete',
271
+ title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,
272
+ onPress: () => confirmDelete(msg),
273
+ },
274
+ );
275
+ }
285
276
  }
286
277
  }
287
278
 
@@ -307,12 +298,14 @@ const useGetMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpen
307
298
  },
308
299
  });
309
300
 
310
- if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {
311
- sheetItems.push({
312
- icon: 'delete',
313
- title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,
314
- onPress: () => confirmDelete(msg),
315
- });
301
+ if (!channel.isEphemeral) {
302
+ if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {
303
+ sheetItems.push({
304
+ icon: 'delete',
305
+ title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,
306
+ onPress: () => confirmDelete(msg),
307
+ });
308
+ }
316
309
  }
317
310
 
318
311
  const fileType = getFileType(msg.type || getFileExtension(msg.name));
@@ -321,10 +314,6 @@ const useGetMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpen
321
314
  case 'video':
322
315
  case 'audio': {
323
316
  response.onPress = () => {
324
- if (onPressImageMessage && fileType === 'image') {
325
- Logger.warn(DEPRECATION_WARNING.CHANNEL.ON_PRESS_IMAGE_MESSAGE);
326
- onPressImageMessage(msg, getAvailableUriFromFileMessage(msg));
327
- }
328
317
  onPressMediaMessage?.(msg, () => onDeleteMessage(msg), getAvailableUriFromFileMessage(msg));
329
318
  };
330
319
  break;
@@ -340,7 +329,10 @@ const useGetMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpen
340
329
  response.onLongPress = () => {
341
330
  openSheet({
342
331
  sheetItems,
343
- HeaderComponent: shouldRenderReaction(channel, features.reactionEnabled)
332
+ HeaderComponent: shouldRenderReaction(
333
+ channel,
334
+ sbOptions.uikitWithAppInfo.groupChannel.channel.enableReactions,
335
+ )
344
336
  ? ({ onClose }) => <ReactionAddons.BottomSheet message={msg} channel={channel} onClose={onClose} />
345
337
  : undefined,
346
338
  });
@@ -0,0 +1,40 @@
1
+ /**
2
+ * */
3
+ import type { ForwardedRef, ReactElement } from 'react';
4
+ import type { FlatListProps, FlatList as RNFlatList, ScrollViewProps } from 'react-native';
5
+ import { Platform } from 'react-native';
6
+
7
+ import type { SendbirdMessage } from '@sendbird/uikit-utils';
8
+
9
+ type FlatListBidirectional<T = SendbirdMessage> = (props: FlatListProps<T> & BidirectionalProps<T>) => ReactElement;
10
+ type BidirectionalProps<T> = {
11
+ onStartReached?: ((info: { distanceFromStart: number }) => void) | null | undefined;
12
+ onStartReachedThreshold?: number | null | undefined;
13
+ onEndReached?: ((info: { distanceFromEnd: number }) => void) | null | undefined;
14
+ onEndReachedThreshold?: number | null | undefined;
15
+ maintainVisibleContentPosition?: ScrollViewProps['maintainVisibleContentPosition'];
16
+ ref: ForwardedRef<RNFlatList<T>>;
17
+ };
18
+
19
+ function shouldUseScrollViewEnhancer() {
20
+ if (Platform.constants.reactNativeVersion.major < 1) {
21
+ if (Platform.constants.reactNativeVersion.minor < 72) {
22
+ return true;
23
+ }
24
+ }
25
+ return false;
26
+ }
27
+ function getFlatList(): FlatListBidirectional {
28
+ if (shouldUseScrollViewEnhancer()) {
29
+ try {
30
+ return require('@sendbird/react-native-scrollview-enhancer').FlatList;
31
+ } catch {
32
+ return require('react-native').FlatList;
33
+ }
34
+ } else {
35
+ return require('react-native').FlatList;
36
+ }
37
+ }
38
+
39
+ const FlatListInternal = getFlatList();
40
+ export default FlatListInternal;
@@ -1,10 +1,11 @@
1
1
  import React, { forwardRef, useRef } from 'react';
2
2
  import { FlatListProps, Platform, FlatList as RNFlatList, StyleSheet } from 'react-native';
3
3
 
4
- import { FlatList } from '@sendbird/react-native-scrollview-enhancer';
5
4
  import { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
6
5
  import { NOOP, SendbirdMessage, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';
7
6
 
7
+ import FlatListInternal from './FlatListInternal';
8
+
8
9
  let ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android';
9
10
  const BOTTOM_DETECT_THRESHOLD = 25;
10
11
  const UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;
@@ -13,15 +14,10 @@ type Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {
13
14
  onBottomReached: () => void;
14
15
  onTopReached: () => void;
15
16
  onScrolledAwayFromBottom: (value: boolean) => void;
16
-
17
- /** @deprecated Please use `onScrolledAwayFromBottom` **/
18
- onLeaveScrollBottom?: (value: boolean) => void;
19
- /** @deprecated Not used anymore **/
20
- nextMessages?: unknown;
21
17
  };
22
18
  // FIXME: Inverted FlatList performance issue on Android {@link https://github.com/facebook/react-native/issues/30034}
23
- const ChatFlatList = forwardRef<RNFlatList<SendbirdMessage>, Props>(function CustomFlatList(
24
- { onTopReached, onBottomReached, onScrolledAwayFromBottom, onLeaveScrollBottom, onScroll, ...props },
19
+ const ChatFlatList = forwardRef<RNFlatList, Props>(function CustomFlatList(
20
+ { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, ...props },
25
21
  ref,
26
22
  ) {
27
23
  const { select } = useUIKitTheme();
@@ -37,10 +33,8 @@ const ChatFlatList = forwardRef<RNFlatList<SendbirdMessage>, Props>(function Cus
37
33
 
38
34
  if (BOTTOM_DETECT_THRESHOLD < prevOffsetY && currOffsetY <= BOTTOM_DETECT_THRESHOLD) {
39
35
  onScrolledAwayFromBottom(false);
40
- onLeaveScrollBottom?.(false);
41
36
  } else if (BOTTOM_DETECT_THRESHOLD < currOffsetY && prevOffsetY <= BOTTOM_DETECT_THRESHOLD) {
42
37
  onScrolledAwayFromBottom(true);
43
- onLeaveScrollBottom?.(true);
44
38
  }
45
39
 
46
40
  contentOffsetY.current = contentOffset.y;
@@ -50,12 +44,13 @@ const ChatFlatList = forwardRef<RNFlatList<SendbirdMessage>, Props>(function Cus
50
44
  ANDROID_BUG_ALERT_SHOWED = true;
51
45
  // eslint-disable-next-line no-console
52
46
  console.warn(
53
- 'UIKit Warning: Inverted FlatList has a performance issue on Android, Maybe this is a bug please refer link\nhttps://github.com/facebook/react-native/issues/30034',
47
+ 'UIKit Warning: The inverted FlatList has a performance issue on Android. Maybe this is a bug.\n' +
48
+ 'Please refer to the link: https://github.com/facebook/react-native/issues/30034',
54
49
  );
55
50
  }
56
51
 
57
52
  return (
58
- <FlatList
53
+ <FlatListInternal
59
54
  bounces={false}
60
55
  removeClippedSubviews
61
56
  keyboardDismissMode={'on-drag'}
@@ -7,17 +7,19 @@ import type { SendbirdMessage } from '@sendbird/uikit-utils';
7
7
 
8
8
  import { useLocalization } from '../../hooks/useContext';
9
9
 
10
- type Props = {
10
+ const GroupChannelMessageDateSeparator = ({
11
+ message,
12
+ prevMessage,
13
+ }: {
11
14
  message: SendbirdMessage;
12
15
  prevMessage?: SendbirdMessage;
13
- };
14
-
15
- const MessageDateSeparator = ({ message, prevMessage }: Props) => {
16
+ }) => {
16
17
  const { STRINGS } = useLocalization();
17
18
  const { colors } = useUIKitTheme();
18
19
 
19
20
  const sameDay = isSameDay(message.createdAt, prevMessage?.createdAt ?? 0);
20
21
  if (sameDay) return null;
22
+
21
23
  return (
22
24
  <View style={styles.container}>
23
25
  <View style={[styles.view, { backgroundColor: colors.ui.dateSeparator.default.none.background }]}>
@@ -41,4 +43,4 @@ const styles = createStyleSheet({
41
43
  },
42
44
  });
43
45
 
44
- export default MessageDateSeparator;
46
+ export default GroupChannelMessageDateSeparator;
@@ -0,0 +1,29 @@
1
+ import React, { useEffect, useRef } from 'react';
2
+ import { Animated, Easing } from 'react-native';
3
+
4
+ import { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../constants';
5
+
6
+ const GroupChannelMessageFocusAnimation = (props: React.PropsWithChildren<{ focused: boolean }>) => {
7
+ const translateY = useRef(new Animated.Value(0)).current;
8
+
9
+ useEffect(() => {
10
+ if (props.focused) {
11
+ setTimeout(() => {
12
+ Animated.sequence(
13
+ [
14
+ { toValue: -10, duration: 500 },
15
+ { toValue: 0, duration: 100 },
16
+ { toValue: -10, duration: 200 },
17
+ { toValue: 0, duration: 100 },
18
+ ].map((value) =>
19
+ Animated.timing(translateY, { ...value, useNativeDriver: true, easing: Easing.inOut(Easing.ease) }),
20
+ ),
21
+ ).start();
22
+ }, MESSAGE_SEARCH_SAFE_SCROLL_DELAY + MESSAGE_FOCUS_ANIMATION_DELAY);
23
+ }
24
+ }, [props.focused]);
25
+
26
+ return <Animated.View style={{ transform: [{ translateY }] }}>{props.children}</Animated.View>;
27
+ };
28
+
29
+ export default GroupChannelMessageFocusAnimation;
@@ -1,48 +1,48 @@
1
1
  import React from 'react';
2
+ import type { ImageStyle, StyleProp } from 'react-native';
2
3
 
3
4
  import { useMessageOutgoingStatus } from '@sendbird/uikit-chat-hooks';
4
- import { Icon, LoadingSpinner, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
5
+ import { Icon, LoadingSpinner, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
5
6
  import type { SendbirdGroupChannel, SendbirdMessage } from '@sendbird/uikit-utils';
6
7
 
7
8
  import { useSendbirdChat } from '../../hooks/useContext';
8
9
 
9
10
  const SIZE = 16;
10
11
 
11
- type Props = { channel: SendbirdGroupChannel; message: SendbirdMessage };
12
- const MessageOutgoingStatus = ({ channel, message }: Props) => {
12
+ type Props = {
13
+ channel: SendbirdGroupChannel;
14
+ message: SendbirdMessage;
15
+ style?: StyleProp<ImageStyle>;
16
+ };
17
+ const GroupChannelMessageOutgoingStatus = ({ channel, message, style }: Props) => {
13
18
  if (!message.isUserMessage() && !message.isFileMessage()) return null;
19
+ if (channel.isEphemeral) return null;
14
20
 
15
21
  const { sdk } = useSendbirdChat();
16
22
  const { colors } = useUIKitTheme();
17
23
  const outgoingStatus = useMessageOutgoingStatus(sdk, channel, message);
18
24
 
19
25
  if (outgoingStatus === 'PENDING') {
20
- return <LoadingSpinner size={SIZE} style={styles.container} />;
26
+ return <LoadingSpinner size={SIZE} style={style} />;
21
27
  }
22
28
 
23
29
  if (outgoingStatus === 'FAILED') {
24
- return <Icon icon={'error'} size={SIZE} color={colors.error} style={styles.container} />;
30
+ return <Icon icon={'error'} size={SIZE} color={colors.error} style={style} />;
25
31
  }
26
32
 
27
33
  if (outgoingStatus === 'READ') {
28
- return <Icon icon={'done-all'} size={SIZE} color={colors.secondary} style={styles.container} />;
34
+ return <Icon icon={'done-all'} size={SIZE} color={colors.secondary} style={style} />;
29
35
  }
30
36
 
31
37
  if (outgoingStatus === 'UNREAD' || outgoingStatus === 'DELIVERED') {
32
- return <Icon icon={'done-all'} size={SIZE} color={colors.onBackground03} style={styles.container} />;
38
+ return <Icon icon={'done-all'} size={SIZE} color={colors.onBackground03} style={style} />;
33
39
  }
34
40
 
35
41
  if (outgoingStatus === 'UNDELIVERED') {
36
- return <Icon icon={'done'} size={SIZE} color={colors.onBackground03} style={styles.container} />;
42
+ return <Icon icon={'done'} size={SIZE} color={colors.onBackground03} style={style} />;
37
43
  }
38
44
 
39
45
  return null;
40
46
  };
41
47
 
42
- const styles = createStyleSheet({
43
- container: {
44
- marginRight: 4,
45
- },
46
- });
47
-
48
- export default React.memo(MessageOutgoingStatus);
48
+ export default React.memo(GroupChannelMessageOutgoingStatus);
@@ -0,0 +1,203 @@
1
+ import React from 'react';
2
+
3
+ import type { GroupChannelMessageProps, RegexTextPattern } from '@sendbird/uikit-react-native-foundation';
4
+ import { Box, GroupChannelMessage, Text, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
5
+ import {
6
+ SendbirdAdminMessage,
7
+ SendbirdFileMessage,
8
+ SendbirdMessage,
9
+ SendbirdUserMessage,
10
+ calcMessageGrouping,
11
+ getMessageType,
12
+ isMyMessage,
13
+ shouldRenderReaction,
14
+ useIIFE,
15
+ } from '@sendbird/uikit-utils';
16
+
17
+ import type { GroupChannelProps } from '../../domain/groupChannel/types';
18
+ import { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';
19
+ import SBUUtils from '../../libs/SBUUtils';
20
+ import { ReactionAddons } from '../ReactionAddons';
21
+ import GroupChannelMessageDateSeparator from './GroupChannelMessageDateSeparator';
22
+ import GroupChannelMessageFocusAnimation from './GroupChannelMessageFocusAnimation';
23
+ import GroupChannelMessageOutgoingStatus from './GroupChannelMessageOutgoingStatus';
24
+
25
+ const GroupChannelMessageRenderer: GroupChannelProps['Fragment']['renderMessage'] = ({
26
+ channel,
27
+ message,
28
+ onPress,
29
+ onLongPress,
30
+ onShowUserProfile,
31
+ enableMessageGrouping,
32
+ focused,
33
+ prevMessage,
34
+ nextMessage,
35
+ }) => {
36
+ const { palette } = useUIKitTheme();
37
+ const { sbOptions, currentUser, mentionManager } = useSendbirdChat();
38
+ const { STRINGS } = useLocalization();
39
+ const { mediaService } = usePlatformService();
40
+ const { groupWithPrev, groupWithNext } = calcMessageGrouping(
41
+ Boolean(enableMessageGrouping),
42
+ message,
43
+ prevMessage,
44
+ nextMessage,
45
+ );
46
+
47
+ const reactionChildren = useIIFE(() => {
48
+ if (
49
+ shouldRenderReaction(channel, sbOptions.uikitWithAppInfo.groupChannel.channel.enableReactions) &&
50
+ message.reactions &&
51
+ message.reactions.length > 0
52
+ ) {
53
+ return <ReactionAddons.Message channel={channel} message={message} />;
54
+ }
55
+ return null;
56
+ });
57
+
58
+ const messageProps: Omit<GroupChannelMessageProps<SendbirdMessage>, 'message'> = {
59
+ channel,
60
+ variant: isMyMessage(message, currentUser?.userId) ? 'outgoing' : 'incoming',
61
+ onPress,
62
+ onLongPress,
63
+ onPressURL: (url) => SBUUtils.openURL(url),
64
+ onPressAvatar: () => {
65
+ if ('sender' in message) onShowUserProfile?.(message.sender);
66
+ },
67
+ onPressMentionedUser: (mentionedUser) => {
68
+ if (mentionedUser) onShowUserProfile?.(mentionedUser);
69
+ },
70
+ groupedWithPrev: groupWithPrev,
71
+ groupedWithNext: groupWithNext,
72
+ children: reactionChildren,
73
+ sendingStatus: isMyMessage(message, currentUser?.userId) ? (
74
+ <GroupChannelMessageOutgoingStatus channel={channel} message={message} />
75
+ ) : null,
76
+ strings: {
77
+ edited: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX,
78
+ senderName: ('sender' in message && message.sender.nickname) || STRINGS.LABELS.USER_NO_NAME,
79
+ sentDate: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_TIME(message),
80
+ fileName: message.isFileMessage() ? STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_FILE_TITLE(message) : '',
81
+ unknownTitle: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_TITLE(message),
82
+ unknownDescription: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_DESC(message),
83
+ },
84
+ };
85
+
86
+ const userMessageProps: {
87
+ renderRegexTextChildren: (message: SendbirdUserMessage) => string;
88
+ regexTextPatterns: RegexTextPattern[];
89
+ } = {
90
+ renderRegexTextChildren: (message) => {
91
+ if (
92
+ mentionManager.shouldUseMentionedMessageTemplate(message, sbOptions.uikit.groupChannel.channel.enableMention)
93
+ ) {
94
+ return message.mentionedMessageTemplate;
95
+ } else {
96
+ return message.message;
97
+ }
98
+ },
99
+ regexTextPatterns: [
100
+ {
101
+ regex: mentionManager.templateRegex,
102
+ replacer({ match, groups, parentProps, index, keyPrefix }) {
103
+ const user = message.mentionedUsers?.find((it) => it.userId === groups[2]);
104
+ if (user) {
105
+ const mentionColor =
106
+ !isMyMessage(message, currentUser?.userId) && user.userId === currentUser?.userId
107
+ ? palette.onBackgroundLight01
108
+ : parentProps?.color;
109
+
110
+ return (
111
+ <Text
112
+ {...parentProps}
113
+ key={`${keyPrefix}-${index}`}
114
+ color={mentionColor}
115
+ onPress={() => messageProps.onPressMentionedUser?.(user)}
116
+ onLongPress={messageProps.onLongPress}
117
+ style={[
118
+ parentProps?.style,
119
+ { fontWeight: '700' },
120
+ user.userId === currentUser?.userId && { backgroundColor: palette.highlight },
121
+ ]}
122
+ >
123
+ {`${mentionManager.asMentionedMessageText(user)}`}
124
+ </Text>
125
+ );
126
+ }
127
+ return match;
128
+ },
129
+ },
130
+ ],
131
+ };
132
+
133
+ const renderMessage = () => {
134
+ switch (getMessageType(message)) {
135
+ case 'admin': {
136
+ return <GroupChannelMessage.Admin message={message as SendbirdAdminMessage} {...messageProps} />;
137
+ }
138
+ case 'user':
139
+ case 'user.opengraph': {
140
+ if (message.ogMetaData && sbOptions.uikitWithAppInfo.groupChannel.channel.enableOgtag) {
141
+ return (
142
+ <GroupChannelMessage.OpenGraphUser
143
+ message={message as SendbirdUserMessage}
144
+ {...userMessageProps}
145
+ {...messageProps}
146
+ />
147
+ );
148
+ } else {
149
+ return (
150
+ <GroupChannelMessage.User
151
+ message={message as SendbirdUserMessage}
152
+ {...userMessageProps}
153
+ {...messageProps}
154
+ />
155
+ );
156
+ }
157
+ }
158
+ case 'file':
159
+ case 'file.audio': {
160
+ return <GroupChannelMessage.File message={message as SendbirdFileMessage} {...messageProps} />;
161
+ }
162
+ case 'file.image': {
163
+ return <GroupChannelMessage.ImageFile message={message as SendbirdFileMessage} {...messageProps} />;
164
+ }
165
+ case 'file.video': {
166
+ return (
167
+ <GroupChannelMessage.VideoFile
168
+ message={message as SendbirdFileMessage}
169
+ fetchThumbnailFromVideoSource={(uri) => mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 })}
170
+ {...messageProps}
171
+ />
172
+ );
173
+ }
174
+ case 'unknown':
175
+ default: {
176
+ return <GroupChannelMessage.Unknown message={message} {...messageProps} />;
177
+ }
178
+ }
179
+ };
180
+
181
+ const messageGap = useIIFE(() => {
182
+ if (message.isAdminMessage()) {
183
+ if (nextMessage?.isAdminMessage()) {
184
+ return 8;
185
+ } else {
186
+ return 16;
187
+ }
188
+ } else if (groupWithNext) {
189
+ return 2;
190
+ } else {
191
+ return 16;
192
+ }
193
+ });
194
+
195
+ return (
196
+ <Box paddingHorizontal={16} marginBottom={messageGap}>
197
+ <GroupChannelMessageDateSeparator message={message} prevMessage={prevMessage} />
198
+ <GroupChannelMessageFocusAnimation focused={focused}>{renderMessage()}</GroupChannelMessageFocusAnimation>
199
+ </Box>
200
+ );
201
+ };
202
+
203
+ export default React.memo(GroupChannelMessageRenderer);
@@ -17,7 +17,7 @@ import { useLocalization } from '../hooks/useContext';
17
17
 
18
18
  const iconMapper = { audio: 'file-audio', image: 'photo', video: 'play', file: 'file-document' } as const;
19
19
 
20
- export const MessageSearchResultItem: MessageSearchProps['List']['renderSearchResultItem'] = ({ onPress, message }) => {
20
+ const MessageSearchResultItem: MessageSearchProps['List']['renderSearchResultItem'] = ({ onPress, message }) => {
21
21
  const { colors, select, palette } = useUIKitTheme();
22
22
  const { STRINGS } = useLocalization();
23
23
 
@@ -123,3 +123,5 @@ const styles = createStyleSheet({
123
123
  height: 1,
124
124
  },
125
125
  });
126
+
127
+ export default MessageSearchResultItem;
@@ -12,7 +12,7 @@ import {
12
12
  } from '@sendbird/uikit-utils';
13
13
 
14
14
  import type { OpenChannelProps } from '../../domain/openChannel/types';
15
- import { useLocalization, usePlatformService } from '../../hooks/useContext';
15
+ import { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';
16
16
  import SBUUtils from '../../libs/SBUUtils';
17
17
  import OpenChannelMessageDateSeparator from './OpenChannelMessageDateSeparator';
18
18
 
@@ -21,11 +21,12 @@ const OpenChannelMessageRenderer: OpenChannelProps['Fragment']['renderMessage']
21
21
  message,
22
22
  onPress,
23
23
  onLongPress,
24
- onPressAvatar,
24
+ onShowUserProfile,
25
25
  enableMessageGrouping,
26
26
  prevMessage,
27
27
  nextMessage,
28
28
  }) => {
29
+ const { sbOptions } = useSendbirdChat();
29
30
  const { STRINGS } = useLocalization();
30
31
  const { mediaService } = usePlatformService();
31
32
  const { groupWithPrev } = calcMessageGrouping(Boolean(enableMessageGrouping), message, prevMessage, nextMessage);
@@ -34,8 +35,8 @@ const OpenChannelMessageRenderer: OpenChannelProps['Fragment']['renderMessage']
34
35
  channel,
35
36
  onPress,
36
37
  onLongPress,
37
- onPressURL: () => message.ogMetaData?.url && SBUUtils.openURL(message.ogMetaData?.url),
38
- onPressAvatar: () => 'sender' in message && onPressAvatar?.(message.sender, { hideMessageButton: true }),
38
+ onPressURL: (url) => SBUUtils.openURL(url),
39
+ onPressAvatar: () => 'sender' in message && onShowUserProfile?.(message.sender, { hideMessageButton: true }),
39
40
  grouped: groupWithPrev,
40
41
  strings: {
41
42
  edited: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX,
@@ -55,7 +56,11 @@ const OpenChannelMessageRenderer: OpenChannelProps['Fragment']['renderMessage']
55
56
  return <OpenChannelMessage.User message={message as SendbirdUserMessage} {...messageProps} />;
56
57
  }
57
58
  case 'user.opengraph': {
58
- return <OpenChannelMessage.OpenGraphUser message={message as SendbirdUserMessage} {...messageProps} />;
59
+ if (sbOptions.uikitWithAppInfo.openChannel.channel.enableOgtag) {
60
+ return <OpenChannelMessage.OpenGraphUser message={message as SendbirdUserMessage} {...messageProps} />;
61
+ } else {
62
+ return <OpenChannelMessage.User message={message as SendbirdUserMessage} {...messageProps} />;
63
+ }
59
64
  }
60
65
  case 'file':
61
66
  case 'file.audio': {
package/src/constants.ts CHANGED
@@ -1,10 +1,5 @@
1
1
  export const DEFAULT_LONG_PRESS_DELAY = 350;
2
2
  export const MESSAGE_SEARCH_SAFE_SCROLL_DELAY = 500;
3
3
  export const MESSAGE_FOCUS_ANIMATION_DELAY = 250;
4
- export const DEPRECATION_WARNING = {
5
- CHANNEL: {
6
- ON_PRESS_IMAGE_MESSAGE: '`onPressImageMessage` is deprecated, please use `onPressMediaMessage` instead',
7
- },
8
- } as const;
9
4
 
10
5
  export const UNKNOWN_USER_ID = '##__USER_ID_IS_NOT_PROVIDED__##';