@sendbird/uikit-react-native 3.1.2 → 3.3.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 (337) hide show
  1. package/README.md +67 -42
  2. package/lib/commonjs/components/ChannelInput/EditInput.js +2 -11
  3. package/lib/commonjs/components/ChannelInput/EditInput.js.map +1 -1
  4. package/lib/commonjs/components/ChannelInput/MessageToReplyPreview.js +145 -0
  5. package/lib/commonjs/components/ChannelInput/MessageToReplyPreview.js.map +1 -0
  6. package/lib/commonjs/components/ChannelInput/SendInput.js +149 -323
  7. package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
  8. package/lib/commonjs/components/ChannelInput/VoiceMessageInput.js +238 -0
  9. package/lib/commonjs/components/ChannelInput/VoiceMessageInput.js.map +1 -0
  10. package/lib/commonjs/components/ChannelInput/index.js +34 -3
  11. package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
  12. package/lib/commonjs/components/ChannelMessageList/index.js +148 -116
  13. package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
  14. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +24 -13
  15. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -1
  16. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +134 -6
  17. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
  18. package/lib/commonjs/components/MessageSearchResultItem.js +1 -0
  19. package/lib/commonjs/components/MessageSearchResultItem.js.map +1 -1
  20. package/lib/commonjs/components/OpenChannelMessageRenderer/index.js +1 -0
  21. package/lib/commonjs/components/OpenChannelMessageRenderer/index.js.map +1 -1
  22. package/lib/commonjs/components/ReactionBottomSheets/ReactionUserListBottomSheet.js +2 -2
  23. package/lib/commonjs/components/ReactionBottomSheets/ReactionUserListBottomSheet.js.map +1 -1
  24. package/lib/commonjs/components/ReactionBottomSheets/index.js.map +1 -1
  25. package/lib/commonjs/components/StatusComposition.js.map +1 -1
  26. package/lib/commonjs/constants.js +5 -1
  27. package/lib/commonjs/constants.js.map +1 -1
  28. package/lib/commonjs/containers/GroupChannelPreviewContainer.js +1 -0
  29. package/lib/commonjs/containers/GroupChannelPreviewContainer.js.map +1 -1
  30. package/lib/commonjs/containers/InternalErrorBoundaryContainer.js.map +1 -1
  31. package/lib/commonjs/containers/SendbirdUIKitContainer.js +72 -34
  32. package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
  33. package/lib/commonjs/contexts/PlatformServiceCtx.js +16 -12
  34. package/lib/commonjs/contexts/PlatformServiceCtx.js.map +1 -1
  35. package/lib/commonjs/contexts/ReactionCtx.js +3 -2
  36. package/lib/commonjs/contexts/ReactionCtx.js.map +1 -1
  37. package/lib/commonjs/contexts/SendbirdChatCtx.js +2 -0
  38. package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
  39. package/lib/commonjs/domain/groupChannel/component/GroupChannelHeader.js +14 -4
  40. package/lib/commonjs/domain/groupChannel/component/GroupChannelHeader.js.map +1 -1
  41. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +28 -42
  42. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  43. package/lib/commonjs/domain/groupChannel/module/moduleContext.js +109 -5
  44. package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -1
  45. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  46. package/lib/commonjs/domain/userList/types.js.map +1 -1
  47. package/lib/commonjs/fragments/createGroupChannelFragment.js +34 -7
  48. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  49. package/lib/commonjs/fragments/createMessageSearchFragment.js +1 -1
  50. package/lib/commonjs/fragments/createMessageSearchFragment.js.map +1 -1
  51. package/lib/commonjs/hooks/useChannelInputItems.js +211 -0
  52. package/lib/commonjs/hooks/useChannelInputItems.js.map +1 -0
  53. package/lib/commonjs/hooks/useConnection.js +1 -1
  54. package/lib/commonjs/hooks/useConnection.js.map +1 -1
  55. package/lib/commonjs/hooks/useVoiceMessageInput.js +207 -0
  56. package/lib/commonjs/hooks/useVoiceMessageInput.js.map +1 -0
  57. package/lib/commonjs/index.js +36 -0
  58. package/lib/commonjs/index.js.map +1 -1
  59. package/lib/commonjs/libs/MentionManager.js.map +1 -1
  60. package/lib/commonjs/libs/SBUUtils.js +4 -0
  61. package/lib/commonjs/libs/SBUUtils.js.map +1 -1
  62. package/lib/commonjs/libs/VoiceMessageConfig.js +30 -0
  63. package/lib/commonjs/libs/VoiceMessageConfig.js.map +1 -0
  64. package/lib/commonjs/localization/StringSet.type.js.map +1 -1
  65. package/lib/commonjs/localization/createBaseStringSet.js +24 -9
  66. package/lib/commonjs/localization/createBaseStringSet.js.map +1 -1
  67. package/lib/commonjs/platform/createFileService.expo.js +10 -0
  68. package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
  69. package/lib/commonjs/platform/createFileService.native.js +19 -0
  70. package/lib/commonjs/platform/createFileService.native.js.map +1 -1
  71. package/lib/commonjs/platform/createPlayerService.expo.js +137 -0
  72. package/lib/commonjs/platform/createPlayerService.expo.js.map +1 -0
  73. package/lib/commonjs/platform/createPlayerService.native.js +139 -0
  74. package/lib/commonjs/platform/createPlayerService.native.js.map +1 -0
  75. package/lib/commonjs/platform/createRecorderService.expo.js +158 -0
  76. package/lib/commonjs/platform/createRecorderService.expo.js.map +1 -0
  77. package/lib/commonjs/platform/createRecorderService.native.js +157 -0
  78. package/lib/commonjs/platform/createRecorderService.native.js.map +1 -0
  79. package/lib/commonjs/platform/types.js.map +1 -1
  80. package/lib/commonjs/types.js +7 -0
  81. package/lib/commonjs/types.js.map +1 -1
  82. package/lib/commonjs/utils/promise.js +138 -0
  83. package/lib/commonjs/utils/promise.js.map +1 -0
  84. package/lib/commonjs/version.js +1 -1
  85. package/lib/commonjs/version.js.map +1 -1
  86. package/lib/module/components/ChannelInput/EditInput.js +3 -12
  87. package/lib/module/components/ChannelInput/EditInput.js.map +1 -1
  88. package/lib/module/components/ChannelInput/MessageToReplyPreview.js +137 -0
  89. package/lib/module/components/ChannelInput/MessageToReplyPreview.js.map +1 -0
  90. package/lib/module/components/ChannelInput/SendInput.js +152 -326
  91. package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
  92. package/lib/module/components/ChannelInput/VoiceMessageInput.js +228 -0
  93. package/lib/module/components/ChannelInput/VoiceMessageInput.js.map +1 -0
  94. package/lib/module/components/ChannelInput/index.js +36 -5
  95. package/lib/module/components/ChannelInput/index.js.map +1 -1
  96. package/lib/module/components/ChannelMessageList/index.js +149 -117
  97. package/lib/module/components/ChannelMessageList/index.js.map +1 -1
  98. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +24 -13
  99. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -1
  100. package/lib/module/components/GroupChannelMessageRenderer/index.js +132 -7
  101. package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
  102. package/lib/module/components/MessageSearchResultItem.js +2 -1
  103. package/lib/module/components/MessageSearchResultItem.js.map +1 -1
  104. package/lib/module/components/OpenChannelMessageRenderer/index.js +1 -0
  105. package/lib/module/components/OpenChannelMessageRenderer/index.js.map +1 -1
  106. package/lib/module/components/ReactionBottomSheets/ReactionUserListBottomSheet.js +2 -2
  107. package/lib/module/components/ReactionBottomSheets/ReactionUserListBottomSheet.js.map +1 -1
  108. package/lib/module/components/ReactionBottomSheets/index.js.map +1 -1
  109. package/lib/module/components/StatusComposition.js.map +1 -1
  110. package/lib/module/constants.js +2 -0
  111. package/lib/module/constants.js.map +1 -1
  112. package/lib/module/containers/GroupChannelPreviewContainer.js +2 -1
  113. package/lib/module/containers/GroupChannelPreviewContainer.js.map +1 -1
  114. package/lib/module/containers/InternalErrorBoundaryContainer.js.map +1 -1
  115. package/lib/module/containers/SendbirdUIKitContainer.js +74 -36
  116. package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
  117. package/lib/module/contexts/PlatformServiceCtx.js +14 -11
  118. package/lib/module/contexts/PlatformServiceCtx.js.map +1 -1
  119. package/lib/module/contexts/ReactionCtx.js +3 -2
  120. package/lib/module/contexts/ReactionCtx.js.map +1 -1
  121. package/lib/module/contexts/SendbirdChatCtx.js +2 -0
  122. package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
  123. package/lib/module/domain/groupChannel/component/GroupChannelHeader.js +15 -5
  124. package/lib/module/domain/groupChannel/component/GroupChannelHeader.js.map +1 -1
  125. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +29 -43
  126. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  127. package/lib/module/domain/groupChannel/module/moduleContext.js +111 -7
  128. package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
  129. package/lib/module/domain/groupChannel/types.js.map +1 -1
  130. package/lib/module/domain/userList/types.js.map +1 -1
  131. package/lib/module/fragments/createGroupChannelFragment.js +36 -9
  132. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  133. package/lib/module/fragments/createMessageSearchFragment.js +1 -1
  134. package/lib/module/fragments/createMessageSearchFragment.js.map +1 -1
  135. package/lib/module/hooks/useChannelInputItems.js +203 -0
  136. package/lib/module/hooks/useChannelInputItems.js.map +1 -0
  137. package/lib/module/hooks/useConnection.js +1 -1
  138. package/lib/module/hooks/useConnection.js.map +1 -1
  139. package/lib/module/hooks/useVoiceMessageInput.js +199 -0
  140. package/lib/module/hooks/useVoiceMessageInput.js.map +1 -0
  141. package/lib/module/index.js +8 -0
  142. package/lib/module/index.js.map +1 -1
  143. package/lib/module/libs/MentionManager.js.map +1 -1
  144. package/lib/module/libs/SBUUtils.js +4 -0
  145. package/lib/module/libs/SBUUtils.js.map +1 -1
  146. package/lib/module/libs/VoiceMessageConfig.js +23 -0
  147. package/lib/module/libs/VoiceMessageConfig.js.map +1 -0
  148. package/lib/module/localization/StringSet.type.js.map +1 -1
  149. package/lib/module/localization/createBaseStringSet.js +25 -10
  150. package/lib/module/localization/createBaseStringSet.js.map +1 -1
  151. package/lib/module/platform/createFileService.expo.js +10 -0
  152. package/lib/module/platform/createFileService.expo.js.map +1 -1
  153. package/lib/module/platform/createFileService.native.js +19 -0
  154. package/lib/module/platform/createFileService.native.js.map +1 -1
  155. package/lib/module/platform/createPlayerService.expo.js +129 -0
  156. package/lib/module/platform/createPlayerService.expo.js.map +1 -0
  157. package/lib/module/platform/createPlayerService.native.js +132 -0
  158. package/lib/module/platform/createPlayerService.native.js.map +1 -0
  159. package/lib/module/platform/createRecorderService.expo.js +150 -0
  160. package/lib/module/platform/createRecorderService.expo.js.map +1 -0
  161. package/lib/module/platform/createRecorderService.native.js +149 -0
  162. package/lib/module/platform/createRecorderService.native.js.map +1 -0
  163. package/lib/module/platform/types.js.map +1 -1
  164. package/lib/module/types.js +5 -1
  165. package/lib/module/types.js.map +1 -1
  166. package/lib/module/utils/promise.js +132 -0
  167. package/lib/module/utils/promise.js.map +1 -0
  168. package/lib/module/version.js +1 -1
  169. package/lib/module/version.js.map +1 -1
  170. package/lib/typescript/src/components/ChannelCover.d.ts +2 -1
  171. package/lib/typescript/src/components/ChannelInput/AttachmentsButton.d.ts +2 -1
  172. package/lib/typescript/src/components/ChannelInput/MessageToReplyPreview.d.ts +7 -0
  173. package/lib/typescript/src/components/ChannelInput/VoiceMessageInput.d.ts +11 -0
  174. package/lib/typescript/src/components/ChannelInput/index.d.ts +9 -3
  175. package/lib/typescript/src/components/ChannelMessageList/index.d.ts +4 -1
  176. package/lib/typescript/src/components/FileViewer.d.ts +2 -1
  177. package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.d.ts +2 -1
  178. package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.d.ts +1 -1
  179. package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.d.ts +1 -1
  180. package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.d.ts +4 -2
  181. package/lib/typescript/src/components/GroupChannelMessageRenderer/index.d.ts +3 -0
  182. package/lib/typescript/src/components/NewMessagesButton.d.ts +1 -1
  183. package/lib/typescript/src/components/OpenChannelMessageRenderer/OpenChannelMessageDateSeparator.d.ts +2 -1
  184. package/lib/typescript/src/components/OpenChannelMessageRenderer/index.d.ts +2 -0
  185. package/lib/typescript/src/components/ProviderLayout.d.ts +1 -1
  186. package/lib/typescript/src/components/ReactionAddons/BottomSheetReactionAddon.d.ts +2 -1
  187. package/lib/typescript/src/components/ReactionAddons/MessageReactionAddon.d.ts +2 -1
  188. package/lib/typescript/src/components/ReactionAddons/ReactionRoundedButton.d.ts +3 -2
  189. package/lib/typescript/src/components/ReactionAddons/index.d.ts +3 -2
  190. package/lib/typescript/src/components/ReactionBottomSheets/ReactionListBottomSheet.d.ts +2 -1
  191. package/lib/typescript/src/components/ReactionBottomSheets/ReactionUserListBottomSheet.d.ts +2 -1
  192. package/lib/typescript/src/components/ReactionBottomSheets/index.d.ts +4 -4
  193. package/lib/typescript/src/components/ScrollToBottomButton.d.ts +1 -1
  194. package/lib/typescript/src/components/StatusComposition.d.ts +4 -4
  195. package/lib/typescript/src/components/TypedPlaceholder.d.ts +2 -1
  196. package/lib/typescript/src/components/UserActionBar.d.ts +2 -1
  197. package/lib/typescript/src/components/UserSelectableBar.d.ts +2 -1
  198. package/lib/typescript/src/constants.d.ts +2 -0
  199. package/lib/typescript/src/containers/GroupChannelPreviewContainer.d.ts +2 -1
  200. package/lib/typescript/src/containers/InternalErrorBoundaryContainer.d.ts +3 -3
  201. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +19 -8
  202. package/lib/typescript/src/contexts/LocalizationCtx.d.ts +1 -1
  203. package/lib/typescript/src/contexts/PlatformServiceCtx.d.ts +8 -8
  204. package/lib/typescript/src/contexts/ReactionCtx.d.ts +5 -2
  205. package/lib/typescript/src/contexts/SendbirdChatCtx.d.ts +6 -3
  206. package/lib/typescript/src/contexts/UserProfileCtx.d.ts +1 -1
  207. package/lib/typescript/src/domain/groupChannel/component/GroupChannelHeader.d.ts +2 -1
  208. package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput.d.ts +1 -1
  209. package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +1 -1
  210. package/lib/typescript/src/domain/groupChannel/component/GroupChannelStatusEmpty.d.ts +2 -1
  211. package/lib/typescript/src/domain/groupChannel/component/GroupChannelStatusLoading.d.ts +2 -1
  212. package/lib/typescript/src/domain/groupChannel/component/GroupChannelSuggestedMentionList.d.ts +2 -1
  213. package/lib/typescript/src/domain/groupChannel/types.d.ts +48 -0
  214. package/lib/typescript/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersHeader.d.ts +2 -1
  215. package/lib/typescript/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersList.d.ts +2 -1
  216. package/lib/typescript/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersStatusEmpty.d.ts +2 -1
  217. package/lib/typescript/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersStatusLoading.d.ts +2 -1
  218. package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListHeader.d.ts +2 -1
  219. package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListList.d.ts +2 -1
  220. package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListStatusEmpty.d.ts +2 -1
  221. package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListStatusLoading.d.ts +2 -1
  222. package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListTypeSelector.d.ts +2 -1
  223. package/lib/typescript/src/domain/groupChannelModeration/component/GroupChannelModerationHeader.d.ts +2 -1
  224. package/lib/typescript/src/domain/groupChannelModeration/component/GroupChannelModerationMenu.d.ts +2 -1
  225. package/lib/typescript/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersHeader.d.ts +2 -1
  226. package/lib/typescript/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersList.d.ts +2 -1
  227. package/lib/typescript/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersStatusEmpty.d.ts +2 -1
  228. package/lib/typescript/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersStatusLoading.d.ts +2 -1
  229. package/lib/typescript/src/domain/groupChannelNotifications/component/GroupChannelNotificationsHeader.d.ts +2 -1
  230. package/lib/typescript/src/domain/groupChannelNotifications/component/GroupChannelNotificationsView.d.ts +2 -1
  231. package/lib/typescript/src/domain/groupChannelOperators/component/GroupChannelOperatorsHeader.d.ts +2 -1
  232. package/lib/typescript/src/domain/groupChannelOperators/component/GroupChannelOperatorsList.d.ts +2 -1
  233. package/lib/typescript/src/domain/groupChannelOperators/component/GroupChannelOperatorsStatusEmpty.d.ts +2 -1
  234. package/lib/typescript/src/domain/groupChannelOperators/component/GroupChannelOperatorsStatusLoading.d.ts +2 -1
  235. package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsHeader.d.ts +2 -1
  236. package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsInfo.d.ts +2 -1
  237. package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.d.ts +2 -1
  238. package/lib/typescript/src/domain/messageSearch/component/MessageSearchHeader.d.ts +2 -1
  239. package/lib/typescript/src/domain/messageSearch/component/MessageSearchList.d.ts +2 -1
  240. package/lib/typescript/src/domain/messageSearch/component/MessageSearchStatusEmpty.d.ts +2 -1
  241. package/lib/typescript/src/domain/messageSearch/component/MessageSearchStatusLoading.d.ts +2 -1
  242. package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +2 -2
  243. package/lib/typescript/src/domain/openChannel/component/OpenChannelInput.d.ts +1 -1
  244. package/lib/typescript/src/domain/openChannel/component/OpenChannelMessageList.d.ts +1 -1
  245. package/lib/typescript/src/domain/openChannel/component/OpenChannelStatusEmpty.d.ts +2 -1
  246. package/lib/typescript/src/domain/openChannel/component/OpenChannelStatusLoading.d.ts +2 -1
  247. package/lib/typescript/src/domain/openChannelBannedUsers/component/OpenChannelBannedUsersHeader.d.ts +2 -1
  248. package/lib/typescript/src/domain/openChannelBannedUsers/component/OpenChannelBannedUsersList.d.ts +2 -1
  249. package/lib/typescript/src/domain/openChannelBannedUsers/component/OpenChannelBannedUsersStatusEmpty.d.ts +2 -1
  250. package/lib/typescript/src/domain/openChannelBannedUsers/component/OpenChannelBannedUsersStatusLoading.d.ts +2 -1
  251. package/lib/typescript/src/domain/openChannelCreate/component/OpenChannelCreateHeader.d.ts +2 -1
  252. package/lib/typescript/src/domain/openChannelCreate/component/OpenChannelCreateProfileInput.d.ts +2 -1
  253. package/lib/typescript/src/domain/openChannelCreate/component/OpenChannelCreateStatusLoading.d.ts +2 -1
  254. package/lib/typescript/src/domain/openChannelList/component/OpenChannelListHeader.d.ts +2 -1
  255. package/lib/typescript/src/domain/openChannelList/component/OpenChannelListList.d.ts +2 -1
  256. package/lib/typescript/src/domain/openChannelList/component/OpenChannelListStatusEmpty.d.ts +2 -1
  257. package/lib/typescript/src/domain/openChannelList/component/OpenChannelListStatusLoading.d.ts +2 -1
  258. package/lib/typescript/src/domain/openChannelModeration/component/OpenChannelModerationHeader.d.ts +2 -1
  259. package/lib/typescript/src/domain/openChannelModeration/component/OpenChannelModerationMenu.d.ts +2 -1
  260. package/lib/typescript/src/domain/openChannelMutedParticipants/component/OpenChannelMutedParticipantsHeader.d.ts +2 -1
  261. package/lib/typescript/src/domain/openChannelMutedParticipants/component/OpenChannelMutedParticipantsList.d.ts +2 -1
  262. package/lib/typescript/src/domain/openChannelMutedParticipants/component/OpenChannelMutedParticipantsStatusEmpty.d.ts +2 -1
  263. package/lib/typescript/src/domain/openChannelMutedParticipants/component/OpenChannelMutedParticipantsStatusLoading.d.ts +2 -1
  264. package/lib/typescript/src/domain/openChannelOperators/component/OpenChannelOperatorsHeader.d.ts +2 -1
  265. package/lib/typescript/src/domain/openChannelOperators/component/OpenChannelOperatorsList.d.ts +2 -1
  266. package/lib/typescript/src/domain/openChannelOperators/component/OpenChannelOperatorsStatusEmpty.d.ts +2 -1
  267. package/lib/typescript/src/domain/openChannelOperators/component/OpenChannelOperatorsStatusLoading.d.ts +2 -1
  268. package/lib/typescript/src/domain/openChannelSettings/component/OpenChannelSettingsHeader.d.ts +2 -1
  269. package/lib/typescript/src/domain/openChannelSettings/component/OpenChannelSettingsInfo.d.ts +2 -1
  270. package/lib/typescript/src/domain/openChannelSettings/component/OpenChannelSettingsMenu.d.ts +2 -1
  271. package/lib/typescript/src/domain/userList/component/UserListHeader.d.ts +3 -3
  272. package/lib/typescript/src/domain/userList/component/UserListList.d.ts +1 -1
  273. package/lib/typescript/src/domain/userList/component/UserListStatusEmpty.d.ts +2 -1
  274. package/lib/typescript/src/domain/userList/component/UserListStatusLoading.d.ts +2 -1
  275. package/lib/typescript/src/domain/userList/types.d.ts +2 -2
  276. package/lib/typescript/src/hooks/useChannelInputItems.d.ts +10 -0
  277. package/lib/typescript/src/hooks/useVoiceMessageInput.d.ts +53 -0
  278. package/lib/typescript/src/index.d.ts +4 -0
  279. package/lib/typescript/src/libs/MentionManager.d.ts +2 -1
  280. package/lib/typescript/src/libs/SBUUtils.d.ts +1 -0
  281. package/lib/typescript/src/libs/VoiceMessageConfig.d.ts +25 -0
  282. package/lib/typescript/src/localization/StringSet.type.d.ts +7 -0
  283. package/lib/typescript/src/platform/createPlayerService.expo.d.ts +7 -0
  284. package/lib/typescript/src/platform/createPlayerService.native.d.ts +9 -0
  285. package/lib/typescript/src/platform/createRecorderService.expo.d.ts +7 -0
  286. package/lib/typescript/src/platform/createRecorderService.native.d.ts +9 -0
  287. package/lib/typescript/src/platform/types.d.ts +100 -1
  288. package/lib/typescript/src/types.d.ts +5 -1
  289. package/lib/typescript/src/utils/promise.d.ts +7 -0
  290. package/lib/typescript/src/version.d.ts +1 -1
  291. package/package.json +10 -12
  292. package/src/components/ChannelInput/EditInput.tsx +3 -15
  293. package/src/components/ChannelInput/MessageToReplyPreview.tsx +133 -0
  294. package/src/components/ChannelInput/SendInput.tsx +131 -329
  295. package/src/components/ChannelInput/VoiceMessageInput.tsx +206 -0
  296. package/src/components/ChannelInput/index.tsx +37 -6
  297. package/src/components/ChannelMessageList/index.tsx +145 -113
  298. package/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.tsx +24 -11
  299. package/src/components/GroupChannelMessageRenderer/index.tsx +113 -4
  300. package/src/components/MessageSearchResultItem.tsx +2 -1
  301. package/src/components/OpenChannelMessageRenderer/index.tsx +1 -0
  302. package/src/components/ReactionBottomSheets/ReactionUserListBottomSheet.tsx +2 -2
  303. package/src/components/ReactionBottomSheets/index.tsx +3 -2
  304. package/src/components/StatusComposition.tsx +3 -3
  305. package/src/constants.ts +2 -0
  306. package/src/containers/GroupChannelPreviewContainer.tsx +2 -0
  307. package/src/containers/InternalErrorBoundaryContainer.tsx +1 -1
  308. package/src/containers/SendbirdUIKitContainer.tsx +103 -59
  309. package/src/contexts/PlatformServiceCtx.tsx +22 -20
  310. package/src/contexts/ReactionCtx.tsx +7 -5
  311. package/src/contexts/SendbirdChatCtx.tsx +10 -2
  312. package/src/domain/groupChannel/component/GroupChannelHeader.tsx +14 -3
  313. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +30 -43
  314. package/src/domain/groupChannel/module/moduleContext.tsx +119 -7
  315. package/src/domain/groupChannel/types.ts +45 -0
  316. package/src/domain/userList/types.ts +2 -2
  317. package/src/fragments/createGroupChannelFragment.tsx +43 -8
  318. package/src/fragments/createMessageSearchFragment.tsx +1 -1
  319. package/src/hooks/useChannelInputItems.ts +215 -0
  320. package/src/hooks/useConnection.ts +1 -1
  321. package/src/hooks/useVoiceMessageInput.ts +237 -0
  322. package/src/index.ts +9 -1
  323. package/src/libs/MentionManager.tsx +1 -1
  324. package/src/libs/SBUUtils.ts +5 -0
  325. package/src/libs/VoiceMessageConfig.ts +28 -0
  326. package/src/localization/StringSet.type.ts +8 -0
  327. package/src/localization/createBaseStringSet.ts +27 -11
  328. package/src/platform/createFileService.expo.ts +10 -0
  329. package/src/platform/createFileService.native.ts +19 -0
  330. package/src/platform/createPlayerService.expo.tsx +142 -0
  331. package/src/platform/createPlayerService.native.tsx +148 -0
  332. package/src/platform/createRecorderService.expo.tsx +160 -0
  333. package/src/platform/createRecorderService.native.tsx +170 -0
  334. package/src/platform/types.ts +114 -1
  335. package/src/types.ts +6 -1
  336. package/src/utils/promise.ts +139 -0
  337. package/src/version.ts +1 -1
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { View } from 'react-native';
4
4
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
5
5
  import { ChannelFrozenBanner, createStyleSheet, useAlert, useBottomSheet, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
6
- import { Logger, getAvailableUriFromFileMessage, getFileExtension, getFileType, isMyMessage, messageKeyExtractor, shouldRenderReaction, toMegabyte, useFreshCallback } from '@sendbird/uikit-utils';
6
+ import { Logger, getAvailableUriFromFileMessage, getFileExtension, getFileType, isMyMessage, isVoiceMessage, messageKeyExtractor, shouldRenderReaction, toMegabyte, useFreshCallback } from '@sendbird/uikit-utils';
7
7
  import { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';
8
8
  import SBUUtils from '../../libs/SBUUtils';
9
9
  import ChatFlatList from '../ChatFlatList';
@@ -47,7 +47,7 @@ const ChannelMessageList = (_ref, ref) => {
47
47
  left,
48
48
  right
49
49
  } = useSafeAreaInsets();
50
- const getMessagePressActions = useGetMessagePressActions({
50
+ const createMessagePressActions = useCreateMessagePressActions({
51
51
  channel,
52
52
  currentUserId,
53
53
  onEditMessage,
@@ -67,8 +67,11 @@ const ChannelMessageList = (_ref, ref) => {
67
67
  } = _ref2;
68
68
  const {
69
69
  onPress,
70
- onLongPress
71
- } = getMessagePressActions(item);
70
+ onLongPress,
71
+ bottomSheetItem
72
+ } = createMessagePressActions({
73
+ message: item
74
+ });
72
75
  return renderMessage({
73
76
  message: item,
74
77
  prevMessage: messages[index + 1],
@@ -80,7 +83,9 @@ const ChannelMessageList = (_ref, ref) => {
80
83
  enableMessageGrouping,
81
84
  channel,
82
85
  currentUserId,
83
- focused: ((searchItem === null || searchItem === void 0 ? void 0 : searchItem.startingPoint) ?? -1) === item.createdAt
86
+ focused: ((searchItem === null || searchItem === void 0 ? void 0 : searchItem.startingPoint) ?? -1) === item.createdAt,
87
+ bottomSheetItem,
88
+ isFirstItem: index === 0
84
89
  });
85
90
  });
86
91
  return /*#__PURE__*/React.createElement(View, {
@@ -115,7 +120,7 @@ const ChannelMessageList = (_ref, ref) => {
115
120
  onPress: () => onPressScrollToBottomButton()
116
121
  })));
117
122
  };
118
- const useGetMessagePressActions = _ref3 => {
123
+ const useCreateMessagePressActions = _ref3 => {
119
124
  let {
120
125
  channel,
121
126
  currentUserId,
@@ -145,25 +150,61 @@ const useGetMessagePressActions = _ref3 => {
145
150
  const {
146
151
  sbOptions
147
152
  } = useSendbirdChat();
148
- const onFailureToReSend = error => {
153
+ const onResendFailure = error => {
149
154
  toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');
150
155
  Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);
151
156
  };
152
- const handleFailedMessage = message => {
157
+ const onDeleteFailure = error => {
158
+ toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');
159
+ Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);
160
+ };
161
+ const onCopyText = message => {
162
+ if (message.isUserMessage()) {
163
+ clipboardService.setString(message.message || '');
164
+ toast.show(STRINGS.TOAST.COPY_OK, 'success');
165
+ }
166
+ };
167
+ const onDownloadFile = message => {
168
+ if (message.isFileMessage()) {
169
+ if (toMegabyte(message.size) > 4) {
170
+ toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');
171
+ }
172
+ fileService.save({
173
+ fileUrl: message.url,
174
+ fileName: message.name,
175
+ fileType: message.type
176
+ }).then(response => {
177
+ toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');
178
+ Logger.log('File saved to', response);
179
+ }).catch(err => {
180
+ toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');
181
+ Logger.log('File save failure', err);
182
+ });
183
+ }
184
+ };
185
+ const onOpenFile = message => {
186
+ if (message.isFileMessage()) {
187
+ const fileType = getFileType(message.type || getFileExtension(message.name));
188
+ if (['image', 'video', 'audio'].includes(fileType)) {
189
+ onPressMediaMessage === null || onPressMediaMessage === void 0 ? void 0 : onPressMediaMessage(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));
190
+ } else {
191
+ SBUUtils.openURL(message.url);
192
+ }
193
+ }
194
+ };
195
+ const openSheetForFailedMessage = message => {
153
196
  openSheet({
154
197
  sheetItems: [{
155
198
  title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,
156
- onPress: () => {
157
- onResendFailedMessage(message).catch(onFailureToReSend);
158
- }
199
+ onPress: () => onResendFailedMessage(message).catch(onResendFailure)
159
200
  }, {
160
201
  title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,
161
202
  titleColor: colors.ui.dialog.default.none.destructive,
162
- onPress: () => confirmDelete(message)
203
+ onPress: () => alertForMessageDelete(message)
163
204
  }]
164
205
  });
165
206
  };
166
- const confirmDelete = message => {
207
+ const alertForMessageDelete = message => {
167
208
  alert({
168
209
  title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,
169
210
  buttons: [{
@@ -172,127 +213,118 @@ const useGetMessagePressActions = _ref3 => {
172
213
  text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,
173
214
  style: 'destructive',
174
215
  onPress: () => {
175
- onDeleteMessage(message).catch(() => toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error'));
216
+ onDeleteMessage(message).catch(onDeleteFailure);
176
217
  }
177
218
  }]
178
219
  });
179
220
  };
180
- return msg => {
181
- if (!msg.isUserMessage() && !msg.isFileMessage()) {
182
- return {
183
- onPress: undefined,
184
- onLongPress: undefined
185
- };
186
- }
221
+ return _ref4 => {
222
+ let {
223
+ message
224
+ } = _ref4;
225
+ if (!message.isUserMessage() && !message.isFileMessage()) return {};
187
226
  const sheetItems = [];
188
- const response = {
189
- onPress: undefined,
190
- onLongPress: undefined
191
- };
192
- if (msg.isUserMessage()) {
193
- sheetItems.push({
227
+ const menu = {
228
+ copy: message => ({
194
229
  icon: 'copy',
195
230
  title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,
196
- onPress: () => {
197
- clipboardService.setString(msg.message || '');
198
- toast.show(STRINGS.TOAST.COPY_OK, 'success');
199
- }
200
- });
201
- }
202
- if (msg.isFileMessage()) {
203
- sheetItems.push({
231
+ onPress: () => onCopyText(message)
232
+ }),
233
+ edit: message => ({
234
+ icon: 'edit',
235
+ title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,
236
+ onPress: () => onEditMessage(message)
237
+ }),
238
+ delete: message => ({
239
+ disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,
240
+ icon: 'delete',
241
+ title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,
242
+ onPress: () => alertForMessageDelete(message)
243
+ }),
244
+ reply: message => ({
245
+ disabled: Boolean(message.parentMessageId),
246
+ icon: 'reply',
247
+ title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,
248
+ onPress: () => onReplyMessage === null || onReplyMessage === void 0 ? void 0 : onReplyMessage(message)
249
+ }),
250
+ download: message => ({
204
251
  icon: 'download',
205
252
  title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,
206
- onPress: async () => {
207
- if (toMegabyte(msg.size) > 4) {
208
- toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');
209
- }
210
- fileService.save({
211
- fileUrl: msg.url,
212
- fileName: msg.name,
213
- fileType: msg.type
214
- }).then(response => {
215
- toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');
216
- Logger.log('File saved to', response);
217
- }).catch(err => {
218
- toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');
219
- Logger.log('File save failure', err);
220
- });
253
+ onPress: () => onDownloadFile(message)
254
+ })
255
+ };
256
+ if (message.isUserMessage()) {
257
+ sheetItems.push(menu.copy(message));
258
+ if (!channel.isEphemeral) {
259
+ if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {
260
+ sheetItems.push(menu.edit(message));
261
+ sheetItems.push(menu.delete(message));
221
262
  }
222
- });
223
- }
224
- if (!channel.isEphemeral) {
225
- if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {
226
- if (msg.isUserMessage()) {
227
- sheetItems.push({
228
- icon: 'edit',
229
- title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,
230
- onPress: () => onEditMessage(msg)
231
- });
263
+ if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {
264
+ sheetItems.push(menu.reply(message));
232
265
  }
233
- sheetItems.push({
234
- disabled: msg.threadInfo ? msg.threadInfo.replyCount > 0 : undefined,
235
- icon: 'delete',
236
- title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,
237
- onPress: () => confirmDelete(msg)
238
- });
239
- }
240
- if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {
241
- sheetItems.push({
242
- disabled: Boolean(msg.parentMessageId),
243
- icon: 'reply',
244
- title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,
245
- onPress: () => onReplyMessage === null || onReplyMessage === void 0 ? void 0 : onReplyMessage(msg)
246
- });
247
266
  }
248
267
  }
249
- if (msg.isFileMessage()) {
250
- const fileType = getFileType(msg.type || getFileExtension(msg.name));
251
- switch (fileType) {
252
- case 'image':
253
- case 'video':
254
- case 'audio':
255
- {
256
- response.onPress = () => {
257
- onPressMediaMessage === null || onPressMediaMessage === void 0 ? void 0 : onPressMediaMessage(msg, () => onDeleteMessage(msg), getAvailableUriFromFileMessage(msg));
258
- };
259
- break;
260
- }
261
- default:
262
- {
263
- response.onPress = () => SBUUtils.openURL(msg.url);
264
- break;
265
- }
268
+ if (message.isFileMessage()) {
269
+ if (!isVoiceMessage(message)) {
270
+ sheetItems.push(menu.download(message));
271
+ }
272
+ if (!channel.isEphemeral) {
273
+ if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {
274
+ sheetItems.push(menu.delete(message));
275
+ }
276
+ if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {
277
+ sheetItems.push(menu.reply(message));
278
+ }
266
279
  }
267
280
  }
268
- if (sheetItems.length > 0) {
269
- response.onLongPress = () => {
270
- openSheet({
271
- sheetItems,
272
- HeaderComponent: shouldRenderReaction(channel, sbOptions.uikitWithAppInfo.groupChannel.channel.enableReactions) ? _ref4 => {
273
- let {
274
- onClose
275
- } = _ref4;
276
- return /*#__PURE__*/React.createElement(ReactionAddons.BottomSheet, {
277
- message: msg,
278
- channel: channel,
279
- onClose: onClose
280
- });
281
- } : undefined
281
+ const bottomSheetItem = {
282
+ sheetItems,
283
+ HeaderComponent: shouldRenderReaction(channel, sbOptions.uikitWithAppInfo.groupChannel.channel.enableReactions) ? _ref5 => {
284
+ let {
285
+ onClose
286
+ } = _ref5;
287
+ return /*#__PURE__*/React.createElement(ReactionAddons.BottomSheet, {
288
+ message: message,
289
+ channel: channel,
290
+ onClose: onClose
282
291
  });
283
- };
284
- }
285
- if (msg.sendingStatus === 'failed') {
286
- response.onLongPress = () => handleFailedMessage(msg);
287
- response.onPress = () => {
288
- onResendFailedMessage(msg).catch(onFailureToReSend);
289
- };
290
- }
291
- if (msg.sendingStatus === 'pending') {
292
- response.onLongPress = undefined;
293
- response.onPress = undefined;
292
+ } : undefined
293
+ };
294
+ switch (true) {
295
+ case message.sendingStatus === 'pending':
296
+ {
297
+ return {
298
+ onPress: undefined,
299
+ onLongPress: undefined,
300
+ bottomSheetItem: undefined
301
+ };
302
+ }
303
+ case message.sendingStatus === 'failed':
304
+ {
305
+ return {
306
+ onPress: () => onResendFailedMessage(message).catch(onResendFailure),
307
+ onLongPress: () => openSheetForFailedMessage(message),
308
+ bottomSheetItem
309
+ };
310
+ }
311
+ case message.isFileMessage():
312
+ {
313
+ return {
314
+ onPress: () => onOpenFile(message),
315
+ onLongPress: () => openSheet(bottomSheetItem),
316
+ bottomSheetItem
317
+ };
318
+ }
319
+ default:
320
+ {
321
+ return {
322
+ onPress: undefined,
323
+ onLongPress: () => openSheet(bottomSheetItem),
324
+ bottomSheetItem
325
+ };
326
+ }
294
327
  }
295
- return response;
296
328
  };
297
329
  };
298
330
  const styles = createStyleSheet({
@@ -1 +1 @@
1
- {"version":3,"names":["React","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useLocalization","usePlatformService","useSendbirdChat","useUserProfile","SBUUtils","ChatFlatList","ReactionAddons","ChannelMessageList","_ref","ref","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","STRINGS","colors","show","left","right","getMessagePressActions","useGetMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","_ref2","item","index","onPress","onLongPress","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","_ref3","toast","openSheet","alert","clipboardService","fileService","sbOptions","onFailureToReSend","error","TOAST","RESEND_MSG_ERROR","handleFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","catch","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","confirmDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","DELETE_MSG_ERROR","msg","isUserMessage","isFileMessage","undefined","response","push","icon","CHANNEL_MESSAGE_COPY","setString","COPY_OK","CHANNEL_MESSAGE_SAVE","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","DOWNLOAD_OK","log","err","DOWNLOAD_ERROR","isEphemeral","sendingStatus","CHANNEL_MESSAGE_EDIT","disabled","threadInfo","replyCount","CHANNEL_MESSAGE_DELETE","isGroupChannel","uikit","groupChannel","replyType","Boolean","parentMessageId","CHANNEL_MESSAGE_REPLY","openURL","HeaderComponent","uikitWithAppInfo","enableReactions","_ref4","onClose","BottomSheet","position","zIndex","top","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport type { CommonComponent } from '../../types';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<void>;\n onPressParentMessage?: (parentMessage: SendbirdMessage) => void;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n }) => React.ReactElement | null;\n renderNewMessagesButton: null | CommonComponent<{\n visible: boolean;\n onPress: () => void;\n newMessages: SendbirdMessage[];\n }>;\n renderScrollToBottomButton: null | CommonComponent<{\n visible: boolean;\n onPress: () => void;\n }>;\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onReplyMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressParentMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const { left, right } = useSafeAreaInsets();\n const getMessagePressActions = useGetMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress } = getMessagePressActions(item);\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n onPressParentMessage,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n <ChatFlatList\n {...flatListProps}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useGetMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onReplyMessage,\n onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onReplyMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressMediaMessage'\n>) => {\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onFailureToReSend = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const handleFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => {\n onResendFailedMessage(message).catch(onFailureToReSend);\n },\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => confirmDelete(message),\n },\n ],\n });\n };\n const confirmDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL,\n },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(() => toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error'));\n },\n },\n ],\n });\n };\n\n return (msg: SendbirdMessage) => {\n if (!msg.isUserMessage() && !msg.isFileMessage()) {\n return { onPress: undefined, onLongPress: undefined };\n }\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const response: PressActions = {\n onPress: undefined,\n onLongPress: undefined,\n };\n\n if (msg.isUserMessage()) {\n sheetItems.push({\n icon: 'copy',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => {\n clipboardService.setString(msg.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n },\n });\n }\n if (msg.isFileMessage()) {\n sheetItems.push({\n icon: 'download',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: async () => {\n if (toMegabyte(msg.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: msg.url, fileName: msg.name, fileType: msg.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n },\n });\n }\n if (!channel.isEphemeral) {\n if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {\n if (msg.isUserMessage()) {\n sheetItems.push({\n icon: 'edit',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(msg),\n });\n }\n sheetItems.push({\n disabled: msg.threadInfo ? msg.threadInfo.replyCount > 0 : undefined,\n icon: 'delete',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => confirmDelete(msg),\n });\n }\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push({\n disabled: Boolean(msg.parentMessageId),\n icon: 'reply',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,\n onPress: () => onReplyMessage?.(msg),\n });\n }\n }\n\n if (msg.isFileMessage()) {\n const fileType = getFileType(msg.type || getFileExtension(msg.name));\n switch (fileType) {\n case 'image':\n case 'video':\n case 'audio': {\n response.onPress = () => {\n onPressMediaMessage?.(msg, () => onDeleteMessage(msg), getAvailableUriFromFileMessage(msg));\n };\n break;\n }\n default: {\n response.onPress = () => SBUUtils.openURL(msg.url);\n break;\n }\n }\n }\n\n if (sheetItems.length > 0) {\n response.onLongPress = () => {\n openSheet({\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n sbOptions.uikitWithAppInfo.groupChannel.channel.enableReactions,\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={msg} channel={channel} onClose={onClose} />\n : undefined,\n });\n };\n }\n\n if (msg.sendingStatus === 'failed') {\n response.onLongPress = () => handleFailedMessage(msg);\n response.onPress = () => {\n onResendFailedMessage(msg).catch(onFailureToReSend);\n };\n }\n\n if (msg.sendingStatus === 'pending') {\n response.onLongPress = undefined;\n response.onPress = undefined;\n }\n\n return response;\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n left: 8,\n right: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n right: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useLocalization","usePlatformService","useSendbirdChat","useUserProfile","SBUUtils","ChatFlatList","ReactionAddons","ChannelMessageList","_ref","ref","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","STRINGS","colors","show","left","right","createMessagePressActions","useCreateMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","_ref2","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","_ref3","toast","openSheet","alert","clipboardService","fileService","sbOptions","onResendFailure","error","TOAST","RESEND_MSG_ERROR","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","openURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","_ref4","menu","copy","icon","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","reply","Boolean","parentMessageId","CHANNEL_MESSAGE_REPLY","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","isGroupChannel","uikit","groupChannel","replyType","HeaderComponent","uikitWithAppInfo","enableReactions","_ref5","onClose","BottomSheet","position","zIndex","top","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport type { CommonComponent } from '../../types';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<void>;\n onPressParentMessage?: (parentMessage: SendbirdMessage) => void;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: boolean;\n }) => React.ReactElement | null;\n renderNewMessagesButton: null | CommonComponent<{\n visible: boolean;\n onPress: () => void;\n newMessages: SendbirdMessage[];\n }>;\n renderScrollToBottomButton: null | CommonComponent<{\n visible: boolean;\n onPress: () => void;\n }>;\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onReplyMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressParentMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const { left, right } = useSafeAreaInsets();\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: item });\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n onPressParentMessage,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n bottomSheetItem,\n isFirstItem: index === 0,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n <ChatFlatList\n {...flatListProps}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onReplyMessage,\n onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onReplyMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressMediaMessage'\n>): CreateMessagePressActions => {\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onResendFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));\n } else {\n SBUUtils.openURL(message.url);\n }\n }\n };\n\n const openSheetForFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => alertForMessageDelete(message),\n },\n ],\n });\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n reply: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'reply' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,\n onPress: () => onReplyMessage?.(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.edit(message));\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(channel, sbOptions.uikitWithAppInfo.groupChannel.channel.enableReactions)\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n switch (true) {\n case message.sendingStatus === 'pending': {\n return {\n onPress: undefined,\n onLongPress: undefined,\n bottomSheetItem: undefined,\n };\n }\n\n case message.sendingStatus === 'failed': {\n return {\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n onLongPress: () => openSheetForFailedMessage(message),\n bottomSheetItem,\n };\n }\n\n case message.isFileMessage(): {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n\n default: {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n }\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n left: 8,\n right: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n right: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":"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"}
@@ -6,6 +6,7 @@ import { useLocalization, usePlatformService, useSendbirdChat } from '../../hook
6
6
  const GroupChannelMessageParentMessage = _ref => {
7
7
  let {
8
8
  variant,
9
+ channel,
9
10
  message,
10
11
  childMessage,
11
12
  onPress
@@ -41,6 +42,21 @@ const GroupChannelMessageParentMessage = _ref => {
41
42
  }
42
43
  });
43
44
  }, []);
45
+ const renderMessageWithText = message => {
46
+ return /*#__PURE__*/React.createElement(Box, {
47
+ style: styles.bubbleContainer,
48
+ backgroundColor: select({
49
+ light: palette.background100,
50
+ dark: palette.background400
51
+ })
52
+ }, /*#__PURE__*/React.createElement(Text, {
53
+ body3: true,
54
+ color: colors.onBackground03,
55
+ suppressHighlighting: true,
56
+ numberOfLines: 2,
57
+ ellipsizeMode: 'tail'
58
+ }, message));
59
+ };
44
60
  const renderFileMessageAsVideoThumbnail = url => {
45
61
  return /*#__PURE__*/React.createElement(VideoThumbnail, {
46
62
  style: styles.image,
@@ -83,23 +99,14 @@ const GroupChannelMessageParentMessage = _ref => {
83
99
  })));
84
100
  };
85
101
  const parentMessageComponent = useIIFE(() => {
102
+ if (channel.messageOffsetTimestamp > parentMessage.createdAt) {
103
+ return renderMessageWithText(STRINGS.LABELS.MESSAGE_UNAVAILABLE);
104
+ }
86
105
  switch (type) {
87
106
  case 'user':
88
107
  case 'user.opengraph':
89
108
  {
90
- return /*#__PURE__*/React.createElement(Box, {
91
- style: styles.bubbleContainer,
92
- backgroundColor: select({
93
- light: palette.background100,
94
- dark: palette.background400
95
- })
96
- }, /*#__PURE__*/React.createElement(Text, {
97
- body3: true,
98
- color: colors.onBackground03,
99
- suppressHighlighting: true,
100
- numberOfLines: 2,
101
- ellipsizeMode: 'tail'
102
- }, parentMessage.message));
109
+ return renderMessageWithText(parentMessage.message);
103
110
  }
104
111
  case 'file':
105
112
  case 'file.audio':
@@ -114,6 +121,10 @@ const GroupChannelMessageParentMessage = _ref => {
114
121
  {
115
122
  return renderFileMessageAsPreview(getThumbnailUriFromFileMessage(parentMessage));
116
123
  }
124
+ case 'file.voice':
125
+ {
126
+ return renderMessageWithText(STRINGS.LABELS.VOICE_MESSAGE);
127
+ }
117
128
  default:
118
129
  {
119
130
  return null;
@@ -1 +1 @@
1
- {"version":3,"names":["React","useContext","useEffect","useState","Box","Icon","ImageWithPlaceholder","PressBox","Text","VideoThumbnail","createStyleSheet","useUIKitTheme","getFileIconFromMessageType","getMessageType","getThumbnailUriFromFileMessage","truncate","useIIFE","GroupChannelContexts","useLocalization","usePlatformService","useSendbirdChat","GroupChannelMessageParentMessage","_ref","variant","message","childMessage","onPress","currentUser","groupChannelPubSub","PubSub","select","colors","palette","STRINGS","mediaService","parentMessage","setParentMessage","type","subscribe","_ref2","data","updatedParent","messages","find","it","messageId","renderFileMessageAsVideoThumbnail","url","createElement","style","styles","image","iconSize","source","fetchThumbnailFromVideoSource","uri","getVideoThumbnail","timeMills","renderFileMessageAsPreview","renderFileMessageAsDownloadable","name","bubbleContainer","backgroundColor","light","background100","dark","background400","icon","size","color","onBackground03","containerStyle","fileIcon","body3","numberOfLines","ellipsizeMode","mode","maxLen","parentMessageComponent","suppressHighlighting","alignItems","paddingLeft","paddingRight","senderLabel","marginRight","caption1","LABELS","REPLY_FROM_SENDER_TO_RECEIVER","userId","flexDirection","justifyContent","messageContainer","opacity","marginTop","marginBottom","maxWidth","overflow","borderRadius","paddingHorizontal","paddingBottom","paddingTop","width","height"],"sources":["GroupChannelMessageParentMessage.tsx"],"sourcesContent":["import React, { useContext, useEffect, useState } from 'react';\n\nimport {\n Box,\n Icon,\n ImageWithPlaceholder,\n PressBox,\n Text,\n VideoThumbnail,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdFileMessage,\n SendbirdMessage,\n SendbirdUserMessage,\n getFileIconFromMessageType,\n getMessageType,\n getThumbnailUriFromFileMessage,\n truncate,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { GroupChannelContexts } from '../../domain/groupChannel/module/moduleContext';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\n\ntype Props = {\n variant: 'outgoing' | 'incoming';\n message: SendbirdUserMessage | SendbirdFileMessage;\n childMessage: SendbirdUserMessage | SendbirdFileMessage;\n onPress?: (message: SendbirdMessage) => void;\n};\n\nconst GroupChannelMessageParentMessage = ({ variant, message, childMessage, onPress }: Props) => {\n const { currentUser } = useSendbirdChat();\n const groupChannelPubSub = useContext(GroupChannelContexts.PubSub);\n const { select, colors, palette } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const { mediaService } = usePlatformService();\n\n const [parentMessage, setParentMessage] = useState(() => message);\n const type = getMessageType(parentMessage);\n\n useEffect(() => {\n return groupChannelPubSub.subscribe(({ type, data }) => {\n if (type === 'MESSAGES_UPDATED') {\n const updatedParent = data.messages.find((it): it is SendbirdUserMessage | SendbirdFileMessage => {\n return it.messageId === parentMessage.messageId;\n });\n if (updatedParent) setParentMessage(updatedParent);\n }\n });\n }, []);\n\n const renderFileMessageAsVideoThumbnail = (url: string) => {\n return (\n <VideoThumbnail\n style={styles.image}\n iconSize={18}\n source={url}\n fetchThumbnailFromVideoSource={(uri) => mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 })}\n />\n );\n };\n const renderFileMessageAsPreview = (url: string) => {\n return <ImageWithPlaceholder style={styles.image} source={{ uri: url }} />;\n };\n const renderFileMessageAsDownloadable = (name: string) => {\n return (\n <Box\n style={styles.bubbleContainer}\n backgroundColor={select({ light: palette.background100, dark: palette.background400 })}\n >\n <Icon\n icon={getFileIconFromMessageType(type)}\n size={16}\n color={colors.onBackground03}\n containerStyle={styles.fileIcon}\n />\n <Text body3 color={colors.onBackground03} numberOfLines={1} ellipsizeMode={'middle'}>\n {truncate(name, { mode: 'mid', maxLen: 20 })}\n </Text>\n </Box>\n );\n };\n\n const parentMessageComponent = useIIFE(() => {\n switch (type) {\n case 'user':\n case 'user.opengraph': {\n return (\n <Box\n style={styles.bubbleContainer}\n backgroundColor={select({ light: palette.background100, dark: palette.background400 })}\n >\n <Text body3 color={colors.onBackground03} suppressHighlighting numberOfLines={2} ellipsizeMode={'tail'}>\n {(parentMessage as SendbirdUserMessage).message}\n </Text>\n </Box>\n );\n }\n case 'file':\n case 'file.audio': {\n return renderFileMessageAsDownloadable((parentMessage as SendbirdFileMessage).name);\n }\n case 'file.video': {\n return renderFileMessageAsVideoThumbnail(getThumbnailUriFromFileMessage(parentMessage as SendbirdFileMessage));\n }\n case 'file.image': {\n return renderFileMessageAsPreview(getThumbnailUriFromFileMessage(parentMessage as SendbirdFileMessage));\n }\n default: {\n return null;\n }\n }\n });\n\n return (\n <Box>\n <Box\n alignItems={variant === 'outgoing' ? 'flex-end' : 'flex-start'}\n paddingLeft={variant === 'outgoing' ? 0 : 12}\n paddingRight={variant === 'outgoing' ? 12 : 0}\n >\n <PressBox onPress={() => onPress?.(parentMessage)} style={styles.senderLabel}>\n <Icon icon={'reply-filled'} size={13} color={colors.onBackground03} containerStyle={{ marginRight: 4 }} />\n <Text caption1 color={colors.onBackground03}>\n {STRINGS.LABELS.REPLY_FROM_SENDER_TO_RECEIVER(childMessage, parentMessage, currentUser?.userId)}\n </Text>\n </PressBox>\n </Box>\n <Box\n flexDirection={'row'}\n justifyContent={variant === 'outgoing' ? 'flex-end' : 'flex-start'}\n style={styles.messageContainer}\n >\n <PressBox onPress={() => onPress?.(parentMessage)}>{parentMessageComponent}</PressBox>\n </Box>\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n messageContainer: {\n opacity: 0.5,\n marginTop: 4,\n marginBottom: -6,\n },\n bubbleContainer: {\n maxWidth: 220,\n overflow: 'hidden',\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 16,\n paddingHorizontal: 12,\n paddingBottom: 12,\n paddingTop: 6,\n },\n image: {\n width: 156,\n height: 104,\n borderRadius: 16,\n overflow: 'hidden',\n },\n fileIcon: {\n width: 16,\n height: 16,\n borderRadius: 10,\n marginRight: 4,\n marginTop: 2,\n },\n senderLabel: {\n flexDirection: 'row',\n },\n});\n\nexport default GroupChannelMessageParentMessage;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useContext","useEffect","useState","Box","Icon","ImageWithPlaceholder","PressBox","Text","VideoThumbnail","createStyleSheet","useUIKitTheme","getFileIconFromMessageType","getMessageType","getThumbnailUriFromFileMessage","truncate","useIIFE","GroupChannelContexts","useLocalization","usePlatformService","useSendbirdChat","GroupChannelMessageParentMessage","_ref","variant","channel","message","childMessage","onPress","currentUser","groupChannelPubSub","PubSub","select","colors","palette","STRINGS","mediaService","parentMessage","setParentMessage","type","subscribe","_ref2","data","updatedParent","messages","find","it","messageId","renderMessageWithText","createElement","style","styles","bubbleContainer","backgroundColor","light","background100","dark","background400","body3","color","onBackground03","suppressHighlighting","numberOfLines","ellipsizeMode","renderFileMessageAsVideoThumbnail","url","image","iconSize","source","fetchThumbnailFromVideoSource","uri","getVideoThumbnail","timeMills","renderFileMessageAsPreview","renderFileMessageAsDownloadable","name","icon","size","containerStyle","fileIcon","mode","maxLen","parentMessageComponent","messageOffsetTimestamp","createdAt","LABELS","MESSAGE_UNAVAILABLE","VOICE_MESSAGE","alignItems","paddingLeft","paddingRight","senderLabel","marginRight","caption1","REPLY_FROM_SENDER_TO_RECEIVER","userId","flexDirection","justifyContent","messageContainer","opacity","marginTop","marginBottom","maxWidth","overflow","borderRadius","paddingHorizontal","paddingBottom","paddingTop","width","height"],"sources":["GroupChannelMessageParentMessage.tsx"],"sourcesContent":["import React, { useContext, useEffect, useState } from 'react';\n\nimport {\n Box,\n Icon,\n ImageWithPlaceholder,\n PressBox,\n Text,\n VideoThumbnail,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUserMessage,\n getFileIconFromMessageType,\n getMessageType,\n getThumbnailUriFromFileMessage,\n truncate,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { GroupChannelContexts } from '../../domain/groupChannel/module/moduleContext';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\n\ntype Props = {\n variant: 'outgoing' | 'incoming';\n channel: SendbirdGroupChannel;\n message: SendbirdUserMessage | SendbirdFileMessage;\n childMessage: SendbirdUserMessage | SendbirdFileMessage;\n onPress?: (message: SendbirdMessage) => void;\n};\n\nconst GroupChannelMessageParentMessage = ({ variant, channel, message, childMessage, onPress }: Props) => {\n const { currentUser } = useSendbirdChat();\n const groupChannelPubSub = useContext(GroupChannelContexts.PubSub);\n const { select, colors, palette } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const { mediaService } = usePlatformService();\n\n const [parentMessage, setParentMessage] = useState(() => message);\n const type = getMessageType(parentMessage);\n\n useEffect(() => {\n return groupChannelPubSub.subscribe(({ type, data }) => {\n if (type === 'MESSAGES_UPDATED') {\n const updatedParent = data.messages.find((it): it is SendbirdUserMessage | SendbirdFileMessage => {\n return it.messageId === parentMessage.messageId;\n });\n if (updatedParent) setParentMessage(updatedParent);\n }\n });\n }, []);\n\n const renderMessageWithText = (message: string) => {\n return (\n <Box\n style={styles.bubbleContainer}\n backgroundColor={select({ light: palette.background100, dark: palette.background400 })}\n >\n <Text body3 color={colors.onBackground03} suppressHighlighting numberOfLines={2} ellipsizeMode={'tail'}>\n {message}\n </Text>\n </Box>\n );\n };\n\n const renderFileMessageAsVideoThumbnail = (url: string) => {\n return (\n <VideoThumbnail\n style={styles.image}\n iconSize={18}\n source={url}\n fetchThumbnailFromVideoSource={(uri) => mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 })}\n />\n );\n };\n const renderFileMessageAsPreview = (url: string) => {\n return <ImageWithPlaceholder style={styles.image} source={{ uri: url }} />;\n };\n const renderFileMessageAsDownloadable = (name: string) => {\n return (\n <Box\n style={styles.bubbleContainer}\n backgroundColor={select({ light: palette.background100, dark: palette.background400 })}\n >\n <Icon\n icon={getFileIconFromMessageType(type)}\n size={16}\n color={colors.onBackground03}\n containerStyle={styles.fileIcon}\n />\n <Text body3 color={colors.onBackground03} numberOfLines={1} ellipsizeMode={'middle'}>\n {truncate(name, { mode: 'mid', maxLen: 20 })}\n </Text>\n </Box>\n );\n };\n\n const parentMessageComponent = useIIFE(() => {\n if (channel.messageOffsetTimestamp > parentMessage.createdAt) {\n return renderMessageWithText(STRINGS.LABELS.MESSAGE_UNAVAILABLE);\n }\n\n switch (type) {\n case 'user':\n case 'user.opengraph': {\n return renderMessageWithText((parentMessage as SendbirdUserMessage).message);\n }\n case 'file':\n case 'file.audio': {\n return renderFileMessageAsDownloadable((parentMessage as SendbirdFileMessage).name);\n }\n case 'file.video': {\n return renderFileMessageAsVideoThumbnail(getThumbnailUriFromFileMessage(parentMessage as SendbirdFileMessage));\n }\n case 'file.image': {\n return renderFileMessageAsPreview(getThumbnailUriFromFileMessage(parentMessage as SendbirdFileMessage));\n }\n case 'file.voice': {\n return renderMessageWithText(STRINGS.LABELS.VOICE_MESSAGE);\n }\n default: {\n return null;\n }\n }\n });\n\n return (\n <Box>\n <Box\n alignItems={variant === 'outgoing' ? 'flex-end' : 'flex-start'}\n paddingLeft={variant === 'outgoing' ? 0 : 12}\n paddingRight={variant === 'outgoing' ? 12 : 0}\n >\n <PressBox onPress={() => onPress?.(parentMessage)} style={styles.senderLabel}>\n <Icon icon={'reply-filled'} size={13} color={colors.onBackground03} containerStyle={{ marginRight: 4 }} />\n <Text caption1 color={colors.onBackground03}>\n {STRINGS.LABELS.REPLY_FROM_SENDER_TO_RECEIVER(childMessage, parentMessage, currentUser?.userId)}\n </Text>\n </PressBox>\n </Box>\n <Box\n flexDirection={'row'}\n justifyContent={variant === 'outgoing' ? 'flex-end' : 'flex-start'}\n style={styles.messageContainer}\n >\n <PressBox onPress={() => onPress?.(parentMessage)}>{parentMessageComponent}</PressBox>\n </Box>\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n messageContainer: {\n opacity: 0.5,\n marginTop: 4,\n marginBottom: -6,\n },\n bubbleContainer: {\n maxWidth: 220,\n overflow: 'hidden',\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 16,\n paddingHorizontal: 12,\n paddingBottom: 12,\n paddingTop: 6,\n },\n image: {\n width: 156,\n height: 104,\n borderRadius: 16,\n overflow: 'hidden',\n },\n fileIcon: {\n width: 16,\n height: 16,\n borderRadius: 10,\n marginRight: 4,\n marginTop: 2,\n },\n senderLabel: {\n flexDirection: 'row',\n },\n});\n\nexport default GroupChannelMessageParentMessage;\n"],"mappings":"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"}