@sendbird/uikit-react-native 2.1.0 → 2.2.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 (388) hide show
  1. package/lib/commonjs/components/ChatFlatList.js +2 -1
  2. package/lib/commonjs/components/ChatFlatList.js.map +1 -1
  3. package/lib/commonjs/components/MessageRenderer/FileMessage/BaseFileMessage.js +11 -6
  4. package/lib/commonjs/components/MessageRenderer/FileMessage/BaseFileMessage.js.map +1 -1
  5. package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js +12 -2
  6. package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +1 -1
  7. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js +25 -10
  8. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +1 -1
  9. package/lib/commonjs/components/MessageRenderer/UserMessage/BaseUserMessage.js +86 -10
  10. package/lib/commonjs/components/MessageRenderer/UserMessage/BaseUserMessage.js.map +1 -1
  11. package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js +99 -14
  12. package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +1 -1
  13. package/lib/commonjs/components/MessageRenderer/UserMessage/index.js.map +1 -1
  14. package/lib/commonjs/components/MessageRenderer/index.js +22 -3
  15. package/lib/commonjs/components/MessageRenderer/index.js.map +1 -1
  16. package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js +150 -0
  17. package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -0
  18. package/lib/commonjs/components/ReactionAddons/MessageReactionAddon.js +135 -0
  19. package/lib/commonjs/components/ReactionAddons/MessageReactionAddon.js.map +1 -0
  20. package/lib/commonjs/components/ReactionAddons/ReactionRoundedButton.js +87 -0
  21. package/lib/commonjs/components/ReactionAddons/ReactionRoundedButton.js.map +1 -0
  22. package/lib/commonjs/components/ReactionAddons/index.js +19 -0
  23. package/lib/commonjs/components/ReactionAddons/index.js.map +1 -0
  24. package/lib/commonjs/components/ReactionBottomSheets/ReactionListBottomSheet.js +150 -0
  25. package/lib/commonjs/components/ReactionBottomSheets/ReactionListBottomSheet.js.map +1 -0
  26. package/lib/commonjs/components/ReactionBottomSheets/ReactionUserListBottomSheet.js +276 -0
  27. package/lib/commonjs/components/ReactionBottomSheets/ReactionUserListBottomSheet.js.map +1 -0
  28. package/lib/commonjs/components/ReactionBottomSheets/index.js +19 -0
  29. package/lib/commonjs/components/ReactionBottomSheets/index.js.map +1 -0
  30. package/lib/commonjs/constants.js +3 -1
  31. package/lib/commonjs/constants.js.map +1 -1
  32. package/lib/commonjs/containers/GroupChannelPreviewContainer.js +4 -1
  33. package/lib/commonjs/containers/GroupChannelPreviewContainer.js.map +1 -1
  34. package/lib/commonjs/containers/SendbirdUIKitContainer.js +118 -78
  35. package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
  36. package/lib/commonjs/contexts/ReactionCtx.js +107 -0
  37. package/lib/commonjs/contexts/ReactionCtx.js.map +1 -0
  38. package/lib/commonjs/contexts/SendbirdChatCtx.js +18 -6
  39. package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
  40. package/lib/commonjs/contexts/UserProfileCtx.js +9 -0
  41. package/lib/commonjs/contexts/UserProfileCtx.js.map +1 -1
  42. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/EditInput.js +33 -37
  43. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/EditInput.js.map +1 -1
  44. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js +28 -11
  45. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -1
  46. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/index.js +120 -31
  47. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/index.js.map +1 -1
  48. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +31 -12
  49. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  50. package/lib/commonjs/domain/groupChannel/component/GroupChannelSuggestedMentionList.js +210 -0
  51. package/lib/commonjs/domain/groupChannel/component/GroupChannelSuggestedMentionList.js.map +1 -0
  52. package/lib/commonjs/domain/groupChannel/index.js +8 -0
  53. package/lib/commonjs/domain/groupChannel/index.js.map +1 -1
  54. package/lib/commonjs/domain/groupChannel/module/createGroupChannelModule.js +4 -0
  55. package/lib/commonjs/domain/groupChannel/module/createGroupChannelModule.js.map +1 -1
  56. package/lib/commonjs/domain/groupChannel/module/moduleContext.js +4 -4
  57. package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -1
  58. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  59. package/lib/commonjs/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersList.js +3 -2
  60. package/lib/commonjs/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersList.js.map +1 -1
  61. package/lib/commonjs/domain/groupChannelList/component/GroupChannelListList.js +2 -1
  62. package/lib/commonjs/domain/groupChannelList/component/GroupChannelListList.js.map +1 -1
  63. package/lib/commonjs/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersList.js +2 -1
  64. package/lib/commonjs/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersList.js.map +1 -1
  65. package/lib/commonjs/domain/groupChannelNotifications/component/GroupChannelNotificationsHeader.js +39 -0
  66. package/lib/commonjs/domain/groupChannelNotifications/component/GroupChannelNotificationsHeader.js.map +1 -0
  67. package/lib/commonjs/domain/groupChannelNotifications/component/GroupChannelNotificationsView.js +140 -0
  68. package/lib/commonjs/domain/groupChannelNotifications/component/GroupChannelNotificationsView.js.map +1 -0
  69. package/lib/commonjs/domain/groupChannelNotifications/index.js +46 -0
  70. package/lib/commonjs/domain/groupChannelNotifications/index.js.map +1 -0
  71. package/lib/commonjs/domain/groupChannelNotifications/module/createGroupChannelNotificationsModule.js +33 -0
  72. package/lib/commonjs/domain/groupChannelNotifications/module/createGroupChannelNotificationsModule.js.map +1 -0
  73. package/lib/commonjs/domain/groupChannelNotifications/module/moduleContext.js +45 -0
  74. package/lib/commonjs/domain/groupChannelNotifications/module/moduleContext.js.map +1 -0
  75. package/lib/commonjs/domain/groupChannelNotifications/types.js +6 -0
  76. package/lib/commonjs/domain/groupChannelNotifications/types.js.map +1 -0
  77. package/lib/commonjs/domain/groupChannelOperators/component/GroupChannelOperatorsList.js +2 -1
  78. package/lib/commonjs/domain/groupChannelOperators/component/GroupChannelOperatorsList.js.map +1 -1
  79. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +49 -6
  80. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
  81. package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js +9 -14
  82. package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js.map +1 -1
  83. package/lib/commonjs/domain/groupChannelSettings/types.js.map +1 -1
  84. package/lib/commonjs/domain/groupChannelUserList/types.js.map +1 -1
  85. package/lib/commonjs/domain/userList/component/UserListList.js +4 -1
  86. package/lib/commonjs/domain/userList/component/UserListList.js.map +1 -1
  87. package/lib/commonjs/domain/userList/module/createUserListModule.js.map +1 -1
  88. package/lib/commonjs/fragments/createGroupChannelCreateFragment.js.map +1 -1
  89. package/lib/commonjs/fragments/createGroupChannelFragment.js +11 -4
  90. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  91. package/lib/commonjs/fragments/createGroupChannelInviteFragment.js.map +1 -1
  92. package/lib/commonjs/fragments/createGroupChannelNotificationsFragment.js +34 -0
  93. package/lib/commonjs/fragments/createGroupChannelNotificationsFragment.js.map +1 -0
  94. package/lib/commonjs/fragments/createGroupChannelSettingsFragment.js +3 -1
  95. package/lib/commonjs/fragments/createGroupChannelSettingsFragment.js.map +1 -1
  96. package/lib/commonjs/hooks/useConnection.js +3 -0
  97. package/lib/commonjs/hooks/useConnection.js.map +1 -1
  98. package/lib/commonjs/hooks/useContext.js +11 -1
  99. package/lib/commonjs/hooks/useContext.js.map +1 -1
  100. package/lib/commonjs/hooks/useKeyboardStatus.js +93 -0
  101. package/lib/commonjs/hooks/useKeyboardStatus.js.map +1 -0
  102. package/lib/commonjs/hooks/useMentionSuggestion.js +110 -0
  103. package/lib/commonjs/hooks/useMentionSuggestion.js.map +1 -0
  104. package/lib/commonjs/hooks/useMentionTextInput.js +139 -0
  105. package/lib/commonjs/hooks/useMentionTextInput.js.map +1 -0
  106. package/lib/commonjs/index.js +95 -40
  107. package/lib/commonjs/index.js.map +1 -1
  108. package/lib/commonjs/libs/EmojiManager.js +100 -0
  109. package/lib/commonjs/libs/EmojiManager.js.map +1 -0
  110. package/lib/commonjs/libs/MentionConfig.js +47 -0
  111. package/lib/commonjs/libs/MentionConfig.js.map +1 -0
  112. package/lib/commonjs/libs/MentionManager.js +235 -0
  113. package/lib/commonjs/libs/MentionManager.js.map +1 -0
  114. package/lib/commonjs/localization/StringSet.type.js +17 -5
  115. package/lib/commonjs/localization/StringSet.type.js.map +1 -1
  116. package/lib/commonjs/types.js.map +1 -1
  117. package/lib/commonjs/utils/common.js +19 -0
  118. package/lib/commonjs/utils/common.js.map +1 -0
  119. package/lib/commonjs/version.js +1 -1
  120. package/lib/commonjs/version.js.map +1 -1
  121. package/lib/module/components/ChatFlatList.js +3 -2
  122. package/lib/module/components/ChatFlatList.js.map +1 -1
  123. package/lib/module/components/MessageRenderer/FileMessage/BaseFileMessage.js +11 -6
  124. package/lib/module/components/MessageRenderer/FileMessage/BaseFileMessage.js.map +1 -1
  125. package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js +12 -2
  126. package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +1 -1
  127. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js +25 -10
  128. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +1 -1
  129. package/lib/module/components/MessageRenderer/UserMessage/BaseUserMessage.js +86 -12
  130. package/lib/module/components/MessageRenderer/UserMessage/BaseUserMessage.js.map +1 -1
  131. package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js +101 -17
  132. package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +1 -1
  133. package/lib/module/components/MessageRenderer/UserMessage/index.js.map +1 -1
  134. package/lib/module/components/MessageRenderer/index.js +21 -4
  135. package/lib/module/components/MessageRenderer/index.js.map +1 -1
  136. package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js +132 -0
  137. package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -0
  138. package/lib/module/components/ReactionAddons/MessageReactionAddon.js +118 -0
  139. package/lib/module/components/ReactionAddons/MessageReactionAddon.js.map +1 -0
  140. package/lib/module/components/ReactionAddons/ReactionRoundedButton.js +74 -0
  141. package/lib/module/components/ReactionAddons/ReactionRoundedButton.js.map +1 -0
  142. package/lib/module/components/ReactionAddons/index.js +7 -0
  143. package/lib/module/components/ReactionAddons/index.js.map +1 -0
  144. package/lib/module/components/ReactionBottomSheets/ReactionListBottomSheet.js +135 -0
  145. package/lib/module/components/ReactionBottomSheets/ReactionListBottomSheet.js.map +1 -0
  146. package/lib/module/components/ReactionBottomSheets/ReactionUserListBottomSheet.js +259 -0
  147. package/lib/module/components/ReactionBottomSheets/ReactionUserListBottomSheet.js.map +1 -0
  148. package/lib/module/components/ReactionBottomSheets/index.js +7 -0
  149. package/lib/module/components/ReactionBottomSheets/index.js.map +1 -0
  150. package/lib/module/constants.js +1 -0
  151. package/lib/module/constants.js.map +1 -1
  152. package/lib/module/containers/GroupChannelPreviewContainer.js +4 -1
  153. package/lib/module/containers/GroupChannelPreviewContainer.js.map +1 -1
  154. package/lib/module/containers/SendbirdUIKitContainer.js +116 -80
  155. package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
  156. package/lib/module/contexts/ReactionCtx.js +85 -0
  157. package/lib/module/contexts/ReactionCtx.js.map +1 -0
  158. package/lib/module/contexts/SendbirdChatCtx.js +18 -6
  159. package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
  160. package/lib/module/contexts/UserProfileCtx.js +7 -0
  161. package/lib/module/contexts/UserProfileCtx.js.map +1 -1
  162. package/lib/module/domain/groupChannel/component/GroupChannelInput/EditInput.js +34 -39
  163. package/lib/module/domain/groupChannel/component/GroupChannelInput/EditInput.js.map +1 -1
  164. package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js +24 -13
  165. package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -1
  166. package/lib/module/domain/groupChannel/component/GroupChannelInput/index.js +117 -33
  167. package/lib/module/domain/groupChannel/component/GroupChannelInput/index.js.map +1 -1
  168. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +32 -14
  169. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  170. package/lib/module/domain/groupChannel/component/GroupChannelSuggestedMentionList.js +188 -0
  171. package/lib/module/domain/groupChannel/component/GroupChannelSuggestedMentionList.js.map +1 -0
  172. package/lib/module/domain/groupChannel/index.js +1 -0
  173. package/lib/module/domain/groupChannel/index.js.map +1 -1
  174. package/lib/module/domain/groupChannel/module/createGroupChannelModule.js +3 -0
  175. package/lib/module/domain/groupChannel/module/createGroupChannelModule.js.map +1 -1
  176. package/lib/module/domain/groupChannel/module/moduleContext.js +4 -4
  177. package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
  178. package/lib/module/domain/groupChannel/types.js.map +1 -1
  179. package/lib/module/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersList.js +4 -3
  180. package/lib/module/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersList.js.map +1 -1
  181. package/lib/module/domain/groupChannelList/component/GroupChannelListList.js +3 -2
  182. package/lib/module/domain/groupChannelList/component/GroupChannelListList.js.map +1 -1
  183. package/lib/module/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersList.js +3 -2
  184. package/lib/module/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersList.js.map +1 -1
  185. package/lib/module/domain/groupChannelNotifications/component/GroupChannelNotificationsHeader.js +25 -0
  186. package/lib/module/domain/groupChannelNotifications/component/GroupChannelNotificationsHeader.js.map +1 -0
  187. package/lib/module/domain/groupChannelNotifications/component/GroupChannelNotificationsView.js +122 -0
  188. package/lib/module/domain/groupChannelNotifications/component/GroupChannelNotificationsView.js.map +1 -0
  189. package/lib/module/domain/groupChannelNotifications/index.js +5 -0
  190. package/lib/module/domain/groupChannelNotifications/index.js.map +1 -0
  191. package/lib/module/domain/groupChannelNotifications/module/createGroupChannelNotificationsModule.js +21 -0
  192. package/lib/module/domain/groupChannelNotifications/module/createGroupChannelNotificationsModule.js.map +1 -0
  193. package/lib/module/domain/groupChannelNotifications/module/moduleContext.js +25 -0
  194. package/lib/module/domain/groupChannelNotifications/module/moduleContext.js.map +1 -0
  195. package/lib/module/domain/groupChannelNotifications/types.js +2 -0
  196. package/lib/module/domain/groupChannelNotifications/types.js.map +1 -0
  197. package/lib/module/domain/groupChannelOperators/component/GroupChannelOperatorsList.js +3 -2
  198. package/lib/module/domain/groupChannelOperators/component/GroupChannelOperatorsList.js.map +1 -1
  199. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +46 -6
  200. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
  201. package/lib/module/domain/groupChannelSettings/module/moduleContext.js +10 -15
  202. package/lib/module/domain/groupChannelSettings/module/moduleContext.js.map +1 -1
  203. package/lib/module/domain/groupChannelSettings/types.js.map +1 -1
  204. package/lib/module/domain/groupChannelUserList/types.js.map +1 -1
  205. package/lib/module/domain/userList/component/UserListList.js +3 -1
  206. package/lib/module/domain/userList/component/UserListList.js.map +1 -1
  207. package/lib/module/domain/userList/module/createUserListModule.js.map +1 -1
  208. package/lib/module/fragments/createGroupChannelCreateFragment.js.map +1 -1
  209. package/lib/module/fragments/createGroupChannelFragment.js +11 -4
  210. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  211. package/lib/module/fragments/createGroupChannelInviteFragment.js.map +1 -1
  212. package/lib/module/fragments/createGroupChannelNotificationsFragment.js +22 -0
  213. package/lib/module/fragments/createGroupChannelNotificationsFragment.js.map +1 -0
  214. package/lib/module/fragments/createGroupChannelSettingsFragment.js +3 -1
  215. package/lib/module/fragments/createGroupChannelSettingsFragment.js.map +1 -1
  216. package/lib/module/hooks/useConnection.js +3 -0
  217. package/lib/module/hooks/useConnection.js.map +1 -1
  218. package/lib/module/hooks/useContext.js +6 -0
  219. package/lib/module/hooks/useContext.js.map +1 -1
  220. package/lib/module/hooks/useKeyboardStatus.js +75 -0
  221. package/lib/module/hooks/useKeyboardStatus.js.map +1 -0
  222. package/lib/module/hooks/useMentionSuggestion.js +100 -0
  223. package/lib/module/hooks/useMentionSuggestion.js.map +1 -0
  224. package/lib/module/hooks/useMentionTextInput.js +128 -0
  225. package/lib/module/hooks/useMentionTextInput.js.map +1 -0
  226. package/lib/module/index.js +8 -3
  227. package/lib/module/index.js.map +1 -1
  228. package/lib/module/libs/EmojiManager.js +90 -0
  229. package/lib/module/libs/EmojiManager.js.map +1 -0
  230. package/lib/module/libs/MentionConfig.js +39 -0
  231. package/lib/module/libs/MentionConfig.js.map +1 -0
  232. package/lib/module/libs/MentionManager.js +223 -0
  233. package/lib/module/libs/MentionManager.js.map +1 -0
  234. package/lib/module/localization/StringSet.type.js +18 -6
  235. package/lib/module/localization/StringSet.type.js.map +1 -1
  236. package/lib/module/types.js.map +1 -1
  237. package/lib/module/utils/common.js +7 -0
  238. package/lib/module/utils/common.js.map +1 -0
  239. package/lib/module/version.js +1 -1
  240. package/lib/module/version.js.map +1 -1
  241. package/lib/typescript/__template__/types.d.ts +3 -3
  242. package/lib/typescript/src/components/ChannelCover.d.ts +1 -1
  243. package/lib/typescript/src/components/ChatFlatList.d.ts +1 -1
  244. package/lib/typescript/src/components/FileViewer.d.ts +1 -1
  245. package/lib/typescript/src/components/MessageRenderer/AdminMessage/index.d.ts +1 -1
  246. package/lib/typescript/src/components/MessageRenderer/FileMessage/BaseFileMessage.d.ts +2 -2
  247. package/lib/typescript/src/components/MessageRenderer/FileMessage/ImageFileMessage.d.ts +1 -1
  248. package/lib/typescript/src/components/MessageRenderer/FileMessage/VideoFileMessage.d.ts +1 -1
  249. package/lib/typescript/src/components/MessageRenderer/FileMessage/index.d.ts +11 -2
  250. package/lib/typescript/src/components/MessageRenderer/MessageDateSeparator.d.ts +1 -1
  251. package/lib/typescript/src/components/MessageRenderer/MessageIncomingAvatar.d.ts +1 -1
  252. package/lib/typescript/src/components/MessageRenderer/MessageIncomingSenderName.d.ts +1 -1
  253. package/lib/typescript/src/components/MessageRenderer/MessageOutgoingStatus.d.ts +1 -1
  254. package/lib/typescript/src/components/MessageRenderer/MessageTime.d.ts +1 -1
  255. package/lib/typescript/src/components/MessageRenderer/UnknownMessage/index.d.ts +1 -1
  256. package/lib/typescript/src/components/MessageRenderer/UserMessage/BaseUserMessage.d.ts +1 -1
  257. package/lib/typescript/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.d.ts +2 -2
  258. package/lib/typescript/src/components/MessageRenderer/UserMessage/index.d.ts +4 -1
  259. package/lib/typescript/src/components/MessageRenderer/index.d.ts +4 -3
  260. package/lib/typescript/src/components/NewMessagesButton.d.ts +1 -1
  261. package/lib/typescript/src/components/ReactionAddons/BottomSheetReactionAddon.d.ts +8 -0
  262. package/lib/typescript/src/components/ReactionAddons/MessageReactionAddon.d.ts +6 -0
  263. package/lib/typescript/src/components/ReactionAddons/ReactionRoundedButton.d.ts +14 -0
  264. package/lib/typescript/src/components/ReactionAddons/index.d.ts +11 -0
  265. package/lib/typescript/src/components/ReactionBottomSheets/ReactionListBottomSheet.d.ts +3 -0
  266. package/lib/typescript/src/components/ReactionBottomSheets/ReactionUserListBottomSheet.d.ts +3 -0
  267. package/lib/typescript/src/components/ReactionBottomSheets/index.d.ts +20 -0
  268. package/lib/typescript/src/components/ScrollToBottomButton.d.ts +1 -1
  269. package/lib/typescript/src/components/StatusComposition.d.ts +1 -1
  270. package/lib/typescript/src/components/TypedPlaceholder.d.ts +1 -1
  271. package/lib/typescript/src/components/UserActionBar.d.ts +1 -1
  272. package/lib/typescript/src/components/UserSelectableBar.d.ts +1 -1
  273. package/lib/typescript/src/constants.d.ts +1 -0
  274. package/lib/typescript/src/containers/GroupChannelPreviewContainer.d.ts +1 -1
  275. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +12 -3
  276. package/lib/typescript/src/contexts/LocalizationCtx.d.ts +2 -2
  277. package/lib/typescript/src/contexts/PlatformServiceCtx.d.ts +1 -1
  278. package/lib/typescript/src/contexts/ReactionCtx.d.ts +18 -0
  279. package/lib/typescript/src/contexts/SendbirdChatCtx.d.ts +10 -2
  280. package/lib/typescript/src/contexts/UserProfileCtx.d.ts +4 -4
  281. package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput/EditInput.d.ts +35 -7
  282. package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput/SendInput.d.ts +32 -5
  283. package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput/index.d.ts +19 -2
  284. package/lib/typescript/src/domain/groupChannel/component/GroupChannelSuggestedMentionList.d.ts +3 -0
  285. package/lib/typescript/src/domain/groupChannel/index.d.ts +1 -0
  286. package/lib/typescript/src/domain/groupChannel/module/createGroupChannelModule.d.ts +1 -1
  287. package/lib/typescript/src/domain/groupChannel/types.d.ts +24 -7
  288. package/lib/typescript/src/domain/groupChannelBannedUsers/types.d.ts +3 -3
  289. package/lib/typescript/src/domain/groupChannelList/types.d.ts +2 -2
  290. package/lib/typescript/src/domain/groupChannelModeration/types.d.ts +3 -3
  291. package/lib/typescript/src/domain/groupChannelMutedMembers/types.d.ts +3 -3
  292. package/lib/typescript/src/domain/groupChannelNotifications/component/GroupChannelNotificationsHeader.d.ts +3 -0
  293. package/lib/typescript/src/domain/groupChannelNotifications/component/GroupChannelNotificationsView.d.ts +2 -0
  294. package/lib/typescript/src/domain/groupChannelNotifications/index.d.ts +4 -0
  295. package/lib/typescript/src/domain/groupChannelNotifications/module/createGroupChannelNotificationsModule.d.ts +3 -0
  296. package/lib/typescript/src/domain/groupChannelNotifications/module/moduleContext.d.ts +3 -0
  297. package/lib/typescript/src/domain/groupChannelNotifications/types.d.ts +33 -0
  298. package/lib/typescript/src/domain/groupChannelOperators/types.d.ts +3 -3
  299. package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.d.ts +1 -1
  300. package/lib/typescript/src/domain/groupChannelSettings/types.d.ts +3 -1
  301. package/lib/typescript/src/domain/groupChannelUserList/types.d.ts +6 -6
  302. package/lib/typescript/src/domain/userList/component/UserListList.d.ts +2 -1
  303. package/lib/typescript/src/domain/userList/module/createUserListModule.d.ts +2 -1
  304. package/lib/typescript/src/fragments/createGroupChannelCreateFragment.d.ts +1 -1
  305. package/lib/typescript/src/fragments/createGroupChannelInviteFragment.d.ts +1 -1
  306. package/lib/typescript/src/fragments/createGroupChannelNotificationsFragment.d.ts +3 -0
  307. package/lib/typescript/src/hooks/useConnection.d.ts +1 -1
  308. package/lib/typescript/src/hooks/useContext.d.ts +4 -0
  309. package/lib/typescript/src/hooks/useKeyboardStatus.d.ts +6 -0
  310. package/lib/typescript/src/hooks/useMentionSuggestion.d.ts +17 -0
  311. package/lib/typescript/src/hooks/useMentionTextInput.d.ts +18 -0
  312. package/lib/typescript/src/index.d.ts +7 -2
  313. package/lib/typescript/src/libs/EmojiManager.d.ts +16 -0
  314. package/lib/typescript/src/libs/MentionConfig.d.ts +24 -0
  315. package/lib/typescript/src/libs/MentionManager.d.ts +61 -0
  316. package/lib/typescript/src/localization/StringSet.type.d.ts +16 -2
  317. package/lib/typescript/src/platform/createMediaService.expo.d.ts +1 -1
  318. package/lib/typescript/src/platform/createMediaService.native.d.ts +1 -1
  319. package/lib/typescript/src/platform/dynamicModule.d.ts +1 -1
  320. package/lib/typescript/src/platform/types.d.ts +5 -5
  321. package/lib/typescript/src/types.d.ts +13 -4
  322. package/lib/typescript/src/utils/common.d.ts +1 -0
  323. package/lib/typescript/src/version.d.ts +1 -1
  324. package/package.json +6 -6
  325. package/src/components/ChatFlatList.tsx +2 -1
  326. package/src/components/MessageRenderer/FileMessage/BaseFileMessage.tsx +17 -12
  327. package/src/components/MessageRenderer/FileMessage/ImageFileMessage.tsx +25 -18
  328. package/src/components/MessageRenderer/FileMessage/VideoFileMessage.tsx +20 -10
  329. package/src/components/MessageRenderer/UserMessage/BaseUserMessage.tsx +82 -14
  330. package/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.tsx +135 -61
  331. package/src/components/MessageRenderer/UserMessage/index.tsx +8 -1
  332. package/src/components/MessageRenderer/index.tsx +39 -7
  333. package/src/components/ReactionAddons/BottomSheetReactionAddon.tsx +106 -0
  334. package/src/components/ReactionAddons/MessageReactionAddon.tsx +123 -0
  335. package/src/components/ReactionAddons/ReactionRoundedButton.tsx +71 -0
  336. package/src/components/ReactionAddons/index.tsx +7 -0
  337. package/src/components/ReactionBottomSheets/ReactionListBottomSheet.tsx +113 -0
  338. package/src/components/ReactionBottomSheets/ReactionUserListBottomSheet.tsx +249 -0
  339. package/src/components/ReactionBottomSheets/index.tsx +24 -0
  340. package/src/constants.ts +2 -0
  341. package/src/containers/GroupChannelPreviewContainer.tsx +3 -1
  342. package/src/containers/SendbirdUIKitContainer.tsx +141 -83
  343. package/src/contexts/ReactionCtx.tsx +102 -0
  344. package/src/contexts/SendbirdChatCtx.tsx +24 -2
  345. package/src/contexts/UserProfileCtx.tsx +9 -0
  346. package/src/domain/groupChannel/component/GroupChannelInput/EditInput.tsx +56 -30
  347. package/src/domain/groupChannel/component/GroupChannelInput/SendInput.tsx +48 -19
  348. package/src/domain/groupChannel/component/GroupChannelInput/index.tsx +137 -43
  349. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +27 -10
  350. package/src/domain/groupChannel/component/GroupChannelSuggestedMentionList.tsx +173 -0
  351. package/src/domain/groupChannel/index.ts +1 -0
  352. package/src/domain/groupChannel/module/createGroupChannelModule.tsx +12 -1
  353. package/src/domain/groupChannel/module/moduleContext.tsx +4 -4
  354. package/src/domain/groupChannel/types.ts +28 -5
  355. package/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersList.tsx +3 -2
  356. package/src/domain/groupChannelList/component/GroupChannelListList.tsx +2 -1
  357. package/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersList.tsx +2 -1
  358. package/src/domain/groupChannelNotifications/component/GroupChannelNotificationsHeader.tsx +14 -0
  359. package/src/domain/groupChannelNotifications/component/GroupChannelNotificationsView.tsx +128 -0
  360. package/src/domain/groupChannelNotifications/index.ts +4 -0
  361. package/src/domain/groupChannelNotifications/module/createGroupChannelNotificationsModule.tsx +15 -0
  362. package/src/domain/groupChannelNotifications/module/moduleContext.tsx +31 -0
  363. package/src/domain/groupChannelNotifications/types.ts +38 -0
  364. package/src/domain/groupChannelOperators/component/GroupChannelOperatorsList.tsx +2 -1
  365. package/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.tsx +42 -3
  366. package/src/domain/groupChannelSettings/module/moduleContext.tsx +9 -12
  367. package/src/domain/groupChannelSettings/types.ts +2 -0
  368. package/src/domain/groupChannelUserList/types.ts +7 -2
  369. package/src/domain/userList/component/UserListList.tsx +5 -1
  370. package/src/domain/userList/module/createUserListModule.tsx +3 -1
  371. package/src/fragments/createGroupChannelCreateFragment.tsx +8 -2
  372. package/src/fragments/createGroupChannelFragment.tsx +19 -6
  373. package/src/fragments/createGroupChannelInviteFragment.tsx +2 -2
  374. package/src/fragments/createGroupChannelNotificationsFragment.tsx +27 -0
  375. package/src/fragments/createGroupChannelSettingsFragment.tsx +2 -0
  376. package/src/hooks/useConnection.ts +3 -1
  377. package/src/hooks/useContext.ts +7 -0
  378. package/src/hooks/useKeyboardStatus.ts +54 -0
  379. package/src/hooks/useMentionSuggestion.ts +106 -0
  380. package/src/hooks/useMentionTextInput.ts +139 -0
  381. package/src/index.ts +13 -2
  382. package/src/libs/EmojiManager.ts +80 -0
  383. package/src/libs/MentionConfig.ts +40 -0
  384. package/src/libs/MentionManager.tsx +240 -0
  385. package/src/localization/StringSet.type.ts +38 -8
  386. package/src/types.ts +12 -0
  387. package/src/utils/common.ts +8 -0
  388. package/src/version.ts +1 -1
@@ -7,10 +7,13 @@ export const SendbirdChatProvider = _ref => {
7
7
  let {
8
8
  children,
9
9
  sdkInstance,
10
+ emojiManager,
11
+ mentionManager,
10
12
  enableAutoPushTokenRegistration,
11
13
  enableChannelListMessageReceiptStatus,
12
14
  enableChannelListTypingIndicator,
13
- enableUseUserIdForNickname
15
+ enableUseUserIdForNickname,
16
+ enableUserMention
14
17
  } = _ref;
15
18
  const [currentUser, _setCurrentUser] = useState();
16
19
  const forceUpdate = useForceUpdate();
@@ -24,11 +27,17 @@ export const SendbirdChatProvider = _ref => {
24
27
  const updateCurrentUserInfo = useCallback(async (nickname, profile) => {
25
28
  let user = currentUser;
26
29
  if (!user) throw new Error('Current user is not defined, please connect using `useConnection()` hook first');
27
- const params = {
28
- nickname
29
- };
30
+ const params = {};
31
+
32
+ if (!nickname) {
33
+ params.nickname = user.nickname;
34
+ } else {
35
+ params.nickname = nickname;
36
+ }
30
37
 
31
- if (typeof profile === 'string') {
38
+ if (!profile) {
39
+ params.profileUrl = user.profileUrl;
40
+ } else if (typeof profile === 'string') {
32
41
  params.profileUrl = profile;
33
42
  } else if (typeof profile === 'object') {
34
43
  params.profileImage = profile;
@@ -54,6 +63,8 @@ export const SendbirdChatProvider = _ref => {
54
63
  }, [sdkInstance]);
55
64
  const value = {
56
65
  sdk: sdkInstance,
66
+ emojiManager,
67
+ mentionManager,
57
68
  currentUser,
58
69
  setCurrentUser,
59
70
  updateCurrentUserInfo,
@@ -62,7 +73,8 @@ export const SendbirdChatProvider = _ref => {
62
73
  autoPushTokenRegistrationEnabled: enableAutoPushTokenRegistration,
63
74
  channelListTypingIndicatorEnabled: enableChannelListTypingIndicator,
64
75
  channelListMessageReceiptStatusEnabled: enableChannelListMessageReceiptStatus,
65
- useUserIdForNicknameEnabled: enableUseUserIdForNickname
76
+ useUserIdForNicknameEnabled: enableUseUserIdForNickname,
77
+ userMentionEnabled: enableUserMention
66
78
  }
67
79
  };
68
80
  return /*#__PURE__*/React.createElement(SendbirdChatContext.Provider, {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useState","AppState","useAppFeatures","confirmAndMarkAsDelivered","useForceUpdate","SendbirdChatContext","createContext","SendbirdChatProvider","children","sdkInstance","enableAutoPushTokenRegistration","enableChannelListMessageReceiptStatus","enableChannelListTypingIndicator","enableUseUserIdForNickname","currentUser","_setCurrentUser","forceUpdate","appFeatures","setCurrentUser","user","updateCurrentUserInfo","nickname","profile","Error","params","profileUrl","profileImage","markAsDeliveredWithChannel","channel","deliveryReceiptEnabled","listener","status","connectionState","setForegroundState","setBackgroundState","subscriber","addEventListener","remove","value","sdk","features","autoPushTokenRegistrationEnabled","channelListTypingIndicatorEnabled","channelListMessageReceiptStatusEnabled","useUserIdForNicknameEnabled"],"sources":["SendbirdChatCtx.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\nimport { AppState, AppStateStatus } from 'react-native';\n\nimport { useAppFeatures } from '@sendbird/uikit-chat-hooks';\nimport type {\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdUser,\n SendbirdUserUpdateParams,\n} from '@sendbird/uikit-utils';\nimport { confirmAndMarkAsDelivered, useForceUpdate } from '@sendbird/uikit-utils';\n\nimport type { FileType } from '../platform/types';\n\nexport interface UIKitFeaturesInSendbirdChatContext {\n enableAutoPushTokenRegistration: boolean;\n enableChannelListTypingIndicator: boolean;\n enableChannelListMessageReceiptStatus: boolean;\n enableUseUserIdForNickname: boolean;\n}\n\ninterface Props extends UIKitFeaturesInSendbirdChatContext, React.PropsWithChildren {\n sdkInstance: SendbirdChatSDK;\n}\n\ntype Context = {\n sdk: SendbirdChatSDK;\n currentUser?: SendbirdUser;\n setCurrentUser: React.Dispatch<React.SetStateAction<SendbirdUser | undefined>>;\n\n // helper functions\n updateCurrentUserInfo: (nickname?: string, profile?: string | FileType) => Promise<SendbirdUser>;\n markAsDeliveredWithChannel: (channel: SendbirdGroupChannel) => void;\n\n features: {\n // UIKit features\n autoPushTokenRegistrationEnabled: boolean;\n channelListTypingIndicatorEnabled: boolean;\n channelListMessageReceiptStatusEnabled: boolean;\n useUserIdForNicknameEnabled: boolean;\n\n // Sendbird application features\n deliveryReceiptEnabled: boolean;\n broadcastChannelEnabled: boolean;\n superGroupChannelEnabled: boolean;\n reactionEnabled: boolean;\n };\n};\n\nexport const SendbirdChatContext = React.createContext<Context | null>(null);\nexport const SendbirdChatProvider = ({\n children,\n sdkInstance,\n enableAutoPushTokenRegistration,\n enableChannelListMessageReceiptStatus,\n enableChannelListTypingIndicator,\n enableUseUserIdForNickname,\n}: Props) => {\n const [currentUser, _setCurrentUser] = useState<SendbirdUser>();\n const forceUpdate = useForceUpdate();\n const appFeatures = useAppFeatures(sdkInstance);\n\n const setCurrentUser: Context['setCurrentUser'] = useCallback((user) => {\n // NOTE: Sendbird SDK handle User object is always same object, so force update after setCurrentUser\n _setCurrentUser(user);\n forceUpdate();\n }, []);\n\n const updateCurrentUserInfo: Context['updateCurrentUserInfo'] = useCallback(\n async (nickname, profile) => {\n let user = currentUser;\n\n if (!user) throw new Error('Current user is not defined, please connect using `useConnection()` hook first');\n\n const params: SendbirdUserUpdateParams = { nickname };\n\n if (typeof profile === 'string') {\n params.profileUrl = profile;\n } else if (typeof profile === 'object') {\n params.profileImage = profile;\n } else {\n throw new Error(`Cannot update profile, not supported profile type(${typeof profile})`);\n }\n\n user = await sdkInstance.updateCurrentUserInfo(params);\n\n setCurrentUser(user);\n return user;\n },\n [sdkInstance, currentUser, setCurrentUser],\n );\n\n const markAsDeliveredWithChannel: Context['markAsDeliveredWithChannel'] = useCallback(\n (channel: SendbirdGroupChannel) => {\n if (appFeatures.deliveryReceiptEnabled) confirmAndMarkAsDelivered([channel]);\n },\n [sdkInstance, appFeatures.deliveryReceiptEnabled],\n );\n\n useEffect(() => {\n const listener = (status: AppStateStatus) => {\n // 'active' | 'background' | 'inactive' | 'unknown' | 'extension';\n if (status === 'active') sdkInstance.connectionState === 'CLOSED' && sdkInstance.setForegroundState();\n else if (status === 'background') sdkInstance.connectionState === 'OPEN' && sdkInstance.setBackgroundState();\n };\n\n const subscriber = AppState.addEventListener('change', listener);\n return () => subscriber.remove();\n }, [sdkInstance]);\n\n const value: Context = {\n sdk: sdkInstance,\n currentUser,\n setCurrentUser,\n\n updateCurrentUserInfo,\n markAsDeliveredWithChannel,\n\n features: {\n ...appFeatures,\n autoPushTokenRegistrationEnabled: enableAutoPushTokenRegistration,\n channelListTypingIndicatorEnabled: enableChannelListTypingIndicator,\n channelListMessageReceiptStatusEnabled: enableChannelListMessageReceiptStatus,\n useUserIdForNicknameEnabled: enableUseUserIdForNickname,\n },\n };\n\n return <SendbirdChatContext.Provider value={value}>{children}</SendbirdChatContext.Provider>;\n};\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,EAAwCC,QAAxC,QAAwD,OAAxD;AACA,SAASC,QAAT,QAAyC,cAAzC;AAEA,SAASC,cAAT,QAA+B,4BAA/B;AAOA,SAASC,yBAAT,EAAoCC,cAApC,QAA0D,uBAA1D;AAuCA,OAAO,MAAMC,mBAAmB,gBAAGR,KAAK,CAACS,aAAN,CAAoC,IAApC,CAA5B;AACP,OAAO,MAAMC,oBAAoB,GAAG,QAOvB;EAAA,IAPwB;IACnCC,QADmC;IAEnCC,WAFmC;IAGnCC,+BAHmC;IAInCC,qCAJmC;IAKnCC,gCALmC;IAMnCC;EANmC,CAOxB;EACX,MAAM,CAACC,WAAD,EAAcC,eAAd,IAAiCf,QAAQ,EAA/C;EACA,MAAMgB,WAAW,GAAGZ,cAAc,EAAlC;EACA,MAAMa,WAAW,GAAGf,cAAc,CAACO,WAAD,CAAlC;EAEA,MAAMS,cAAyC,GAAGpB,WAAW,CAAEqB,IAAD,IAAU;IACtE;IACAJ,eAAe,CAACI,IAAD,CAAf;;IACAH,WAAW;EACZ,CAJ4D,EAI1D,EAJ0D,CAA7D;EAMA,MAAMI,qBAAuD,GAAGtB,WAAW,CACzE,OAAOuB,QAAP,EAAiBC,OAAjB,KAA6B;IAC3B,IAAIH,IAAI,GAAGL,WAAX;IAEA,IAAI,CAACK,IAAL,EAAW,MAAM,IAAII,KAAJ,CAAU,gFAAV,CAAN;IAEX,MAAMC,MAAgC,GAAG;MAAEH;IAAF,CAAzC;;IAEA,IAAI,OAAOC,OAAP,KAAmB,QAAvB,EAAiC;MAC/BE,MAAM,CAACC,UAAP,GAAoBH,OAApB;IACD,CAFD,MAEO,IAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;MACtCE,MAAM,CAACE,YAAP,GAAsBJ,OAAtB;IACD,CAFM,MAEA;MACL,MAAM,IAAIC,KAAJ,CAAW,qDAAoD,OAAOD,OAAQ,GAA9E,CAAN;IACD;;IAEDH,IAAI,GAAG,MAAMV,WAAW,CAACW,qBAAZ,CAAkCI,MAAlC,CAAb;IAEAN,cAAc,CAACC,IAAD,CAAd;IACA,OAAOA,IAAP;EACD,CApBwE,EAqBzE,CAACV,WAAD,EAAcK,WAAd,EAA2BI,cAA3B,CArByE,CAA3E;EAwBA,MAAMS,0BAAiE,GAAG7B,WAAW,CAClF8B,OAAD,IAAmC;IACjC,IAAIX,WAAW,CAACY,sBAAhB,EAAwC1B,yBAAyB,CAAC,CAACyB,OAAD,CAAD,CAAzB;EACzC,CAHkF,EAInF,CAACnB,WAAD,EAAcQ,WAAW,CAACY,sBAA1B,CAJmF,CAArF;EAOA9B,SAAS,CAAC,MAAM;IACd,MAAM+B,QAAQ,GAAIC,MAAD,IAA4B;MAC3C;MACA,IAAIA,MAAM,KAAK,QAAf,EAAyBtB,WAAW,CAACuB,eAAZ,KAAgC,QAAhC,IAA4CvB,WAAW,CAACwB,kBAAZ,EAA5C,CAAzB,KACK,IAAIF,MAAM,KAAK,YAAf,EAA6BtB,WAAW,CAACuB,eAAZ,KAAgC,MAAhC,IAA0CvB,WAAW,CAACyB,kBAAZ,EAA1C;IACnC,CAJD;;IAMA,MAAMC,UAAU,GAAGlC,QAAQ,CAACmC,gBAAT,CAA0B,QAA1B,EAAoCN,QAApC,CAAnB;IACA,OAAO,MAAMK,UAAU,CAACE,MAAX,EAAb;EACD,CATQ,EASN,CAAC5B,WAAD,CATM,CAAT;EAWA,MAAM6B,KAAc,GAAG;IACrBC,GAAG,EAAE9B,WADgB;IAErBK,WAFqB;IAGrBI,cAHqB;IAKrBE,qBALqB;IAMrBO,0BANqB;IAQrBa,QAAQ,EAAE,EACR,GAAGvB,WADK;MAERwB,gCAAgC,EAAE/B,+BAF1B;MAGRgC,iCAAiC,EAAE9B,gCAH3B;MAIR+B,sCAAsC,EAAEhC,qCAJhC;MAKRiC,2BAA2B,EAAE/B;IALrB;EARW,CAAvB;EAiBA,oBAAO,oBAAC,mBAAD,CAAqB,QAArB;IAA8B,KAAK,EAAEyB;EAArC,GAA6C9B,QAA7C,CAAP;AACD,CA9EM"}
1
+ {"version":3,"names":["React","useCallback","useEffect","useState","AppState","useAppFeatures","confirmAndMarkAsDelivered","useForceUpdate","SendbirdChatContext","createContext","SendbirdChatProvider","children","sdkInstance","emojiManager","mentionManager","enableAutoPushTokenRegistration","enableChannelListMessageReceiptStatus","enableChannelListTypingIndicator","enableUseUserIdForNickname","enableUserMention","currentUser","_setCurrentUser","forceUpdate","appFeatures","setCurrentUser","user","updateCurrentUserInfo","nickname","profile","Error","params","profileUrl","profileImage","markAsDeliveredWithChannel","channel","deliveryReceiptEnabled","listener","status","connectionState","setForegroundState","setBackgroundState","subscriber","addEventListener","remove","value","sdk","features","autoPushTokenRegistrationEnabled","channelListTypingIndicatorEnabled","channelListMessageReceiptStatusEnabled","useUserIdForNicknameEnabled","userMentionEnabled"],"sources":["SendbirdChatCtx.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\nimport { AppState, AppStateStatus } from 'react-native';\n\nimport { useAppFeatures } from '@sendbird/uikit-chat-hooks';\nimport type {\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdUser,\n SendbirdUserUpdateParams,\n} from '@sendbird/uikit-utils';\nimport { confirmAndMarkAsDelivered, useForceUpdate } from '@sendbird/uikit-utils';\n\nimport type EmojiManager from '../libs/EmojiManager';\nimport type MentionManager from '../libs/MentionManager';\nimport type { FileType } from '../platform/types';\n\nexport interface UIKitFeaturesInSendbirdChatContext {\n enableAutoPushTokenRegistration: boolean;\n enableChannelListTypingIndicator: boolean;\n enableChannelListMessageReceiptStatus: boolean;\n enableUseUserIdForNickname: boolean;\n enableUserMention: boolean;\n}\n\ninterface Props extends UIKitFeaturesInSendbirdChatContext, React.PropsWithChildren {\n sdkInstance: SendbirdChatSDK;\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n}\n\ntype Context = {\n sdk: SendbirdChatSDK;\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n currentUser?: SendbirdUser;\n setCurrentUser: React.Dispatch<React.SetStateAction<SendbirdUser | undefined>>;\n\n // helper functions\n updateCurrentUserInfo: (nickname?: string, profile?: string | FileType) => Promise<SendbirdUser>;\n markAsDeliveredWithChannel: (channel: SendbirdGroupChannel) => void;\n\n features: {\n // UIKit features\n autoPushTokenRegistrationEnabled: boolean;\n channelListTypingIndicatorEnabled: boolean;\n channelListMessageReceiptStatusEnabled: boolean;\n useUserIdForNicknameEnabled: boolean;\n userMentionEnabled: boolean;\n\n // Sendbird application features\n deliveryReceiptEnabled: boolean;\n broadcastChannelEnabled: boolean;\n superGroupChannelEnabled: boolean;\n reactionEnabled: boolean;\n };\n};\n\nexport const SendbirdChatContext = React.createContext<Context | null>(null);\nexport const SendbirdChatProvider = ({\n children,\n sdkInstance,\n emojiManager,\n mentionManager,\n enableAutoPushTokenRegistration,\n enableChannelListMessageReceiptStatus,\n enableChannelListTypingIndicator,\n enableUseUserIdForNickname,\n enableUserMention,\n}: Props) => {\n const [currentUser, _setCurrentUser] = useState<SendbirdUser>();\n const forceUpdate = useForceUpdate();\n const appFeatures = useAppFeatures(sdkInstance);\n\n const setCurrentUser: Context['setCurrentUser'] = useCallback((user) => {\n // NOTE: Sendbird SDK handle User object is always same object, so force update after setCurrentUser\n _setCurrentUser(user);\n forceUpdate();\n }, []);\n\n const updateCurrentUserInfo: Context['updateCurrentUserInfo'] = useCallback(\n async (nickname, profile) => {\n let user = currentUser;\n\n if (!user) throw new Error('Current user is not defined, please connect using `useConnection()` hook first');\n\n const params: SendbirdUserUpdateParams = {};\n\n if (!nickname) {\n params.nickname = user.nickname;\n } else {\n params.nickname = nickname;\n }\n\n if (!profile) {\n params.profileUrl = user.profileUrl;\n } else if (typeof profile === 'string') {\n params.profileUrl = profile;\n } else if (typeof profile === 'object') {\n params.profileImage = profile;\n } else {\n throw new Error(`Cannot update profile, not supported profile type(${typeof profile})`);\n }\n\n user = await sdkInstance.updateCurrentUserInfo(params);\n\n setCurrentUser(user);\n return user;\n },\n [sdkInstance, currentUser, setCurrentUser],\n );\n\n const markAsDeliveredWithChannel: Context['markAsDeliveredWithChannel'] = useCallback(\n (channel: SendbirdGroupChannel) => {\n if (appFeatures.deliveryReceiptEnabled) confirmAndMarkAsDelivered([channel]);\n },\n [sdkInstance, appFeatures.deliveryReceiptEnabled],\n );\n\n useEffect(() => {\n const listener = (status: AppStateStatus) => {\n // 'active' | 'background' | 'inactive' | 'unknown' | 'extension';\n if (status === 'active') sdkInstance.connectionState === 'CLOSED' && sdkInstance.setForegroundState();\n else if (status === 'background') sdkInstance.connectionState === 'OPEN' && sdkInstance.setBackgroundState();\n };\n\n const subscriber = AppState.addEventListener('change', listener);\n return () => subscriber.remove();\n }, [sdkInstance]);\n\n const value: Context = {\n sdk: sdkInstance,\n emojiManager,\n mentionManager,\n currentUser,\n setCurrentUser,\n\n updateCurrentUserInfo,\n markAsDeliveredWithChannel,\n\n features: {\n ...appFeatures,\n autoPushTokenRegistrationEnabled: enableAutoPushTokenRegistration,\n channelListTypingIndicatorEnabled: enableChannelListTypingIndicator,\n channelListMessageReceiptStatusEnabled: enableChannelListMessageReceiptStatus,\n useUserIdForNicknameEnabled: enableUseUserIdForNickname,\n userMentionEnabled: enableUserMention,\n },\n };\n\n return <SendbirdChatContext.Provider value={value}>{children}</SendbirdChatContext.Provider>;\n};\n"],"mappings":"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"}
@@ -4,6 +4,7 @@ import { Modal, OutlinedButton, ProfileCard, createStyleSheet } from '@sendbird/
4
4
  import { Logger, PASS, useIIFE } from '@sendbird/uikit-utils';
5
5
  import { LocalizationContext } from '../contexts/LocalizationCtx';
6
6
  import { SendbirdChatContext } from '../contexts/SendbirdChatCtx';
7
+ let WARN_onCreateChannel = false;
7
8
  export const UserProfileContext = /*#__PURE__*/React.createContext(null);
8
9
  export const UserProfileProvider = _ref => {
9
10
  let {
@@ -15,6 +16,12 @@ export const UserProfileProvider = _ref => {
15
16
  const localizationContext = useContext(LocalizationContext);
16
17
  if (!chatContext) throw new Error('SendbirdChatContext is not provided');
17
18
  if (!localizationContext) throw new Error('LocalizationContext is not provided');
19
+
20
+ if (__DEV__ && !WARN_onCreateChannel && !onCreateChannel) {
21
+ Logger.warn('You should pass `userProfile.onCreateChannel` prop to SendbirdUIKitContainer if want to use message in a user profile');
22
+ WARN_onCreateChannel = true;
23
+ }
24
+
18
25
  const {
19
26
  bottom,
20
27
  left,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useContext","useState","useSafeAreaInsets","Modal","OutlinedButton","ProfileCard","createStyleSheet","Logger","PASS","useIIFE","LocalizationContext","SendbirdChatContext","UserProfileContext","createContext","UserProfileProvider","children","onCreateChannel","onBeforeCreateChannel","chatContext","localizationContext","Error","bottom","left","right","user","setUser","visible","setVisible","show","hide","userProfileButton","isMe","currentUser","userId","undefined","onPressMessageButton","params","invitedUserIds","name","coverUrl","isDistinct","operatorUserIds","processedParams","channel","sdk","groupChannel","createChannel","warn","STRINGS","PROFILE_CARD","BUTTON_MESSAGE","Boolean","styles","modal","profileCardContainer","paddingLeft","paddingRight","paddingBottom","profileUrl","nickname","LABELS","USER_NO_NAME","BODY_LABEL","BODY","justifyContent","borderTopLeftRadius","borderTopRightRadius"],"sources":["UserProfileCtx.tsx"],"sourcesContent":["import React, { useCallback, useContext, useState } from 'react';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { Modal, OutlinedButton, ProfileCard, createStyleSheet } from '@sendbird/uikit-react-native-foundation';\nimport type {\n SendbirdGroupChannel,\n SendbirdGroupChannelCreateParams,\n SendbirdMember,\n SendbirdUser,\n} from '@sendbird/uikit-utils';\nimport { Logger, PASS, useIIFE } from '@sendbird/uikit-utils';\n\nimport { LocalizationContext } from '../contexts/LocalizationCtx';\nimport { SendbirdChatContext } from '../contexts/SendbirdChatCtx';\n\ntype OnCreateChannel = (channel: SendbirdGroupChannel) => void;\ntype OnBeforeCreateChannel = (\n channelParams: SendbirdGroupChannelCreateParams,\n users: SendbirdUser[] | SendbirdMember[],\n) => SendbirdGroupChannelCreateParams | Promise<SendbirdGroupChannelCreateParams>;\n\nexport type UserProfileContextType = {\n show(user: SendbirdUser | SendbirdMember): void;\n hide(): void;\n};\n\ntype Props = React.PropsWithChildren<{\n onCreateChannel?: OnCreateChannel;\n onBeforeCreateChannel?: OnBeforeCreateChannel;\n}>;\n\nexport const UserProfileContext = React.createContext<UserProfileContextType | null>(null);\nexport const UserProfileProvider = ({ children, onCreateChannel, onBeforeCreateChannel = PASS }: Props) => {\n const chatContext = useContext(SendbirdChatContext);\n const localizationContext = useContext(LocalizationContext);\n\n if (!chatContext) throw new Error('SendbirdChatContext is not provided');\n if (!localizationContext) throw new Error('LocalizationContext is not provided');\n\n const { bottom, left, right } = useSafeAreaInsets();\n\n const [user, setUser] = useState<SendbirdUser | SendbirdMember>();\n const [visible, setVisible] = useState(false);\n\n const show: UserProfileContextType['show'] = useCallback((user) => {\n setUser(user);\n setVisible(true);\n }, []);\n\n const hide: UserProfileContextType['hide'] = useCallback(() => {\n setVisible(false);\n }, []);\n\n const userProfileButton = useIIFE(() => {\n const isMe = chatContext.currentUser && user?.userId === chatContext.currentUser.userId;\n if (isMe) return undefined;\n\n const onPressMessageButton = async () => {\n if (user) {\n const params: SendbirdGroupChannelCreateParams = {\n invitedUserIds: [user.userId],\n name: '',\n coverUrl: '',\n isDistinct: false,\n };\n\n if (chatContext.currentUser) params.operatorUserIds = [chatContext.currentUser.userId];\n const processedParams = await onBeforeCreateChannel(params, [user]);\n\n hide();\n const channel = await chatContext.sdk.groupChannel.createChannel(processedParams);\n\n if (onCreateChannel) {\n onCreateChannel(channel);\n } else {\n Logger.warn(\n 'Please set `onCreateChannel` before message to user from profile card, see `userProfile` prop in the `SendbirdUIKitContainer` props',\n );\n }\n }\n };\n\n return (\n <OutlinedButton onPress={onPressMessageButton}>\n {localizationContext.STRINGS.PROFILE_CARD.BUTTON_MESSAGE}\n </OutlinedButton>\n );\n });\n\n return (\n <UserProfileContext.Provider value={{ show, hide }}>\n {children}\n <Modal\n type={'slide'}\n onClose={hide}\n onDismiss={() => setUser(undefined)}\n visible={visible && Boolean(user)}\n backgroundStyle={styles.modal}\n >\n {user && (\n <ProfileCard\n containerStyle={[\n styles.profileCardContainer,\n { paddingLeft: left, paddingRight: right, paddingBottom: bottom },\n ]}\n uri={user.profileUrl}\n username={user.nickname || localizationContext.STRINGS.LABELS.USER_NO_NAME}\n bodyLabel={localizationContext.STRINGS.PROFILE_CARD.BODY_LABEL}\n body={localizationContext.STRINGS.PROFILE_CARD.BODY(user)}\n button={userProfileButton}\n />\n )}\n </Modal>\n </UserProfileContext.Provider>\n );\n};\n\nconst styles = createStyleSheet({\n modal: {\n justifyContent: 'flex-end',\n },\n profileCardContainer: {\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useCallback","useContext","useState","useSafeAreaInsets","Modal","OutlinedButton","ProfileCard","createStyleSheet","Logger","PASS","useIIFE","LocalizationContext","SendbirdChatContext","WARN_onCreateChannel","UserProfileContext","createContext","UserProfileProvider","children","onCreateChannel","onBeforeCreateChannel","chatContext","localizationContext","Error","__DEV__","warn","bottom","left","right","user","setUser","visible","setVisible","show","hide","userProfileButton","isMe","currentUser","userId","undefined","onPressMessageButton","params","invitedUserIds","name","coverUrl","isDistinct","operatorUserIds","processedParams","channel","sdk","groupChannel","createChannel","STRINGS","PROFILE_CARD","BUTTON_MESSAGE","Boolean","styles","modal","profileCardContainer","paddingLeft","paddingRight","paddingBottom","profileUrl","nickname","LABELS","USER_NO_NAME","BODY_LABEL","BODY","justifyContent","borderTopLeftRadius","borderTopRightRadius"],"sources":["UserProfileCtx.tsx"],"sourcesContent":["import React, { useCallback, useContext, useState } from 'react';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { Modal, OutlinedButton, ProfileCard, createStyleSheet } from '@sendbird/uikit-react-native-foundation';\nimport type {\n SendbirdGroupChannel,\n SendbirdGroupChannelCreateParams,\n SendbirdMember,\n SendbirdUser,\n} from '@sendbird/uikit-utils';\nimport { Logger, PASS, useIIFE } from '@sendbird/uikit-utils';\n\nimport { LocalizationContext } from '../contexts/LocalizationCtx';\nimport { SendbirdChatContext } from '../contexts/SendbirdChatCtx';\n\ntype OnCreateChannel = (channel: SendbirdGroupChannel) => void;\ntype OnBeforeCreateChannel = (\n channelParams: SendbirdGroupChannelCreateParams,\n users: SendbirdUser[] | SendbirdMember[],\n) => SendbirdGroupChannelCreateParams | Promise<SendbirdGroupChannelCreateParams>;\n\nexport type UserProfileContextType = {\n show(user: SendbirdUser | SendbirdMember): void;\n hide(): void;\n};\n\ntype Props = React.PropsWithChildren<{\n onCreateChannel?: OnCreateChannel;\n onBeforeCreateChannel?: OnBeforeCreateChannel;\n}>;\n\nlet WARN_onCreateChannel = false;\n\nexport const UserProfileContext = React.createContext<UserProfileContextType | null>(null);\nexport const UserProfileProvider = ({ children, onCreateChannel, onBeforeCreateChannel = PASS }: Props) => {\n const chatContext = useContext(SendbirdChatContext);\n const localizationContext = useContext(LocalizationContext);\n\n if (!chatContext) throw new Error('SendbirdChatContext is not provided');\n if (!localizationContext) throw new Error('LocalizationContext is not provided');\n\n if (__DEV__ && !WARN_onCreateChannel && !onCreateChannel) {\n Logger.warn(\n 'You should pass `userProfile.onCreateChannel` prop to SendbirdUIKitContainer if want to use message in a user profile',\n );\n WARN_onCreateChannel = true;\n }\n\n const { bottom, left, right } = useSafeAreaInsets();\n\n const [user, setUser] = useState<SendbirdUser | SendbirdMember>();\n const [visible, setVisible] = useState(false);\n\n const show: UserProfileContextType['show'] = useCallback((user) => {\n setUser(user);\n setVisible(true);\n }, []);\n\n const hide: UserProfileContextType['hide'] = useCallback(() => {\n setVisible(false);\n }, []);\n\n const userProfileButton = useIIFE(() => {\n const isMe = chatContext.currentUser && user?.userId === chatContext.currentUser.userId;\n if (isMe) return undefined;\n\n const onPressMessageButton = async () => {\n if (user) {\n const params: SendbirdGroupChannelCreateParams = {\n invitedUserIds: [user.userId],\n name: '',\n coverUrl: '',\n isDistinct: false,\n };\n\n if (chatContext.currentUser) params.operatorUserIds = [chatContext.currentUser.userId];\n const processedParams = await onBeforeCreateChannel(params, [user]);\n\n hide();\n const channel = await chatContext.sdk.groupChannel.createChannel(processedParams);\n\n if (onCreateChannel) {\n onCreateChannel(channel);\n } else {\n Logger.warn(\n 'Please set `onCreateChannel` before message to user from profile card, see `userProfile` prop in the `SendbirdUIKitContainer` props',\n );\n }\n }\n };\n\n return (\n <OutlinedButton onPress={onPressMessageButton}>\n {localizationContext.STRINGS.PROFILE_CARD.BUTTON_MESSAGE}\n </OutlinedButton>\n );\n });\n\n return (\n <UserProfileContext.Provider value={{ show, hide }}>\n {children}\n <Modal\n type={'slide'}\n onClose={hide}\n onDismiss={() => setUser(undefined)}\n visible={visible && Boolean(user)}\n backgroundStyle={styles.modal}\n >\n {user && (\n <ProfileCard\n containerStyle={[\n styles.profileCardContainer,\n { paddingLeft: left, paddingRight: right, paddingBottom: bottom },\n ]}\n uri={user.profileUrl}\n username={user.nickname || localizationContext.STRINGS.LABELS.USER_NO_NAME}\n bodyLabel={localizationContext.STRINGS.PROFILE_CARD.BODY_LABEL}\n body={localizationContext.STRINGS.PROFILE_CARD.BODY(user)}\n button={userProfileButton}\n />\n )}\n </Modal>\n </UserProfileContext.Provider>\n );\n};\n\nconst styles = createStyleSheet({\n modal: {\n justifyContent: 'flex-end',\n },\n profileCardContainer: {\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n },\n});\n"],"mappings":"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"}
@@ -1,50 +1,45 @@
1
- import React, { useEffect, useRef } from 'react';
1
+ import React, { forwardRef } from 'react';
2
2
  import { Platform, View } from 'react-native';
3
+ import { MentionType } from '@sendbird/chat/message';
3
4
  import { Button, TextInput, createStyleSheet, useToast } from '@sendbird/uikit-react-native-foundation';
4
- import { useLocalization } from '../../../../hooks/useContext';
5
- const AUTO_FOCUS = Platform.select({
6
- ios: false,
7
- android: true,
8
- default: false
9
- });
10
-
11
- const EditInput = _ref => {
5
+ import { useLocalization, useSendbirdChat } from '../../../../hooks/useContext';
6
+ const EditInput = /*#__PURE__*/forwardRef(function EditInput(_ref, ref) {
12
7
  let {
13
8
  text,
14
- setText,
15
- editMessage,
16
- setEditMessage,
9
+ onChangeText,
10
+ messageToEdit,
11
+ setMessageToEdit,
17
12
  onUpdateUserMessage,
18
- disabled
13
+ onSelectionChange,
14
+ disabled,
15
+ autoFocus,
16
+ mentionedUsers
19
17
  } = _ref;
18
+ const {
19
+ mentionManager
20
+ } = useSendbirdChat();
20
21
  const {
21
22
  STRINGS
22
23
  } = useLocalization();
23
- const inputRef = useRef(null);
24
24
  const toast = useToast();
25
- useEffect(() => {
26
- if (editMessage.isUserMessage()) {
27
- setText(editMessage.message ?? '');
28
- if (!AUTO_FOCUS) setTimeout(() => {
29
- var _inputRef$current;
30
-
31
- return (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
32
- }, 500);
33
- }
34
- }, [editMessage]);
35
25
 
36
26
  const onPressCancel = () => {
37
- setEditMessage();
38
- setText('');
27
+ setMessageToEdit();
28
+ onChangeText('');
39
29
  };
40
30
 
41
31
  const onPressSave = () => {
42
- if (editMessage.isUserMessage()) {
43
- onUpdateUserMessage(text, editMessage).catch(() => toast.show(STRINGS.TOAST.UPDATE_MSG_ERROR, 'error'));
32
+ if (messageToEdit.isUserMessage()) {
33
+ const mention = {
34
+ userIds: mentionedUsers.map(it => it.user.userId),
35
+ messageTemplate: mentionManager.textToMentionedMessageTemplate(text, mentionedUsers),
36
+ type: MentionType.USERS
37
+ };
38
+ onUpdateUserMessage(text, messageToEdit, mention).catch(() => toast.show(STRINGS.TOAST.UPDATE_MSG_ERROR, 'error'));
44
39
  }
45
40
 
46
- setEditMessage();
47
- setText('');
41
+ setMessageToEdit();
42
+ onChangeText('');
48
43
  };
49
44
 
50
45
  return /*#__PURE__*/React.createElement(View, {
@@ -52,15 +47,16 @@ const EditInput = _ref => {
52
47
  }, /*#__PURE__*/React.createElement(View, {
53
48
  style: styles.inputWrapper
54
49
  }, /*#__PURE__*/React.createElement(TextInput, {
55
- editable: !disabled,
56
- autoFocus: AUTO_FOCUS,
57
- ref: inputRef,
50
+ ref: ref,
58
51
  multiline: true,
59
- value: text,
60
- onChangeText: setText,
52
+ disableFullscreenUI: true,
53
+ editable: !disabled,
54
+ autoFocus: autoFocus,
55
+ onChangeText: onChangeText,
61
56
  style: styles.input,
62
- placeholder: STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_ACTIVE
63
- })), /*#__PURE__*/React.createElement(View, {
57
+ placeholder: STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_ACTIVE,
58
+ onSelectionChange: onSelectionChange
59
+ }, mentionManager.textToMentionedComponents(text, mentionedUsers))), /*#__PURE__*/React.createElement(View, {
64
60
  style: {
65
61
  marginTop: 8,
66
62
  flexDirection: 'row'
@@ -74,8 +70,7 @@ const EditInput = _ref => {
74
70
  variant: 'contained',
75
71
  onPress: onPressSave
76
72
  }, STRINGS.GROUP_CHANNEL.INPUT_EDIT_OK)));
77
- };
78
-
73
+ });
79
74
  const styles = createStyleSheet({
80
75
  editInputContainer: {
81
76
  paddingVertical: 10,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useRef","Platform","View","Button","TextInput","createStyleSheet","useToast","useLocalization","AUTO_FOCUS","select","ios","android","default","EditInput","text","setText","editMessage","setEditMessage","onUpdateUserMessage","disabled","STRINGS","inputRef","toast","isUserMessage","message","setTimeout","current","focus","onPressCancel","onPressSave","catch","show","TOAST","UPDATE_MSG_ERROR","styles","editInputContainer","inputWrapper","input","GROUP_CHANNEL","INPUT_PLACEHOLDER_ACTIVE","marginTop","flexDirection","INPUT_EDIT_CANCEL","space","INPUT_EDIT_OK","paddingVertical","paddingHorizontal","alignItems","flex","marginRight","minHeight","maxHeight","borderRadius"],"sources":["EditInput.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { Platform, TextInput as RNTextInput, View } from 'react-native';\n\nimport { Button, TextInput, createStyleSheet, useToast } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\n\nimport { useLocalization } from '../../../../hooks/useContext';\nimport type { GroupChannelProps } from '../../types';\n\ntype EditInputProps = GroupChannelProps['Input'] & {\n text: string;\n setText: (val: string) => void;\n editMessage: SendbirdUserMessage | SendbirdFileMessage;\n setEditMessage: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n disabled: boolean;\n};\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst EditInput = ({ text, setText, editMessage, setEditMessage, onUpdateUserMessage, disabled }: EditInputProps) => {\n const { STRINGS } = useLocalization();\n const inputRef = useRef<RNTextInput>(null);\n const toast = useToast();\n\n useEffect(() => {\n if (editMessage.isUserMessage()) {\n setText(editMessage.message ?? '');\n\n if (!AUTO_FOCUS) setTimeout(() => inputRef.current?.focus(), 500);\n }\n }, [editMessage]);\n\n const onPressCancel = () => {\n setEditMessage();\n setText('');\n };\n\n const onPressSave = () => {\n if (editMessage.isUserMessage()) {\n onUpdateUserMessage(text, editMessage).catch(() => toast.show(STRINGS.TOAST.UPDATE_MSG_ERROR, 'error'));\n }\n setEditMessage();\n setText('');\n };\n\n return (\n <View style={styles.editInputContainer}>\n <View style={styles.inputWrapper}>\n <TextInput\n editable={!disabled}\n autoFocus={AUTO_FOCUS}\n ref={inputRef}\n multiline\n value={text}\n onChangeText={setText}\n style={styles.input}\n placeholder={STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_ACTIVE}\n />\n </View>\n <View style={{ marginTop: 8, flexDirection: 'row' }}>\n <Button variant={'text'} onPress={onPressCancel}>\n {STRINGS.GROUP_CHANNEL.INPUT_EDIT_CANCEL}\n </Button>\n <View style={styles.space} />\n <Button variant={'contained'} onPress={onPressSave}>\n {STRINGS.GROUP_CHANNEL.INPUT_EDIT_OK}\n </Button>\n </View>\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n editInputContainer: {\n paddingVertical: 10,\n paddingHorizontal: 16,\n flexDirection: 'column',\n alignItems: 'center',\n },\n input: {\n flex: 1,\n marginRight: 4,\n minHeight: 36,\n maxHeight: 36 * Platform.select({ ios: 2.5, default: 2 }),\n borderRadius: 20,\n },\n inputWrapper: {\n flexDirection: 'row',\n },\n space: {\n flex: 1,\n },\n});\n\nexport default EditInput;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","forwardRef","Platform","View","MentionType","Button","TextInput","createStyleSheet","useToast","useLocalization","useSendbirdChat","EditInput","ref","text","onChangeText","messageToEdit","setMessageToEdit","onUpdateUserMessage","onSelectionChange","disabled","autoFocus","mentionedUsers","mentionManager","STRINGS","toast","onPressCancel","onPressSave","isUserMessage","mention","userIds","map","it","user","userId","messageTemplate","textToMentionedMessageTemplate","type","USERS","catch","show","TOAST","UPDATE_MSG_ERROR","styles","editInputContainer","inputWrapper","input","GROUP_CHANNEL","INPUT_PLACEHOLDER_ACTIVE","textToMentionedComponents","marginTop","flexDirection","INPUT_EDIT_CANCEL","space","INPUT_EDIT_OK","paddingVertical","paddingHorizontal","alignItems","flex","marginRight","minHeight","maxHeight","select","ios","default","borderRadius"],"sources":["EditInput.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport {\n NativeSyntheticEvent,\n Platform,\n TextInput as RNTextInput,\n TextInputSelectionChangeEventData,\n View,\n} from 'react-native';\n\nimport { MentionType } from '@sendbird/chat/message';\nimport { Button, TextInput, createStyleSheet, useToast } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\n\nimport { useLocalization, useSendbirdChat } from '../../../../hooks/useContext';\nimport type { MentionedUser } from '../../../../types';\nimport type { GroupChannelProps } from '../../types';\n\ntype EditInputProps = GroupChannelProps['Input'] & {\n text: string;\n onChangeText: (val: string) => void;\n messageToEdit: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n onSelectionChange: (e: NativeSyntheticEvent<TextInputSelectionChangeEventData>) => void;\n disabled: boolean;\n autoFocus: boolean;\n mentionedUsers: MentionedUser[];\n};\n\nconst EditInput = forwardRef<RNTextInput, EditInputProps>(function EditInput(\n {\n text,\n onChangeText,\n messageToEdit,\n setMessageToEdit,\n onUpdateUserMessage,\n onSelectionChange,\n disabled,\n autoFocus,\n mentionedUsers,\n },\n ref,\n) {\n const { mentionManager } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n\n const onPressCancel = () => {\n setMessageToEdit();\n onChangeText('');\n };\n\n const onPressSave = () => {\n if (messageToEdit.isUserMessage()) {\n const mention = {\n userIds: mentionedUsers.map((it) => it.user.userId),\n messageTemplate: mentionManager.textToMentionedMessageTemplate(text, mentionedUsers),\n type: MentionType.USERS,\n };\n\n onUpdateUserMessage(text, messageToEdit, mention).catch(() =>\n toast.show(STRINGS.TOAST.UPDATE_MSG_ERROR, 'error'),\n );\n }\n setMessageToEdit();\n onChangeText('');\n };\n\n return (\n <View style={styles.editInputContainer}>\n <View style={styles.inputWrapper}>\n <TextInput\n ref={ref}\n multiline\n disableFullscreenUI\n editable={!disabled}\n autoFocus={autoFocus}\n onChangeText={onChangeText}\n style={styles.input}\n placeholder={STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_ACTIVE}\n onSelectionChange={onSelectionChange}\n >\n {mentionManager.textToMentionedComponents(text, mentionedUsers)}\n </TextInput>\n </View>\n <View style={{ marginTop: 8, flexDirection: 'row' }}>\n <Button variant={'text'} onPress={onPressCancel}>\n {STRINGS.GROUP_CHANNEL.INPUT_EDIT_CANCEL}\n </Button>\n <View style={styles.space} />\n <Button variant={'contained'} onPress={onPressSave}>\n {STRINGS.GROUP_CHANNEL.INPUT_EDIT_OK}\n </Button>\n </View>\n </View>\n );\n});\n\nconst styles = createStyleSheet({\n editInputContainer: {\n paddingVertical: 10,\n paddingHorizontal: 16,\n flexDirection: 'column',\n alignItems: 'center',\n },\n input: {\n flex: 1,\n marginRight: 4,\n minHeight: 36,\n maxHeight: 36 * Platform.select({ ios: 2.5, default: 2 }),\n borderRadius: 20,\n },\n inputWrapper: {\n flexDirection: 'row',\n },\n space: {\n flex: 1,\n },\n});\n\nexport default EditInput;\n"],"mappings":"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"}
@@ -1,21 +1,26 @@
1
- import React from 'react';
1
+ import React, { forwardRef } from 'react';
2
2
  import { Platform, TouchableOpacity, View } from 'react-native';
3
+ import { MentionType } from '@sendbird/chat/message';
3
4
  import { Icon, TextInput, createStyleSheet, useAlert, useBottomSheet, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
4
5
  import { conditionChaining } from '@sendbird/uikit-utils';
5
- import { useLocalization, usePlatformService } from '../../../../hooks/useContext';
6
+ import { useLocalization, usePlatformService, useSendbirdChat } from '../../../../hooks/useContext';
6
7
  import SBUError from '../../../../libs/SBUError';
7
8
  import SBUUtils from '../../../../libs/SBUUtils';
8
-
9
- const SendInput = _ref => {
9
+ const SendInput = /*#__PURE__*/forwardRef(function SendInput(_ref, ref) {
10
10
  let {
11
11
  onSendUserMessage,
12
12
  onSendFileMessage,
13
13
  text,
14
- setText,
14
+ onChangeText,
15
15
  disabled,
16
16
  frozen,
17
- muted
17
+ muted,
18
+ onSelectionChange,
19
+ mentionedUsers
18
20
  } = _ref;
21
+ const {
22
+ mentionManager
23
+ } = useSendbirdChat();
19
24
  const {
20
25
  STRINGS
21
26
  } = useLocalization();
@@ -34,8 +39,13 @@ const SendInput = _ref => {
34
39
  const toast = useToast();
35
40
 
36
41
  const onPressSend = () => {
37
- onSendUserMessage(text).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));
38
- setText('');
42
+ const mention = {
43
+ userIds: mentionedUsers.map(it => it.user.userId),
44
+ messageTemplate: mentionManager.textToMentionedMessageTemplate(text, mentionedUsers),
45
+ type: MentionType.USERS
46
+ };
47
+ onSendUserMessage(text, mention).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));
48
+ onChangeText('');
39
49
  };
40
50
 
41
51
  const onPressAttachment = () => {
@@ -120,13 +130,15 @@ const SendInput = _ref => {
120
130
  size: 24,
121
131
  containerStyle: styles.iconAttach
122
132
  })), /*#__PURE__*/React.createElement(TextInput, {
133
+ ref: ref,
123
134
  multiline: true,
135
+ disableFullscreenUI: true,
136
+ onSelectionChange: onSelectionChange,
124
137
  editable: !disabled,
125
- value: text,
126
- onChangeText: setText,
138
+ onChangeText: onChangeText,
127
139
  style: styles.input,
128
140
  placeholder: conditionChaining([frozen, muted], [STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_DISABLED, STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_MUTED, STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_ACTIVE])
129
- }), Boolean(text.trim()) && /*#__PURE__*/React.createElement(TouchableOpacity, {
141
+ }, mentionManager.textToMentionedComponents(text, mentionedUsers)), Boolean(text.trim()) && /*#__PURE__*/React.createElement(TouchableOpacity, {
130
142
  onPress: onPressSend,
131
143
  disabled: disabled
132
144
  }, /*#__PURE__*/React.createElement(Icon, {
@@ -135,8 +147,7 @@ const SendInput = _ref => {
135
147
  size: 24,
136
148
  containerStyle: styles.iconSend
137
149
  })));
138
- };
139
-
150
+ });
140
151
  const styles = createStyleSheet({
141
152
  sendInputContainer: {
142
153
  paddingVertical: 10,
@@ -1 +1 @@
1
- {"version":3,"names":["React","Platform","TouchableOpacity","View","Icon","TextInput","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","conditionChaining","useLocalization","usePlatformService","SBUError","SBUUtils","SendInput","onSendUserMessage","onSendFileMessage","text","setText","disabled","frozen","muted","STRINGS","fileService","colors","openSheet","alert","toast","onPressSend","catch","show","TOAST","SEND_MSG_ERROR","onPressAttachment","sheetItems","title","GROUP_CHANNEL","DIALOG_ATTACHMENT_CAMERA","icon","onPress","photo","openCamera","mediaType","onOpenFailure","error","code","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","buttons","ALERT_PERMISSIONS_OK","openSettings","OPEN_CAMERA_ERROR","DIALOG_ATTACHMENT_PHOTO_LIBRARY","openMediaLibrary","selectionLimit","OPEN_PHOTO_LIBRARY_ERROR","DIALOG_ATTACHMENT_FILES","file","openDocument","OPEN_FILES_ERROR","styles","sendInputContainer","ui","input","default","highlight","active","iconAttach","INPUT_PLACEHOLDER_DISABLED","INPUT_PLACEHOLDER_MUTED","INPUT_PLACEHOLDER_ACTIVE","Boolean","trim","iconSend","paddingVertical","paddingHorizontal","alignItems","flexDirection","flex","marginRight","minHeight","maxHeight","select","ios","borderRadius","padding","marginLeft"],"sources":["SendInput.tsx"],"sourcesContent":["import React from 'react';\nimport { Platform, TouchableOpacity, View } from 'react-native';\n\nimport {\n Icon,\n TextInput,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { conditionChaining } from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService } from '../../../../hooks/useContext';\nimport SBUError from '../../../../libs/SBUError';\nimport SBUUtils from '../../../../libs/SBUUtils';\nimport type { GroupChannelProps } from '../../types';\n\ntype SendInputProps = GroupChannelProps['Input'] & {\n text: string;\n setText: (val: string) => void;\n frozen: boolean;\n muted: boolean;\n disabled: boolean;\n};\nconst SendInput = ({\n onSendUserMessage,\n onSendFileMessage,\n text,\n setText,\n disabled,\n frozen,\n muted,\n}: SendInputProps) => {\n const { STRINGS } = useLocalization();\n const { fileService } = usePlatformService();\n const { colors } = useUIKitTheme();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const toast = useToast();\n\n const onPressSend = () => {\n onSendUserMessage(text).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n setText('');\n };\n const onPressAttachment = () => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_CAMERA,\n icon: 'camera',\n onPress: async () => {\n const photo = await fileService.openCamera({\n mediaType: 'all',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('camera', 'UIKitSample'),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');\n }\n },\n });\n\n if (photo) {\n onSendFileMessage(photo).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n }\n },\n },\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_PHOTO_LIBRARY,\n icon: 'photo',\n onPress: async () => {\n const photo = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType: 'all',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('device storage', 'UIKitSample'),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');\n }\n },\n });\n\n if (photo && photo[0]) {\n onSendFileMessage(photo[0]).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n }\n },\n },\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_FILES,\n icon: 'document',\n onPress: async () => {\n const file = await fileService.openDocument({\n onOpenFailure: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error'),\n });\n\n if (file) {\n onSendFileMessage(file).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n }\n },\n },\n ],\n });\n };\n\n return (\n <View style={styles.sendInputContainer}>\n <TouchableOpacity onPress={onPressAttachment} disabled={disabled}>\n <Icon\n color={disabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight}\n icon={'add'}\n size={24}\n containerStyle={styles.iconAttach}\n />\n </TouchableOpacity>\n <TextInput\n multiline\n editable={!disabled}\n value={text}\n onChangeText={setText}\n style={styles.input}\n placeholder={conditionChaining(\n [frozen, muted],\n [\n STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_DISABLED,\n STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_MUTED,\n STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_ACTIVE,\n ],\n )}\n />\n {Boolean(text.trim()) && (\n <TouchableOpacity onPress={onPressSend} disabled={disabled}>\n <Icon\n color={disabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight}\n icon={'send'}\n size={24}\n containerStyle={styles.iconSend}\n />\n </TouchableOpacity>\n )}\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n sendInputContainer: {\n paddingVertical: 10,\n paddingHorizontal: 12,\n alignItems: 'center',\n flexDirection: 'row',\n },\n input: {\n flex: 1,\n marginRight: 4,\n minHeight: 36,\n maxHeight: 36 * Platform.select({ ios: 2.5, default: 2 }),\n borderRadius: 20,\n },\n iconAttach: {\n marginRight: 8,\n padding: 4,\n },\n iconSend: {\n marginLeft: 4,\n padding: 4,\n },\n});\n\nexport default SendInput;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","forwardRef","Platform","TouchableOpacity","View","MentionType","Icon","TextInput","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","conditionChaining","useLocalization","usePlatformService","useSendbirdChat","SBUError","SBUUtils","SendInput","ref","onSendUserMessage","onSendFileMessage","text","onChangeText","disabled","frozen","muted","onSelectionChange","mentionedUsers","mentionManager","STRINGS","fileService","colors","openSheet","alert","toast","onPressSend","mention","userIds","map","it","user","userId","messageTemplate","textToMentionedMessageTemplate","type","USERS","catch","show","TOAST","SEND_MSG_ERROR","onPressAttachment","sheetItems","title","GROUP_CHANNEL","DIALOG_ATTACHMENT_CAMERA","icon","onPress","photo","openCamera","mediaType","onOpenFailure","error","code","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","buttons","ALERT_PERMISSIONS_OK","openSettings","OPEN_CAMERA_ERROR","DIALOG_ATTACHMENT_PHOTO_LIBRARY","openMediaLibrary","selectionLimit","OPEN_PHOTO_LIBRARY_ERROR","DIALOG_ATTACHMENT_FILES","file","openDocument","OPEN_FILES_ERROR","styles","sendInputContainer","ui","input","default","highlight","active","iconAttach","INPUT_PLACEHOLDER_DISABLED","INPUT_PLACEHOLDER_MUTED","INPUT_PLACEHOLDER_ACTIVE","textToMentionedComponents","Boolean","trim","iconSend","paddingVertical","paddingHorizontal","alignItems","flexDirection","flex","marginRight","minHeight","maxHeight","select","ios","borderRadius","padding","marginLeft"],"sources":["SendInput.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport {\n NativeSyntheticEvent,\n Platform,\n TextInput as RNTextInput,\n TextInputSelectionChangeEventData,\n TouchableOpacity,\n View,\n} from 'react-native';\n\nimport { MentionType } from '@sendbird/chat/message';\nimport {\n Icon,\n TextInput,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { conditionChaining } from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../../../hooks/useContext';\nimport SBUError from '../../../../libs/SBUError';\nimport SBUUtils from '../../../../libs/SBUUtils';\nimport type { MentionedUser } from '../../../../types';\nimport type { GroupChannelProps } from '../../types';\n\ntype SendInputProps = GroupChannelProps['Input'] & {\n text: string;\n onChangeText: (val: string) => void;\n frozen: boolean;\n muted: boolean;\n disabled: boolean;\n onSelectionChange: (e: NativeSyntheticEvent<TextInputSelectionChangeEventData>) => void;\n mentionedUsers: MentionedUser[];\n};\nconst SendInput = forwardRef<RNTextInput, SendInputProps>(function SendInput(\n {\n onSendUserMessage,\n onSendFileMessage,\n text,\n onChangeText,\n disabled,\n frozen,\n muted,\n onSelectionChange,\n mentionedUsers,\n },\n ref,\n) {\n const { mentionManager } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { fileService } = usePlatformService();\n const { colors } = useUIKitTheme();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const toast = useToast();\n\n const onPressSend = () => {\n const mention = {\n userIds: mentionedUsers.map((it) => it.user.userId),\n messageTemplate: mentionManager.textToMentionedMessageTemplate(text, mentionedUsers),\n type: MentionType.USERS,\n };\n\n onSendUserMessage(text, mention).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n onChangeText('');\n };\n\n const onPressAttachment = () => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_CAMERA,\n icon: 'camera',\n onPress: async () => {\n const photo = await fileService.openCamera({\n mediaType: 'all',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('camera', 'UIKitSample'),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');\n }\n },\n });\n\n if (photo) {\n onSendFileMessage(photo).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n }\n },\n },\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_PHOTO_LIBRARY,\n icon: 'photo',\n onPress: async () => {\n const photo = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType: 'all',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('device storage', 'UIKitSample'),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');\n }\n },\n });\n\n if (photo && photo[0]) {\n onSendFileMessage(photo[0]).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n }\n },\n },\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_FILES,\n icon: 'document',\n onPress: async () => {\n const file = await fileService.openDocument({\n onOpenFailure: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error'),\n });\n\n if (file) {\n onSendFileMessage(file).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n }\n },\n },\n ],\n });\n };\n\n return (\n <View style={styles.sendInputContainer}>\n <TouchableOpacity onPress={onPressAttachment} disabled={disabled}>\n <Icon\n color={disabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight}\n icon={'add'}\n size={24}\n containerStyle={styles.iconAttach}\n />\n </TouchableOpacity>\n <TextInput\n ref={ref}\n multiline\n disableFullscreenUI\n onSelectionChange={onSelectionChange}\n editable={!disabled}\n onChangeText={onChangeText}\n style={styles.input}\n placeholder={conditionChaining(\n [frozen, muted],\n [\n STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_DISABLED,\n STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_MUTED,\n STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_ACTIVE,\n ],\n )}\n >\n {mentionManager.textToMentionedComponents(text, mentionedUsers)}\n </TextInput>\n\n {Boolean(text.trim()) && (\n <TouchableOpacity onPress={onPressSend} disabled={disabled}>\n <Icon\n color={disabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight}\n icon={'send'}\n size={24}\n containerStyle={styles.iconSend}\n />\n </TouchableOpacity>\n )}\n </View>\n );\n});\n\nconst styles = createStyleSheet({\n sendInputContainer: {\n paddingVertical: 10,\n paddingHorizontal: 12,\n alignItems: 'center',\n flexDirection: 'row',\n },\n input: {\n flex: 1,\n marginRight: 4,\n minHeight: 36,\n maxHeight: 36 * Platform.select({ ios: 2.5, default: 2 }),\n borderRadius: 20,\n },\n iconAttach: {\n marginRight: 8,\n padding: 4,\n },\n iconSend: {\n marginLeft: 4,\n padding: 4,\n },\n});\n\nexport default SendInput;\n"],"mappings":"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"}