@sendbird/uikit-react-native 3.5.4 → 3.7.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 (251) hide show
  1. package/README.md +11 -27
  2. package/lib/commonjs/components/ChannelInput/SendInput.js +23 -6
  3. package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
  4. package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
  5. package/lib/commonjs/components/ChannelMessageList/index.js +22 -4
  6. package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
  7. package/lib/commonjs/components/ChannelThreadMessageList/index.js +349 -0
  8. package/lib/commonjs/components/ChannelThreadMessageList/index.js.map +1 -0
  9. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +2 -2
  10. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -1
  11. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.js +100 -0
  12. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.js.map +1 -0
  13. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +24 -6
  14. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
  15. package/lib/commonjs/components/ReactionAddons/MessageReactionAddon.js +23 -6
  16. package/lib/commonjs/components/ReactionAddons/MessageReactionAddon.js.map +1 -1
  17. package/lib/commonjs/components/ThreadChatFlatList/index.js +76 -0
  18. package/lib/commonjs/components/ThreadChatFlatList/index.js.map +1 -0
  19. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.js +41 -0
  20. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.js.map +1 -0
  21. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.js +74 -0
  22. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.js.map +1 -0
  23. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.js +42 -0
  24. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.js.map +1 -0
  25. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.js +94 -0
  26. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.js.map +1 -0
  27. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.user.js +61 -0
  28. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.user.js.map +1 -0
  29. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.js +127 -0
  30. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.js.map +1 -0
  31. package/lib/commonjs/components/ThreadParentMessageRenderer/index.js +206 -0
  32. package/lib/commonjs/components/ThreadParentMessageRenderer/index.js.map +1 -0
  33. package/lib/commonjs/containers/SendbirdUIKitContainer.js +12 -11
  34. package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
  35. package/lib/commonjs/contexts/SendbirdChatCtx.js +7 -0
  36. package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
  37. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +28 -5
  38. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  39. package/lib/commonjs/domain/groupChannel/module/moduleContext.js +14 -4
  40. package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -1
  41. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  42. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadHeader.js +82 -0
  43. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadHeader.js.map +1 -0
  44. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadInput.js +44 -0
  45. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadInput.js.map +1 -0
  46. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +127 -0
  47. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -0
  48. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js +315 -0
  49. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js.map +1 -0
  50. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.js +27 -0
  51. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.js.map +1 -0
  52. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.js +27 -0
  53. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.js.map +1 -0
  54. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js +195 -0
  55. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js.map +1 -0
  56. package/lib/commonjs/domain/groupChannelThread/index.js +69 -0
  57. package/lib/commonjs/domain/groupChannelThread/index.js.map +1 -0
  58. package/lib/commonjs/domain/groupChannelThread/module/createGroupChannelThreadModule.js +42 -0
  59. package/lib/commonjs/domain/groupChannelThread/module/createGroupChannelThreadModule.js.map +1 -0
  60. package/lib/commonjs/domain/groupChannelThread/module/moduleContext.js +148 -0
  61. package/lib/commonjs/domain/groupChannelThread/module/moduleContext.js.map +1 -0
  62. package/lib/commonjs/domain/groupChannelThread/types.js +6 -0
  63. package/lib/commonjs/domain/groupChannelThread/types.js.map +1 -0
  64. package/lib/commonjs/fragments/createGroupChannelFragment.js +30 -5
  65. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  66. package/lib/commonjs/fragments/createGroupChannelThreadFragment.js +267 -0
  67. package/lib/commonjs/fragments/createGroupChannelThreadFragment.js.map +1 -0
  68. package/lib/commonjs/hooks/useMentionSuggestion.js +5 -2
  69. package/lib/commonjs/hooks/useMentionSuggestion.js.map +1 -1
  70. package/lib/commonjs/index.js +72 -40
  71. package/lib/commonjs/index.js.map +1 -1
  72. package/lib/commonjs/libs/EmojiManager.js.map +1 -1
  73. package/lib/commonjs/libs/InternalLocalCacheStorage.js +65 -19
  74. package/lib/commonjs/libs/InternalLocalCacheStorage.js.map +1 -1
  75. package/lib/commonjs/libs/VoiceMessageStatusManager.js +66 -0
  76. package/lib/commonjs/libs/VoiceMessageStatusManager.js.map +1 -0
  77. package/lib/commonjs/localization/StringSet.type.js.map +1 -1
  78. package/lib/commonjs/localization/createBaseStringSet.js +25 -3
  79. package/lib/commonjs/localization/createBaseStringSet.js.map +1 -1
  80. package/lib/commonjs/platform/createMediaService.native.js.map +1 -1
  81. package/lib/commonjs/types.js.map +1 -1
  82. package/lib/commonjs/version.js +1 -1
  83. package/lib/commonjs/version.js.map +1 -1
  84. package/lib/module/components/ChannelInput/SendInput.js +23 -6
  85. package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
  86. package/lib/module/components/ChannelInput/index.js.map +1 -1
  87. package/lib/module/components/ChannelMessageList/index.js +22 -4
  88. package/lib/module/components/ChannelMessageList/index.js.map +1 -1
  89. package/lib/module/components/ChannelThreadMessageList/index.js +341 -0
  90. package/lib/module/components/ChannelThreadMessageList/index.js.map +1 -0
  91. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +2 -2
  92. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -1
  93. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.js +92 -0
  94. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.js.map +1 -0
  95. package/lib/module/components/GroupChannelMessageRenderer/index.js +24 -6
  96. package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
  97. package/lib/module/components/ReactionAddons/MessageReactionAddon.js +23 -6
  98. package/lib/module/components/ReactionAddons/MessageReactionAddon.js.map +1 -1
  99. package/lib/module/components/ThreadChatFlatList/index.js +66 -0
  100. package/lib/module/components/ThreadChatFlatList/index.js.map +1 -0
  101. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.js +34 -0
  102. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.js.map +1 -0
  103. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.js +67 -0
  104. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.js.map +1 -0
  105. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.js +34 -0
  106. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.js.map +1 -0
  107. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.js +87 -0
  108. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.js.map +1 -0
  109. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.user.js +54 -0
  110. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.user.js.map +1 -0
  111. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.js +119 -0
  112. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.js.map +1 -0
  113. package/lib/module/components/ThreadParentMessageRenderer/index.js +196 -0
  114. package/lib/module/components/ThreadParentMessageRenderer/index.js.map +1 -0
  115. package/lib/module/containers/SendbirdUIKitContainer.js +13 -12
  116. package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
  117. package/lib/module/contexts/SendbirdChatCtx.js +6 -0
  118. package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
  119. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +30 -6
  120. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  121. package/lib/module/domain/groupChannel/module/moduleContext.js +14 -4
  122. package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
  123. package/lib/module/domain/groupChannel/types.js.map +1 -1
  124. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadHeader.js +73 -0
  125. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadHeader.js.map +1 -0
  126. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadInput.js +34 -0
  127. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadInput.js.map +1 -0
  128. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +117 -0
  129. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -0
  130. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js +305 -0
  131. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js.map +1 -0
  132. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.js +19 -0
  133. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.js.map +1 -0
  134. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.js +19 -0
  135. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.js.map +1 -0
  136. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js +185 -0
  137. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js.map +1 -0
  138. package/lib/module/domain/groupChannelThread/index.js +9 -0
  139. package/lib/module/domain/groupChannelThread/index.js.map +1 -0
  140. package/lib/module/domain/groupChannelThread/module/createGroupChannelThreadModule.js +34 -0
  141. package/lib/module/domain/groupChannelThread/module/createGroupChannelThreadModule.js.map +1 -0
  142. package/lib/module/domain/groupChannelThread/module/moduleContext.js +137 -0
  143. package/lib/module/domain/groupChannelThread/module/moduleContext.js.map +1 -0
  144. package/lib/module/domain/groupChannelThread/types.js +2 -0
  145. package/lib/module/domain/groupChannelThread/types.js.map +1 -0
  146. package/lib/module/fragments/createGroupChannelFragment.js +33 -7
  147. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  148. package/lib/module/fragments/createGroupChannelThreadFragment.js +257 -0
  149. package/lib/module/fragments/createGroupChannelThreadFragment.js.map +1 -0
  150. package/lib/module/hooks/useMentionSuggestion.js +5 -2
  151. package/lib/module/hooks/useMentionSuggestion.js.map +1 -1
  152. package/lib/module/index.js +3 -0
  153. package/lib/module/index.js.map +1 -1
  154. package/lib/module/libs/EmojiManager.js.map +1 -1
  155. package/lib/module/libs/InternalLocalCacheStorage.js +65 -19
  156. package/lib/module/libs/InternalLocalCacheStorage.js.map +1 -1
  157. package/lib/module/libs/VoiceMessageStatusManager.js +59 -0
  158. package/lib/module/libs/VoiceMessageStatusManager.js.map +1 -0
  159. package/lib/module/localization/StringSet.type.js.map +1 -1
  160. package/lib/module/localization/createBaseStringSet.js +27 -4
  161. package/lib/module/localization/createBaseStringSet.js.map +1 -1
  162. package/lib/module/platform/createMediaService.native.js.map +1 -1
  163. package/lib/module/types.js.map +1 -1
  164. package/lib/module/version.js +1 -1
  165. package/lib/module/version.js.map +1 -1
  166. package/lib/typescript/src/components/ChannelInput/index.d.ts +1 -0
  167. package/lib/typescript/src/components/ChannelMessageList/index.d.ts +5 -2
  168. package/lib/typescript/src/components/ChannelThreadMessageList/index.d.ts +55 -0
  169. package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.d.ts +1 -1
  170. package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.d.ts +9 -0
  171. package/lib/typescript/src/components/GroupChannelMessageRenderer/index.d.ts +3 -1
  172. package/lib/typescript/src/components/OpenChannelMessageRenderer/index.d.ts +3 -1
  173. package/lib/typescript/src/components/ReactionAddons/MessageReactionAddon.d.ts +3 -1
  174. package/lib/typescript/src/components/ReactionAddons/index.d.ts +2 -1
  175. package/lib/typescript/src/components/ThreadChatFlatList/index.d.ts +9 -0
  176. package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.d.ts +4 -0
  177. package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.d.ts +4 -0
  178. package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.d.ts +9 -0
  179. package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.d.ts +13 -0
  180. package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.user.d.ts +10 -0
  181. package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.d.ts +10 -0
  182. package/lib/typescript/src/components/ThreadParentMessageRenderer/index.d.ts +20 -0
  183. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +8 -10
  184. package/lib/typescript/src/contexts/SendbirdChatCtx.d.ts +15 -1
  185. package/lib/typescript/src/domain/groupChannel/types.d.ts +4 -1
  186. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadHeader.d.ts +4 -0
  187. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadInput.d.ts +3 -0
  188. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadMessageList.d.ts +7 -0
  189. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.d.ts +8 -0
  190. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.d.ts +3 -0
  191. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.d.ts +3 -0
  192. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.d.ts +4 -0
  193. package/lib/typescript/src/domain/groupChannelThread/index.d.ts +8 -0
  194. package/lib/typescript/src/domain/groupChannelThread/module/createGroupChannelThreadModule.d.ts +3 -0
  195. package/lib/typescript/src/domain/groupChannelThread/module/moduleContext.d.ts +3 -0
  196. package/lib/typescript/src/domain/groupChannelThread/types.d.ts +136 -0
  197. package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +1 -1
  198. package/lib/typescript/src/fragments/createGroupChannelThreadFragment.d.ts +5 -0
  199. package/lib/typescript/src/hooks/useChannelInputItems.d.ts +1 -1
  200. package/lib/typescript/src/index.d.ts +3 -0
  201. package/lib/typescript/src/libs/InternalLocalCacheStorage.d.ts +5 -4
  202. package/lib/typescript/src/libs/VoiceMessageStatusManager.d.ts +11 -0
  203. package/lib/typescript/src/localization/StringSet.type.d.ts +23 -0
  204. package/lib/typescript/src/localization/createBaseStringSet.d.ts +1 -1
  205. package/lib/typescript/src/types.d.ts +4 -1
  206. package/lib/typescript/src/version.d.ts +1 -1
  207. package/package.json +27 -22
  208. package/src/components/ChannelInput/SendInput.tsx +24 -5
  209. package/src/components/ChannelInput/index.tsx +1 -0
  210. package/src/components/ChannelMessageList/index.tsx +27 -5
  211. package/src/components/ChannelThreadMessageList/index.tsx +406 -0
  212. package/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.tsx +3 -3
  213. package/src/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.tsx +96 -0
  214. package/src/components/GroupChannelMessageRenderer/index.tsx +21 -5
  215. package/src/components/ReactionAddons/MessageReactionAddon.tsx +38 -5
  216. package/src/components/ThreadChatFlatList/index.tsx +63 -0
  217. package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.tsx +36 -0
  218. package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.tsx +61 -0
  219. package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.tsx +45 -0
  220. package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.tsx +107 -0
  221. package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.tsx +133 -0
  222. package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.user.tsx +65 -0
  223. package/src/components/ThreadParentMessageRenderer/index.tsx +194 -0
  224. package/src/containers/SendbirdUIKitContainer.tsx +28 -17
  225. package/src/contexts/SendbirdChatCtx.tsx +20 -0
  226. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +37 -8
  227. package/src/domain/groupChannel/module/moduleContext.tsx +12 -2
  228. package/src/domain/groupChannel/types.ts +5 -0
  229. package/src/domain/groupChannelThread/component/GroupChannelThreadHeader.tsx +63 -0
  230. package/src/domain/groupChannelThread/component/GroupChannelThreadInput.tsx +38 -0
  231. package/src/domain/groupChannelThread/component/GroupChannelThreadMessageList.tsx +105 -0
  232. package/src/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.tsx +326 -0
  233. package/src/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.tsx +18 -0
  234. package/src/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.tsx +18 -0
  235. package/src/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.tsx +174 -0
  236. package/src/domain/groupChannelThread/index.ts +8 -0
  237. package/src/domain/groupChannelThread/module/createGroupChannelThreadModule.tsx +35 -0
  238. package/src/domain/groupChannelThread/module/moduleContext.tsx +165 -0
  239. package/src/domain/groupChannelThread/types.ts +184 -0
  240. package/src/fragments/createGroupChannelFragment.tsx +38 -8
  241. package/src/fragments/createGroupChannelThreadFragment.tsx +280 -0
  242. package/src/hooks/useMentionSuggestion.ts +13 -9
  243. package/src/index.ts +4 -0
  244. package/src/libs/EmojiManager.ts +2 -2
  245. package/src/libs/InternalLocalCacheStorage.ts +70 -21
  246. package/src/libs/VoiceMessageStatusManager.ts +56 -0
  247. package/src/localization/StringSet.type.ts +27 -0
  248. package/src/localization/createBaseStringSet.ts +33 -4
  249. package/src/platform/createMediaService.native.tsx +9 -1
  250. package/src/types.ts +6 -1
  251. package/src/version.ts +1 -1
@@ -0,0 +1,92 @@
1
+ import React from 'react';
2
+ import { Avatar, Box, Icon, PressBox, Text, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
3
+ import { useLocalization } from '../../hooks/useContext';
4
+ const AVATAR_LIMIT = 5;
5
+ const createRepliedUserAvatars = mostRepliedUsers => {
6
+ if (!mostRepliedUsers || mostRepliedUsers.length === 0) return null;
7
+ const {
8
+ palette
9
+ } = useUIKitTheme();
10
+ return mostRepliedUsers.slice(0, AVATAR_LIMIT).map((user, index) => {
11
+ if (index < AVATAR_LIMIT - 1) {
12
+ return /*#__PURE__*/React.createElement(Box, {
13
+ style: styles.avatarContainer,
14
+ key: index
15
+ }, /*#__PURE__*/React.createElement(Avatar, {
16
+ size: 20,
17
+ uri: user === null || user === void 0 ? void 0 : user.profileUrl
18
+ }));
19
+ } else {
20
+ return /*#__PURE__*/React.createElement(Box, {
21
+ style: styles.avatarContainer,
22
+ key: index
23
+ }, /*#__PURE__*/React.createElement(Avatar, {
24
+ size: 20,
25
+ uri: user === null || user === void 0 ? void 0 : user.profileUrl
26
+ }), /*#__PURE__*/React.createElement(Box, {
27
+ style: styles.avatarOverlay,
28
+ backgroundColor: palette.overlay01
29
+ }, /*#__PURE__*/React.createElement(Icon, {
30
+ icon: 'plus',
31
+ size: 14,
32
+ style: styles.plusIcon,
33
+ color: 'white'
34
+ })));
35
+ }
36
+ });
37
+ };
38
+ const GroupChannelMessageReplyInfo = _ref => {
39
+ let {
40
+ channel,
41
+ message,
42
+ onPress
43
+ } = _ref;
44
+ const {
45
+ STRINGS
46
+ } = useLocalization();
47
+ const {
48
+ select,
49
+ palette
50
+ } = useUIKitTheme();
51
+ if (!channel || !message.threadInfo || !message.threadInfo.replyCount) return null;
52
+ const replyCountText = STRINGS.GROUP_CHANNEL_THREAD.REPLY_COUNT(message.threadInfo.replyCount || 0, 99);
53
+ const onPressReply = () => {
54
+ onPress === null || onPress === void 0 ? void 0 : onPress(message);
55
+ };
56
+ return /*#__PURE__*/React.createElement(PressBox, {
57
+ onPress: onPressReply,
58
+ style: styles.replyContainer
59
+ }, createRepliedUserAvatars(message.threadInfo.mostRepliedUsers), /*#__PURE__*/React.createElement(Text, {
60
+ caption3: true,
61
+ color: select({
62
+ light: palette.primary300,
63
+ dark: palette.primary200
64
+ })
65
+ }, replyCountText));
66
+ };
67
+ const styles = createStyleSheet({
68
+ replyContainer: {
69
+ flexDirection: 'row',
70
+ alignItems: 'center'
71
+ },
72
+ avatarContainer: {
73
+ marginRight: 4
74
+ },
75
+ avatarOverlay: {
76
+ position: 'absolute',
77
+ top: 0,
78
+ left: 0,
79
+ right: 0,
80
+ bottom: 0,
81
+ borderRadius: 10
82
+ },
83
+ plusIcon: {
84
+ position: 'absolute',
85
+ top: 3,
86
+ left: 3,
87
+ right: 0,
88
+ bottom: 0
89
+ }
90
+ });
91
+ export default /*#__PURE__*/React.memo(GroupChannelMessageReplyInfo);
92
+ //# sourceMappingURL=GroupChannelMessageReplyInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Avatar","Box","Icon","PressBox","Text","createStyleSheet","useUIKitTheme","useLocalization","AVATAR_LIMIT","createRepliedUserAvatars","mostRepliedUsers","length","palette","slice","map","user","index","createElement","style","styles","avatarContainer","key","size","uri","profileUrl","avatarOverlay","backgroundColor","overlay01","icon","plusIcon","color","GroupChannelMessageReplyInfo","_ref","channel","message","onPress","STRINGS","select","threadInfo","replyCount","replyCountText","GROUP_CHANNEL_THREAD","REPLY_COUNT","onPressReply","replyContainer","caption3","light","primary300","dark","primary200","flexDirection","alignItems","marginRight","position","top","left","right","bottom","borderRadius","memo"],"sources":["GroupChannelMessageReplyInfo.tsx"],"sourcesContent":["import React from 'react';\n\nimport { User } from '@sendbird/chat';\nimport {\n Avatar,\n Box,\n Icon,\n PressBox,\n Text,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { SendbirdFileMessage, SendbirdGroupChannel, SendbirdMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\n\nimport { useLocalization } from '../../hooks/useContext';\n\nconst AVATAR_LIMIT = 5;\n\ntype Props = {\n channel: SendbirdGroupChannel;\n message: SendbirdMessage;\n onPress?: (message: SendbirdUserMessage | SendbirdFileMessage) => void;\n};\n\nconst createRepliedUserAvatars = (mostRepliedUsers: User[]) => {\n if (!mostRepliedUsers || mostRepliedUsers.length === 0) return null;\n\n const { palette } = useUIKitTheme();\n\n return mostRepliedUsers.slice(0, AVATAR_LIMIT).map((user, index) => {\n if (index < AVATAR_LIMIT - 1) {\n return (\n <Box style={styles.avatarContainer} key={index}>\n <Avatar size={20} uri={user?.profileUrl}></Avatar>\n </Box>\n );\n } else {\n return (\n <Box style={styles.avatarContainer} key={index}>\n <Avatar size={20} uri={user?.profileUrl}></Avatar>\n <Box style={styles.avatarOverlay} backgroundColor={palette.overlay01}>\n <Icon icon={'plus'} size={14} style={styles.plusIcon} color={'white'} />\n </Box>\n </Box>\n );\n }\n });\n};\n\nconst GroupChannelMessageReplyInfo = ({ channel, message, onPress }: Props) => {\n const { STRINGS } = useLocalization();\n const { select, palette } = useUIKitTheme();\n\n if (!channel || !message.threadInfo || !message.threadInfo.replyCount) return null;\n\n const replyCountText = STRINGS.GROUP_CHANNEL_THREAD.REPLY_COUNT(message.threadInfo.replyCount || 0, 99);\n const onPressReply = () => {\n onPress?.(message as SendbirdUserMessage | SendbirdFileMessage);\n };\n\n return (\n <PressBox onPress={onPressReply} style={styles.replyContainer}>\n {createRepliedUserAvatars(message.threadInfo.mostRepliedUsers)}\n <Text caption3 color={select({ light: palette.primary300, dark: palette.primary200 })}>\n {replyCountText}\n </Text>\n </PressBox>\n );\n};\n\nconst styles = createStyleSheet({\n replyContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n avatarContainer: {\n marginRight: 4,\n },\n avatarOverlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 10,\n },\n plusIcon: {\n position: 'absolute',\n top: 3,\n left: 3,\n right: 0,\n bottom: 0,\n },\n});\n\nexport default React.memo(GroupChannelMessageReplyInfo);\n"],"mappings":"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"}
@@ -12,6 +12,7 @@ import GroupChannelMessageDateSeparator from './GroupChannelMessageDateSeparator
12
12
  import GroupChannelMessageFocusAnimation from './GroupChannelMessageFocusAnimation';
13
13
  import GroupChannelMessageOutgoingStatus from './GroupChannelMessageOutgoingStatus';
14
14
  import GroupChannelMessageParentMessage from './GroupChannelMessageParentMessage';
15
+ import GroupChannelMessageReplyInfo from './GroupChannelMessageReplyInfo';
15
16
  const GroupChannelMessageRenderer = _ref => {
16
17
  let {
17
18
  channel,
@@ -20,10 +21,12 @@ const GroupChannelMessageRenderer = _ref => {
20
21
  onLongPress,
21
22
  onPressParentMessage,
22
23
  onShowUserProfile,
24
+ onReplyInThreadMessage,
23
25
  enableMessageGrouping,
24
26
  focused,
25
27
  prevMessage,
26
- nextMessage
28
+ nextMessage,
29
+ hideParentMessage
27
30
  } = _ref;
28
31
  const playerUnsubscribes = useRef([]);
29
32
  const {
@@ -32,7 +35,8 @@ const GroupChannelMessageRenderer = _ref => {
32
35
  const {
33
36
  sbOptions,
34
37
  currentUser,
35
- mentionManager
38
+ mentionManager,
39
+ voiceMessageStatusManager
36
40
  } = useSendbirdChat();
37
41
  const {
38
42
  STRINGS
@@ -44,7 +48,8 @@ const GroupChannelMessageRenderer = _ref => {
44
48
  const {
45
49
  groupWithPrev,
46
50
  groupWithNext
47
- } = calcMessageGrouping(Boolean(enableMessageGrouping), message, prevMessage, nextMessage);
51
+ } = calcMessageGrouping(Boolean(enableMessageGrouping), message, prevMessage, nextMessage, sbOptions.uikit.groupChannel.channel.replyType === 'thread', shouldRenderParentMessage(message, hideParentMessage));
52
+ const variant = isMyMessage(message, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId) ? 'outgoing' : 'incoming';
48
53
  const reactionChildren = useIIFE(() => {
49
54
  const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;
50
55
  if (shouldRenderReaction(channel, channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions) && message.reactions && message.reactions.length > 0) {
@@ -55,6 +60,15 @@ const GroupChannelMessageRenderer = _ref => {
55
60
  }
56
61
  return null;
57
62
  });
63
+ const replyInfo = useIIFE(() => {
64
+ if (sbOptions.uikit.groupChannel.channel.replyType !== 'thread') return null;
65
+ if (!channel || !message.threadInfo || !message.threadInfo.replyCount) return null;
66
+ return /*#__PURE__*/React.createElement(GroupChannelMessageReplyInfo, {
67
+ channel: channel,
68
+ message: message,
69
+ onPress: onReplyInThreadMessage
70
+ });
71
+ });
58
72
  const resetPlayer = async () => {
59
73
  playerUnsubscribes.current.forEach(unsubscribe => {
60
74
  try {
@@ -64,7 +78,6 @@ const GroupChannelMessageRenderer = _ref => {
64
78
  playerUnsubscribes.current.length = 0;
65
79
  await playerService.reset();
66
80
  };
67
- const variant = isMyMessage(message, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId) ? 'outgoing' : 'incoming';
68
81
  const messageProps = {
69
82
  channel,
70
83
  variant,
@@ -97,6 +110,7 @@ const GroupChannelMessageRenderer = _ref => {
97
110
  currentTime,
98
111
  duration
99
112
  } = _ref2;
113
+ voiceMessageStatusManager.setCurrentTime(message.channelUrl, message.messageId, currentTime);
100
114
  if (seekFinished) {
101
115
  setState(prevState => ({
102
116
  ...prevState,
@@ -148,11 +162,12 @@ const GroupChannelMessageRenderer = _ref => {
148
162
  groupedWithPrev: groupWithPrev,
149
163
  groupedWithNext: groupWithNext,
150
164
  children: reactionChildren,
165
+ replyInfo: replyInfo,
151
166
  sendingStatus: isMyMessage(message, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId) ? /*#__PURE__*/React.createElement(GroupChannelMessageOutgoingStatus, {
152
167
  channel: channel,
153
168
  message: message
154
169
  }) : null,
155
- parentMessage: shouldRenderParentMessage(message) ? /*#__PURE__*/React.createElement(GroupChannelMessageParentMessage, {
170
+ parentMessage: shouldRenderParentMessage(message, hideParentMessage) ? /*#__PURE__*/React.createElement(GroupChannelMessageParentMessage, {
156
171
  channel: channel,
157
172
  message: message.parentMessage,
158
173
  variant: variant,
@@ -258,6 +273,9 @@ const GroupChannelMessageRenderer = _ref => {
258
273
  return /*#__PURE__*/React.createElement(GroupChannelMessage.VoiceFile, _extends({
259
274
  message: message,
260
275
  durationMetaArrayKey: VOICE_MESSAGE_META_ARRAY_DURATION_KEY,
276
+ initialCurrentTime: voiceMessageStatusManager.getCurrentTime(message.channelUrl, message.messageId),
277
+ onSubscribeStatus: voiceMessageStatusManager.subscribe,
278
+ onUnsubscribeStatus: voiceMessageStatusManager.unsubscribe,
261
279
  onUnmount: () => {
262
280
  if (isVoiceMessage(message) && playerService.uri === message.url) {
263
281
  resetPlayer();
@@ -281,7 +299,7 @@ const GroupChannelMessageRenderer = _ref => {
281
299
  } else {
282
300
  return 16;
283
301
  }
284
- } else if (nextMessage && shouldRenderParentMessage(nextMessage)) {
302
+ } else if (nextMessage && shouldRenderParentMessage(nextMessage, hideParentMessage)) {
285
303
  return 16;
286
304
  } else if (groupWithNext) {
287
305
  return 2;
@@ -1 +1 @@
1
- {"version":3,"names":["React","useContext","useEffect","useRef","Box","GroupChannelMessage","Text","TypingIndicatorBubble","useUIKitTheme","calcMessageGrouping","getMessageType","isMyMessage","isVoiceMessage","shouldRenderParentMessage","shouldRenderReaction","useIIFE","VOICE_MESSAGE_META_ARRAY_DURATION_KEY","GroupChannelContexts","useLocalization","usePlatformService","useSendbirdChat","SBUUtils","TypingIndicatorType","ReactionAddons","GroupChannelMessageDateSeparator","GroupChannelMessageFocusAnimation","GroupChannelMessageOutgoingStatus","GroupChannelMessageParentMessage","GroupChannelMessageRenderer","_ref","channel","message","onPress","onLongPress","onPressParentMessage","onShowUserProfile","enableMessageGrouping","focused","prevMessage","nextMessage","playerUnsubscribes","palette","sbOptions","currentUser","mentionManager","STRINGS","mediaService","playerService","groupWithPrev","groupWithNext","Boolean","reactionChildren","configs","uikitWithAppInfo","groupChannel","isSuper","enableReactionsSupergroup","enableReactions","reactions","length","createElement","Message","resetPlayer","current","forEach","unsubscribe","reset","variant","userId","messageProps","onPressURL","url","openURL","onPressAvatar","sender","onPressMentionedUser","mentionedUser","onToggleVoiceMessage","state","setState","sendingStatus","uri","pause","play","shouldSeekToTime","duration","currentTime","seekFinished","forPlayback","addPlaybackListener","_ref2","stopped","prevState","forState","addStateListener","status","push","seek","groupedWithPrev","groupedWithNext","children","parentMessage","childMessage","strings","edited","GROUP_CHANNEL","MESSAGE_BUBBLE_EDITED_POSTFIX","senderName","nickname","LABELS","USER_NO_NAME","sentDate","MESSAGE_BUBBLE_TIME","fileName","isFileMessage","MESSAGE_BUBBLE_FILE_TITLE","unknownTitle","MESSAGE_BUBBLE_UNKNOWN_TITLE","unknownDescription","MESSAGE_BUBBLE_UNKNOWN_DESC","userMessageProps","renderRegexTextChildren","shouldUseMentionedMessageTemplate","uikit","enableMention","mentionedMessageTemplate","regexTextPatterns","regex","templateRegex","replacer","_ref3","_message$mentionedUse","match","groups","parentProps","index","keyPrefix","user","mentionedUsers","find","it","mentionColor","onBackgroundLight01","color","_extends","key","_messageProps$onPress","call","style","fontWeight","backgroundColor","highlight","asMentionedMessageText","renderMessage","Admin","ogMetaData","enableOgtag","OpenGraphUser","User","File","ImageFile","VideoFile","fetchThumbnailFromVideoSource","getVideoThumbnail","timeMills","VoiceFile","durationMetaArrayKey","onUnmount","Unknown","messageGap","isAdminMessage","paddingHorizontal","marginBottom","GroupChannelTypingIndicatorBubble","publish","PubSub","typingUsers","TypingIndicator","shouldRenderBubble","enableTypingIndicator","typingIndicatorTypes","has","Bubble","type","marginTop","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useContext, useEffect, useRef } from 'react';\n\nimport type { GroupChannelMessageProps, RegexTextPattern } from '@sendbird/uikit-react-native-foundation';\nimport {\n Box,\n GroupChannelMessage,\n Text,\n TypingIndicatorBubble,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdAdminMessage,\n SendbirdFileMessage,\n SendbirdMessage,\n SendbirdUserMessage,\n calcMessageGrouping,\n getMessageType,\n isMyMessage,\n isVoiceMessage,\n shouldRenderParentMessage,\n shouldRenderReaction,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { VOICE_MESSAGE_META_ARRAY_DURATION_KEY } from '../../constants';\nimport { GroupChannelContexts } from '../../domain/groupChannel/module/moduleContext';\nimport type { GroupChannelProps } from '../../domain/groupChannel/types';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport { TypingIndicatorType } from '../../types';\nimport { ReactionAddons } from '../ReactionAddons';\nimport GroupChannelMessageDateSeparator from './GroupChannelMessageDateSeparator';\nimport GroupChannelMessageFocusAnimation from './GroupChannelMessageFocusAnimation';\nimport GroupChannelMessageOutgoingStatus from './GroupChannelMessageOutgoingStatus';\nimport GroupChannelMessageParentMessage from './GroupChannelMessageParentMessage';\n\nconst GroupChannelMessageRenderer: GroupChannelProps['Fragment']['renderMessage'] = ({\n channel,\n message,\n onPress,\n onLongPress,\n onPressParentMessage,\n onShowUserProfile,\n enableMessageGrouping,\n focused,\n prevMessage,\n nextMessage,\n}) => {\n const playerUnsubscribes = useRef<(() => void)[]>([]);\n const { palette } = useUIKitTheme();\n const { sbOptions, currentUser, mentionManager } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { mediaService, playerService } = usePlatformService();\n const { groupWithPrev, groupWithNext } = calcMessageGrouping(\n Boolean(enableMessageGrouping),\n message,\n prevMessage,\n nextMessage,\n );\n\n const reactionChildren = useIIFE(() => {\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n if (\n shouldRenderReaction(channel, channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions) &&\n message.reactions &&\n message.reactions.length > 0\n ) {\n return <ReactionAddons.Message channel={channel} message={message} />;\n }\n return null;\n });\n\n const resetPlayer = async () => {\n playerUnsubscribes.current.forEach((unsubscribe) => {\n try {\n unsubscribe();\n } catch {}\n });\n playerUnsubscribes.current.length = 0;\n await playerService.reset();\n };\n\n const variant = isMyMessage(message, currentUser?.userId) ? 'outgoing' : 'incoming';\n\n const messageProps: Omit<GroupChannelMessageProps<SendbirdMessage>, 'message'> = {\n channel,\n variant,\n onPress,\n onLongPress,\n onPressURL: (url) => SBUUtils.openURL(url),\n onPressAvatar: () => {\n if ('sender' in message) onShowUserProfile?.(message.sender);\n },\n onPressMentionedUser: (mentionedUser) => {\n if (mentionedUser) onShowUserProfile?.(mentionedUser);\n },\n onToggleVoiceMessage: async (state, setState) => {\n if (isVoiceMessage(message) && message.sendingStatus === 'succeeded') {\n if (playerService.uri === message.url) {\n if (playerService.state === 'playing') {\n await playerService.pause();\n } else {\n await playerService.play(message.url);\n }\n } else {\n if (playerService.state !== 'idle') {\n await resetPlayer();\n }\n\n const shouldSeekToTime = state.duration > state.currentTime && state.currentTime > 0;\n let seekFinished = !shouldSeekToTime;\n\n const forPlayback = playerService.addPlaybackListener(({ stopped, currentTime, duration }) => {\n if (seekFinished) {\n setState((prevState) => ({ ...prevState, currentTime: stopped ? 0 : currentTime, duration }));\n }\n });\n const forState = playerService.addStateListener((state) => {\n switch (state) {\n case 'preparing':\n setState((prevState) => ({ ...prevState, status: 'preparing' }));\n break;\n case 'playing':\n setState((prevState) => ({ ...prevState, status: 'playing' }));\n break;\n case 'idle':\n case 'paused': {\n setState((prevState) => ({ ...prevState, status: 'paused' }));\n break;\n }\n case 'stopped':\n setState((prevState) => ({ ...prevState, status: 'paused' }));\n break;\n }\n });\n playerUnsubscribes.current.push(forPlayback, forState);\n\n await playerService.play(message.url);\n if (shouldSeekToTime) {\n await playerService.seek(state.currentTime);\n seekFinished = true;\n }\n }\n }\n },\n groupedWithPrev: groupWithPrev,\n groupedWithNext: groupWithNext,\n children: reactionChildren,\n sendingStatus: isMyMessage(message, currentUser?.userId) ? (\n <GroupChannelMessageOutgoingStatus channel={channel} message={message} />\n ) : null,\n parentMessage: shouldRenderParentMessage(message) ? (\n <GroupChannelMessageParentMessage\n channel={channel}\n message={message.parentMessage}\n variant={variant}\n childMessage={message}\n onPress={onPressParentMessage}\n />\n ) : null,\n strings: {\n edited: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX,\n senderName: ('sender' in message && message.sender.nickname) || STRINGS.LABELS.USER_NO_NAME,\n sentDate: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_TIME(message),\n fileName: message.isFileMessage() ? STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_FILE_TITLE(message) : '',\n unknownTitle: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_TITLE(message),\n unknownDescription: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_DESC(message),\n },\n };\n\n const userMessageProps: {\n renderRegexTextChildren: (message: SendbirdUserMessage) => string;\n regexTextPatterns: RegexTextPattern[];\n } = {\n renderRegexTextChildren: (message) => {\n if (\n mentionManager.shouldUseMentionedMessageTemplate(message, sbOptions.uikit.groupChannel.channel.enableMention)\n ) {\n return message.mentionedMessageTemplate;\n } else {\n return message.message;\n }\n },\n regexTextPatterns: [\n {\n regex: mentionManager.templateRegex,\n replacer({ match, groups, parentProps, index, keyPrefix }) {\n const user = message.mentionedUsers?.find((it) => it.userId === groups[2]);\n if (user) {\n const mentionColor =\n !isMyMessage(message, currentUser?.userId) && user.userId === currentUser?.userId\n ? palette.onBackgroundLight01\n : parentProps?.color;\n\n return (\n <Text\n {...parentProps}\n key={`${keyPrefix}-${index}`}\n color={mentionColor}\n onPress={() => messageProps.onPressMentionedUser?.(user)}\n onLongPress={messageProps.onLongPress}\n style={[\n parentProps?.style,\n { fontWeight: '700' },\n user.userId === currentUser?.userId && { backgroundColor: palette.highlight },\n ]}\n >\n {`${mentionManager.asMentionedMessageText(user)}`}\n </Text>\n );\n }\n return match;\n },\n },\n ],\n };\n\n const renderMessage = () => {\n switch (getMessageType(message)) {\n case 'admin': {\n return <GroupChannelMessage.Admin message={message as SendbirdAdminMessage} {...messageProps} />;\n }\n case 'user':\n case 'user.opengraph': {\n if (message.ogMetaData && sbOptions.uikitWithAppInfo.groupChannel.channel.enableOgtag) {\n return (\n <GroupChannelMessage.OpenGraphUser\n message={message as SendbirdUserMessage}\n {...userMessageProps}\n {...messageProps}\n />\n );\n } else {\n return (\n <GroupChannelMessage.User\n message={message as SendbirdUserMessage}\n {...userMessageProps}\n {...messageProps}\n />\n );\n }\n }\n case 'file':\n case 'file.audio': {\n return <GroupChannelMessage.File message={message as SendbirdFileMessage} {...messageProps} />;\n }\n case 'file.image': {\n return <GroupChannelMessage.ImageFile message={message as SendbirdFileMessage} {...messageProps} />;\n }\n case 'file.video': {\n return (\n <GroupChannelMessage.VideoFile\n message={message as SendbirdFileMessage}\n fetchThumbnailFromVideoSource={(uri) => mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 })}\n {...messageProps}\n />\n );\n }\n case 'file.voice': {\n return (\n <GroupChannelMessage.VoiceFile\n message={message as SendbirdFileMessage}\n durationMetaArrayKey={VOICE_MESSAGE_META_ARRAY_DURATION_KEY}\n onUnmount={() => {\n if (isVoiceMessage(message) && playerService.uri === message.url) {\n resetPlayer();\n }\n }}\n {...messageProps}\n />\n );\n }\n case 'unknown':\n default: {\n return <GroupChannelMessage.Unknown message={message} {...messageProps} />;\n }\n }\n };\n\n const messageGap = useIIFE(() => {\n if (message.isAdminMessage()) {\n if (nextMessage?.isAdminMessage()) {\n return 8;\n } else {\n return 16;\n }\n } else if (nextMessage && shouldRenderParentMessage(nextMessage)) {\n return 16;\n } else if (groupWithNext) {\n return 2;\n } else {\n return 16;\n }\n });\n\n return (\n <Box paddingHorizontal={16} marginBottom={messageGap}>\n <GroupChannelMessageDateSeparator message={message} prevMessage={prevMessage} />\n <GroupChannelMessageFocusAnimation focused={focused}>{renderMessage()}</GroupChannelMessageFocusAnimation>\n </Box>\n );\n};\n\nexport const GroupChannelTypingIndicatorBubble = () => {\n const { sbOptions } = useSendbirdChat();\n const { publish } = useContext(GroupChannelContexts.PubSub);\n const { typingUsers } = useContext(GroupChannelContexts.TypingIndicator);\n\n const shouldRenderBubble = useIIFE(() => {\n if (typingUsers.length === 0) return false;\n if (!sbOptions.uikit.groupChannel.channel.enableTypingIndicator) return false;\n if (!sbOptions.uikit.groupChannel.channel.typingIndicatorTypes.has(TypingIndicatorType.Bubble)) return false;\n return true;\n });\n\n useEffect(() => {\n if (shouldRenderBubble) publish({ type: 'TYPING_BUBBLE_RENDERED' });\n }, [shouldRenderBubble]);\n\n if (!shouldRenderBubble) return null;\n return (\n <Box paddingHorizontal={16} marginTop={4} marginBottom={16}>\n <TypingIndicatorBubble typingUsers={typingUsers} />\n </Box>\n );\n};\n\nexport default React.memo(GroupChannelMessageRenderer);\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useContext","useEffect","useRef","Box","GroupChannelMessage","Text","TypingIndicatorBubble","useUIKitTheme","calcMessageGrouping","getMessageType","isMyMessage","isVoiceMessage","shouldRenderParentMessage","shouldRenderReaction","useIIFE","VOICE_MESSAGE_META_ARRAY_DURATION_KEY","GroupChannelContexts","useLocalization","usePlatformService","useSendbirdChat","SBUUtils","TypingIndicatorType","ReactionAddons","GroupChannelMessageDateSeparator","GroupChannelMessageFocusAnimation","GroupChannelMessageOutgoingStatus","GroupChannelMessageParentMessage","GroupChannelMessageReplyInfo","GroupChannelMessageRenderer","_ref","channel","message","onPress","onLongPress","onPressParentMessage","onShowUserProfile","onReplyInThreadMessage","enableMessageGrouping","focused","prevMessage","nextMessage","hideParentMessage","playerUnsubscribes","palette","sbOptions","currentUser","mentionManager","voiceMessageStatusManager","STRINGS","mediaService","playerService","groupWithPrev","groupWithNext","Boolean","uikit","groupChannel","replyType","variant","userId","reactionChildren","configs","uikitWithAppInfo","isSuper","enableReactionsSupergroup","enableReactions","reactions","length","createElement","Message","replyInfo","threadInfo","replyCount","resetPlayer","current","forEach","unsubscribe","reset","messageProps","onPressURL","url","openURL","onPressAvatar","sender","onPressMentionedUser","mentionedUser","onToggleVoiceMessage","state","setState","sendingStatus","uri","pause","play","shouldSeekToTime","duration","currentTime","seekFinished","forPlayback","addPlaybackListener","_ref2","stopped","setCurrentTime","channelUrl","messageId","prevState","forState","addStateListener","status","push","seek","groupedWithPrev","groupedWithNext","children","parentMessage","childMessage","strings","edited","GROUP_CHANNEL","MESSAGE_BUBBLE_EDITED_POSTFIX","senderName","nickname","LABELS","USER_NO_NAME","sentDate","MESSAGE_BUBBLE_TIME","fileName","isFileMessage","MESSAGE_BUBBLE_FILE_TITLE","unknownTitle","MESSAGE_BUBBLE_UNKNOWN_TITLE","unknownDescription","MESSAGE_BUBBLE_UNKNOWN_DESC","userMessageProps","renderRegexTextChildren","shouldUseMentionedMessageTemplate","enableMention","mentionedMessageTemplate","regexTextPatterns","regex","templateRegex","replacer","_ref3","_message$mentionedUse","match","groups","parentProps","index","keyPrefix","user","mentionedUsers","find","it","mentionColor","onBackgroundLight01","color","_extends","key","_messageProps$onPress","call","style","fontWeight","backgroundColor","highlight","asMentionedMessageText","renderMessage","Admin","ogMetaData","enableOgtag","OpenGraphUser","User","File","ImageFile","VideoFile","fetchThumbnailFromVideoSource","getVideoThumbnail","timeMills","VoiceFile","durationMetaArrayKey","initialCurrentTime","getCurrentTime","onSubscribeStatus","subscribe","onUnsubscribeStatus","onUnmount","Unknown","messageGap","isAdminMessage","paddingHorizontal","marginBottom","GroupChannelTypingIndicatorBubble","publish","PubSub","typingUsers","TypingIndicator","shouldRenderBubble","enableTypingIndicator","typingIndicatorTypes","has","Bubble","type","marginTop","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useContext, useEffect, useRef } from 'react';\n\nimport type { GroupChannelMessageProps, RegexTextPattern } from '@sendbird/uikit-react-native-foundation';\nimport {\n Box,\n GroupChannelMessage,\n Text,\n TypingIndicatorBubble,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdAdminMessage,\n SendbirdFileMessage,\n SendbirdMessage,\n SendbirdUserMessage,\n calcMessageGrouping,\n getMessageType,\n isMyMessage,\n isVoiceMessage,\n shouldRenderParentMessage,\n shouldRenderReaction,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { VOICE_MESSAGE_META_ARRAY_DURATION_KEY } from '../../constants';\nimport { GroupChannelContexts } from '../../domain/groupChannel/module/moduleContext';\nimport type { GroupChannelProps } from '../../domain/groupChannel/types';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport { TypingIndicatorType } from '../../types';\nimport { ReactionAddons } from '../ReactionAddons';\nimport GroupChannelMessageDateSeparator from './GroupChannelMessageDateSeparator';\nimport GroupChannelMessageFocusAnimation from './GroupChannelMessageFocusAnimation';\nimport GroupChannelMessageOutgoingStatus from './GroupChannelMessageOutgoingStatus';\nimport GroupChannelMessageParentMessage from './GroupChannelMessageParentMessage';\nimport GroupChannelMessageReplyInfo from './GroupChannelMessageReplyInfo';\n\nconst GroupChannelMessageRenderer: GroupChannelProps['Fragment']['renderMessage'] = ({\n channel,\n message,\n onPress,\n onLongPress,\n onPressParentMessage,\n onShowUserProfile,\n onReplyInThreadMessage,\n enableMessageGrouping,\n focused,\n prevMessage,\n nextMessage,\n hideParentMessage,\n}) => {\n const playerUnsubscribes = useRef<(() => void)[]>([]);\n const { palette } = useUIKitTheme();\n const { sbOptions, currentUser, mentionManager, voiceMessageStatusManager } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { mediaService, playerService } = usePlatformService();\n const { groupWithPrev, groupWithNext } = calcMessageGrouping(\n Boolean(enableMessageGrouping),\n message,\n prevMessage,\n nextMessage,\n sbOptions.uikit.groupChannel.channel.replyType === 'thread',\n shouldRenderParentMessage(message, hideParentMessage),\n );\n\n const variant = isMyMessage(message, currentUser?.userId) ? 'outgoing' : 'incoming';\n\n const reactionChildren = useIIFE(() => {\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n if (\n shouldRenderReaction(channel, channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions) &&\n message.reactions &&\n message.reactions.length > 0\n ) {\n return <ReactionAddons.Message channel={channel} message={message} />;\n }\n return null;\n });\n\n const replyInfo = useIIFE(() => {\n if (sbOptions.uikit.groupChannel.channel.replyType !== 'thread') return null;\n if (!channel || !message.threadInfo || !message.threadInfo.replyCount) return null;\n return <GroupChannelMessageReplyInfo channel={channel} message={message} onPress={onReplyInThreadMessage} />;\n });\n\n const resetPlayer = async () => {\n playerUnsubscribes.current.forEach((unsubscribe) => {\n try {\n unsubscribe();\n } catch {}\n });\n playerUnsubscribes.current.length = 0;\n await playerService.reset();\n };\n\n const messageProps: Omit<GroupChannelMessageProps<SendbirdMessage>, 'message'> = {\n channel,\n variant,\n onPress,\n onLongPress,\n onPressURL: (url) => SBUUtils.openURL(url),\n onPressAvatar: () => {\n if ('sender' in message) onShowUserProfile?.(message.sender);\n },\n onPressMentionedUser: (mentionedUser) => {\n if (mentionedUser) onShowUserProfile?.(mentionedUser);\n },\n onToggleVoiceMessage: async (state, setState) => {\n if (isVoiceMessage(message) && message.sendingStatus === 'succeeded') {\n if (playerService.uri === message.url) {\n if (playerService.state === 'playing') {\n await playerService.pause();\n } else {\n await playerService.play(message.url);\n }\n } else {\n if (playerService.state !== 'idle') {\n await resetPlayer();\n }\n\n const shouldSeekToTime = state.duration > state.currentTime && state.currentTime > 0;\n let seekFinished = !shouldSeekToTime;\n\n const forPlayback = playerService.addPlaybackListener(({ stopped, currentTime, duration }) => {\n voiceMessageStatusManager.setCurrentTime(message.channelUrl, message.messageId, currentTime);\n if (seekFinished) {\n setState((prevState) => ({ ...prevState, currentTime: stopped ? 0 : currentTime, duration }));\n }\n });\n const forState = playerService.addStateListener((state) => {\n switch (state) {\n case 'preparing':\n setState((prevState) => ({ ...prevState, status: 'preparing' }));\n break;\n case 'playing':\n setState((prevState) => ({ ...prevState, status: 'playing' }));\n break;\n case 'idle':\n case 'paused': {\n setState((prevState) => ({ ...prevState, status: 'paused' }));\n break;\n }\n case 'stopped':\n setState((prevState) => ({ ...prevState, status: 'paused' }));\n break;\n }\n });\n playerUnsubscribes.current.push(forPlayback, forState);\n\n await playerService.play(message.url);\n if (shouldSeekToTime) {\n await playerService.seek(state.currentTime);\n seekFinished = true;\n }\n }\n }\n },\n groupedWithPrev: groupWithPrev,\n groupedWithNext: groupWithNext,\n children: reactionChildren,\n replyInfo: replyInfo,\n sendingStatus: isMyMessage(message, currentUser?.userId) ? (\n <GroupChannelMessageOutgoingStatus channel={channel} message={message} />\n ) : null,\n parentMessage: shouldRenderParentMessage(message, hideParentMessage) ? (\n <GroupChannelMessageParentMessage\n channel={channel}\n message={message.parentMessage}\n variant={variant}\n childMessage={message}\n onPress={onPressParentMessage}\n />\n ) : null,\n strings: {\n edited: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX,\n senderName: ('sender' in message && message.sender.nickname) || STRINGS.LABELS.USER_NO_NAME,\n sentDate: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_TIME(message),\n fileName: message.isFileMessage() ? STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_FILE_TITLE(message) : '',\n unknownTitle: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_TITLE(message),\n unknownDescription: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_DESC(message),\n },\n };\n\n const userMessageProps: {\n renderRegexTextChildren: (message: SendbirdUserMessage) => string;\n regexTextPatterns: RegexTextPattern[];\n } = {\n renderRegexTextChildren: (message) => {\n if (\n mentionManager.shouldUseMentionedMessageTemplate(message, sbOptions.uikit.groupChannel.channel.enableMention)\n ) {\n return message.mentionedMessageTemplate;\n } else {\n return message.message;\n }\n },\n regexTextPatterns: [\n {\n regex: mentionManager.templateRegex,\n replacer({ match, groups, parentProps, index, keyPrefix }) {\n const user = message.mentionedUsers?.find((it) => it.userId === groups[2]);\n if (user) {\n const mentionColor =\n !isMyMessage(message, currentUser?.userId) && user.userId === currentUser?.userId\n ? palette.onBackgroundLight01\n : parentProps?.color;\n\n return (\n <Text\n {...parentProps}\n key={`${keyPrefix}-${index}`}\n color={mentionColor}\n onPress={() => messageProps.onPressMentionedUser?.(user)}\n onLongPress={messageProps.onLongPress}\n style={[\n parentProps?.style,\n { fontWeight: '700' },\n user.userId === currentUser?.userId && { backgroundColor: palette.highlight },\n ]}\n >\n {`${mentionManager.asMentionedMessageText(user)}`}\n </Text>\n );\n }\n return match;\n },\n },\n ],\n };\n\n const renderMessage = () => {\n switch (getMessageType(message)) {\n case 'admin': {\n return <GroupChannelMessage.Admin message={message as SendbirdAdminMessage} {...messageProps} />;\n }\n case 'user':\n case 'user.opengraph': {\n if (message.ogMetaData && sbOptions.uikitWithAppInfo.groupChannel.channel.enableOgtag) {\n return (\n <GroupChannelMessage.OpenGraphUser\n message={message as SendbirdUserMessage}\n {...userMessageProps}\n {...messageProps}\n />\n );\n } else {\n return (\n <GroupChannelMessage.User\n message={message as SendbirdUserMessage}\n {...userMessageProps}\n {...messageProps}\n />\n );\n }\n }\n case 'file':\n case 'file.audio': {\n return <GroupChannelMessage.File message={message as SendbirdFileMessage} {...messageProps} />;\n }\n case 'file.image': {\n return <GroupChannelMessage.ImageFile message={message as SendbirdFileMessage} {...messageProps} />;\n }\n case 'file.video': {\n return (\n <GroupChannelMessage.VideoFile\n message={message as SendbirdFileMessage}\n fetchThumbnailFromVideoSource={(uri) => mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 })}\n {...messageProps}\n />\n );\n }\n case 'file.voice': {\n return (\n <GroupChannelMessage.VoiceFile\n message={message as SendbirdFileMessage}\n durationMetaArrayKey={VOICE_MESSAGE_META_ARRAY_DURATION_KEY}\n initialCurrentTime={voiceMessageStatusManager.getCurrentTime(message.channelUrl, message.messageId)}\n onSubscribeStatus={voiceMessageStatusManager.subscribe}\n onUnsubscribeStatus={voiceMessageStatusManager.unsubscribe}\n onUnmount={() => {\n if (isVoiceMessage(message) && playerService.uri === message.url) {\n resetPlayer();\n }\n }}\n {...messageProps}\n />\n );\n }\n case 'unknown':\n default: {\n return <GroupChannelMessage.Unknown message={message} {...messageProps} />;\n }\n }\n };\n\n const messageGap = useIIFE(() => {\n if (message.isAdminMessage()) {\n if (nextMessage?.isAdminMessage()) {\n return 8;\n } else {\n return 16;\n }\n } else if (nextMessage && shouldRenderParentMessage(nextMessage, hideParentMessage)) {\n return 16;\n } else if (groupWithNext) {\n return 2;\n } else {\n return 16;\n }\n });\n\n return (\n <Box paddingHorizontal={16} marginBottom={messageGap}>\n <GroupChannelMessageDateSeparator message={message} prevMessage={prevMessage} />\n <GroupChannelMessageFocusAnimation focused={focused}>{renderMessage()}</GroupChannelMessageFocusAnimation>\n </Box>\n );\n};\n\nexport const GroupChannelTypingIndicatorBubble = () => {\n const { sbOptions } = useSendbirdChat();\n const { publish } = useContext(GroupChannelContexts.PubSub);\n const { typingUsers } = useContext(GroupChannelContexts.TypingIndicator);\n\n const shouldRenderBubble = useIIFE(() => {\n if (typingUsers.length === 0) return false;\n if (!sbOptions.uikit.groupChannel.channel.enableTypingIndicator) return false;\n if (!sbOptions.uikit.groupChannel.channel.typingIndicatorTypes.has(TypingIndicatorType.Bubble)) return false;\n return true;\n });\n\n useEffect(() => {\n if (shouldRenderBubble) publish({ type: 'TYPING_BUBBLE_RENDERED' });\n }, [shouldRenderBubble]);\n\n if (!shouldRenderBubble) return null;\n return (\n <Box paddingHorizontal={16} marginTop={4} marginBottom={16}>\n <TypingIndicatorBubble typingUsers={typingUsers} />\n </Box>\n );\n};\n\nexport default React.memo(GroupChannelMessageRenderer);\n"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { Pressable } from 'react-native';
3
3
  import { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
4
+ import { useForceUpdate, useGroupChannelHandler } from '@sendbird/uikit-tools';
4
5
  import { getReactionCount } from '@sendbird/uikit-utils';
5
6
  import { DEFAULT_LONG_PRESS_DELAY, UNKNOWN_USER_ID } from '../../constants';
6
7
  import { useReaction, useSendbirdChat } from '../../hooks/useContext';
@@ -20,7 +21,7 @@ const createOnPressReaction = (reaction, channel, message, reacted) => {
20
21
  }
21
22
  };
22
23
  };
23
- const createReactionButtons = (channel, message, getEmoji, emojiLimit, onOpenReactionList, onOpenReactionUserList, currentUserId) => {
24
+ const createReactionButtons = (channel, message, getEmoji, emojiLimit, onOpenReactionList, onOpenReactionUserList, currentUserId, reactionAddonType) => {
24
25
  const reactions = message.reactions ?? [];
25
26
  const buttons = reactions.map((reaction, index) => {
26
27
  const isNotLastOfRow = index % NUM_COL !== NUM_COL - 1;
@@ -38,7 +39,7 @@ const createReactionButtons = (channel, message, getEmoji, emojiLimit, onOpenRea
38
39
  url: getEmoji(reaction.key).url,
39
40
  count: getReactionCount(reaction),
40
41
  reacted: pressed || getUserReacted(reaction, currentUserId),
41
- style: [isNotLastOfRow && styles.marginRight, isNotLastOfCol && styles.marginBottom]
42
+ style: reactionAddonType === 'default' ? [isNotLastOfRow && styles.marginRight, isNotLastOfCol && styles.marginBottom] : [styles.marginRight, styles.marginBottom]
42
43
  });
43
44
  });
44
45
  });
@@ -61,12 +62,14 @@ const MessageReactionAddon = _ref3 => {
61
62
  var _message$reactions;
62
63
  let {
63
64
  channel,
64
- message
65
+ message,
66
+ reactionAddonType = 'default'
65
67
  } = _ref3;
66
68
  const {
67
69
  colors
68
70
  } = useUIKitTheme();
69
71
  const {
72
+ sdk,
70
73
  emojiManager,
71
74
  currentUser
72
75
  } = useSendbirdChat();
@@ -74,7 +77,16 @@ const MessageReactionAddon = _ref3 => {
74
77
  openReactionList,
75
78
  openReactionUserList
76
79
  } = useReaction();
77
- if (!((_message$reactions = message.reactions) !== null && _message$reactions !== void 0 && _message$reactions.length)) return null;
80
+ const forceUpdate = useForceUpdate();
81
+ useGroupChannelHandler(sdk, {
82
+ async onReactionUpdated(_, event) {
83
+ if (event.messageId === message.messageId) {
84
+ message.applyReactionEvent(event);
85
+ forceUpdate();
86
+ }
87
+ }
88
+ });
89
+ if (reactionAddonType === 'default' && !((_message$reactions = message.reactions) !== null && _message$reactions !== void 0 && _message$reactions.length)) return null;
78
90
  const reactionButtons = createReactionButtons(channel, message, key => emojiManager.allEmojiMap[key], emojiManager.allEmoji.length, () => openReactionList({
79
91
  channel,
80
92
  message
@@ -82,9 +94,10 @@ const MessageReactionAddon = _ref3 => {
82
94
  channel,
83
95
  message,
84
96
  focusIndex
85
- }), currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId);
97
+ }), currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId, reactionAddonType);
98
+ const containerStyle = reactionAddonType === 'default' ? styles.reactionContainer : styles.reactionThreadParentMessageContainer;
86
99
  return /*#__PURE__*/React.createElement(Pressable, {
87
- style: [styles.reactionContainer, {
100
+ style: [containerStyle, {
88
101
  backgroundColor: colors.background,
89
102
  borderColor: colors.ui.reaction.rounded.enabled.background
90
103
  }]
@@ -99,6 +112,10 @@ const styles = createStyleSheet({
99
112
  borderRadius: 16,
100
113
  borderWidth: 1
101
114
  },
115
+ reactionThreadParentMessageContainer: {
116
+ flexDirection: 'row',
117
+ flexWrap: 'wrap'
118
+ },
102
119
  marginRight: {
103
120
  marginRight: 4.5
104
121
  },
@@ -1 +1 @@
1
- {"version":3,"names":["React","Pressable","createStyleSheet","useUIKitTheme","getReactionCount","DEFAULT_LONG_PRESS_DELAY","UNKNOWN_USER_ID","useReaction","useSendbirdChat","ReactionRoundedButton","NUM_COL","REACTION_MORE_KEY","getUserReacted","reaction","userId","arguments","length","undefined","userIds","indexOf","createOnPressReaction","channel","message","reacted","deleteReaction","key","addReaction","createReactionButtons","getEmoji","emojiLimit","onOpenReactionList","onOpenReactionUserList","currentUserId","reactions","buttons","map","index","isNotLastOfRow","isNotLastOfCol","createElement","onPress","onLongPress","delayLongPress","_ref","pressed","url","count","style","styles","marginRight","marginBottom","push","_ref2","More","MessageReactionAddon","_ref3","_message$reactions","colors","emojiManager","currentUser","openReactionList","openReactionUserList","reactionButtons","allEmojiMap","allEmoji","focusIndex","reactionContainer","backgroundColor","background","borderColor","ui","rounded","enabled","alignItems","flexDirection","flexWrap","padding","borderRadius","borderWidth"],"sources":["MessageReactionAddon.tsx"],"sourcesContent":["import React from 'react';\nimport { Pressable } from 'react-native';\n\nimport type { Emoji } from '@sendbird/chat';\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdBaseChannel, SendbirdBaseMessage, SendbirdReaction } from '@sendbird/uikit-utils';\nimport { getReactionCount } from '@sendbird/uikit-utils';\n\nimport { DEFAULT_LONG_PRESS_DELAY, UNKNOWN_USER_ID } from '../../constants';\nimport { useReaction, useSendbirdChat } from '../../hooks/useContext';\nimport ReactionRoundedButton from './ReactionRoundedButton';\n\nconst NUM_COL = 4;\nconst REACTION_MORE_KEY = 'reaction-more-button';\n\nconst getUserReacted = (reaction: SendbirdReaction, userId = UNKNOWN_USER_ID) => {\n return reaction.userIds.indexOf(userId) > -1;\n};\n\nconst createOnPressReaction = (\n reaction: SendbirdReaction,\n channel: SendbirdBaseChannel,\n message: SendbirdBaseMessage,\n reacted: boolean,\n) => {\n return () => {\n if (reacted) {\n return channel.deleteReaction(message, reaction.key);\n } else {\n return channel.addReaction(message, reaction.key);\n }\n };\n};\n\nconst createReactionButtons = (\n channel: SendbirdBaseChannel,\n message: SendbirdBaseMessage,\n getEmoji: (key: string) => Emoji,\n emojiLimit: number,\n onOpenReactionList: () => void,\n onOpenReactionUserList: (focusIndex: number) => void,\n currentUserId?: string,\n) => {\n const reactions = message.reactions ?? [];\n const buttons = reactions.map((reaction, index) => {\n const isNotLastOfRow = index % NUM_COL !== NUM_COL - 1;\n const isNotLastOfCol = index < NUM_COL && reactions.length >= NUM_COL;\n return (\n <Pressable\n key={reaction.key}\n onPress={createOnPressReaction(reaction, channel, message, getUserReacted(reaction, currentUserId))}\n onLongPress={() => onOpenReactionUserList(index)}\n delayLongPress={DEFAULT_LONG_PRESS_DELAY}\n >\n {({ pressed }) => (\n <ReactionRoundedButton\n url={getEmoji(reaction.key).url}\n count={getReactionCount(reaction)}\n reacted={pressed || getUserReacted(reaction, currentUserId)}\n style={[isNotLastOfRow && styles.marginRight, isNotLastOfCol && styles.marginBottom]}\n />\n )}\n </Pressable>\n );\n });\n if (buttons.length < emojiLimit) {\n buttons.push(\n <Pressable key={REACTION_MORE_KEY} onPress={onOpenReactionList}>\n {({ pressed }) => <ReactionRoundedButton.More pressed={pressed} />}\n </Pressable>,\n );\n }\n\n return buttons;\n};\n\nconst MessageReactionAddon = ({ channel, message }: { channel: SendbirdBaseChannel; message: SendbirdBaseMessage }) => {\n const { colors } = useUIKitTheme();\n const { emojiManager, currentUser } = useSendbirdChat();\n const { openReactionList, openReactionUserList } = useReaction();\n\n if (!message.reactions?.length) return null;\n\n const reactionButtons = createReactionButtons(\n channel,\n message,\n (key) => emojiManager.allEmojiMap[key],\n emojiManager.allEmoji.length,\n () => openReactionList({ channel, message }),\n (focusIndex) => openReactionUserList({ channel, message, focusIndex }),\n currentUser?.userId,\n );\n\n return (\n <Pressable\n style={[\n styles.reactionContainer,\n { backgroundColor: colors.background, borderColor: colors.ui.reaction.rounded.enabled.background },\n ]}\n >\n {reactionButtons}\n </Pressable>\n );\n};\n\nconst styles = createStyleSheet({\n reactionContainer: {\n alignItems: 'stretch',\n flexDirection: 'row',\n flexWrap: 'wrap',\n padding: 8,\n borderRadius: 16,\n borderWidth: 1,\n },\n marginRight: {\n marginRight: 4.5,\n },\n marginBottom: {\n marginBottom: 4,\n },\n});\n\nexport default MessageReactionAddon;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","Pressable","createStyleSheet","useUIKitTheme","useForceUpdate","useGroupChannelHandler","getReactionCount","DEFAULT_LONG_PRESS_DELAY","UNKNOWN_USER_ID","useReaction","useSendbirdChat","ReactionRoundedButton","NUM_COL","REACTION_MORE_KEY","getUserReacted","reaction","userId","arguments","length","undefined","userIds","indexOf","createOnPressReaction","channel","message","reacted","deleteReaction","key","addReaction","createReactionButtons","getEmoji","emojiLimit","onOpenReactionList","onOpenReactionUserList","currentUserId","reactionAddonType","reactions","buttons","map","index","isNotLastOfRow","isNotLastOfCol","createElement","onPress","onLongPress","delayLongPress","_ref","pressed","url","count","style","styles","marginRight","marginBottom","push","_ref2","More","MessageReactionAddon","_ref3","_message$reactions","colors","sdk","emojiManager","currentUser","openReactionList","openReactionUserList","forceUpdate","onReactionUpdated","_","event","messageId","applyReactionEvent","reactionButtons","allEmojiMap","allEmoji","focusIndex","containerStyle","reactionContainer","reactionThreadParentMessageContainer","backgroundColor","background","borderColor","ui","rounded","enabled","alignItems","flexDirection","flexWrap","padding","borderRadius","borderWidth"],"sources":["MessageReactionAddon.tsx"],"sourcesContent":["import React from 'react';\nimport { Pressable } from 'react-native';\n\nimport type { Emoji } from '@sendbird/chat';\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { useForceUpdate, useGroupChannelHandler } from '@sendbird/uikit-tools';\nimport type { SendbirdBaseChannel, SendbirdBaseMessage, SendbirdReaction } from '@sendbird/uikit-utils';\nimport { getReactionCount } from '@sendbird/uikit-utils';\n\nimport { DEFAULT_LONG_PRESS_DELAY, UNKNOWN_USER_ID } from '../../constants';\nimport { useReaction, useSendbirdChat } from '../../hooks/useContext';\nimport ReactionRoundedButton from './ReactionRoundedButton';\n\nconst NUM_COL = 4;\nconst REACTION_MORE_KEY = 'reaction-more-button';\nexport type ReactionAddonType = 'default' | 'thread_parent_message';\n\nconst getUserReacted = (reaction: SendbirdReaction, userId = UNKNOWN_USER_ID) => {\n return reaction.userIds.indexOf(userId) > -1;\n};\n\nconst createOnPressReaction = (\n reaction: SendbirdReaction,\n channel: SendbirdBaseChannel,\n message: SendbirdBaseMessage,\n reacted: boolean,\n) => {\n return () => {\n if (reacted) {\n return channel.deleteReaction(message, reaction.key);\n } else {\n return channel.addReaction(message, reaction.key);\n }\n };\n};\n\nconst createReactionButtons = (\n channel: SendbirdBaseChannel,\n message: SendbirdBaseMessage,\n getEmoji: (key: string) => Emoji,\n emojiLimit: number,\n onOpenReactionList: () => void,\n onOpenReactionUserList: (focusIndex: number) => void,\n currentUserId?: string,\n reactionAddonType?: ReactionAddonType,\n) => {\n const reactions = message.reactions ?? [];\n const buttons = reactions.map((reaction, index) => {\n const isNotLastOfRow = index % NUM_COL !== NUM_COL - 1;\n const isNotLastOfCol = index < NUM_COL && reactions.length >= NUM_COL;\n return (\n <Pressable\n key={reaction.key}\n onPress={createOnPressReaction(reaction, channel, message, getUserReacted(reaction, currentUserId))}\n onLongPress={() => onOpenReactionUserList(index)}\n delayLongPress={DEFAULT_LONG_PRESS_DELAY}\n >\n {({ pressed }) => (\n <ReactionRoundedButton\n url={getEmoji(reaction.key).url}\n count={getReactionCount(reaction)}\n reacted={pressed || getUserReacted(reaction, currentUserId)}\n style={\n reactionAddonType === 'default'\n ? [isNotLastOfRow && styles.marginRight, isNotLastOfCol && styles.marginBottom]\n : [styles.marginRight, styles.marginBottom]\n }\n />\n )}\n </Pressable>\n );\n });\n if (buttons.length < emojiLimit) {\n buttons.push(\n <Pressable key={REACTION_MORE_KEY} onPress={onOpenReactionList}>\n {({ pressed }) => <ReactionRoundedButton.More pressed={pressed} />}\n </Pressable>,\n );\n }\n\n return buttons;\n};\n\nconst MessageReactionAddon = ({\n channel,\n message,\n reactionAddonType = 'default',\n}: {\n channel: SendbirdBaseChannel;\n message: SendbirdBaseMessage;\n reactionAddonType?: ReactionAddonType;\n}) => {\n const { colors } = useUIKitTheme();\n const { sdk, emojiManager, currentUser } = useSendbirdChat();\n const { openReactionList, openReactionUserList } = useReaction();\n const forceUpdate = useForceUpdate();\n\n useGroupChannelHandler(sdk, {\n async onReactionUpdated(_, event) {\n if (event.messageId === message.messageId) {\n message.applyReactionEvent(event);\n forceUpdate();\n }\n },\n });\n\n if (reactionAddonType === 'default' && !message.reactions?.length) return null;\n\n const reactionButtons = createReactionButtons(\n channel,\n message,\n (key) => emojiManager.allEmojiMap[key],\n emojiManager.allEmoji.length,\n () => openReactionList({ channel, message }),\n (focusIndex) => openReactionUserList({ channel, message, focusIndex }),\n currentUser?.userId,\n reactionAddonType,\n );\n\n const containerStyle =\n reactionAddonType === 'default' ? styles.reactionContainer : styles.reactionThreadParentMessageContainer;\n\n return (\n <Pressable\n style={[\n containerStyle,\n { backgroundColor: colors.background, borderColor: colors.ui.reaction.rounded.enabled.background },\n ]}\n >\n {reactionButtons}\n </Pressable>\n );\n};\n\nconst styles = createStyleSheet({\n reactionContainer: {\n alignItems: 'stretch',\n flexDirection: 'row',\n flexWrap: 'wrap',\n padding: 8,\n borderRadius: 16,\n borderWidth: 1,\n },\n reactionThreadParentMessageContainer: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n marginRight: {\n marginRight: 4.5,\n },\n marginBottom: {\n marginBottom: 4,\n },\n});\n\nexport default MessageReactionAddon;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,SAAS,QAAQ,cAAc;AAGxC,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,yCAAyC;AACzF,SAASC,cAAc,EAAEC,sBAAsB,QAAQ,uBAAuB;AAE9E,SAASC,gBAAgB,QAAQ,uBAAuB;AAExD,SAASC,wBAAwB,EAAEC,eAAe,QAAQ,iBAAiB;AAC3E,SAASC,WAAW,EAAEC,eAAe,QAAQ,wBAAwB;AACrE,OAAOC,qBAAqB,MAAM,yBAAyB;AAE3D,MAAMC,OAAO,GAAG,CAAC;AACjB,MAAMC,iBAAiB,GAAG,sBAAsB;AAGhD,MAAMC,cAAc,GAAG,SAAAA,CAACC,QAA0B,EAA+B;EAAA,IAA7BC,MAAM,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGT,eAAe;EAC1E,OAAOO,QAAQ,CAACK,OAAO,CAACC,OAAO,CAACL,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,MAAMM,qBAAqB,GAAGA,CAC5BP,QAA0B,EAC1BQ,OAA4B,EAC5BC,OAA4B,EAC5BC,OAAgB,KACb;EACH,OAAO,MAAM;IACX,IAAIA,OAAO,EAAE;MACX,OAAOF,OAAO,CAACG,cAAc,CAACF,OAAO,EAAET,QAAQ,CAACY,GAAG,CAAC;IACtD,CAAC,MAAM;MACL,OAAOJ,OAAO,CAACK,WAAW,CAACJ,OAAO,EAAET,QAAQ,CAACY,GAAG,CAAC;IACnD;EACF,CAAC;AACH,CAAC;AAED,MAAME,qBAAqB,GAAGA,CAC5BN,OAA4B,EAC5BC,OAA4B,EAC5BM,QAAgC,EAChCC,UAAkB,EAClBC,kBAA8B,EAC9BC,sBAAoD,EACpDC,aAAsB,EACtBC,iBAAqC,KAClC;EACH,MAAMC,SAAS,GAAGZ,OAAO,CAACY,SAAS,IAAI,EAAE;EACzC,MAAMC,OAAO,GAAGD,SAAS,CAACE,GAAG,CAAC,CAACvB,QAAQ,EAAEwB,KAAK,KAAK;IACjD,MAAMC,cAAc,GAAGD,KAAK,GAAG3B,OAAO,KAAKA,OAAO,GAAG,CAAC;IACtD,MAAM6B,cAAc,GAAGF,KAAK,GAAG3B,OAAO,IAAIwB,SAAS,CAAClB,MAAM,IAAIN,OAAO;IACrE,oBACEZ,KAAA,CAAA0C,aAAA,CAACzC,SAAS;MACR0B,GAAG,EAAEZ,QAAQ,CAACY,GAAI;MAClBgB,OAAO,EAAErB,qBAAqB,CAACP,QAAQ,EAAEQ,OAAO,EAAEC,OAAO,EAAEV,cAAc,CAACC,QAAQ,EAAEmB,aAAa,CAAC,CAAE;MACpGU,WAAW,EAAEA,CAAA,KAAMX,sBAAsB,CAACM,KAAK,CAAE;MACjDM,cAAc,EAAEtC;IAAyB,GAExCuC,IAAA;MAAA,IAAC;QAAEC;MAAQ,CAAC,GAAAD,IAAA;MAAA,oBACX9C,KAAA,CAAA0C,aAAA,CAAC/B,qBAAqB;QACpBqC,GAAG,EAAElB,QAAQ,CAACf,QAAQ,CAACY,GAAG,CAAC,CAACqB,GAAI;QAChCC,KAAK,EAAE3C,gBAAgB,CAACS,QAAQ,CAAE;QAClCU,OAAO,EAAEsB,OAAO,IAAIjC,cAAc,CAACC,QAAQ,EAAEmB,aAAa,CAAE;QAC5DgB,KAAK,EACHf,iBAAiB,KAAK,SAAS,GAC3B,CAACK,cAAc,IAAIW,MAAM,CAACC,WAAW,EAAEX,cAAc,IAAIU,MAAM,CAACE,YAAY,CAAC,GAC7E,CAACF,MAAM,CAACC,WAAW,EAAED,MAAM,CAACE,YAAY;MAC7C,EACD;IAAA,CACH,CACS;EAEhB,CAAC,CAAC;EACF,IAAIhB,OAAO,CAACnB,MAAM,GAAGa,UAAU,EAAE;IAC/BM,OAAO,CAACiB,IAAI,eACVtD,KAAA,CAAA0C,aAAA,CAACzC,SAAS;MAAC0B,GAAG,EAAEd,iBAAkB;MAAC8B,OAAO,EAAEX;IAAmB,GAC5DuB,KAAA;MAAA,IAAC;QAAER;MAAQ,CAAC,GAAAQ,KAAA;MAAA,oBAAKvD,KAAA,CAAA0C,aAAA,CAAC/B,qBAAqB,CAAC6C,IAAI;QAACT,OAAO,EAAEA;MAAQ,EAAG;IAAA,EACxD,CACb;EACH;EAEA,OAAOV,OAAO;AAChB,CAAC;AAED,MAAMoB,oBAAoB,GAAGC,KAAA,IAQvB;EAAA,IAAAC,kBAAA;EAAA,IARwB;IAC5BpC,OAAO;IACPC,OAAO;IACPW,iBAAiB,GAAG;EAKtB,CAAC,GAAAuB,KAAA;EACC,MAAM;IAAEE;EAAO,CAAC,GAAGzD,aAAa,EAAE;EAClC,MAAM;IAAE0D,GAAG;IAAEC,YAAY;IAAEC;EAAY,CAAC,GAAGrD,eAAe,EAAE;EAC5D,MAAM;IAAEsD,gBAAgB;IAAEC;EAAqB,CAAC,GAAGxD,WAAW,EAAE;EAChE,MAAMyD,WAAW,GAAG9D,cAAc,EAAE;EAEpCC,sBAAsB,CAACwD,GAAG,EAAE;IAC1B,MAAMM,iBAAiBA,CAACC,CAAC,EAAEC,KAAK,EAAE;MAChC,IAAIA,KAAK,CAACC,SAAS,KAAK9C,OAAO,CAAC8C,SAAS,EAAE;QACzC9C,OAAO,CAAC+C,kBAAkB,CAACF,KAAK,CAAC;QACjCH,WAAW,EAAE;MACf;IACF;EACF,CAAC,CAAC;EAEF,IAAI/B,iBAAiB,KAAK,SAAS,IAAI,GAAAwB,kBAAA,GAACnC,OAAO,CAACY,SAAS,cAAAuB,kBAAA,eAAjBA,kBAAA,CAAmBzC,MAAM,GAAE,OAAO,IAAI;EAE9E,MAAMsD,eAAe,GAAG3C,qBAAqB,CAC3CN,OAAO,EACPC,OAAO,EACNG,GAAG,IAAKmC,YAAY,CAACW,WAAW,CAAC9C,GAAG,CAAC,EACtCmC,YAAY,CAACY,QAAQ,CAACxD,MAAM,EAC5B,MAAM8C,gBAAgB,CAAC;IAAEzC,OAAO;IAAEC;EAAQ,CAAC,CAAC,EAC3CmD,UAAU,IAAKV,oBAAoB,CAAC;IAAE1C,OAAO;IAAEC,OAAO;IAAEmD;EAAW,CAAC,CAAC,EACtEZ,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAE/C,MAAM,EACnBmB,iBAAiB,CAClB;EAED,MAAMyC,cAAc,GAClBzC,iBAAiB,KAAK,SAAS,GAAGgB,MAAM,CAAC0B,iBAAiB,GAAG1B,MAAM,CAAC2B,oCAAoC;EAE1G,oBACE9E,KAAA,CAAA0C,aAAA,CAACzC,SAAS;IACRiD,KAAK,EAAE,CACL0B,cAAc,EACd;MAAEG,eAAe,EAAEnB,MAAM,CAACoB,UAAU;MAAEC,WAAW,EAAErB,MAAM,CAACsB,EAAE,CAACnE,QAAQ,CAACoE,OAAO,CAACC,OAAO,CAACJ;IAAW,CAAC;EAClG,GAEDR,eAAe,CACN;AAEhB,CAAC;AAED,MAAMrB,MAAM,GAAGjD,gBAAgB,CAAC;EAC9B2E,iBAAiB,EAAE;IACjBQ,UAAU,EAAE,SAAS;IACrBC,aAAa,EAAE,KAAK;IACpBC,QAAQ,EAAE,MAAM;IAChBC,OAAO,EAAE,CAAC;IACVC,YAAY,EAAE,EAAE;IAChBC,WAAW,EAAE;EACf,CAAC;EACDZ,oCAAoC,EAAE;IACpCQ,aAAa,EAAE,KAAK;IACpBC,QAAQ,EAAE;EACZ,CAAC;EACDnC,WAAW,EAAE;IACXA,WAAW,EAAE;EACf,CAAC;EACDC,YAAY,EAAE;IACZA,YAAY,EAAE;EAChB;AACF,CAAC,CAAC;AAEF,eAAeI,oBAAoB"}
@@ -0,0 +1,66 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ import React, { forwardRef, useRef } from 'react';
3
+ import { StyleSheet } from 'react-native';
4
+ import { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
5
+ import { NOOP, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';
6
+ import FlatListInternal from '../ChatFlatList/FlatListInternal';
7
+ const BOTTOM_DETECT_THRESHOLD = 50;
8
+ const UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;
9
+ const ThreadChatFlatList = /*#__PURE__*/forwardRef(function ThreadChatFlatList(_ref, ref) {
10
+ let {
11
+ onTopReached,
12
+ onBottomReached,
13
+ onScrolledAwayFromBottom,
14
+ onScroll,
15
+ ...props
16
+ } = _ref;
17
+ const {
18
+ select
19
+ } = useUIKitTheme();
20
+ const contentOffsetY = useRef(0);
21
+ const _onScroll = useFreshCallback(event => {
22
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll(event);
23
+ const {
24
+ contentOffset,
25
+ contentSize,
26
+ layoutMeasurement
27
+ } = event.nativeEvent;
28
+ const prevOffsetY = contentOffsetY.current;
29
+ const currOffsetY = contentOffset.y;
30
+ const bottomDetectThreshold = contentSize.height - layoutMeasurement.height - BOTTOM_DETECT_THRESHOLD;
31
+ if (bottomDetectThreshold < prevOffsetY && currOffsetY <= bottomDetectThreshold) {
32
+ onScrolledAwayFromBottom(true);
33
+ } else if (bottomDetectThreshold < currOffsetY && prevOffsetY <= bottomDetectThreshold) {
34
+ onScrolledAwayFromBottom(false);
35
+ }
36
+ contentOffsetY.current = contentOffset.y;
37
+ });
38
+ return /*#__PURE__*/React.createElement(FlatListInternal, _extends({
39
+ bounces: false,
40
+ removeClippedSubviews: true,
41
+ keyboardDismissMode: 'on-drag',
42
+ keyboardShouldPersistTaps: 'handled',
43
+ indicatorStyle: select({
44
+ light: 'black',
45
+ dark: 'white'
46
+ })
47
+ }, props, {
48
+ ref: ref,
49
+ onEndReached: onBottomReached,
50
+ onScrollToIndexFailed: NOOP,
51
+ onStartReached: onTopReached,
52
+ scrollEventThrottle: 16,
53
+ onScroll: _onScroll,
54
+ keyExtractor: getMessageUniqId,
55
+ style: {
56
+ flex: 1,
57
+ ...StyleSheet.flatten(props.style)
58
+ },
59
+ maintainVisibleContentPosition: {
60
+ minIndexForVisible: 0,
61
+ autoscrollToTopThreshold: UNREACHABLE_THRESHOLD
62
+ }
63
+ }));
64
+ });
65
+ export default ThreadChatFlatList;
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","forwardRef","useRef","StyleSheet","useUIKitTheme","NOOP","getMessageUniqId","useFreshCallback","FlatListInternal","BOTTOM_DETECT_THRESHOLD","UNREACHABLE_THRESHOLD","Number","MIN_SAFE_INTEGER","ThreadChatFlatList","_ref","ref","onTopReached","onBottomReached","onScrolledAwayFromBottom","onScroll","props","select","contentOffsetY","_onScroll","event","contentOffset","contentSize","layoutMeasurement","nativeEvent","prevOffsetY","current","currOffsetY","y","bottomDetectThreshold","height","createElement","_extends","bounces","removeClippedSubviews","keyboardDismissMode","keyboardShouldPersistTaps","indicatorStyle","light","dark","onEndReached","onScrollToIndexFailed","onStartReached","scrollEventThrottle","keyExtractor","style","flex","flatten","maintainVisibleContentPosition","minIndexForVisible","autoscrollToTopThreshold"],"sources":["index.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from 'react';\nimport { FlatListProps, FlatList as RNFlatList, StyleSheet } from 'react-native';\n\nimport { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { NOOP, SendbirdMessage, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport FlatListInternal from '../ChatFlatList/FlatListInternal';\n\nconst BOTTOM_DETECT_THRESHOLD = 50;\nconst UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;\n\ntype Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {\n onBottomReached: () => void;\n onTopReached: () => void;\n onScrolledAwayFromBottom: (value: boolean) => void;\n};\nconst ThreadChatFlatList = forwardRef<RNFlatList, Props>(function ThreadChatFlatList(\n { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, ...props },\n ref,\n) {\n const { select } = useUIKitTheme();\n const contentOffsetY = useRef(0);\n\n const _onScroll = useFreshCallback<NonNullable<Props['onScroll']>>((event) => {\n onScroll?.(event);\n\n const { contentOffset, contentSize, layoutMeasurement } = event.nativeEvent;\n\n const prevOffsetY = contentOffsetY.current;\n const currOffsetY = contentOffset.y;\n\n const bottomDetectThreshold = contentSize.height - layoutMeasurement.height - BOTTOM_DETECT_THRESHOLD;\n if (bottomDetectThreshold < prevOffsetY && currOffsetY <= bottomDetectThreshold) {\n onScrolledAwayFromBottom(true);\n } else if (bottomDetectThreshold < currOffsetY && prevOffsetY <= bottomDetectThreshold) {\n onScrolledAwayFromBottom(false);\n }\n\n contentOffsetY.current = contentOffset.y;\n });\n\n return (\n <FlatListInternal\n bounces={false}\n removeClippedSubviews\n keyboardDismissMode={'on-drag'}\n keyboardShouldPersistTaps={'handled'}\n indicatorStyle={select({ light: 'black', dark: 'white' })}\n {...props}\n ref={ref}\n onEndReached={onBottomReached}\n onScrollToIndexFailed={NOOP}\n onStartReached={onTopReached}\n scrollEventThrottle={16}\n onScroll={_onScroll}\n keyExtractor={getMessageUniqId}\n style={{ flex: 1, ...StyleSheet.flatten(props.style) }}\n maintainVisibleContentPosition={{ minIndexForVisible: 0, autoscrollToTopThreshold: UNREACHABLE_THRESHOLD }}\n />\n );\n});\n\nexport default ThreadChatFlatList;\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,MAAM,QAAQ,OAAO;AACjD,SAAgDC,UAAU,QAAQ,cAAc;AAEhF,SAASC,aAAa,QAAQ,yCAAyC;AACvE,SAASC,IAAI,EAAmBC,gBAAgB,EAAEC,gBAAgB,QAAQ,uBAAuB;AAEjG,OAAOC,gBAAgB,MAAM,kCAAkC;AAE/D,MAAMC,uBAAuB,GAAG,EAAE;AAClC,MAAMC,qBAAqB,GAAGC,MAAM,CAACC,gBAAgB;AAOrD,MAAMC,kBAAkB,gBAAGZ,UAAU,CAAoB,SAASY,kBAAkBA,CAAAC,IAAA,EAElFC,GAAG,EACH;EAAA,IAFA;IAAEC,YAAY;IAAEC,eAAe;IAAEC,wBAAwB;IAAEC,QAAQ;IAAE,GAAGC;EAAM,CAAC,GAAAN,IAAA;EAG/E,MAAM;IAAEO;EAAO,CAAC,GAAGjB,aAAa,EAAE;EAClC,MAAMkB,cAAc,GAAGpB,MAAM,CAAC,CAAC,CAAC;EAEhC,MAAMqB,SAAS,GAAGhB,gBAAgB,CAAkCiB,KAAK,IAAK;IAC5EL,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGK,KAAK,CAAC;IAEjB,MAAM;MAAEC,aAAa;MAAEC,WAAW;MAAEC;IAAkB,CAAC,GAAGH,KAAK,CAACI,WAAW;IAE3E,MAAMC,WAAW,GAAGP,cAAc,CAACQ,OAAO;IAC1C,MAAMC,WAAW,GAAGN,aAAa,CAACO,CAAC;IAEnC,MAAMC,qBAAqB,GAAGP,WAAW,CAACQ,MAAM,GAAGP,iBAAiB,CAACO,MAAM,GAAGzB,uBAAuB;IACrG,IAAIwB,qBAAqB,GAAGJ,WAAW,IAAIE,WAAW,IAAIE,qBAAqB,EAAE;MAC/Ef,wBAAwB,CAAC,IAAI,CAAC;IAChC,CAAC,MAAM,IAAIe,qBAAqB,GAAGF,WAAW,IAAIF,WAAW,IAAII,qBAAqB,EAAE;MACtFf,wBAAwB,CAAC,KAAK,CAAC;IACjC;IAEAI,cAAc,CAACQ,OAAO,GAAGL,aAAa,CAACO,CAAC;EAC1C,CAAC,CAAC;EAEF,oBACEhC,KAAA,CAAAmC,aAAA,CAAC3B,gBAAgB,EAAA4B,QAAA;IACfC,OAAO,EAAE,KAAM;IACfC,qBAAqB;IACrBC,mBAAmB,EAAE,SAAU;IAC/BC,yBAAyB,EAAE,SAAU;IACrCC,cAAc,EAAEpB,MAAM,CAAC;MAAEqB,KAAK,EAAE,OAAO;MAAEC,IAAI,EAAE;IAAQ,CAAC;EAAE,GACtDvB,KAAK;IACTL,GAAG,EAAEA,GAAI;IACT6B,YAAY,EAAE3B,eAAgB;IAC9B4B,qBAAqB,EAAExC,IAAK;IAC5ByC,cAAc,EAAE9B,YAAa;IAC7B+B,mBAAmB,EAAE,EAAG;IACxB5B,QAAQ,EAAEI,SAAU;IACpByB,YAAY,EAAE1C,gBAAiB;IAC/B2C,KAAK,EAAE;MAAEC,IAAI,EAAE,CAAC;MAAE,GAAG/C,UAAU,CAACgD,OAAO,CAAC/B,KAAK,CAAC6B,KAAK;IAAE,CAAE;IACvDG,8BAA8B,EAAE;MAAEC,kBAAkB,EAAE,CAAC;MAAEC,wBAAwB,EAAE5C;IAAsB;EAAE,GAC3G;AAEN,CAAC,CAAC;AAEF,eAAeG,kBAAkB"}
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import { Box, PressBox, createStyleSheet } from '@sendbird/uikit-react-native-foundation';
3
+ import { ImageWithPlaceholder } from '@sendbird/uikit-react-native-foundation';
4
+ import { getThumbnailUriFromFileMessage } from '@sendbird/uikit-utils';
5
+ const ThreadParentMessageFileImage = props => {
6
+ const fileMessage = props.parentMessage;
7
+ if (!fileMessage) return null;
8
+ return /*#__PURE__*/React.createElement(Box, {
9
+ style: styles.container
10
+ }, /*#__PURE__*/React.createElement(PressBox, {
11
+ onPress: props.onPress,
12
+ onLongPress: props.onLongPress
13
+ }, /*#__PURE__*/React.createElement(ImageWithPlaceholder, {
14
+ source: {
15
+ uri: getThumbnailUriFromFileMessage(fileMessage)
16
+ },
17
+ style: styles.image
18
+ })));
19
+ };
20
+ const styles = createStyleSheet({
21
+ container: {
22
+ borderRadius: 16,
23
+ overflow: 'hidden'
24
+ },
25
+ image: {
26
+ maxWidth: 240,
27
+ width: 240,
28
+ height: 160,
29
+ borderRadius: 16,
30
+ overflow: 'hidden'
31
+ }
32
+ });
33
+ export default ThreadParentMessageFileImage;
34
+ //# sourceMappingURL=ThreadParentMessage.file.image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Box","PressBox","createStyleSheet","ImageWithPlaceholder","getThumbnailUriFromFileMessage","ThreadParentMessageFileImage","props","fileMessage","parentMessage","createElement","style","styles","container","onPress","onLongPress","source","uri","image","borderRadius","overflow","maxWidth","width","height"],"sources":["ThreadParentMessage.file.image.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Box, PressBox, createStyleSheet } from '@sendbird/uikit-react-native-foundation';\nimport { ImageWithPlaceholder } from '@sendbird/uikit-react-native-foundation';\nimport { SendbirdFileMessage, getThumbnailUriFromFileMessage } from '@sendbird/uikit-utils';\n\nimport { ThreadParentMessageRendererProps } from './index';\n\nconst ThreadParentMessageFileImage = (props: ThreadParentMessageRendererProps) => {\n const fileMessage: SendbirdFileMessage = props.parentMessage as SendbirdFileMessage;\n if (!fileMessage) return null;\n\n return (\n <Box style={styles.container}>\n <PressBox onPress={props.onPress} onLongPress={props.onLongPress}>\n <ImageWithPlaceholder source={{ uri: getThumbnailUriFromFileMessage(fileMessage) }} style={styles.image} />\n </PressBox>\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n borderRadius: 16,\n overflow: 'hidden',\n },\n image: {\n maxWidth: 240,\n width: 240,\n height: 160,\n borderRadius: 16,\n overflow: 'hidden',\n },\n});\n\nexport default ThreadParentMessageFileImage;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,GAAG,EAAEC,QAAQ,EAAEC,gBAAgB,QAAQ,yCAAyC;AACzF,SAASC,oBAAoB,QAAQ,yCAAyC;AAC9E,SAA8BC,8BAA8B,QAAQ,uBAAuB;AAI3F,MAAMC,4BAA4B,GAAIC,KAAuC,IAAK;EAChF,MAAMC,WAAgC,GAAGD,KAAK,CAACE,aAAoC;EACnF,IAAI,CAACD,WAAW,EAAE,OAAO,IAAI;EAE7B,oBACER,KAAA,CAAAU,aAAA,CAACT,GAAG;IAACU,KAAK,EAAEC,MAAM,CAACC;EAAU,gBAC3Bb,KAAA,CAAAU,aAAA,CAACR,QAAQ;IAACY,OAAO,EAAEP,KAAK,CAACO,OAAQ;IAACC,WAAW,EAAER,KAAK,CAACQ;EAAY,gBAC/Df,KAAA,CAAAU,aAAA,CAACN,oBAAoB;IAACY,MAAM,EAAE;MAAEC,GAAG,EAAEZ,8BAA8B,CAACG,WAAW;IAAE,CAAE;IAACG,KAAK,EAAEC,MAAM,CAACM;EAAM,EAAG,CAClG,CACP;AAEV,CAAC;AAED,MAAMN,MAAM,GAAGT,gBAAgB,CAAC;EAC9BU,SAAS,EAAE;IACTM,YAAY,EAAE,EAAE;IAChBC,QAAQ,EAAE;EACZ,CAAC;EACDF,KAAK,EAAE;IACLG,QAAQ,EAAE,GAAG;IACbC,KAAK,EAAE,GAAG;IACVC,MAAM,EAAE,GAAG;IACXJ,YAAY,EAAE,EAAE;IAChBC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;AAEF,eAAed,4BAA4B"}