@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
@@ -22,11 +22,11 @@ const TYPE_ICONS: Record<GroupChannelType, keyof typeof Icon.Assets> = {
22
22
  'BROADCAST': 'broadcast',
23
23
  };
24
24
 
25
- const GroupChannelListTypeSelector: React.FC<GroupChannelListProps['TypeSelector']> = ({
25
+ const GroupChannelListTypeSelector = ({
26
26
  Header = DefaultHeader,
27
27
  skipTypeSelection,
28
28
  onSelectType,
29
- }) => {
29
+ }: GroupChannelListProps['TypeSelector']) => {
30
30
  const { statusBarTranslucent } = useHeaderStyle();
31
31
  const { colors } = useUIKitTheme();
32
32
  const typeSelector = useContext(GroupChannelListContexts.TypeSelector);
@@ -82,11 +82,11 @@ const GroupChannelListTypeSelector: React.FC<GroupChannelListProps['TypeSelector
82
82
  );
83
83
  };
84
84
 
85
- const DefaultTypeIcon: React.FC<{ type: GroupChannelType }> = ({ type }) => {
85
+ const DefaultTypeIcon = ({ type }: { type: GroupChannelType }) => {
86
86
  return <Icon size={24} icon={TYPE_ICONS[type]} containerStyle={styles.icon} />;
87
87
  };
88
88
 
89
- const DefaultTypeText: React.FC<{ type: GroupChannelType }> = ({ type }) => {
89
+ const DefaultTypeText = ({ type }: { type: GroupChannelType }) => {
90
90
  const { STRINGS } = useLocalization();
91
91
  const { colors } = useUIKitTheme();
92
92
  return (
@@ -4,7 +4,7 @@ import { NOOP } from '@sendbird/uikit-utils';
4
4
 
5
5
  import ProviderLayout from '../../../components/ProviderLayout';
6
6
  import { useLocalization } from '../../../hooks/useContext';
7
- import type { GroupChannelListContextsType } from '../types';
7
+ import type { GroupChannelListContextsType, GroupChannelListModule } from '../types';
8
8
 
9
9
  export const GroupChannelListContexts: GroupChannelListContextsType = {
10
10
  Fragment: createContext({
@@ -18,7 +18,7 @@ export const GroupChannelListContexts: GroupChannelListContextsType = {
18
18
  }),
19
19
  };
20
20
 
21
- export const GroupChannelListContextsProvider: React.FC = ({ children }) => {
21
+ export const GroupChannelListContextsProvider: GroupChannelListModule['Provider'] = ({ children }) => {
22
22
  const { STRINGS } = useLocalization();
23
23
 
24
24
  // Type selector
@@ -42,6 +42,7 @@ export interface GroupChannelListProps {
42
42
  groupChannels: SendbirdGroupChannel[];
43
43
  /** Method to render GroupChannel preview **/
44
44
  renderGroupChannelPreview: (
45
+ // FIXME/BREAKING: Changed to props object
45
46
  channel: SendbirdGroupChannel,
46
47
  onLongPressChannel: () => void,
47
48
  ) => React.ReactElement | null;
@@ -80,7 +81,7 @@ export interface GroupChannelListContextsType {
80
81
  }>;
81
82
  }
82
83
  export interface GroupChannelListModule {
83
- Provider: React.FC;
84
+ Provider: CommonComponent;
84
85
  Header: CommonComponent<GroupChannelListProps['Header']>;
85
86
  List: CommonComponent<GroupChannelListProps['List']>;
86
87
  TypeSelector: CommonComponent<GroupChannelListProps['TypeSelector']>;
@@ -88,5 +89,5 @@ export interface GroupChannelListModule {
88
89
  StatusLoading: CommonComponent;
89
90
  }
90
91
 
91
- export type GroupChannelListFragment = React.FC<GroupChannelListProps['Fragment']>;
92
+ export type GroupChannelListFragment = CommonComponent<GroupChannelListProps['Fragment']>;
92
93
  export type GroupChannelType = 'GROUP' | 'SUPER_GROUP' | 'BROADCAST';
@@ -5,7 +5,7 @@ import { Icon, Text, useHeaderStyle, useUIKitTheme } from '@sendbird/uikit-react
5
5
  import { GroupChannelSettingsContexts } from '../module/moduleContext';
6
6
  import type { GroupChannelSettingsProps } from '../types';
7
7
 
8
- const GroupChannelSettingsHeader: React.FC<GroupChannelSettingsProps['Header']> = ({ onPressHeaderLeft }) => {
8
+ const GroupChannelSettingsHeader = ({ onPressHeaderLeft }: GroupChannelSettingsProps['Header']) => {
9
9
  const { colors } = useUIKitTheme();
10
10
  const { headerTitle, headerRight, onPressHeaderRight } = useContext(GroupChannelSettingsContexts.Fragment);
11
11
 
@@ -9,7 +9,7 @@ import { useLocalization, useSendbirdChat } from '../../../hooks/useContext';
9
9
  import { GroupChannelSettingsContexts } from '../module/moduleContext';
10
10
  import type { GroupChannelSettingsProps } from '../types';
11
11
 
12
- const GroupChannelSettingsInfo: React.FC<GroupChannelSettingsProps['Info']> = () => {
12
+ const GroupChannelSettingsInfo = (_: GroupChannelSettingsProps['Info']) => {
13
13
  const { channel } = useContext(GroupChannelSettingsContexts.Fragment);
14
14
  const { currentUser } = useSendbirdChat();
15
15
  const { STRINGS } = useLocalization();
@@ -8,11 +8,11 @@ import { useLocalization, useSendbirdChat } from '../../../hooks/useContext';
8
8
  import { GroupChannelSettingsContexts } from '../module/moduleContext';
9
9
  import type { GroupChannelSettingsProps } from '../types';
10
10
 
11
- const GroupChannelSettingsMenu: React.FC<GroupChannelSettingsProps['Menu']> = ({
11
+ const GroupChannelSettingsMenu = ({
12
12
  onPressMenuMembers,
13
13
  onPressMenuLeaveChannel,
14
14
  menuItemsCreator = (menu) => menu,
15
- }) => {
15
+ }: GroupChannelSettingsProps['Menu']) => {
16
16
  const { sdk } = useSendbirdChat();
17
17
  const { channel } = useContext(GroupChannelSettingsContexts.Fragment);
18
18
  const { STRINGS } = useLocalization();
@@ -14,7 +14,7 @@ import {
14
14
 
15
15
  import ProviderLayout from '../../../components/ProviderLayout';
16
16
  import { useLocalization, usePlatformService, useSendbirdChat } from '../../../hooks/useContext';
17
- import type { GroupChannelSettingsContextsType, GroupChannelSettingsProps } from '../types';
17
+ import type { GroupChannelSettingsContextsType, GroupChannelSettingsModule } from '../types';
18
18
 
19
19
  export const GroupChannelSettingsContexts: GroupChannelSettingsContextsType = {
20
20
  Fragment: createContext({
@@ -26,10 +26,7 @@ export const GroupChannelSettingsContexts: GroupChannelSettingsContextsType = {
26
26
  };
27
27
 
28
28
  const HOOK_NAME = 'GroupChannelSettingsContextsProvider';
29
- export const GroupChannelSettingsContextsProvider: React.FC<GroupChannelSettingsProps['Provider']> = ({
30
- children,
31
- channel,
32
- }) => {
29
+ export const GroupChannelSettingsContextsProvider: GroupChannelSettingsModule['Provider'] = ({ children, channel }) => {
33
30
  const uniqId = useUniqId(HOOK_NAME);
34
31
  const forceUpdate = useForceUpdate();
35
32
  const { STRINGS } = useLocalization();
@@ -44,16 +41,11 @@ export const GroupChannelSettingsContextsProvider: React.FC<GroupChannelSettings
44
41
  forceUpdate();
45
42
  };
46
43
 
47
- useChannelHandler(
48
- sdk,
49
- `${HOOK_NAME}_${uniqId}`,
50
- {
51
- onChannelChanged: onChannelChanged,
52
- onChannelFrozen: onChannelChanged,
53
- onChannelUnfrozen: onChannelChanged,
54
- },
55
- [activeChannel],
56
- );
44
+ useChannelHandler(sdk, `${HOOK_NAME}_${uniqId}`, {
45
+ onChannelChanged: onChannelChanged,
46
+ onChannelFrozen: onChannelChanged,
47
+ onChannelUnfrozen: onChannelChanged,
48
+ });
57
49
 
58
50
  const toast = useToast();
59
51
  const { openSheet } = useBottomSheet();
@@ -41,10 +41,10 @@ export interface GroupChannelSettingsContextsType {
41
41
  }>;
42
42
  }
43
43
  export interface GroupChannelSettingsModule {
44
- Provider: React.FC<GroupChannelSettingsProps['Provider']>;
44
+ Provider: CommonComponent<GroupChannelSettingsProps['Provider']>;
45
45
  Header: CommonComponent<GroupChannelSettingsProps['Header']>;
46
46
  Info: CommonComponent<GroupChannelSettingsProps['Info']>;
47
47
  Menu: CommonComponent<GroupChannelSettingsProps['Menu']>;
48
48
  }
49
49
 
50
- export type GroupChannelSettingsFragment = React.FC<GroupChannelSettingsProps['Fragment']>;
50
+ export type GroupChannelSettingsFragment = CommonComponent<GroupChannelSettingsProps['Fragment']>;
@@ -1,8 +1,7 @@
1
- import type React from 'react';
2
-
3
1
  import type { UseUserListOptions } from '@sendbird/uikit-chat-hooks';
4
2
  import type { SendbirdGroupChannel, SendbirdGroupChannelParams } from '@sendbird/uikit-utils';
5
3
 
4
+ import type { CommonComponent } from '../../types';
6
5
  import type { GroupChannelType } from '../groupChannelList/types';
7
6
  import type { UserListProps } from '../userList/types';
8
7
 
@@ -23,7 +22,7 @@ export interface GroupChannelCreateProps<User> {
23
22
  renderUser?: UserListProps<User>['List']['renderUser'];
24
23
  };
25
24
  }
26
- export type GroupChannelCreateFragment<User> = React.FC<GroupChannelCreateProps<User>['Fragment']>;
25
+ export type GroupChannelCreateFragment<User> = CommonComponent<GroupChannelCreateProps<User>['Fragment']>;
27
26
 
28
27
  export interface GroupChannelInviteProps<User> {
29
28
  Fragment: {
@@ -36,7 +35,7 @@ export interface GroupChannelInviteProps<User> {
36
35
  sortComparator?: UseUserListOptions<User>['sortComparator'];
37
36
  };
38
37
  }
39
- export type GroupChannelInviteFragment<User> = React.FC<GroupChannelInviteProps<User>['Fragment']>;
38
+ export type GroupChannelInviteFragment<User> = CommonComponent<GroupChannelInviteProps<User>['Fragment']>;
40
39
 
41
40
  export interface GroupChannelMembersProps<User> {
42
41
  Fragment: {
@@ -47,4 +46,4 @@ export interface GroupChannelMembersProps<User> {
47
46
  renderUser?: UserListProps<User>['List']['renderUser'];
48
47
  };
49
48
  }
50
- export type GroupChannelMembersFragment<User> = React.FC<GroupChannelMembersProps<User>['Fragment']>;
49
+ export type GroupChannelMembersFragment<User> = CommonComponent<GroupChannelMembersProps<User>['Fragment']>;
@@ -1,10 +1,11 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import React, { createContext, useState } from 'react';
2
3
 
3
4
  import type { ContextValue } from '@sendbird/uikit-utils';
4
5
  import { NOOP } from '@sendbird/uikit-utils';
5
6
 
6
7
  import ProviderLayout from '../../../components/ProviderLayout';
7
- import type { UserListContextsType, UserListProps } from '../types';
8
+ import type { UserListContextsType, UserListModule } from '../types';
8
9
 
9
10
  export const UserListContexts: UserListContextsType<unknown> = {
10
11
  Fragment: createContext({
@@ -16,12 +17,7 @@ export const UserListContexts: UserListContextsType<unknown> = {
16
17
  setSelectedUsers: NOOP,
17
18
  }),
18
19
  };
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
- export const UserListContextsProvider: React.FC<UserListProps<any>['Provider']> = ({
21
- children,
22
- headerTitle,
23
- headerRight,
24
- }) => {
20
+ export const UserListContextsProvider: UserListModule<any>['Provider'] = ({ children, headerTitle, headerRight }) => {
25
21
  const [selectedUsers, setSelectedUsers] = useState<unknown[]>([]);
26
22
 
27
23
  return (
@@ -56,7 +56,7 @@ export interface UserListContextsType<User> {
56
56
  }
57
57
 
58
58
  export interface UserListModule<User> {
59
- Provider: React.FC<UserListProps<User>['Provider']>;
59
+ Provider: CommonComponent<UserListProps<User>['Provider']>;
60
60
  Header: CommonComponent<UserListProps<User>['Header']>;
61
61
  List: CommonComponent<UserListProps<User>['List']>;
62
62
  StatusEmpty: CommonComponent;
@@ -1,8 +1,8 @@
1
- import React, { useCallback } from 'react';
1
+ import React from 'react';
2
2
  import { TouchableOpacity } from 'react-native';
3
3
 
4
4
  import { useUserList } from '@sendbird/uikit-chat-hooks';
5
- import { Logger, PASS, SendbirdUser } from '@sendbird/uikit-utils';
5
+ import { Logger, PASS, SendbirdUser, useFreshCallback } from '@sendbird/uikit-utils';
6
6
 
7
7
  import StatusComposition from '../components/StatusComposition';
8
8
  import UserSelectableBar from '../components/UserSelectableBar';
@@ -50,45 +50,42 @@ const createGroupChannelCreateFragment = <UserType,>(
50
50
  sortComparator,
51
51
  });
52
52
 
53
- const _renderUser: NonNullable<typeof renderUser> = useCallback(
54
- (user, selectedUsers, setSelectedUsers) => {
55
- if (queryCreator && !renderUser) {
56
- throw new Error('You should provide "renderUser" when providing "queryCreator"');
57
- }
58
- if (renderUser) return renderUser(user, selectedUsers, setSelectedUsers);
59
-
60
- const sbUser = user as unknown as SendbirdUser;
61
- const sbSelectedUsers = selectedUsers as unknown as SendbirdUser[];
62
- const sbSetSelectedUsers = setSelectedUsers as unknown as React.Dispatch<React.SetStateAction<SendbirdUser[]>>;
63
-
64
- const isMe = sbUser.userId === currentUser?.userId;
65
- if (isMe) return null;
66
-
67
- const userIdx = sbSelectedUsers.findIndex((u) => u.userId === sbUser.userId);
68
- const isSelected = userIdx > -1;
69
-
70
- return (
71
- <TouchableOpacity
72
- activeOpacity={0.7}
73
- onPress={() => {
74
- sbSetSelectedUsers(([...draft]) => {
75
- if (isSelected) draft.splice(userIdx, 1);
76
- else draft.push(sbUser);
77
- return draft;
78
- });
79
- }}
80
- >
81
- <UserSelectableBar
82
- uri={sbUser.profileUrl}
83
- name={sbUser.nickname || STRINGS.LABELS.USER_NO_NAME}
84
- selected={isSelected}
85
- disabled={false}
86
- />
87
- </TouchableOpacity>
88
- );
89
- },
90
- [renderUser, queryCreator],
91
- );
53
+ const _renderUser: NonNullable<typeof renderUser> = useFreshCallback((user, selectedUsers, setSelectedUsers) => {
54
+ if (queryCreator && !renderUser) {
55
+ throw new Error('You should provide "renderUser" when providing "queryCreator"');
56
+ }
57
+ if (renderUser) return renderUser(user, selectedUsers, setSelectedUsers);
58
+
59
+ const sbUser = user as unknown as SendbirdUser;
60
+ const sbSelectedUsers = selectedUsers as unknown as SendbirdUser[];
61
+ const sbSetSelectedUsers = setSelectedUsers as unknown as React.Dispatch<React.SetStateAction<SendbirdUser[]>>;
62
+
63
+ const isMe = sbUser.userId === currentUser?.userId;
64
+ if (isMe) return null;
65
+
66
+ const userIdx = sbSelectedUsers.findIndex((u) => u.userId === sbUser.userId);
67
+ const isSelected = userIdx > -1;
68
+
69
+ return (
70
+ <TouchableOpacity
71
+ activeOpacity={0.7}
72
+ onPress={() => {
73
+ sbSetSelectedUsers(([...draft]) => {
74
+ if (isSelected) draft.splice(userIdx, 1);
75
+ else draft.push(sbUser);
76
+ return draft;
77
+ });
78
+ }}
79
+ >
80
+ <UserSelectableBar
81
+ uri={sbUser.profileUrl}
82
+ name={sbUser.nickname || STRINGS.LABELS.USER_NO_NAME}
83
+ selected={isSelected}
84
+ disabled={false}
85
+ />
86
+ </TouchableOpacity>
87
+ );
88
+ });
92
89
 
93
90
  return (
94
91
  <UserListModule.Provider
@@ -1,7 +1,7 @@
1
- import React, { useCallback, useMemo } from 'react';
1
+ import React, { useMemo } from 'react';
2
2
 
3
3
  import { useGroupChannelMessages } from '@sendbird/uikit-chat-hooks';
4
- import { NOOP, PASS, messageComparator } from '@sendbird/uikit-utils';
4
+ import { NOOP, PASS, messageComparator, useFreshCallback } from '@sendbird/uikit-utils';
5
5
 
6
6
  import MessageRenderer from '../components/MessageRenderer';
7
7
  import NewMessagesButton from '../components/NewMessagesButton';
@@ -22,7 +22,8 @@ const createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): G
22
22
  enableTypingIndicator = true,
23
23
  onPressHeaderLeft = NOOP,
24
24
  onPressHeaderRight = NOOP,
25
- onPressImageMessage = NOOP,
25
+ onPressImageMessage,
26
+ onPressMediaMessage = NOOP,
26
27
  onChannelDeleted = NOOP,
27
28
  onBeforeSendFileMessage = PASS,
28
29
  onBeforeSendUserMessage = PASS,
@@ -57,13 +58,10 @@ const createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): G
57
58
  enableCollectionWithoutLocalCache: true,
58
59
  });
59
60
 
60
- const _renderMessage: GroupChannelProps['MessageList']['renderMessage'] = useCallback(
61
- (props) => {
62
- if (renderMessage) return renderMessage(props);
63
- return <MessageRenderer {...props} />;
64
- },
65
- [renderMessage],
66
- );
61
+ const _renderMessage: GroupChannelProps['MessageList']['renderMessage'] = useFreshCallback((props) => {
62
+ if (renderMessage) return renderMessage(props);
63
+ return <MessageRenderer {...props} />;
64
+ });
67
65
 
68
66
  const memoizedFlatListProps = useMemo(
69
67
  () => ({
@@ -74,42 +72,33 @@ const createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): G
74
72
  [loading, flatListProps],
75
73
  );
76
74
 
77
- const onSendFileMessage: GroupChannelProps['Input']['onSendFileMessage'] = useCallback(
78
- async (file) => {
79
- const params = new sdk.FileMessageParams();
80
- params.file = file;
81
- const processedParams = await onBeforeSendFileMessage(params);
82
- await sendFileMessage(processedParams);
83
- },
84
- [sdk, sendFileMessage, onBeforeSendFileMessage],
85
- );
86
-
87
- const onSendUserMessage: GroupChannelProps['Input']['onSendUserMessage'] = useCallback(
88
- async (text) => {
89
- const params = new sdk.UserMessageParams();
90
- params.message = text;
91
- const processedParams = await onBeforeSendUserMessage(params);
92
- await sendUserMessage(processedParams);
93
- },
94
- [sdk, sendUserMessage, onBeforeSendUserMessage],
95
- );
96
- const onUpdateFileMessage: GroupChannelProps['Input']['onUpdateFileMessage'] = useCallback(
75
+ const onSendFileMessage: GroupChannelProps['Input']['onSendFileMessage'] = useFreshCallback(async (file) => {
76
+ const params = new sdk.FileMessageParams();
77
+ params.file = file;
78
+ const processedParams = await onBeforeSendFileMessage(params);
79
+ await sendFileMessage(processedParams);
80
+ });
81
+ const onSendUserMessage: GroupChannelProps['Input']['onSendUserMessage'] = useFreshCallback(async (text) => {
82
+ const params = new sdk.UserMessageParams();
83
+ params.message = text;
84
+ const processedParams = await onBeforeSendUserMessage(params);
85
+ await sendUserMessage(processedParams);
86
+ });
87
+ const onUpdateFileMessage: GroupChannelProps['Input']['onUpdateFileMessage'] = useFreshCallback(
97
88
  async (editedFile, message) => {
98
89
  const params = new sdk.FileMessageParams();
99
90
  params.file = editedFile;
100
91
  const processedParams = await onBeforeSendFileMessage(params);
101
92
  await updateFileMessage(message.messageId, processedParams);
102
93
  },
103
- [sdk, updateFileMessage, onBeforeSendFileMessage],
104
94
  );
105
- const onUpdateUserMessage: GroupChannelProps['Input']['onUpdateUserMessage'] = useCallback(
95
+ const onUpdateUserMessage: GroupChannelProps['Input']['onUpdateUserMessage'] = useFreshCallback(
106
96
  async (editedText, message) => {
107
97
  const params = new sdk.UserMessageParams();
108
98
  params.message = editedText;
109
99
  const processedParams = await onBeforeSendUserMessage(params);
110
100
  await updateUserMessage(message.messageId, processedParams);
111
101
  },
112
- [sdk, updateUserMessage, onBeforeSendUserMessage],
113
102
  );
114
103
 
115
104
  return (
@@ -135,6 +124,7 @@ const createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): G
135
124
  onResendFailedMessage={resendMessage}
136
125
  onDeleteMessage={deleteMessage}
137
126
  onPressImageMessage={onPressImageMessage}
127
+ onPressMediaMessage={onPressMediaMessage}
138
128
  flatListProps={memoizedFlatListProps}
139
129
  />
140
130
  <GroupChannelModule.Input
@@ -1,22 +1,19 @@
1
- import React, { useCallback, useEffect } from 'react';
2
- import { AppState, Pressable } from 'react-native';
1
+ import React, { useEffect } from 'react';
2
+ import { AppState } from 'react-native';
3
3
 
4
4
  import { useGroupChannelList } from '@sendbird/uikit-chat-hooks';
5
- import { GroupChannelPreview } from '@sendbird/uikit-react-native-foundation';
6
- import { Logger, PASS, channelComparator, getFileExtension, getFileType } from '@sendbird/uikit-utils';
5
+ import { Logger, PASS, channelComparator, useFreshCallback } from '@sendbird/uikit-utils';
7
6
 
8
- import ChannelCover from '../components/ChannelCover';
7
+ import GroupChannelPreviewContainer from '../components/GroupChannelPreviewContainer';
9
8
  import StatusComposition from '../components/StatusComposition';
10
- import { DEFAULT_LONG_PRESS_DELAY } from '../constants';
11
9
  import createGroupChannelListModule from '../domain/groupChannelList/module/createGroupChannelListModule';
12
10
  import type {
13
11
  GroupChannelListFragment,
14
12
  GroupChannelListModule,
15
13
  GroupChannelListProps,
16
14
  } from '../domain/groupChannelList/types';
17
- import { useLocalization, useSendbirdChat } from '../hooks/useContext';
15
+ import { useSendbirdChat } from '../hooks/useContext';
18
16
 
19
- const iconMapper = { audio: 'file-audio', image: 'photo', video: 'play', file: 'file-document' } as const;
20
17
  const createGroupChannelListFragment = (initModule?: Partial<GroupChannelListModule>): GroupChannelListFragment => {
21
18
  const GroupChannelListModule = createGroupChannelListModule(initModule);
22
19
  return ({
@@ -31,7 +28,6 @@ const createGroupChannelListFragment = (initModule?: Partial<GroupChannelListMod
31
28
  menuItemCreator = PASS,
32
29
  }) => {
33
30
  const { sdk, currentUser, features, markAsDeliveredWithChannel } = useSendbirdChat();
34
- const { STRINGS } = useLocalization();
35
31
  const { groupChannels, next, loading } = useGroupChannelList(sdk, currentUser?.userId, {
36
32
  queryCreator,
37
33
  sortComparator,
@@ -47,35 +43,17 @@ const createGroupChannelListFragment = (initModule?: Partial<GroupChannelListMod
47
43
  }, []);
48
44
  }
49
45
 
50
- const _renderGroupChannelPreview: GroupChannelListProps['List']['renderGroupChannelPreview'] = useCallback(
46
+ const _renderGroupChannelPreview: GroupChannelListProps['List']['renderGroupChannelPreview'] = useFreshCallback(
51
47
  (channel, onLongPressChannel) => {
52
48
  if (renderGroupChannelPreview) return renderGroupChannelPreview(channel, onLongPressChannel);
53
49
  return (
54
- <Pressable
50
+ <GroupChannelPreviewContainer
51
+ channel={channel}
55
52
  onPress={() => onPressChannel(channel)}
56
- onLongPress={onLongPressChannel}
57
- delayLongPress={DEFAULT_LONG_PRESS_DELAY}
58
- >
59
- <GroupChannelPreview
60
- customCover={<ChannelCover channel={channel} size={56} />}
61
- coverUrl={channel.coverUrl}
62
- title={STRINGS.GROUP_CHANNEL_LIST.CHANNEL_PREVIEW_TITLE(currentUser?.userId ?? '', channel)}
63
- titleCaption={STRINGS.GROUP_CHANNEL_LIST.CHANNEL_PREVIEW_TITLE_CAPTION(channel)}
64
- body={STRINGS.GROUP_CHANNEL_LIST.CHANNEL_PREVIEW_BODY(channel)}
65
- badgeCount={channel.unreadMessageCount}
66
- bodyIcon={
67
- channel.lastMessage?.isFileMessage()
68
- ? iconMapper[getFileType(channel.lastMessage.type || getFileExtension(channel.lastMessage.name))]
69
- : undefined
70
- }
71
- frozen={channel.isFrozen}
72
- notificationOff={channel.myPushTriggerOption === 'off'}
73
- memberCount={channel.memberCount > 2 ? channel.memberCount : undefined}
74
- />
75
- </Pressable>
53
+ onLongPress={() => onLongPressChannel()}
54
+ />
76
55
  );
77
56
  },
78
- [STRINGS, onPressChannel, currentUser?.userId],
79
57
  );
80
58
 
81
59
  if (!currentUser) {
@@ -26,46 +26,41 @@ const createGroupChannelMembersFragment = (
26
26
 
27
27
  const { STRINGS } = useLocalization();
28
28
 
29
- useChannelHandler(
30
- sdk,
31
- `${name}_${uniqId}`,
32
- {
33
- onUserEntered(channel) {
34
- if (channel.url === activeChannel.url) forceUpdate();
35
- },
36
- onUserLeft(channel) {
37
- if (channel.url === activeChannel.url) forceUpdate();
38
- },
39
- onUserJoined(channel) {
40
- if (channel.url === activeChannel.url) forceUpdate();
41
- },
42
- onUserUnmuted(channel) {
43
- if (channel.url === activeChannel.url) forceUpdate();
44
- },
45
- onUserUnbanned(channel) {
46
- if (channel.url === activeChannel.url) forceUpdate();
47
- },
48
- onUserBanned(channel) {
49
- if (channel.url === activeChannel.url) forceUpdate();
50
- },
51
- onUserMuted(channel) {
52
- if (channel.url === activeChannel.url) forceUpdate();
53
- },
54
- onChannelMemberCountChanged(channels) {
55
- if (channels.find((c) => c.url === channel.url)) forceUpdate();
56
- },
57
- onChannelChanged(channel) {
58
- if (channel.url === activeChannel.url) forceUpdate();
59
- },
60
- onChannelFrozen(channel) {
61
- if (channel.url === activeChannel.url) forceUpdate();
62
- },
63
- onChannelUnfrozen(channel) {
64
- if (channel.url === activeChannel.url) forceUpdate();
65
- },
29
+ useChannelHandler(sdk, `${name}_${uniqId}`, {
30
+ onUserEntered(channel) {
31
+ if (channel.url === activeChannel.url) forceUpdate();
66
32
  },
67
- [activeChannel],
68
- );
33
+ onUserLeft(channel) {
34
+ if (channel.url === activeChannel.url) forceUpdate();
35
+ },
36
+ onUserJoined(channel) {
37
+ if (channel.url === activeChannel.url) forceUpdate();
38
+ },
39
+ onUserUnmuted(channel) {
40
+ if (channel.url === activeChannel.url) forceUpdate();
41
+ },
42
+ onUserUnbanned(channel) {
43
+ if (channel.url === activeChannel.url) forceUpdate();
44
+ },
45
+ onUserBanned(channel) {
46
+ if (channel.url === activeChannel.url) forceUpdate();
47
+ },
48
+ onUserMuted(channel) {
49
+ if (channel.url === activeChannel.url) forceUpdate();
50
+ },
51
+ onChannelMemberCountChanged(channels) {
52
+ if (channels.find((c) => c.url === channel.url)) forceUpdate();
53
+ },
54
+ onChannelChanged(channel) {
55
+ if (channel.url === activeChannel.url) forceUpdate();
56
+ },
57
+ onChannelFrozen(channel) {
58
+ if (channel.url === activeChannel.url) forceUpdate();
59
+ },
60
+ onChannelUnfrozen(channel) {
61
+ if (channel.url === activeChannel.url) forceUpdate();
62
+ },
63
+ });
69
64
 
70
65
  const _renderUser: NonNullable<typeof renderUser> = useCallback(
71
66
  (user, selectedUsers, setSelectedUsers) => {
@@ -13,14 +13,7 @@ const createGroupChannelSettingsFragment = (
13
13
  ): GroupChannelSettingsFragment => {
14
14
  const GroupChannelSettingsModule = createGroupChannelSettingsModule(initModule);
15
15
 
16
- return ({
17
- onPressHeaderLeft = NOOP,
18
- channel,
19
- onPressMenuMembers,
20
- onPressMenuLeaveChannel,
21
- menuItemsCreator,
22
- children,
23
- }) => {
16
+ return ({ onPressHeaderLeft = NOOP, channel, onPressMenuMembers, onPressMenuLeaveChannel, menuItemsCreator }) => {
24
17
  const { colors } = useUIKitTheme();
25
18
  const { left, right } = useSafeAreaInsets();
26
19
 
@@ -40,7 +33,6 @@ const createGroupChannelSettingsFragment = (
40
33
  onPressMenuMembers={onPressMenuMembers}
41
34
  onPressMenuLeaveChannel={onPressMenuLeaveChannel}
42
35
  />
43
- {children}
44
36
  </ScrollView>
45
37
  </GroupChannelSettingsModule.Provider>
46
38
  );
@@ -1,13 +1,11 @@
1
- import React, { useContext } from 'react';
1
+ import { useContext } from 'react';
2
2
 
3
- import { LocalizationContext, LocalizationContextType } from '../contexts/Localization';
3
+ import { LocalizationContext } from '../contexts/Localization';
4
4
  import { PlatformServiceContext } from '../contexts/PlatformService';
5
5
  import { SendbirdChatContext } from '../contexts/SendbirdChat';
6
6
 
7
7
  export const useLocalization = () => {
8
- const value = useContext<LocalizationContextType | null>(
9
- LocalizationContext as React.Context<LocalizationContextType | null>,
10
- );
8
+ const value = useContext(LocalizationContext);
11
9
  if (!value) throw new Error('LocalizationContext is not provided');
12
10
  return value;
13
11
  };