@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
@@ -9,14 +9,18 @@ var _reactNative = require("react-native");
9
9
  var _message = require("@sendbird/chat/message");
10
10
  var _uikitReactNativeFoundation = require("@sendbird/uikit-react-native-foundation");
11
11
  var _uikitUtils = require("@sendbird/uikit-utils");
12
+ var _constants = require("../../constants");
13
+ var _useChannelInputItems = require("../../hooks/useChannelInputItems");
12
14
  var _useContext = require("../../hooks/useContext");
13
- var _SBUError = _interopRequireDefault(require("../../libs/SBUError"));
14
15
  var _SBUUtils = _interopRequireDefault(require("../../libs/SBUUtils"));
15
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
17
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
18
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
19
  const SendInput = /*#__PURE__*/(0, _react.forwardRef)(function SendInput(_ref, ref) {
19
20
  let {
21
+ style,
22
+ VoiceMessageInput,
23
+ MessageToReplyPreview,
20
24
  AttachmentsButton,
21
25
  onPressSendUserMessage,
22
26
  onPressSendFileMessage,
@@ -31,15 +35,14 @@ const SendInput = /*#__PURE__*/(0, _react.forwardRef)(function SendInput(_ref, r
31
35
  messageToReply,
32
36
  setMessageToReply
33
37
  } = _ref;
38
+ const {
39
+ playerService,
40
+ recorderService
41
+ } = (0, _useContext.usePlatformService)();
34
42
  const {
35
43
  mentionManager,
36
44
  sbOptions
37
45
  } = (0, _useContext.useSendbirdChat)();
38
- const {
39
- select,
40
- colors,
41
- palette
42
- } = (0, _uikitReactNativeFoundation.useUIKitTheme)();
43
46
  const {
44
47
  STRINGS
45
48
  } = (0, _useContext.useLocalization)();
@@ -48,8 +51,11 @@ const SendInput = /*#__PURE__*/(0, _react.forwardRef)(function SendInput(_ref, r
48
51
  } = (0, _uikitReactNativeFoundation.useBottomSheet)();
49
52
  const toast = (0, _uikitReactNativeFoundation.useToast)();
50
53
  const {
51
- mediaService
52
- } = (0, _useContext.usePlatformService)();
54
+ onClose,
55
+ onDismiss,
56
+ visible: voiceMessageInputVisible,
57
+ setVisible: setVoiceMessageInputVisible
58
+ } = (0, _uikitUtils.useDeferredModalState)();
53
59
  const messageReplyParams = (0, _uikitUtils.useIIFE)(() => {
54
60
  const {
55
61
  groupChannel
@@ -91,10 +97,30 @@ const SendInput = /*#__PURE__*/(0, _react.forwardRef)(function SendInput(_ref, r
91
97
  }).catch(onFailureToSend);
92
98
  setMessageToReply === null || setMessageToReply === void 0 ? void 0 : setMessageToReply();
93
99
  };
94
- const sheetItems = useChannelInputItems(channel, sendFileMessage);
95
- const onPressAttachment = () => openSheet({
96
- sheetItems
97
- });
100
+ const sendVoiceMessage = (file, durationMills) => {
101
+ if (inputMuted) {
102
+ toast.show(STRINGS.TOAST.USER_MUTED_ERROR, 'error');
103
+ _uikitUtils.Logger.error(STRINGS.TOAST.USER_MUTED_ERROR);
104
+ } else if (inputFrozen) {
105
+ toast.show(STRINGS.TOAST.CHANNEL_FROZEN_ERROR, 'error');
106
+ _uikitUtils.Logger.error(STRINGS.TOAST.CHANNEL_FROZEN_ERROR);
107
+ } else {
108
+ onPressSendFileMessage({
109
+ file,
110
+ metaArrays: [new _message.MessageMetaArray({
111
+ key: _constants.VOICE_MESSAGE_META_ARRAY_DURATION_KEY,
112
+ value: [String(durationMills)]
113
+ }), new _message.MessageMetaArray({
114
+ key: _constants.VOICE_MESSAGE_META_ARRAY_MESSAGE_TYPE_KEY,
115
+ value: [`voice/${recorderService.options.extension}`]
116
+ })],
117
+ ...messageReplyParams
118
+ }).catch(onFailureToSend);
119
+ }
120
+ onChangeText('');
121
+ setMessageToReply === null || setMessageToReply === void 0 ? void 0 : setMessageToReply();
122
+ };
123
+ const sheetItems = (0, _useChannelInputItems.useChannelInputItems)(channel, sendFileMessage);
98
124
  const getPlaceholder = () => {
99
125
  if (inputMuted) return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_MUTED;
100
126
  if (inputFrozen) return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_DISABLED;
@@ -102,102 +128,17 @@ const SendInput = /*#__PURE__*/(0, _react.forwardRef)(function SendInput(_ref, r
102
128
  if (messageToReply) return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_REPLY;
103
129
  return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_ACTIVE;
104
130
  };
105
- const getFileIconAsImage = url => {
106
- return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.ImageWithPlaceholder, {
107
- source: {
108
- uri: url
109
- },
110
- style: styles.previewImage
111
- });
112
- };
113
- const getFileIconAsVideoThumbnail = url => {
114
- return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.VideoThumbnail, {
115
- style: styles.previewImage,
116
- iconSize: 0,
117
- source: url,
118
- fetchThumbnailFromVideoSource: uri => mediaService.getVideoThumbnail({
119
- url: uri,
120
- timeMills: 1000
121
- })
122
- });
123
- };
124
- const getFileIconAsSymbol = icon => {
125
- return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Icon, {
126
- icon: icon,
127
- size: 20,
128
- color: colors.onBackground02,
129
- containerStyle: {
130
- backgroundColor: select({
131
- light: palette.background100,
132
- dark: palette.background500
133
- }),
134
- width: 36,
135
- height: 36,
136
- borderRadius: 10,
137
- marginRight: 10,
138
- marginTop: 2
139
- }
140
- });
141
- };
142
- const getFileIcon = messageToReply => {
143
- if (messageToReply !== null && messageToReply !== void 0 && messageToReply.isFileMessage()) {
144
- const messageType = (0, _uikitUtils.getMessageType)(messageToReply);
145
- switch (messageType) {
146
- case 'file.image':
147
- return getFileIconAsImage((0, _uikitUtils.getThumbnailUriFromFileMessage)(messageToReply));
148
- case 'file.video':
149
- return getFileIconAsVideoThumbnail((0, _uikitUtils.getThumbnailUriFromFileMessage)(messageToReply));
150
- default:
151
- return getFileIconAsSymbol((0, _uikitUtils.getFileIconFromMessageType)(messageType));
152
- }
153
- }
154
- return null;
155
- };
156
- return /*#__PURE__*/_react.default.createElement(_reactNative.View, null, messageToReply && /*#__PURE__*/_react.default.createElement(_reactNative.View, {
157
- style: {
158
- flexDirection: 'row',
159
- paddingLeft: 18,
160
- paddingRight: 16,
161
- paddingTop: 10,
162
- paddingBottom: 8,
163
- alignItems: 'center',
164
- borderTopWidth: 1,
165
- borderColor: colors.onBackground04
166
- }
167
- }, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
168
- style: {
169
- flex: 1,
170
- flexDirection: 'row'
171
- }
172
- }, getFileIcon(messageToReply), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
173
- style: {
174
- flex: 1,
175
- flexDirection: 'column'
176
- }
177
- }, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Text, {
178
- numberOfLines: 1,
179
- style: {
180
- fontSize: 13,
181
- fontWeight: '900',
182
- marginBottom: 4
183
- }
184
- }, STRINGS.LABELS.CHANNEL_INPUT_REPLY_PREVIEW_TITLE(messageToReply.sender)), /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Text, {
185
- numberOfLines: 1,
186
- style: {
187
- fontSize: 13,
188
- color: colors.onBackground03
189
- }
190
- }, STRINGS.LABELS.CHANNEL_INPUT_REPLY_PREVIEW_BODY(messageToReply)))), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
191
- onPress: () => setMessageToReply === null || setMessageToReply === void 0 ? void 0 : setMessageToReply(undefined)
192
- }, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Icon, {
193
- icon: 'close',
194
- size: 24,
195
- color: colors.onBackground01,
196
- containerStyle: styles.iconSend
197
- }))), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
131
+ const voiceMessageEnabled = channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.enableVoiceMessage;
132
+ const sendButtonVisible = Boolean(text.trim());
133
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, null, MessageToReplyPreview && /*#__PURE__*/_react.default.createElement(MessageToReplyPreview, {
134
+ messageToReply: messageToReply,
135
+ setMessageToReply: setMessageToReply
136
+ }), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
198
137
  style: styles.sendInputContainer
199
138
  }, AttachmentsButton && /*#__PURE__*/_react.default.createElement(AttachmentsButton, {
200
- onPress: onPressAttachment,
139
+ onPress: () => openSheet({
140
+ sheetItems
141
+ }),
201
142
  disabled: inputDisabled
202
143
  }), /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.TextInput, {
203
144
  ref: ref,
@@ -206,214 +147,117 @@ const SendInput = /*#__PURE__*/(0, _react.forwardRef)(function SendInput(_ref, r
206
147
  onSelectionChange: onSelectionChange,
207
148
  editable: !inputDisabled,
208
149
  onChangeText: onChangeText,
209
- style: styles.input,
150
+ style: style,
210
151
  placeholder: getPlaceholder()
211
- }, mentionManager.textToMentionedComponents(text, mentionedUsers, sbOptions.uikit.groupChannel.channel.enableMention)), Boolean(text.trim()) && /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
212
- onPress: sendUserMessage,
213
- disabled: inputDisabled
214
- }, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Icon, {
215
- color: inputDisabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight,
216
- icon: 'send',
217
- size: 24,
218
- containerStyle: styles.iconSend
152
+ }, mentionManager.textToMentionedComponents(text, mentionedUsers, sbOptions.uikit.groupChannel.channel.enableMention)), voiceMessageEnabled && /*#__PURE__*/_react.default.createElement(VoiceMessageButton, {
153
+ visible: !sendButtonVisible,
154
+ disabled: inputDisabled,
155
+ onPress: () => setVoiceMessageInputVisible(true)
156
+ }), /*#__PURE__*/_react.default.createElement(UserMessageSendButton, {
157
+ visible: sendButtonVisible,
158
+ disabled: inputDisabled,
159
+ onPress: sendUserMessage
160
+ }), voiceMessageEnabled && VoiceMessageInput && /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Modal, {
161
+ disableBackgroundClose: true,
162
+ onClose: onClose,
163
+ onDismiss: () => {
164
+ onDismiss();
165
+ Promise.allSettled([playerService.reset(), recorderService.reset()]);
166
+ },
167
+ backgroundStyle: {
168
+ justifyContent: 'flex-end'
169
+ },
170
+ visible: voiceMessageInputVisible,
171
+ type: 'slide-no-gesture'
172
+ }, /*#__PURE__*/_react.default.createElement(VoiceMessageInput, {
173
+ onClose: onClose,
174
+ onSend: _ref2 => {
175
+ let {
176
+ file,
177
+ duration
178
+ } = _ref2;
179
+ return sendVoiceMessage(file, duration);
180
+ }
219
181
  }))));
220
182
  });
221
- const useChannelInputItems = (channel, sendFileMessage) => {
222
- const {
223
- sbOptions,
224
- imageCompressionConfig
225
- } = (0, _useContext.useSendbirdChat)();
183
+ const VoiceMessageButton = _ref3 => {
184
+ let {
185
+ visible,
186
+ disabled,
187
+ onPress
188
+ } = _ref3;
226
189
  const {
227
190
  STRINGS
228
191
  } = (0, _useContext.useLocalization)();
229
- const {
230
- fileService,
231
- mediaService
232
- } = (0, _useContext.usePlatformService)();
233
192
  const {
234
193
  alert
235
194
  } = (0, _uikitReactNativeFoundation.useAlert)();
236
- const toast = (0, _uikitReactNativeFoundation.useToast)();
237
- const sheetItems = [];
238
- const input = (0, _uikitUtils.useIIFE)(() => {
239
- switch (true) {
240
- case channel.isOpenChannel():
241
- return sbOptions.uikit.openChannel.channel.input;
242
- case channel.isGroupChannel():
243
- return sbOptions.uikit.groupChannel.channel.input;
244
- default:
245
- return {
246
- enableDocument: true,
247
- camera: {
248
- enablePhoto: true,
249
- enableVideo: true
250
- },
251
- gallery: {
252
- enablePhoto: true,
253
- enableVideo: true
254
- }
255
- };
195
+ const {
196
+ playerService,
197
+ recorderService
198
+ } = (0, _useContext.usePlatformService)();
199
+ const {
200
+ colors
201
+ } = (0, _uikitReactNativeFoundation.useUIKitTheme)();
202
+ if (!visible) return null;
203
+ const onPressWithPermissionCheck = async () => {
204
+ const recorderGranted = await recorderService.requestPermission();
205
+ if (!recorderGranted) {
206
+ alert({
207
+ title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
208
+ message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_MICROPHONE, STRINGS.LABELS.PERMISSION_APP_NAME),
209
+ buttons: [{
210
+ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
211
+ onPress: () => _SBUUtils.default.openSettings()
212
+ }]
213
+ });
214
+ _uikitUtils.Logger.error('Failed to request permission for recorder');
215
+ return;
256
216
  }
257
- });
258
- if (input.camera.enablePhoto) {
259
- sheetItems.push({
260
- title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_CAMERA_PHOTO,
261
- icon: 'camera',
262
- onPress: async () => {
263
- const mediaFile = await fileService.openCamera({
264
- mediaType: 'photo',
265
- onOpenFailure: error => {
266
- if (error.code === _SBUError.default.CODE.ERR_PERMISSIONS_DENIED) {
267
- alert({
268
- title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
269
- message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_CAMERA, STRINGS.LABELS.PERMISSION_APP_NAME),
270
- buttons: [{
271
- text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
272
- onPress: () => _SBUUtils.default.openSettings()
273
- }]
274
- });
275
- } else {
276
- toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');
277
- }
278
- }
279
- });
280
- if (mediaFile) {
281
- // Image compression
282
- if ((0, _uikitUtils.isImage)(mediaFile.uri, mediaFile.type) && (0, _uikitUtils.shouldCompressImage)(mediaFile.type, sbOptions.chat.imageCompressionEnabled)) {
283
- await _SBUUtils.default.safeRun(async () => {
284
- const compressed = await mediaService.compressImage({
285
- uri: mediaFile.uri,
286
- maxWidth: imageCompressionConfig.width,
287
- maxHeight: imageCompressionConfig.height,
288
- compressionRate: imageCompressionConfig.compressionRate
289
- });
290
- if (compressed) {
291
- mediaFile.uri = compressed.uri;
292
- mediaFile.size = compressed.size;
293
- }
294
- });
295
- }
296
- sendFileMessage(mediaFile);
297
- }
298
- }
299
- });
300
- }
301
- if (input.camera.enableVideo) {
302
- sheetItems.push({
303
- title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_CAMERA_VIDEO,
304
- icon: 'camera',
305
- onPress: async () => {
306
- const mediaFile = await fileService.openCamera({
307
- mediaType: 'video',
308
- onOpenFailure: error => {
309
- if (error.code === _SBUError.default.CODE.ERR_PERMISSIONS_DENIED) {
310
- alert({
311
- title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
312
- message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_CAMERA, STRINGS.LABELS.PERMISSION_APP_NAME),
313
- buttons: [{
314
- text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
315
- onPress: () => _SBUUtils.default.openSettings()
316
- }]
317
- });
318
- } else {
319
- toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');
320
- }
321
- }
322
- });
323
- if (mediaFile) {
324
- sendFileMessage(mediaFile);
325
- }
326
- }
327
- });
328
- }
329
- if (input.gallery.enablePhoto || input.gallery.enableVideo) {
330
- const mediaType = (() => {
331
- switch (true) {
332
- case input.gallery.enablePhoto && input.gallery.enableVideo:
333
- return 'all';
334
- case input.gallery.enablePhoto && !input.gallery.enableVideo:
335
- return 'photo';
336
- case !input.gallery.enablePhoto && input.gallery.enableVideo:
337
- return 'video';
338
- default:
339
- return 'all';
340
- }
341
- })();
342
- sheetItems.push({
343
- title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_PHOTO_LIBRARY,
344
- icon: 'photo',
345
- onPress: async () => {
346
- const mediaFiles = await fileService.openMediaLibrary({
347
- selectionLimit: 1,
348
- mediaType,
349
- onOpenFailure: error => {
350
- if (error.code === _SBUError.default.CODE.ERR_PERMISSIONS_DENIED) {
351
- alert({
352
- title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
353
- message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_DEVICE_STORAGE, STRINGS.LABELS.PERMISSION_APP_NAME),
354
- buttons: [{
355
- text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
356
- onPress: () => _SBUUtils.default.openSettings()
357
- }]
358
- });
359
- } else {
360
- toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');
361
- }
362
- }
363
- });
364
- if (mediaFiles && mediaFiles[0]) {
365
- const mediaFile = mediaFiles[0];
366
-
367
- // Image compression
368
- if ((0, _uikitUtils.isImage)(mediaFile.uri, mediaFile.type) && (0, _uikitUtils.shouldCompressImage)(mediaFile.type, sbOptions.chat.imageCompressionEnabled)) {
369
- await _SBUUtils.default.safeRun(async () => {
370
- const compressed = await mediaService.compressImage({
371
- uri: mediaFile.uri,
372
- maxWidth: imageCompressionConfig.width,
373
- maxHeight: imageCompressionConfig.height,
374
- compressionRate: imageCompressionConfig.compressionRate
375
- });
376
- if (compressed) {
377
- mediaFile.uri = compressed.uri;
378
- mediaFile.size = compressed.size;
379
- }
380
- });
381
- }
382
- sendFileMessage(mediaFile);
383
- }
384
- }
385
- });
386
- }
387
- if (input.enableDocument) {
388
- sheetItems.push({
389
- title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_FILES,
390
- icon: 'document',
391
- onPress: async () => {
392
- const documentFile = await fileService.openDocument({
393
- onOpenFailure: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error')
394
- });
395
- if (documentFile) {
396
- // Image compression
397
- if ((0, _uikitUtils.isImage)(documentFile.uri, documentFile.type) && (0, _uikitUtils.shouldCompressImage)(documentFile.type, sbOptions.chat.imageCompressionEnabled)) {
398
- await _SBUUtils.default.safeRun(async () => {
399
- const compressed = await mediaService.compressImage({
400
- uri: documentFile.uri,
401
- maxWidth: imageCompressionConfig.width,
402
- maxHeight: imageCompressionConfig.height,
403
- compressionRate: imageCompressionConfig.compressionRate
404
- });
405
- if (compressed) {
406
- documentFile.uri = compressed.uri;
407
- documentFile.size = compressed.size;
408
- }
409
- });
410
- }
411
- sendFileMessage(documentFile);
412
- }
413
- }
414
- });
415
- }
416
- return sheetItems;
217
+ const playerGranted = await playerService.requestPermission();
218
+ if (!playerGranted) {
219
+ alert({
220
+ title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
221
+ message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_DEVICE_STORAGE, STRINGS.LABELS.PERMISSION_APP_NAME),
222
+ buttons: [{
223
+ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
224
+ onPress: () => _SBUUtils.default.openSettings()
225
+ }]
226
+ });
227
+ _uikitUtils.Logger.error('Failed to request permission for player');
228
+ return;
229
+ }
230
+ onPress();
231
+ };
232
+ return /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
233
+ onPress: onPressWithPermissionCheck,
234
+ disabled: disabled
235
+ }, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Icon, {
236
+ color: disabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight,
237
+ icon: 'audio-on',
238
+ size: 24,
239
+ containerStyle: styles.sendIcon
240
+ }));
241
+ };
242
+ const UserMessageSendButton = _ref4 => {
243
+ let {
244
+ visible,
245
+ disabled,
246
+ onPress
247
+ } = _ref4;
248
+ const {
249
+ colors
250
+ } = (0, _uikitReactNativeFoundation.useUIKitTheme)();
251
+ if (!visible) return null;
252
+ return /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
253
+ onPress: onPress,
254
+ disabled: disabled
255
+ }, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Icon, {
256
+ color: disabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight,
257
+ icon: 'send',
258
+ size: 24,
259
+ containerStyle: styles.sendIcon
260
+ }));
417
261
  };
418
262
  const styles = (0, _uikitReactNativeFoundation.createStyleSheet)({
419
263
  sendInputContainer: {
@@ -422,27 +266,9 @@ const styles = (0, _uikitReactNativeFoundation.createStyleSheet)({
422
266
  alignItems: 'center',
423
267
  flexDirection: 'row'
424
268
  },
425
- input: {
426
- flex: 1,
427
- marginRight: 4,
428
- minHeight: 36,
429
- maxHeight: 36 * _reactNative.Platform.select({
430
- ios: 2.5,
431
- default: 2
432
- }),
433
- borderRadius: 20
434
- },
435
- iconSend: {
269
+ sendIcon: {
436
270
  marginLeft: 4,
437
271
  padding: 4
438
- },
439
- previewImage: {
440
- width: 36,
441
- height: 36,
442
- borderRadius: 10,
443
- marginTop: 2,
444
- marginRight: 10,
445
- overflow: 'hidden'
446
272
  }
447
273
  });
448
274
  var _default = SendInput;