@sendbird/uikit-react-native 1.0.0 → 1.1.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 (336) hide show
  1. package/README.md +7 -7
  2. package/lib/commonjs/InternalErrorBoundary.js.map +1 -1
  3. package/lib/commonjs/SendbirdUIKitContainer.js +6 -3
  4. package/lib/commonjs/SendbirdUIKitContainer.js.map +1 -1
  5. package/lib/commonjs/components/ChannelCover.js.map +1 -1
  6. package/lib/commonjs/components/ChatFlatList.js.map +1 -1
  7. package/lib/commonjs/components/FileViewer.js +326 -0
  8. package/lib/commonjs/components/FileViewer.js.map +1 -0
  9. package/lib/commonjs/components/GroupChannelPreviewContainer.js +180 -0
  10. package/lib/commonjs/components/GroupChannelPreviewContainer.js.map +1 -0
  11. package/lib/commonjs/components/MessageRenderer/AdminMessage/index.js.map +1 -1
  12. package/lib/commonjs/components/MessageRenderer/FileMessage/BaseFileMessage.js.map +1 -1
  13. package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +1 -1
  14. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js +116 -0
  15. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +1 -0
  16. package/lib/commonjs/components/MessageRenderer/FileMessage/index.js +8 -0
  17. package/lib/commonjs/components/MessageRenderer/FileMessage/index.js.map +1 -1
  18. package/lib/commonjs/components/MessageRenderer/MessageContainer.js.map +1 -1
  19. package/lib/commonjs/components/MessageRenderer/MessageDateSeparator.js.map +1 -1
  20. package/lib/commonjs/components/MessageRenderer/MessageIncomingAvatar.js.map +1 -1
  21. package/lib/commonjs/components/MessageRenderer/MessageIncomingSenderName.js.map +1 -1
  22. package/lib/commonjs/components/MessageRenderer/MessageOutgoingStatus.js +15 -24
  23. package/lib/commonjs/components/MessageRenderer/MessageOutgoingStatus.js.map +1 -1
  24. package/lib/commonjs/components/MessageRenderer/MessageTime.js.map +1 -1
  25. package/lib/commonjs/components/MessageRenderer/UnknownMessage/index.js.map +1 -1
  26. package/lib/commonjs/components/MessageRenderer/UserMessage/BaseUserMessage.js.map +1 -1
  27. package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +1 -1
  28. package/lib/commonjs/components/MessageRenderer/UserMessage/index.js.map +1 -1
  29. package/lib/commonjs/components/NewMessagesButton.js.map +1 -1
  30. package/lib/commonjs/components/ProviderLayout.js.map +1 -1
  31. package/lib/commonjs/components/SBUPressable.js +45 -0
  32. package/lib/commonjs/components/SBUPressable.js.map +1 -0
  33. package/lib/commonjs/components/ScrollToBottomButton.js.map +1 -1
  34. package/lib/commonjs/components/TypedPlaceholder.js.map +1 -1
  35. package/lib/commonjs/components/UserActionBar.js +1 -3
  36. package/lib/commonjs/components/UserActionBar.js.map +1 -1
  37. package/lib/commonjs/components/UserSelectableBar.js +1 -3
  38. package/lib/commonjs/components/UserSelectableBar.js.map +1 -1
  39. package/lib/commonjs/constants.js +7 -1
  40. package/lib/commonjs/constants.js.map +1 -1
  41. package/lib/commonjs/contexts/Localization.js.map +1 -1
  42. package/lib/commonjs/contexts/PlatformService.js +4 -2
  43. package/lib/commonjs/contexts/PlatformService.js.map +1 -1
  44. package/lib/commonjs/contexts/SendbirdChat.js +6 -2
  45. package/lib/commonjs/contexts/SendbirdChat.js.map +1 -1
  46. package/lib/commonjs/domain/groupChannel/component/GroupChannelHeader.js.map +1 -1
  47. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/EditInput.js.map +1 -1
  48. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js +1 -1
  49. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -1
  50. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/index.js.map +1 -1
  51. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +30 -7
  52. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  53. package/lib/commonjs/domain/groupChannel/module/moduleContext.js +2 -3
  54. package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -1
  55. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  56. package/lib/commonjs/domain/groupChannelList/component/GroupChannelListHeader.js +2 -5
  57. package/lib/commonjs/domain/groupChannelList/component/GroupChannelListHeader.js.map +1 -1
  58. package/lib/commonjs/domain/groupChannelList/component/GroupChannelListList.js.map +1 -1
  59. package/lib/commonjs/domain/groupChannelList/component/GroupChannelListTypeSelector.js.map +1 -1
  60. package/lib/commonjs/domain/groupChannelList/module/moduleContext.js.map +1 -1
  61. package/lib/commonjs/domain/groupChannelList/types.js.map +1 -1
  62. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsHeader.js.map +1 -1
  63. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js +1 -1
  64. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js.map +1 -1
  65. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
  66. package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js +1 -1
  67. package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js.map +1 -1
  68. package/lib/commonjs/domain/groupChannelSettings/types.js.map +1 -1
  69. package/lib/commonjs/domain/groupChannelUserList/types.js.map +1 -1
  70. package/lib/commonjs/domain/userList/module/moduleContext.js +2 -2
  71. package/lib/commonjs/domain/userList/module/moduleContext.js.map +1 -1
  72. package/lib/commonjs/domain/userList/types.js.map +1 -1
  73. package/lib/commonjs/fragments/createGroupChannelCreateFragment.js +3 -7
  74. package/lib/commonjs/fragments/createGroupChannelCreateFragment.js.map +1 -1
  75. package/lib/commonjs/fragments/createGroupChannelFragment.js +13 -11
  76. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  77. package/lib/commonjs/fragments/createGroupChannelListFragment.js +7 -37
  78. package/lib/commonjs/fragments/createGroupChannelListFragment.js.map +1 -1
  79. package/lib/commonjs/fragments/createGroupChannelMembersFragment.js +1 -1
  80. package/lib/commonjs/fragments/createGroupChannelMembersFragment.js.map +1 -1
  81. package/lib/commonjs/fragments/createGroupChannelSettingsFragment.js +2 -3
  82. package/lib/commonjs/fragments/createGroupChannelSettingsFragment.js.map +1 -1
  83. package/lib/commonjs/hooks/useContext.js.map +1 -1
  84. package/lib/commonjs/index.js +29 -2
  85. package/lib/commonjs/index.js.map +1 -1
  86. package/lib/commonjs/localization/StringSet.type.js +8 -0
  87. package/lib/commonjs/localization/StringSet.type.js.map +1 -1
  88. package/lib/commonjs/platform/createFileService.expo.js +38 -20
  89. package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
  90. package/lib/commonjs/platform/createFileService.native.js +20 -3
  91. package/lib/commonjs/platform/createFileService.native.js.map +1 -1
  92. package/lib/commonjs/platform/createMediaService.expo.js +64 -0
  93. package/lib/commonjs/platform/createMediaService.expo.js.map +1 -0
  94. package/lib/commonjs/platform/createMediaService.native.js +67 -0
  95. package/lib/commonjs/platform/createMediaService.native.js.map +1 -0
  96. package/lib/commonjs/platform/createNotificationService.expo.js.map +1 -1
  97. package/lib/commonjs/platform/types.js.map +1 -1
  98. package/lib/commonjs/version.js +1 -1
  99. package/lib/commonjs/version.js.map +1 -1
  100. package/lib/module/InternalErrorBoundary.js.map +1 -1
  101. package/lib/module/SendbirdUIKitContainer.js +7 -4
  102. package/lib/module/SendbirdUIKitContainer.js.map +1 -1
  103. package/lib/module/components/ChannelCover.js.map +1 -1
  104. package/lib/module/components/ChatFlatList.js.map +1 -1
  105. package/lib/module/components/FileViewer.js +304 -0
  106. package/lib/module/components/FileViewer.js.map +1 -0
  107. package/lib/module/components/GroupChannelPreviewContainer.js +158 -0
  108. package/lib/module/components/GroupChannelPreviewContainer.js.map +1 -0
  109. package/lib/module/components/MessageRenderer/AdminMessage/index.js.map +1 -1
  110. package/lib/module/components/MessageRenderer/FileMessage/BaseFileMessage.js.map +1 -1
  111. package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +1 -1
  112. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js +100 -0
  113. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +1 -0
  114. package/lib/module/components/MessageRenderer/FileMessage/index.js +6 -0
  115. package/lib/module/components/MessageRenderer/FileMessage/index.js.map +1 -1
  116. package/lib/module/components/MessageRenderer/MessageContainer.js.map +1 -1
  117. package/lib/module/components/MessageRenderer/MessageDateSeparator.js.map +1 -1
  118. package/lib/module/components/MessageRenderer/MessageIncomingAvatar.js.map +1 -1
  119. package/lib/module/components/MessageRenderer/MessageIncomingSenderName.js.map +1 -1
  120. package/lib/module/components/MessageRenderer/MessageOutgoingStatus.js +17 -26
  121. package/lib/module/components/MessageRenderer/MessageOutgoingStatus.js.map +1 -1
  122. package/lib/module/components/MessageRenderer/MessageTime.js.map +1 -1
  123. package/lib/module/components/MessageRenderer/UnknownMessage/index.js.map +1 -1
  124. package/lib/module/components/MessageRenderer/UserMessage/BaseUserMessage.js.map +1 -1
  125. package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +1 -1
  126. package/lib/module/components/MessageRenderer/UserMessage/index.js.map +1 -1
  127. package/lib/module/components/NewMessagesButton.js.map +1 -1
  128. package/lib/module/components/ProviderLayout.js.map +1 -1
  129. package/lib/module/components/SBUPressable.js +33 -0
  130. package/lib/module/components/SBUPressable.js.map +1 -0
  131. package/lib/module/components/ScrollToBottomButton.js.map +1 -1
  132. package/lib/module/components/TypedPlaceholder.js.map +1 -1
  133. package/lib/module/components/UserActionBar.js +1 -1
  134. package/lib/module/components/UserActionBar.js.map +1 -1
  135. package/lib/module/components/UserSelectableBar.js +1 -1
  136. package/lib/module/components/UserSelectableBar.js.map +1 -1
  137. package/lib/module/constants.js +5 -0
  138. package/lib/module/constants.js.map +1 -1
  139. package/lib/module/contexts/Localization.js.map +1 -1
  140. package/lib/module/contexts/PlatformService.js +4 -2
  141. package/lib/module/contexts/PlatformService.js.map +1 -1
  142. package/lib/module/contexts/SendbirdChat.js +6 -2
  143. package/lib/module/contexts/SendbirdChat.js.map +1 -1
  144. package/lib/module/domain/groupChannel/component/GroupChannelHeader.js.map +1 -1
  145. package/lib/module/domain/groupChannel/component/GroupChannelInput/EditInput.js.map +1 -1
  146. package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js +1 -1
  147. package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -1
  148. package/lib/module/domain/groupChannel/component/GroupChannelInput/index.js.map +1 -1
  149. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +28 -7
  150. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  151. package/lib/module/domain/groupChannel/module/moduleContext.js +2 -3
  152. package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
  153. package/lib/module/domain/groupChannel/types.js.map +1 -1
  154. package/lib/module/domain/groupChannelList/component/GroupChannelListHeader.js +2 -5
  155. package/lib/module/domain/groupChannelList/component/GroupChannelListHeader.js.map +1 -1
  156. package/lib/module/domain/groupChannelList/component/GroupChannelListList.js.map +1 -1
  157. package/lib/module/domain/groupChannelList/component/GroupChannelListTypeSelector.js.map +1 -1
  158. package/lib/module/domain/groupChannelList/module/moduleContext.js.map +1 -1
  159. package/lib/module/domain/groupChannelList/types.js.map +1 -1
  160. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsHeader.js.map +1 -1
  161. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js +1 -1
  162. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js.map +1 -1
  163. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
  164. package/lib/module/domain/groupChannelSettings/module/moduleContext.js +1 -1
  165. package/lib/module/domain/groupChannelSettings/module/moduleContext.js.map +1 -1
  166. package/lib/module/domain/groupChannelSettings/types.js.map +1 -1
  167. package/lib/module/domain/groupChannelUserList/types.js.map +1 -1
  168. package/lib/module/domain/userList/module/moduleContext.js +2 -2
  169. package/lib/module/domain/userList/module/moduleContext.js.map +1 -1
  170. package/lib/module/domain/userList/types.js.map +1 -1
  171. package/lib/module/fragments/createGroupChannelCreateFragment.js +4 -4
  172. package/lib/module/fragments/createGroupChannelCreateFragment.js.map +1 -1
  173. package/lib/module/fragments/createGroupChannelFragment.js +15 -13
  174. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  175. package/lib/module/fragments/createGroupChannelListFragment.js +11 -38
  176. package/lib/module/fragments/createGroupChannelListFragment.js.map +1 -1
  177. package/lib/module/fragments/createGroupChannelMembersFragment.js +1 -1
  178. package/lib/module/fragments/createGroupChannelMembersFragment.js.map +1 -1
  179. package/lib/module/fragments/createGroupChannelSettingsFragment.js +2 -3
  180. package/lib/module/fragments/createGroupChannelSettingsFragment.js.map +1 -1
  181. package/lib/module/hooks/useContext.js.map +1 -1
  182. package/lib/module/index.js +4 -1
  183. package/lib/module/index.js.map +1 -1
  184. package/lib/module/localization/StringSet.type.js +8 -0
  185. package/lib/module/localization/StringSet.type.js.map +1 -1
  186. package/lib/module/platform/createFileService.expo.js +38 -20
  187. package/lib/module/platform/createFileService.expo.js.map +1 -1
  188. package/lib/module/platform/createFileService.native.js +20 -3
  189. package/lib/module/platform/createFileService.native.js.map +1 -1
  190. package/lib/module/platform/createMediaService.expo.js +54 -0
  191. package/lib/module/platform/createMediaService.expo.js.map +1 -0
  192. package/lib/module/platform/createMediaService.native.js +57 -0
  193. package/lib/module/platform/createMediaService.native.js.map +1 -0
  194. package/lib/module/platform/createNotificationService.expo.js.map +1 -1
  195. package/lib/module/platform/types.js.map +1 -1
  196. package/lib/module/version.js +1 -1
  197. package/lib/module/version.js.map +1 -1
  198. package/lib/typescript/__template__/component/__domain__Header.d.ts +1 -2
  199. package/lib/typescript/__template__/component/__domain__StatusEmpty.d.ts +0 -1
  200. package/lib/typescript/__template__/component/__domain__StatusLoading.d.ts +0 -1
  201. package/lib/typescript/__template__/component/__domain__View.d.ts +1 -2
  202. package/lib/typescript/__template__/module/moduleContext.d.ts +2 -3
  203. package/lib/typescript/__template__/types.d.ts +2 -2
  204. package/lib/typescript/src/InternalErrorBoundary.d.ts +1 -0
  205. package/lib/typescript/src/SendbirdUIKitContainer.d.ts +9 -6
  206. package/lib/typescript/src/components/ChannelCover.d.ts +1 -2
  207. package/lib/typescript/src/components/FileViewer.d.ts +12 -0
  208. package/lib/typescript/src/components/GroupChannelPreviewContainer.d.ts +8 -0
  209. package/lib/typescript/src/components/MessageRenderer/AdminMessage/index.d.ts +1 -2
  210. package/lib/typescript/src/components/MessageRenderer/FileMessage/BaseFileMessage.d.ts +3 -3
  211. package/lib/typescript/src/components/MessageRenderer/FileMessage/ImageFileMessage.d.ts +1 -2
  212. package/lib/typescript/src/components/MessageRenderer/FileMessage/VideoFileMessage.d.ts +3 -0
  213. package/lib/typescript/src/components/MessageRenderer/FileMessage/index.d.ts +1 -1
  214. package/lib/typescript/src/components/MessageRenderer/MessageContainer.d.ts +1 -1
  215. package/lib/typescript/src/components/MessageRenderer/MessageDateSeparator.d.ts +1 -2
  216. package/lib/typescript/src/components/MessageRenderer/MessageIncomingAvatar.d.ts +1 -2
  217. package/lib/typescript/src/components/MessageRenderer/MessageIncomingSenderName.d.ts +1 -2
  218. package/lib/typescript/src/components/MessageRenderer/MessageOutgoingStatus.d.ts +1 -1
  219. package/lib/typescript/src/components/MessageRenderer/MessageTime.d.ts +1 -2
  220. package/lib/typescript/src/components/MessageRenderer/UnknownMessage/index.d.ts +1 -2
  221. package/lib/typescript/src/components/MessageRenderer/UserMessage/BaseUserMessage.d.ts +1 -2
  222. package/lib/typescript/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.d.ts +1 -2
  223. package/lib/typescript/src/components/MessageRenderer/UserMessage/index.d.ts +1 -1
  224. package/lib/typescript/src/components/NewMessagesButton.d.ts +1 -1
  225. package/lib/typescript/src/components/ProviderLayout.d.ts +1 -1
  226. package/lib/typescript/src/components/SBUPressable.d.ts +18 -0
  227. package/lib/typescript/src/components/ScrollToBottomButton.d.ts +1 -1
  228. package/lib/typescript/src/components/TypedPlaceholder.d.ts +1 -2
  229. package/lib/typescript/src/components/UserActionBar.d.ts +2 -3
  230. package/lib/typescript/src/components/UserSelectableBar.d.ts +2 -3
  231. package/lib/typescript/src/constants.d.ts +5 -0
  232. package/lib/typescript/src/contexts/Localization.d.ts +2 -3
  233. package/lib/typescript/src/contexts/PlatformService.d.ts +5 -4
  234. package/lib/typescript/src/contexts/SendbirdChat.d.ts +7 -3
  235. package/lib/typescript/src/domain/groupChannel/component/GroupChannelHeader.d.ts +1 -2
  236. package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput/EditInput.d.ts +1 -2
  237. package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput/SendInput.d.ts +1 -2
  238. package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput/index.d.ts +2 -2
  239. package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +4 -3
  240. package/lib/typescript/src/domain/groupChannel/component/GroupChannelStatusEmpty.d.ts +0 -1
  241. package/lib/typescript/src/domain/groupChannel/component/GroupChannelStatusLoading.d.ts +0 -1
  242. package/lib/typescript/src/domain/groupChannel/types.d.ts +8 -4
  243. package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListHeader.d.ts +1 -2
  244. package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListList.d.ts +1 -2
  245. package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListStatusEmpty.d.ts +0 -1
  246. package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListStatusLoading.d.ts +0 -1
  247. package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListTypeSelector.d.ts +1 -2
  248. package/lib/typescript/src/domain/groupChannelList/module/moduleContext.d.ts +2 -3
  249. package/lib/typescript/src/domain/groupChannelList/types.d.ts +2 -2
  250. package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsHeader.d.ts +1 -2
  251. package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsInfo.d.ts +1 -2
  252. package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.d.ts +1 -2
  253. package/lib/typescript/src/domain/groupChannelSettings/module/moduleContext.d.ts +2 -3
  254. package/lib/typescript/src/domain/groupChannelSettings/types.d.ts +2 -2
  255. package/lib/typescript/src/domain/groupChannelUserList/types.d.ts +4 -4
  256. package/lib/typescript/src/domain/userList/component/UserListStatusEmpty.d.ts +0 -1
  257. package/lib/typescript/src/domain/userList/component/UserListStatusLoading.d.ts +0 -1
  258. package/lib/typescript/src/domain/userList/module/moduleContext.d.ts +2 -3
  259. package/lib/typescript/src/domain/userList/types.d.ts +1 -1
  260. package/lib/typescript/src/hooks/useContext.d.ts +8 -4
  261. package/lib/typescript/src/index.d.ts +3 -0
  262. package/lib/typescript/src/localization/StringSet.type.d.ts +4 -0
  263. package/lib/typescript/src/platform/createFileService.expo.d.ts +4 -4
  264. package/lib/typescript/src/platform/createMediaService.expo.d.ts +9 -0
  265. package/lib/typescript/src/platform/createMediaService.native.d.ts +9 -0
  266. package/lib/typescript/src/platform/createNotificationService.expo.d.ts +1 -1
  267. package/lib/typescript/src/platform/types.d.ts +20 -1
  268. package/lib/typescript/src/version.d.ts +1 -1
  269. package/package.json +16 -7
  270. package/src/InternalErrorBoundary.tsx +1 -0
  271. package/src/SendbirdUIKitContainer.tsx +17 -6
  272. package/src/components/ChannelCover.tsx +1 -1
  273. package/src/components/ChatFlatList.tsx +1 -1
  274. package/src/components/FileViewer.tsx +284 -0
  275. package/src/components/GroupChannelPreviewContainer.tsx +134 -0
  276. package/src/components/MessageRenderer/AdminMessage/index.tsx +1 -1
  277. package/src/components/MessageRenderer/FileMessage/BaseFileMessage.tsx +4 -6
  278. package/src/components/MessageRenderer/FileMessage/ImageFileMessage.tsx +1 -1
  279. package/src/components/MessageRenderer/FileMessage/VideoFileMessage.tsx +91 -0
  280. package/src/components/MessageRenderer/FileMessage/index.tsx +7 -1
  281. package/src/components/MessageRenderer/MessageContainer.tsx +1 -1
  282. package/src/components/MessageRenderer/MessageDateSeparator.tsx +1 -1
  283. package/src/components/MessageRenderer/MessageIncomingAvatar.tsx +5 -2
  284. package/src/components/MessageRenderer/MessageIncomingSenderName.tsx +5 -2
  285. package/src/components/MessageRenderer/MessageOutgoingStatus.tsx +26 -33
  286. package/src/components/MessageRenderer/MessageTime.tsx +6 -2
  287. package/src/components/MessageRenderer/UnknownMessage/index.tsx +1 -1
  288. package/src/components/MessageRenderer/UserMessage/BaseUserMessage.tsx +1 -1
  289. package/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.tsx +4 -2
  290. package/src/components/MessageRenderer/UserMessage/index.tsx +1 -1
  291. package/src/components/NewMessagesButton.tsx +1 -1
  292. package/src/components/ProviderLayout.tsx +1 -1
  293. package/src/components/SBUPressable.tsx +40 -0
  294. package/src/components/ScrollToBottomButton.tsx +1 -1
  295. package/src/components/TypedPlaceholder.tsx +1 -1
  296. package/src/components/UserActionBar.tsx +2 -2
  297. package/src/components/UserSelectableBar.tsx +2 -2
  298. package/src/constants.ts +5 -0
  299. package/src/contexts/Localization.tsx +2 -3
  300. package/src/contexts/PlatformService.tsx +13 -6
  301. package/src/contexts/SendbirdChat.tsx +15 -7
  302. package/src/domain/groupChannel/component/GroupChannelHeader.tsx +1 -1
  303. package/src/domain/groupChannel/component/GroupChannelInput/EditInput.tsx +1 -1
  304. package/src/domain/groupChannel/component/GroupChannelInput/SendInput.tsx +2 -2
  305. package/src/domain/groupChannel/component/GroupChannelInput/index.tsx +2 -2
  306. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +25 -8
  307. package/src/domain/groupChannel/module/moduleContext.tsx +6 -13
  308. package/src/domain/groupChannel/types.ts +10 -4
  309. package/src/domain/groupChannelList/component/GroupChannelListHeader.tsx +2 -4
  310. package/src/domain/groupChannelList/component/GroupChannelListList.tsx +2 -2
  311. package/src/domain/groupChannelList/component/GroupChannelListTypeSelector.tsx +4 -4
  312. package/src/domain/groupChannelList/module/moduleContext.tsx +2 -2
  313. package/src/domain/groupChannelList/types.ts +3 -2
  314. package/src/domain/groupChannelSettings/component/GroupChannelSettingsHeader.tsx +1 -1
  315. package/src/domain/groupChannelSettings/component/GroupChannelSettingsInfo.tsx +1 -1
  316. package/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.tsx +2 -2
  317. package/src/domain/groupChannelSettings/module/moduleContext.tsx +7 -15
  318. package/src/domain/groupChannelSettings/types.ts +2 -2
  319. package/src/domain/groupChannelUserList/types.ts +4 -5
  320. package/src/domain/userList/module/moduleContext.tsx +3 -7
  321. package/src/domain/userList/types.ts +1 -1
  322. package/src/fragments/createGroupChannelCreateFragment.tsx +38 -41
  323. package/src/fragments/createGroupChannelFragment.tsx +23 -33
  324. package/src/fragments/createGroupChannelListFragment.tsx +10 -32
  325. package/src/fragments/createGroupChannelMembersFragment.tsx +34 -39
  326. package/src/fragments/createGroupChannelSettingsFragment.tsx +1 -9
  327. package/src/hooks/useContext.ts +3 -5
  328. package/src/index.ts +5 -1
  329. package/src/localization/StringSet.type.ts +8 -0
  330. package/src/platform/createFileService.expo.ts +29 -16
  331. package/src/platform/createFileService.native.ts +16 -3
  332. package/src/platform/createMediaService.expo.tsx +30 -0
  333. package/src/platform/createMediaService.native.tsx +37 -0
  334. package/src/platform/createNotificationService.expo.ts +1 -1
  335. package/src/platform/types.ts +26 -1
  336. package/src/version.ts +1 -1
@@ -1,59 +1,52 @@
1
- import React, { useEffect, useState } from 'react';
1
+ import React, { useEffect } from 'react';
2
2
 
3
3
  import { Icon, LoadingSpinner, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
4
- import type {
5
- SendbirdFileMessage,
6
- SendbirdGroupChannel,
7
- SendbirdMessage,
8
- SendbirdUserMessage,
9
- } from '@sendbird/uikit-utils';
10
- import { useUniqId } from '@sendbird/uikit-utils';
4
+ import type { SendbirdGroupChannel, SendbirdMessage } from '@sendbird/uikit-utils';
5
+ import { isDifferentChannel, useForceUpdate, useUniqId } from '@sendbird/uikit-utils';
11
6
 
12
7
  import { useSendbirdChat } from '../../hooks/useContext';
13
8
 
14
9
  const SIZE = 16;
15
10
 
16
11
  type Props = { channel: SendbirdGroupChannel; message: SendbirdMessage };
17
- const MessageOutgoingStatus: React.FC<Props> = ({ channel, message }) => {
12
+ const MessageOutgoingStatus = ({ channel, message }: Props) => {
18
13
  if (!message.isUserMessage() && !message.isFileMessage()) return null;
19
14
 
20
- const handlerId = useUniqId('MessageOutgoingStatus');
21
-
22
15
  const { sdk, features } = useSendbirdChat();
23
16
  const { colors } = useUIKitTheme();
24
17
 
25
- const [state, setState] = useState(() => ({
26
- unreadCount: channel.getUnreadMemberCount(message),
27
- undeliveredCount: channel.getUndeliveredMemberCount(message),
28
- }));
29
-
30
- const getCounts = (channel: SendbirdGroupChannel, message: SendbirdUserMessage | SendbirdFileMessage) => {
31
- return {
32
- unreadCount: channel.getUnreadMemberCount(message),
33
- undeliveredCount: channel.getUndeliveredMemberCount(message),
34
- };
35
- };
18
+ const uniqId = useUniqId('MessageOutgoingStatus');
19
+ const forceUpdate = useForceUpdate();
36
20
 
37
21
  useEffect(() => {
38
- const id = String(handlerId);
39
- if (message.sendingStatus === 'succeeded' && state.unreadCount === 0 && state.undeliveredCount === 0) {
40
- sdk.removeChannelHandler(id);
22
+ const handlerId = `MessageOutgoingStatus_${uniqId}`;
23
+
24
+ if (
25
+ message.sendingStatus === 'succeeded' &&
26
+ channel.getUnreadMemberCount(message) === 0 &&
27
+ channel.getUndeliveredMemberCount(message) === 0
28
+ ) {
29
+ sdk.removeChannelHandler(handlerId);
41
30
  } else {
42
31
  const handler = new sdk.ChannelHandler();
43
- handler.onReadReceiptUpdated = (channel) => {
44
- if (channel.url === message.channelUrl) setState(getCounts(channel, message));
32
+
33
+ handler.onReadReceiptUpdated = (eventChannel) => {
34
+ if (isDifferentChannel(channel, eventChannel)) return;
35
+ forceUpdate();
45
36
  };
46
37
 
47
38
  if (features.deliveryReceiptEnabled) {
48
- handler.onDeliveryReceiptUpdated = (channel) => {
49
- if (channel.url === message.channelUrl && channel.isGroupChannel()) setState(getCounts(channel, message));
39
+ handler.onDeliveryReceiptUpdated = (eventChannel) => {
40
+ if (isDifferentChannel(channel, eventChannel)) return;
41
+ forceUpdate();
50
42
  };
51
43
  }
52
- sdk.addChannelHandler(id, handler);
44
+
45
+ sdk.addChannelHandler(handlerId, handler);
53
46
  }
54
47
 
55
48
  return () => {
56
- sdk.removeChannelHandler(id);
49
+ sdk.removeChannelHandler(handlerId);
57
50
  };
58
51
  }, [message.sendingStatus]);
59
52
 
@@ -65,12 +58,12 @@ const MessageOutgoingStatus: React.FC<Props> = ({ channel, message }) => {
65
58
  return <Icon icon={'error'} size={SIZE} color={colors.error} style={styles.container} />;
66
59
  }
67
60
 
68
- if (state.unreadCount === 0) {
61
+ if (channel.getUnreadMemberCount(message) === 0) {
69
62
  return <Icon icon={'done-all'} size={SIZE} color={colors.secondary} style={styles.container} />;
70
63
  }
71
64
 
72
65
  if (features.deliveryReceiptEnabled) {
73
- if (state.undeliveredCount === 0) {
66
+ if (channel.getUndeliveredMemberCount(message) === 0) {
74
67
  return <Icon icon={'done-all'} size={SIZE} color={colors.onBackground03} style={styles.container} />;
75
68
  }
76
69
  return <Icon icon={'done'} size={SIZE} color={colors.onBackground03} style={styles.container} />;
@@ -6,8 +6,12 @@ import type { SendbirdMessage } from '@sendbird/uikit-utils';
6
6
 
7
7
  import { useLocalization } from '../../hooks/useContext';
8
8
 
9
- type Props = { message: SendbirdMessage; grouping: boolean; style?: StyleProp<ViewStyle> };
10
- const MessageTime: React.FC<Props> = ({ message, grouping, style }) => {
9
+ type Props = {
10
+ message: SendbirdMessage;
11
+ grouping: boolean;
12
+ style?: StyleProp<ViewStyle>;
13
+ };
14
+ const MessageTime = ({ message, grouping, style }: Props) => {
11
15
  const { STRINGS } = useLocalization();
12
16
  const { colors } = useUIKitTheme();
13
17
  if (grouping) return null;
@@ -7,7 +7,7 @@ import { useLocalization } from '../../../hooks/useContext';
7
7
  import type { MessageRendererInterface } from '../index';
8
8
 
9
9
  export type UnknownMessageProps = MessageRendererInterface;
10
- const UnknownMessage: React.FC<UnknownMessageProps> = ({ message, variant, pressed }) => {
10
+ const UnknownMessage = ({ message, variant, pressed }: UnknownMessageProps) => {
11
11
  const { STRINGS } = useLocalization();
12
12
  const { colors } = useUIKitTheme();
13
13
  const color = colors.ui.message[variant][pressed ? 'pressed' : 'enabled'];
@@ -6,7 +6,7 @@ import { Text, URLParsedText, createStyleSheet, useUIKitTheme } from '@sendbird/
6
6
  import { useLocalization } from '../../../hooks/useContext';
7
7
  import type { UserMessageProps } from './index';
8
8
 
9
- const BaseUserMessage: React.FC<UserMessageProps> = ({ message, variant, pressed }) => {
9
+ const BaseUserMessage = ({ message, variant, pressed }: UserMessageProps) => {
10
10
  const { colors } = useUIKitTheme();
11
11
  const color = colors.ui.message[variant][pressed ? 'pressed' : 'enabled'];
12
12
  const { STRINGS } = useLocalization();
@@ -15,8 +15,10 @@ import { conditionChaining } from '@sendbird/uikit-utils';
15
15
  import { useLocalization } from '../../../hooks/useContext';
16
16
  import type { UserMessageProps } from './index';
17
17
 
18
- type Props = UserMessageProps & { ogMetaData: Sendbird.OGMetaData };
19
- const OpenGraphUserMessage: React.FC<Props> = ({ message, variant, pressed, ogMetaData }) => {
18
+ type Props = UserMessageProps & {
19
+ ogMetaData: Sendbird.OGMetaData;
20
+ };
21
+ const OpenGraphUserMessage = ({ message, variant, pressed, ogMetaData }: Props) => {
20
22
  const { STRINGS } = useLocalization();
21
23
  const { colors, select, palette } = useUIKitTheme();
22
24
  const color = colors.ui.message[variant][pressed ? 'pressed' : 'enabled'];
@@ -7,7 +7,7 @@ import BaseUserMessage from './BaseUserMessage';
7
7
  import OpenGraphUserMessage from './OpenGraphUserMessage';
8
8
 
9
9
  export type UserMessageProps = MessageRendererInterface<SendbirdUserMessage>;
10
- const UserMessage: React.FC<UserMessageProps> = (props) => {
10
+ const UserMessage = (props: UserMessageProps) => {
11
11
  if (props.message.ogMetaData) {
12
12
  return <OpenGraphUserMessage {...props} ogMetaData={props.message.ogMetaData} />;
13
13
  }
@@ -11,7 +11,7 @@ type Props = {
11
11
  visible: boolean;
12
12
  onPress: () => void;
13
13
  };
14
- const NewMessagesButton: React.FC<Props> = ({ newMessages, visible, onPress }) => {
14
+ const NewMessagesButton = ({ newMessages, visible, onPress }: Props) => {
15
15
  const { STRINGS } = useLocalization();
16
16
  const { select, palette, colors } = useUIKitTheme();
17
17
  if (newMessages.length === 0 || !visible) return null;
@@ -3,7 +3,7 @@ import { View } from 'react-native';
3
3
 
4
4
  import { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
5
5
 
6
- const ProviderLayout: React.FC = ({ children }) => {
6
+ const ProviderLayout = ({ children }: React.PropsWithChildren) => {
7
7
  const { colors } = useUIKitTheme();
8
8
  return <View style={[styles.view, { backgroundColor: colors.background }]}>{children}</View>;
9
9
  };
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import { Pressable, PressableProps, TouchableOpacity, TouchableOpacityProps } from 'react-native';
3
+
4
+ import { DEFAULT_LONG_PRESS_DELAY } from '../constants';
5
+
6
+ type Components = 'Pressable' | 'TouchableOpacity';
7
+ type Props<T extends Components = 'Pressable'> = {
8
+ as?: T;
9
+ } & ExtractProps<T, AsProps>;
10
+
11
+ type AsProps =
12
+ | {
13
+ type: 'Pressable';
14
+ props: PressableProps;
15
+ }
16
+ | {
17
+ type: 'TouchableOpacity';
18
+ props: TouchableOpacityProps;
19
+ };
20
+
21
+ type ExtractProps<T extends Components, U extends AsProps> = U extends { type: T; props: infer P } ? P : never;
22
+
23
+ function getComponent(as?: Components) {
24
+ switch (as) {
25
+ case 'Pressable':
26
+ return Pressable;
27
+ case 'TouchableOpacity':
28
+ return TouchableOpacity;
29
+ default:
30
+ return Pressable;
31
+ }
32
+ }
33
+
34
+ const SBUPressable = <T extends Components>({ as, ...props }: Props<T>) => {
35
+ const Renderer = getComponent(as);
36
+ // @ts-ignore
37
+ return <Renderer delayLongPress={DEFAULT_LONG_PRESS_DELAY} {...props} />;
38
+ };
39
+
40
+ export default SBUPressable;
@@ -7,7 +7,7 @@ type Props = {
7
7
  visible: boolean;
8
8
  onPress: () => void;
9
9
  };
10
- const ScrollToBottomButton: React.FC<Props> = ({ visible, onPress }) => {
10
+ const ScrollToBottomButton = ({ visible, onPress }: Props) => {
11
11
  const { palette, select } = useUIKitTheme();
12
12
  return (
13
13
  <TouchableOpacity
@@ -16,7 +16,7 @@ type Props = {
16
16
  | 'loading';
17
17
  onPressRetry?: () => void;
18
18
  };
19
- const TypedPlaceholder: React.FC<Props> = ({ type, onPressRetry }) => {
19
+ const TypedPlaceholder = ({ type, onPressRetry }: Props) => {
20
20
  const { STRINGS } = useLocalization();
21
21
  switch (type) {
22
22
  case 'no-banned-members':
@@ -12,7 +12,7 @@ type Props = {
12
12
  disabled: boolean;
13
13
  onPressActionMenu?: () => void;
14
14
  };
15
- const UserActionBar: React.FC<Props> = ({ muted, uri, name, disabled, onPressActionMenu, label }) => {
15
+ const UserActionBar = ({ muted, uri, name, disabled, onPressActionMenu, label }: Props) => {
16
16
  const { colors } = useUIKitTheme();
17
17
 
18
18
  const iconColor = conditionChaining([disabled], [colors.onBackground04, colors.onBackground01]);
@@ -70,4 +70,4 @@ const styles = createStyleSheet({
70
70
  },
71
71
  });
72
72
 
73
- export default React.memo(UserActionBar);
73
+ export default UserActionBar;
@@ -10,7 +10,7 @@ type Props = {
10
10
  selected: boolean;
11
11
  disabled: boolean;
12
12
  };
13
- const UserSelectableBar: React.FC<Props> = ({ uri, name, selected, disabled }) => {
13
+ const UserSelectableBar = ({ uri, name, selected, disabled }: Props) => {
14
14
  const { colors } = useUIKitTheme();
15
15
 
16
16
  const iconColor = conditionChaining(
@@ -55,4 +55,4 @@ const styles = createStyleSheet({
55
55
  },
56
56
  });
57
57
 
58
- export default React.memo(UserSelectableBar);
58
+ export default UserSelectableBar;
package/src/constants.ts CHANGED
@@ -1 +1,6 @@
1
1
  export const DEFAULT_LONG_PRESS_DELAY = 350;
2
+ export const DEPRECATION_WARNING = {
3
+ GROUP_CHANNEL: {
4
+ ON_PRESS_IMAGE_MESSAGE: '`onPressImageMessage` is deprecated, please use `onPressMediaMessage` instead',
5
+ },
6
+ } as const;
@@ -2,10 +2,9 @@ import React from 'react';
2
2
 
3
3
  import type { StringSet } from '../localization/StringSet.type';
4
4
 
5
- type Props = {
5
+ type Props = React.PropsWithChildren<{
6
6
  stringSet: StringSet;
7
- children?: React.ReactNode;
8
- };
7
+ }>;
9
8
 
10
9
  export type LocalizationContextType = {
11
10
  STRINGS: StringSet;
@@ -1,22 +1,29 @@
1
1
  import React from 'react';
2
2
 
3
- import type { ClipboardServiceInterface, FileServiceInterface, NotificationServiceInterface } from '../platform/types';
3
+ import type {
4
+ ClipboardServiceInterface,
5
+ FileServiceInterface,
6
+ MediaServiceInterface,
7
+ NotificationServiceInterface,
8
+ } from '../platform/types';
4
9
 
5
- type Props = {
10
+ type Props = React.PropsWithChildren<{
6
11
  fileService: FileServiceInterface;
7
12
  clipboardService: ClipboardServiceInterface;
8
13
  notificationService: NotificationServiceInterface;
9
- };
14
+ mediaService?: MediaServiceInterface;
15
+ }>;
10
16
 
11
17
  export const PlatformServiceContext = React.createContext<Props | null>(null);
12
- export const PlatformServiceProvider: React.FC<Props> = ({
18
+ export const PlatformServiceProvider = ({
13
19
  children,
14
20
  fileService,
15
21
  clipboardService,
16
22
  notificationService,
17
- }) => {
23
+ mediaService,
24
+ }: Props) => {
18
25
  return (
19
- <PlatformServiceContext.Provider value={{ fileService, clipboardService, notificationService }}>
26
+ <PlatformServiceContext.Provider value={{ fileService, clipboardService, notificationService, mediaService }}>
20
27
  {children}
21
28
  </PlatformServiceContext.Provider>
22
29
  );
@@ -7,13 +7,13 @@ import { useForceUpdate } from '@sendbird/uikit-utils';
7
7
 
8
8
  import type { FileType } from '../platform/types';
9
9
 
10
- type Props = {
10
+ type Props = React.PropsWithChildren<{
11
11
  sdkInstance: SendbirdChatSDK;
12
12
 
13
13
  enableAutoPushTokenRegistration: boolean;
14
- // enableChannelListTypingIndicator: boolean;
15
- // enableChannelListMessageReceiptStatus: boolean;
16
- };
14
+ enableChannelListTypingIndicator: boolean;
15
+ enableChannelListMessageReceiptStatus: boolean;
16
+ }>;
17
17
 
18
18
  type Context = {
19
19
  sdk: SendbirdChatSDK;
@@ -27,8 +27,8 @@ type Context = {
27
27
  features: {
28
28
  // UIKit features
29
29
  autoPushTokenRegistrationEnabled: boolean;
30
- // channelListTypingIndicatorEnabled: boolean;
31
- // channelListMessageReceiptStateEnabled: boolean;
30
+ channelListTypingIndicatorEnabled: boolean;
31
+ channelListMessageReceiptStatusEnabled: boolean;
32
32
 
33
33
  // Sendbird application features
34
34
  deliveryReceiptEnabled: boolean;
@@ -39,7 +39,13 @@ type Context = {
39
39
  };
40
40
 
41
41
  export const SendbirdChatContext = React.createContext<Context | null>(null);
42
- export const SendbirdChatProvider: React.FC<Props> = ({ children, sdkInstance, enableAutoPushTokenRegistration }) => {
42
+ export const SendbirdChatProvider = ({
43
+ children,
44
+ sdkInstance,
45
+ enableAutoPushTokenRegistration,
46
+ enableChannelListMessageReceiptStatus,
47
+ enableChannelListTypingIndicator,
48
+ }: Props) => {
43
49
  const [currentUser, _setCurrentUser] = useState<SendbirdUser>();
44
50
  const forceUpdate = useForceUpdate();
45
51
  const appFeatures = useAppFeatures(sdkInstance);
@@ -103,6 +109,8 @@ export const SendbirdChatProvider: React.FC<Props> = ({ children, sdkInstance, e
103
109
  features: {
104
110
  ...appFeatures,
105
111
  autoPushTokenRegistrationEnabled: enableAutoPushTokenRegistration,
112
+ channelListTypingIndicatorEnabled: enableChannelListTypingIndicator,
113
+ channelListMessageReceiptStatusEnabled: enableChannelListMessageReceiptStatus,
106
114
  },
107
115
  };
108
116
 
@@ -8,7 +8,7 @@ import { useLocalization } from '../../../hooks/useContext';
8
8
  import { GroupChannelContexts } from '../module/moduleContext';
9
9
  import type { GroupChannelProps } from '../types';
10
10
 
11
- const GroupChannelHeader: React.FC<GroupChannelProps['Header']> = ({ onPressHeaderLeft, onPressHeaderRight }) => {
11
+ const GroupChannelHeader = ({ onPressHeaderLeft, onPressHeaderRight }: GroupChannelProps['Header']) => {
12
12
  const { headerTitle, channel } = useContext(GroupChannelContexts.Fragment);
13
13
  const { typingUsers } = useContext(GroupChannelContexts.TypingIndicator);
14
14
  const { STRINGS } = useLocalization();
@@ -15,7 +15,7 @@ type EditInputProps = GroupChannelProps['Input'] & {
15
15
  };
16
16
 
17
17
  const AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });
18
- const EditInput: React.FC<EditInputProps> = ({ text, setText, editMessage, setEditMessage, onUpdateUserMessage }) => {
18
+ const EditInput = ({ text, setText, editMessage, setEditMessage, onUpdateUserMessage }: EditInputProps) => {
19
19
  const { STRINGS } = useLocalization();
20
20
  const inputRef = useRef<RNTextInput>(null);
21
21
  const toast = useToast();
@@ -19,7 +19,7 @@ type SendInputProps = GroupChannelProps['Input'] & {
19
19
  setText: (val: string) => void;
20
20
  disabled: boolean;
21
21
  };
22
- const SendInput: React.FC<SendInputProps> = ({ onSendUserMessage, onSendFileMessage, text, setText, disabled }) => {
22
+ const SendInput = ({ onSendUserMessage, onSendFileMessage, text, setText, disabled }: SendInputProps) => {
23
23
  const { STRINGS } = useLocalization();
24
24
  const { openSheet } = useBottomSheet();
25
25
  const { fileService } = usePlatformService();
@@ -38,7 +38,7 @@ const SendInput: React.FC<SendInputProps> = ({ onSendUserMessage, onSendFileMess
38
38
  icon: 'camera',
39
39
  onPress: async () => {
40
40
  const photo = await fileService.openCamera({
41
- mediaType: 'photo',
41
+ mediaType: 'all',
42
42
  onOpenFailureWithToastMessage: () => toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error'),
43
43
  });
44
44
 
@@ -11,7 +11,7 @@ import EditInput from './EditInput';
11
11
  import SendInput from './SendInput';
12
12
 
13
13
  const KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });
14
- const GroupChannelInput: React.FC<GroupChannelProps['Input']> = (props) => {
14
+ const GroupChannelInput = (props: GroupChannelProps['Input']) => {
15
15
  const { channel } = props;
16
16
 
17
17
  const { left, right, bottom } = useSafeAreaInsets();
@@ -65,7 +65,7 @@ const GroupChannelInput: React.FC<GroupChannelProps['Input']> = (props) => {
65
65
  </KeyboardAvoidingView>
66
66
  );
67
67
  };
68
- const SafeAreaBottom: React.FC<{ height: number }> = ({ height }) => {
68
+ const SafeAreaBottom = ({ height }: { height: number }) => {
69
69
  return <View style={{ height }} />;
70
70
  };
71
71
 
@@ -19,18 +19,20 @@ import {
19
19
  getFileType,
20
20
  isMyMessage,
21
21
  messageKeyExtractor,
22
+ toMegabyte,
22
23
  useFreshCallback,
23
24
  } from '@sendbird/uikit-utils';
24
25
 
25
26
  import type { ChatFlatListRef } from '../../../components/ChatFlatList';
26
27
  import ChatFlatList from '../../../components/ChatFlatList';
28
+ import { DEPRECATION_WARNING } from '../../../constants';
27
29
  import { useLocalization, usePlatformService } from '../../../hooks/useContext';
28
30
  import { GroupChannelContexts } from '../module/moduleContext';
29
31
  import type { GroupChannelProps } from '../types';
30
32
 
31
33
  const HANDLE_NEXT_MSG_SEPARATELY = Platform.select({ default: true });
32
34
 
33
- const GroupChannelMessageList: React.FC<GroupChannelProps['MessageList']> = ({
35
+ const GroupChannelMessageList = ({
34
36
  currentUserId,
35
37
  channel,
36
38
  messages,
@@ -44,9 +46,10 @@ const GroupChannelMessageList: React.FC<GroupChannelProps['MessageList']> = ({
44
46
  onResendFailedMessage,
45
47
  onDeleteMessage,
46
48
  onPressImageMessage,
49
+ onPressMediaMessage,
47
50
  flatListProps,
48
51
  enableMessageGrouping,
49
- }) => {
52
+ }: GroupChannelProps['MessageList']) => {
50
53
  const { STRINGS } = useLocalization();
51
54
  const { colors } = useUIKitTheme();
52
55
  const { left, right } = useSafeAreaInsets();
@@ -56,6 +59,7 @@ const GroupChannelMessageList: React.FC<GroupChannelProps['MessageList']> = ({
56
59
  const getMessagePressActions = useGetMessagePressActions({
57
60
  onDeleteMessage,
58
61
  onPressImageMessage,
62
+ onPressMediaMessage,
59
63
  currentUserId,
60
64
  onResendFailedMessage,
61
65
  });
@@ -135,15 +139,15 @@ const GroupChannelMessageList: React.FC<GroupChannelProps['MessageList']> = ({
135
139
  };
136
140
 
137
141
  type HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;
138
- const toMegabyte = (byte: number) => byte / 1024 / 1024;
139
142
  const useGetMessagePressActions = ({
140
143
  onPressImageMessage,
144
+ onPressMediaMessage,
141
145
  onDeleteMessage,
142
146
  onResendFailedMessage,
143
147
  currentUserId,
144
148
  }: Pick<
145
149
  GroupChannelProps['MessageList'],
146
- 'onDeleteMessage' | 'onResendFailedMessage' | 'onPressImageMessage' | 'currentUserId'
150
+ 'onDeleteMessage' | 'onResendFailedMessage' | 'currentUserId' | 'onPressImageMessage' | 'onPressMediaMessage'
147
151
  >) => {
148
152
  const { colors } = useUIKitTheme();
149
153
  const { STRINGS } = useLocalization();
@@ -253,10 +257,23 @@ const useGetMessagePressActions = ({
253
257
  }
254
258
 
255
259
  const fileType = getFileType(msg.type || getFileExtension(msg.name));
256
- if (fileType === 'image') {
257
- response.onPress = () => onPressImageMessage?.(msg, getAvailableUriFromFileMessage(msg));
258
- } else {
259
- response.onPress = () => Linking.openURL(msg.url).catch();
260
+ switch (fileType) {
261
+ case 'image':
262
+ case 'video':
263
+ case 'audio': {
264
+ response.onPress = () => {
265
+ if (onPressImageMessage && fileType === 'image') {
266
+ Logger.warn(DEPRECATION_WARNING.GROUP_CHANNEL.ON_PRESS_IMAGE_MESSAGE);
267
+ onPressImageMessage(msg, getAvailableUriFromFileMessage(msg));
268
+ }
269
+ onPressMediaMessage?.(msg, () => onDeleteMessage(msg), getAvailableUriFromFileMessage(msg));
270
+ };
271
+ break;
272
+ }
273
+ default: {
274
+ response.onPress = () => Linking.openURL(msg.url).catch();
275
+ break;
276
+ }
260
277
  }
261
278
  }
262
279
 
@@ -41,20 +41,13 @@ export const GroupChannelContextsProvider: GroupChannelModule['Provider'] = ({
41
41
  const [typingUsers, setTypingUsers] = useState<SendbirdUser[]>([]);
42
42
  const [editMessage, setEditMessage] = useState<SendbirdUserMessage | SendbirdFileMessage>();
43
43
 
44
- useChannelHandler(
45
- sdk,
46
- `GroupChannelContextsProvider_${id}`,
47
- {
48
- onTypingStatusUpdated(eventChannel) {
49
- if (isDifferentChannel(channel, eventChannel)) return;
50
- if (!enableTypingIndicator) return;
51
-
52
- const usersWithoutMe = eventChannel.getTypingUsers().filter((u) => u.userId !== currentUser?.userId);
53
- setTypingUsers(usersWithoutMe);
54
- },
44
+ useChannelHandler(sdk, `GroupChannelContextsProvider_${id}`, {
45
+ onTypingStatusUpdated(eventChannel) {
46
+ if (isDifferentChannel(channel, eventChannel)) return;
47
+ if (!enableTypingIndicator) return;
48
+ setTypingUsers(eventChannel.getTypingUsers());
55
49
  },
56
- [channel, currentUser?.userId, enableTypingIndicator],
57
- );
50
+ });
58
51
 
59
52
  return (
60
53
  <ProviderLayout>
@@ -28,7 +28,7 @@ export interface GroupChannelProps {
28
28
  onBeforeSendUserMessage?: (
29
29
  params: SendbirdUserMessageParams,
30
30
  ) => SendbirdUserMessageParams | Promise<SendbirdUserMessageParams>;
31
- onPressImageMessage?: GroupChannelProps['MessageList']['onPressImageMessage'];
31
+ onPressMediaMessage?: GroupChannelProps['MessageList']['onPressMediaMessage'];
32
32
 
33
33
  renderMessage?: GroupChannelProps['MessageList']['renderMessage'];
34
34
  renderNewMessagesButton?: GroupChannelProps['MessageList']['renderNewMessagesButton'];
@@ -42,6 +42,9 @@ export interface GroupChannelProps {
42
42
  sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];
43
43
  collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];
44
44
  queryCreator?: UseGroupChannelMessagesOptions['queryCreator'];
45
+
46
+ /** @deprecated `onPressImageMessage` is deprecated, please use `onPressMediaMessage` instead **/
47
+ onPressImageMessage?: GroupChannelProps['MessageList']['onPressImageMessage'];
45
48
  };
46
49
  Header: {
47
50
  onPressHeaderLeft: () => void;
@@ -59,7 +62,7 @@ export interface GroupChannelProps {
59
62
 
60
63
  onResendFailedMessage: (failedMessage: SendbirdUserMessage | SendbirdFileMessage) => Promise<void>;
61
64
  onDeleteMessage: (message: SendbirdUserMessage | SendbirdFileMessage) => Promise<void>;
62
- onPressImageMessage?: (message: SendbirdFileMessage, uri: string) => void;
65
+ onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;
63
66
 
64
67
  renderMessage: (props: {
65
68
  message: SendbirdMessage;
@@ -81,6 +84,9 @@ export interface GroupChannelProps {
81
84
  onPress: () => void;
82
85
  }>;
83
86
  flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;
87
+
88
+ /** @deprecated `onPressImageMessage` is deprecated, please use `onPressMediaMessage` instead **/
89
+ onPressImageMessage?: (message: SendbirdFileMessage, uri: string) => void;
84
90
  };
85
91
  Input: {
86
92
  channel: SendbirdGroupChannel;
@@ -114,7 +120,7 @@ export interface GroupChannelContextsType {
114
120
  }>;
115
121
  }
116
122
  export interface GroupChannelModule {
117
- Provider: React.FC<GroupChannelProps['Provider']>;
123
+ Provider: CommonComponent<GroupChannelProps['Provider']>;
118
124
  Header: CommonComponent<GroupChannelProps['Header']>;
119
125
  MessageList: CommonComponent<GroupChannelProps['MessageList']>;
120
126
  Input: CommonComponent<GroupChannelProps['Input']>;
@@ -122,4 +128,4 @@ export interface GroupChannelModule {
122
128
  StatusLoading: CommonComponent;
123
129
  }
124
130
 
125
- export type GroupChannelFragment = React.FC<GroupChannelProps['Fragment']>;
131
+ export type GroupChannelFragment = CommonComponent<GroupChannelProps['Fragment']>;
@@ -5,15 +5,13 @@ import { Icon, useHeaderStyle } from '@sendbird/uikit-react-native-foundation';
5
5
  import { GroupChannelListContexts } from '../module/moduleContext';
6
6
  import type { GroupChannelListProps } from '../types';
7
7
 
8
- const GroupChannelListHeader: React.FC<GroupChannelListProps['Header']> = ({ children }) => {
8
+ const GroupChannelListHeader = (_: GroupChannelListProps['Header']) => {
9
9
  const fragment = useContext(GroupChannelListContexts.Fragment);
10
10
  const typeSelector = useContext(GroupChannelListContexts.TypeSelector);
11
11
  const { HeaderComponent } = useHeaderStyle();
12
12
 
13
13
  return (
14
- <HeaderComponent title={fragment.headerTitle} right={<Icon icon={'create'} />} onPressRight={typeSelector.show}>
15
- {children}
16
- </HeaderComponent>
14
+ <HeaderComponent title={fragment.headerTitle} right={<Icon icon={'create'} />} onPressRight={typeSelector.show} />
17
15
  );
18
16
  };
19
17
 
@@ -8,13 +8,13 @@ import { PASS, SendbirdGroupChannel, useFreshCallback } from '@sendbird/uikit-ut
8
8
  import { useLocalization, useSendbirdChat } from '../../../hooks/useContext';
9
9
  import type { GroupChannelListProps } from '../types';
10
10
 
11
- const GroupChannelListList: React.FC<GroupChannelListProps['List']> = ({
11
+ const GroupChannelListList = ({
12
12
  renderGroupChannelPreview,
13
13
  groupChannels,
14
14
  onLoadNext,
15
15
  flatListProps,
16
16
  menuItemCreator = PASS,
17
- }) => {
17
+ }: GroupChannelListProps['List']) => {
18
18
  const toast = useToast();
19
19
  const { openMenu } = useActionMenu();
20
20
  const { STRINGS } = useLocalization();