@sendbird/uikit-react-native 3.5.3 → 3.6.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 (234) hide show
  1. package/lib/commonjs/components/ChannelInput/SendInput.js +23 -6
  2. package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
  3. package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
  4. package/lib/commonjs/components/ChannelMessageList/index.js +22 -4
  5. package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
  6. package/lib/commonjs/components/ChannelThreadMessageList/index.js +349 -0
  7. package/lib/commonjs/components/ChannelThreadMessageList/index.js.map +1 -0
  8. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +2 -2
  9. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -1
  10. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.js +100 -0
  11. package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.js.map +1 -0
  12. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +24 -6
  13. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
  14. package/lib/commonjs/components/ReactionAddons/MessageReactionAddon.js +23 -6
  15. package/lib/commonjs/components/ReactionAddons/MessageReactionAddon.js.map +1 -1
  16. package/lib/commonjs/components/ThreadChatFlatList/index.js +76 -0
  17. package/lib/commonjs/components/ThreadChatFlatList/index.js.map +1 -0
  18. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.js +41 -0
  19. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.js.map +1 -0
  20. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.js +74 -0
  21. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.js.map +1 -0
  22. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.js +42 -0
  23. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.js.map +1 -0
  24. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.js +94 -0
  25. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.js.map +1 -0
  26. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.user.js +61 -0
  27. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.user.js.map +1 -0
  28. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.js +127 -0
  29. package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.js.map +1 -0
  30. package/lib/commonjs/components/ThreadParentMessageRenderer/index.js +206 -0
  31. package/lib/commonjs/components/ThreadParentMessageRenderer/index.js.map +1 -0
  32. package/lib/commonjs/containers/SendbirdUIKitContainer.js +7 -1
  33. package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
  34. package/lib/commonjs/contexts/SendbirdChatCtx.js +7 -0
  35. package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
  36. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +28 -5
  37. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  38. package/lib/commonjs/domain/groupChannel/module/moduleContext.js +14 -4
  39. package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -1
  40. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  41. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadHeader.js +82 -0
  42. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadHeader.js.map +1 -0
  43. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadInput.js +44 -0
  44. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadInput.js.map +1 -0
  45. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +127 -0
  46. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -0
  47. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js +315 -0
  48. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js.map +1 -0
  49. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.js +27 -0
  50. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.js.map +1 -0
  51. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.js +27 -0
  52. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.js.map +1 -0
  53. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js +195 -0
  54. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js.map +1 -0
  55. package/lib/commonjs/domain/groupChannelThread/index.js +69 -0
  56. package/lib/commonjs/domain/groupChannelThread/index.js.map +1 -0
  57. package/lib/commonjs/domain/groupChannelThread/module/createGroupChannelThreadModule.js +42 -0
  58. package/lib/commonjs/domain/groupChannelThread/module/createGroupChannelThreadModule.js.map +1 -0
  59. package/lib/commonjs/domain/groupChannelThread/module/moduleContext.js +148 -0
  60. package/lib/commonjs/domain/groupChannelThread/module/moduleContext.js.map +1 -0
  61. package/lib/commonjs/domain/groupChannelThread/types.js +6 -0
  62. package/lib/commonjs/domain/groupChannelThread/types.js.map +1 -0
  63. package/lib/commonjs/fragments/createGroupChannelFragment.js +30 -5
  64. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  65. package/lib/commonjs/fragments/createGroupChannelThreadFragment.js +267 -0
  66. package/lib/commonjs/fragments/createGroupChannelThreadFragment.js.map +1 -0
  67. package/lib/commonjs/hooks/useMentionSuggestion.js +5 -2
  68. package/lib/commonjs/hooks/useMentionSuggestion.js.map +1 -1
  69. package/lib/commonjs/index.js +72 -40
  70. package/lib/commonjs/index.js.map +1 -1
  71. package/lib/commonjs/libs/VoiceMessageStatusManager.js +66 -0
  72. package/lib/commonjs/libs/VoiceMessageStatusManager.js.map +1 -0
  73. package/lib/commonjs/localization/StringSet.type.js.map +1 -1
  74. package/lib/commonjs/localization/createBaseStringSet.js +25 -3
  75. package/lib/commonjs/localization/createBaseStringSet.js.map +1 -1
  76. package/lib/commonjs/version.js +1 -1
  77. package/lib/commonjs/version.js.map +1 -1
  78. package/lib/module/components/ChannelInput/SendInput.js +23 -6
  79. package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
  80. package/lib/module/components/ChannelInput/index.js.map +1 -1
  81. package/lib/module/components/ChannelMessageList/index.js +22 -4
  82. package/lib/module/components/ChannelMessageList/index.js.map +1 -1
  83. package/lib/module/components/ChannelThreadMessageList/index.js +341 -0
  84. package/lib/module/components/ChannelThreadMessageList/index.js.map +1 -0
  85. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +2 -2
  86. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -1
  87. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.js +92 -0
  88. package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.js.map +1 -0
  89. package/lib/module/components/GroupChannelMessageRenderer/index.js +24 -6
  90. package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
  91. package/lib/module/components/ReactionAddons/MessageReactionAddon.js +23 -6
  92. package/lib/module/components/ReactionAddons/MessageReactionAddon.js.map +1 -1
  93. package/lib/module/components/ThreadChatFlatList/index.js +66 -0
  94. package/lib/module/components/ThreadChatFlatList/index.js.map +1 -0
  95. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.js +34 -0
  96. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.js.map +1 -0
  97. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.js +67 -0
  98. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.js.map +1 -0
  99. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.js +34 -0
  100. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.js.map +1 -0
  101. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.js +87 -0
  102. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.js.map +1 -0
  103. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.user.js +54 -0
  104. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.user.js.map +1 -0
  105. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.js +119 -0
  106. package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.js.map +1 -0
  107. package/lib/module/components/ThreadParentMessageRenderer/index.js +196 -0
  108. package/lib/module/components/ThreadParentMessageRenderer/index.js.map +1 -0
  109. package/lib/module/containers/SendbirdUIKitContainer.js +7 -1
  110. package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
  111. package/lib/module/contexts/SendbirdChatCtx.js +6 -0
  112. package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
  113. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +30 -6
  114. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  115. package/lib/module/domain/groupChannel/module/moduleContext.js +14 -4
  116. package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
  117. package/lib/module/domain/groupChannel/types.js.map +1 -1
  118. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadHeader.js +73 -0
  119. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadHeader.js.map +1 -0
  120. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadInput.js +34 -0
  121. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadInput.js.map +1 -0
  122. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +117 -0
  123. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -0
  124. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js +305 -0
  125. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js.map +1 -0
  126. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.js +19 -0
  127. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.js.map +1 -0
  128. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.js +19 -0
  129. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.js.map +1 -0
  130. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js +185 -0
  131. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js.map +1 -0
  132. package/lib/module/domain/groupChannelThread/index.js +9 -0
  133. package/lib/module/domain/groupChannelThread/index.js.map +1 -0
  134. package/lib/module/domain/groupChannelThread/module/createGroupChannelThreadModule.js +34 -0
  135. package/lib/module/domain/groupChannelThread/module/createGroupChannelThreadModule.js.map +1 -0
  136. package/lib/module/domain/groupChannelThread/module/moduleContext.js +137 -0
  137. package/lib/module/domain/groupChannelThread/module/moduleContext.js.map +1 -0
  138. package/lib/module/domain/groupChannelThread/types.js +2 -0
  139. package/lib/module/domain/groupChannelThread/types.js.map +1 -0
  140. package/lib/module/fragments/createGroupChannelFragment.js +33 -7
  141. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  142. package/lib/module/fragments/createGroupChannelThreadFragment.js +257 -0
  143. package/lib/module/fragments/createGroupChannelThreadFragment.js.map +1 -0
  144. package/lib/module/hooks/useMentionSuggestion.js +5 -2
  145. package/lib/module/hooks/useMentionSuggestion.js.map +1 -1
  146. package/lib/module/index.js +3 -0
  147. package/lib/module/index.js.map +1 -1
  148. package/lib/module/libs/VoiceMessageStatusManager.js +59 -0
  149. package/lib/module/libs/VoiceMessageStatusManager.js.map +1 -0
  150. package/lib/module/localization/StringSet.type.js.map +1 -1
  151. package/lib/module/localization/createBaseStringSet.js +27 -4
  152. package/lib/module/localization/createBaseStringSet.js.map +1 -1
  153. package/lib/module/version.js +1 -1
  154. package/lib/module/version.js.map +1 -1
  155. package/lib/typescript/src/components/ChannelInput/index.d.ts +1 -0
  156. package/lib/typescript/src/components/ChannelMessageList/index.d.ts +5 -2
  157. package/lib/typescript/src/components/ChannelThreadMessageList/index.d.ts +55 -0
  158. package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.d.ts +1 -1
  159. package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.d.ts +9 -0
  160. package/lib/typescript/src/components/GroupChannelMessageRenderer/index.d.ts +3 -1
  161. package/lib/typescript/src/components/OpenChannelMessageRenderer/index.d.ts +3 -1
  162. package/lib/typescript/src/components/ReactionAddons/MessageReactionAddon.d.ts +3 -1
  163. package/lib/typescript/src/components/ReactionAddons/index.d.ts +2 -1
  164. package/lib/typescript/src/components/ThreadChatFlatList/index.d.ts +9 -0
  165. package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.d.ts +4 -0
  166. package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.d.ts +4 -0
  167. package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.d.ts +9 -0
  168. package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.d.ts +13 -0
  169. package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.user.d.ts +10 -0
  170. package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.d.ts +10 -0
  171. package/lib/typescript/src/components/ThreadParentMessageRenderer/index.d.ts +20 -0
  172. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +6 -4
  173. package/lib/typescript/src/contexts/SendbirdChatCtx.d.ts +15 -1
  174. package/lib/typescript/src/domain/groupChannel/types.d.ts +4 -1
  175. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadHeader.d.ts +4 -0
  176. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadInput.d.ts +3 -0
  177. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadMessageList.d.ts +7 -0
  178. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.d.ts +8 -0
  179. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.d.ts +3 -0
  180. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.d.ts +3 -0
  181. package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.d.ts +4 -0
  182. package/lib/typescript/src/domain/groupChannelThread/index.d.ts +8 -0
  183. package/lib/typescript/src/domain/groupChannelThread/module/createGroupChannelThreadModule.d.ts +3 -0
  184. package/lib/typescript/src/domain/groupChannelThread/module/moduleContext.d.ts +3 -0
  185. package/lib/typescript/src/domain/groupChannelThread/types.d.ts +136 -0
  186. package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +1 -1
  187. package/lib/typescript/src/fragments/createGroupChannelThreadFragment.d.ts +5 -0
  188. package/lib/typescript/src/hooks/useChannelInputItems.d.ts +1 -1
  189. package/lib/typescript/src/index.d.ts +3 -0
  190. package/lib/typescript/src/libs/VoiceMessageStatusManager.d.ts +11 -0
  191. package/lib/typescript/src/localization/StringSet.type.d.ts +23 -0
  192. package/lib/typescript/src/localization/createBaseStringSet.d.ts +1 -1
  193. package/lib/typescript/src/version.d.ts +1 -1
  194. package/package.json +6 -6
  195. package/src/components/ChannelInput/SendInput.tsx +24 -5
  196. package/src/components/ChannelInput/index.tsx +1 -0
  197. package/src/components/ChannelMessageList/index.tsx +27 -5
  198. package/src/components/ChannelThreadMessageList/index.tsx +406 -0
  199. package/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.tsx +3 -3
  200. package/src/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.tsx +96 -0
  201. package/src/components/GroupChannelMessageRenderer/index.tsx +21 -5
  202. package/src/components/ReactionAddons/MessageReactionAddon.tsx +38 -5
  203. package/src/components/ThreadChatFlatList/index.tsx +63 -0
  204. package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.tsx +36 -0
  205. package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.tsx +61 -0
  206. package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.tsx +45 -0
  207. package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.tsx +107 -0
  208. package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.tsx +133 -0
  209. package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.user.tsx +65 -0
  210. package/src/components/ThreadParentMessageRenderer/index.tsx +194 -0
  211. package/src/containers/SendbirdUIKitContainer.tsx +9 -4
  212. package/src/contexts/SendbirdChatCtx.tsx +20 -0
  213. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +37 -8
  214. package/src/domain/groupChannel/module/moduleContext.tsx +12 -2
  215. package/src/domain/groupChannel/types.ts +5 -0
  216. package/src/domain/groupChannelThread/component/GroupChannelThreadHeader.tsx +63 -0
  217. package/src/domain/groupChannelThread/component/GroupChannelThreadInput.tsx +38 -0
  218. package/src/domain/groupChannelThread/component/GroupChannelThreadMessageList.tsx +105 -0
  219. package/src/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.tsx +326 -0
  220. package/src/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.tsx +18 -0
  221. package/src/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.tsx +18 -0
  222. package/src/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.tsx +174 -0
  223. package/src/domain/groupChannelThread/index.ts +8 -0
  224. package/src/domain/groupChannelThread/module/createGroupChannelThreadModule.tsx +35 -0
  225. package/src/domain/groupChannelThread/module/moduleContext.tsx +165 -0
  226. package/src/domain/groupChannelThread/types.ts +184 -0
  227. package/src/fragments/createGroupChannelFragment.tsx +38 -8
  228. package/src/fragments/createGroupChannelThreadFragment.tsx +280 -0
  229. package/src/hooks/useMentionSuggestion.ts +13 -9
  230. package/src/index.ts +4 -0
  231. package/src/libs/VoiceMessageStatusManager.ts +56 -0
  232. package/src/localization/StringSet.type.ts +27 -0
  233. package/src/localization/createBaseStringSet.ts +33 -4
  234. package/src/version.ts +1 -1
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { StyleSheet, View } from 'react-native';
3
+ import TypedPlaceholder from '../../../components/TypedPlaceholder';
4
+ const GroupChannelThreadStatusLoading = () => {
5
+ return /*#__PURE__*/React.createElement(View, {
6
+ style: styles.container
7
+ }, /*#__PURE__*/React.createElement(TypedPlaceholder, {
8
+ type: 'loading'
9
+ }));
10
+ };
11
+ const styles = StyleSheet.create({
12
+ container: {
13
+ flex: 1,
14
+ justifyContent: 'center',
15
+ alignItems: 'center'
16
+ }
17
+ });
18
+ export default GroupChannelThreadStatusLoading;
19
+ //# sourceMappingURL=GroupChannelThreadStatusLoading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","StyleSheet","View","TypedPlaceholder","GroupChannelThreadStatusLoading","createElement","style","styles","container","type","create","flex","justifyContent","alignItems"],"sources":["GroupChannelThreadStatusLoading.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleSheet, View } from 'react-native';\n\nimport TypedPlaceholder from '../../../components/TypedPlaceholder';\n\nconst GroupChannelThreadStatusLoading = () => {\n return (\n <View style={styles.container}>\n <TypedPlaceholder type={'loading'} />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: { flex: 1, justifyContent: 'center', alignItems: 'center' },\n});\n\nexport default GroupChannelThreadStatusLoading;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAE/C,OAAOC,gBAAgB,MAAM,sCAAsC;AAEnE,MAAMC,+BAA+B,GAAGA,CAAA,KAAM;EAC5C,oBACEJ,KAAA,CAAAK,aAAA,CAACH,IAAI;IAACI,KAAK,EAAEC,MAAM,CAACC;EAAU,gBAC5BR,KAAA,CAAAK,aAAA,CAACF,gBAAgB;IAACM,IAAI,EAAE;EAAU,EAAG,CAChC;AAEX,CAAC;AAED,MAAMF,MAAM,GAAGN,UAAU,CAACS,MAAM,CAAC;EAC/BF,SAAS,EAAE;IAAEG,IAAI,EAAE,CAAC;IAAEC,cAAc,EAAE,QAAQ;IAAEC,UAAU,EAAE;EAAS;AACvE,CAAC,CAAC;AAEF,eAAeT,+BAA+B"}
@@ -0,0 +1,185 @@
1
+ import React, { useContext } from 'react';
2
+ import { Pressable, ScrollView, View, useWindowDimensions } from 'react-native';
3
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
4
+ import { Avatar, Divider, Icon, Text, createStyleSheet, useHeaderStyle, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
5
+ import { conditionChaining } from '@sendbird/uikit-utils';
6
+ import { useLocalization, useSendbirdChat } from '../../../hooks/useContext';
7
+ import useKeyboardStatus from '../../../hooks/useKeyboardStatus';
8
+ import useMentionSuggestion from '../../../hooks/useMentionSuggestion';
9
+ import { GroupChannelThreadContexts } from '../module/moduleContext';
10
+ const GroupChannelThreadSuggestedMentionList = _ref => {
11
+ let {
12
+ text,
13
+ selection,
14
+ inputHeight,
15
+ bottomInset,
16
+ onPressToMention,
17
+ mentionedUsers
18
+ } = _ref;
19
+ const {
20
+ width: screenWidth,
21
+ height: screenHeight
22
+ } = useWindowDimensions();
23
+ const {
24
+ channel
25
+ } = useContext(GroupChannelThreadContexts.Fragment);
26
+ const {
27
+ sdk,
28
+ mentionManager
29
+ } = useSendbirdChat();
30
+ const {
31
+ STRINGS
32
+ } = useLocalization();
33
+ const {
34
+ colors
35
+ } = useUIKitTheme();
36
+ const {
37
+ topInset
38
+ } = useHeaderStyle();
39
+ const {
40
+ left,
41
+ right
42
+ } = useSafeAreaInsets();
43
+ const keyboard = useKeyboardStatus();
44
+ const {
45
+ members,
46
+ reset,
47
+ searchStringRange,
48
+ searchLimited
49
+ } = useMentionSuggestion({
50
+ sdk,
51
+ text,
52
+ selection,
53
+ channel,
54
+ mentionedUsers
55
+ });
56
+ const isLandscape = screenWidth > screenHeight;
57
+ const isShortened = isLandscape && keyboard.visible;
58
+ const canRenderMembers = members.length > 0;
59
+ const maxHeight = isShortened ? screenHeight - (topInset + inputHeight + keyboard.height) : styles.suggestion.height;
60
+ const renderLimitGuide = () => {
61
+ return /*#__PURE__*/React.createElement(View, {
62
+ style: [styles.searchLimited, {
63
+ borderTopColor: colors.onBackground04
64
+ }]
65
+ }, /*#__PURE__*/React.createElement(Icon, {
66
+ icon: 'info',
67
+ size: 20,
68
+ containerStyle: {
69
+ marginRight: 4
70
+ },
71
+ color: colors.onBackground02
72
+ }), /*#__PURE__*/React.createElement(Text, {
73
+ body3: true,
74
+ color: colors.onBackground02
75
+ }, STRINGS.GROUP_CHANNEL_THREAD.MENTION_LIMITED(mentionManager.config.mentionLimit)));
76
+ };
77
+ const renderMembers = () => {
78
+ return /*#__PURE__*/React.createElement(View, null, members.map(member => {
79
+ return /*#__PURE__*/React.createElement(Pressable, {
80
+ onPress: () => {
81
+ onPressToMention(member, searchStringRange);
82
+ reset();
83
+ },
84
+ key: member.userId,
85
+ style: styles.userContainer
86
+ }, /*#__PURE__*/React.createElement(Avatar, {
87
+ size: 28,
88
+ uri: member.profileUrl,
89
+ containerStyle: styles.userAvatar
90
+ }), /*#__PURE__*/React.createElement(View, {
91
+ style: styles.userInfo
92
+ }, /*#__PURE__*/React.createElement(Text, {
93
+ body2: true,
94
+ color: colors.onBackground01,
95
+ numberOfLines: 1,
96
+ style: styles.userNickname
97
+ }, member.nickname || STRINGS.LABELS.USER_NO_NAME), /*#__PURE__*/React.createElement(Text, {
98
+ body3: true,
99
+ color: colors.onBackground03,
100
+ numberOfLines: 1,
101
+ style: styles.userId
102
+ }, member.userId), /*#__PURE__*/React.createElement(Divider, {
103
+ style: {
104
+ position: 'absolute',
105
+ bottom: 0
106
+ }
107
+ })));
108
+ }));
109
+ };
110
+ return /*#__PURE__*/React.createElement(Pressable, {
111
+ onPress: reset,
112
+ pointerEvents: canRenderMembers ? 'auto' : 'none',
113
+ style: [styles.container, {
114
+ bottom: inputHeight + bottomInset
115
+ }]
116
+ }, /*#__PURE__*/React.createElement(ScrollView, {
117
+ bounces: false,
118
+ keyboardDismissMode: 'none',
119
+ keyboardShouldPersistTaps: 'always',
120
+ style: [styles.scrollView, {
121
+ maxHeight,
122
+ backgroundColor: colors.background,
123
+ bottom: keyboard.bottomSpace
124
+ }, canRenderMembers && {
125
+ borderTopWidth: 1,
126
+ borderTopColor: colors.onBackground04
127
+ }],
128
+ contentContainerStyle: {
129
+ paddingLeft: left,
130
+ paddingRight: right
131
+ }
132
+ }, conditionChaining([searchLimited, canRenderMembers], [renderLimitGuide(), renderMembers(), null])));
133
+ };
134
+ const styles = createStyleSheet({
135
+ suggestion: {
136
+ height: 196
137
+ },
138
+ container: {
139
+ position: 'absolute',
140
+ top: 0,
141
+ right: 0,
142
+ left: 0
143
+ },
144
+ scrollView: {
145
+ position: 'absolute',
146
+ left: 0,
147
+ right: 0
148
+ },
149
+ userContainer: {
150
+ paddingLeft: 16,
151
+ flexDirection: 'row',
152
+ height: 44,
153
+ alignItems: 'center',
154
+ justifyContent: 'center'
155
+ },
156
+ userAvatar: {
157
+ marginRight: 16
158
+ },
159
+ userInfo: {
160
+ flexDirection: 'row',
161
+ flex: 1
162
+ },
163
+ userNickname: {
164
+ flexShrink: 1,
165
+ lineHeight: 44,
166
+ textAlignVertical: 'center',
167
+ marginRight: 6
168
+ },
169
+ userId: {
170
+ lineHeight: 44,
171
+ textAlignVertical: 'center',
172
+ minWidth: 32,
173
+ flexShrink: 1,
174
+ marginRight: 16
175
+ },
176
+ searchLimited: {
177
+ borderTopWidth: 1,
178
+ paddingHorizontal: 16,
179
+ height: 44,
180
+ flexDirection: 'row',
181
+ alignItems: 'center'
182
+ }
183
+ });
184
+ export default GroupChannelThreadSuggestedMentionList;
185
+ //# sourceMappingURL=GroupChannelThreadSuggestedMentionList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useContext","Pressable","ScrollView","View","useWindowDimensions","useSafeAreaInsets","Avatar","Divider","Icon","Text","createStyleSheet","useHeaderStyle","useUIKitTheme","conditionChaining","useLocalization","useSendbirdChat","useKeyboardStatus","useMentionSuggestion","GroupChannelThreadContexts","GroupChannelThreadSuggestedMentionList","_ref","text","selection","inputHeight","bottomInset","onPressToMention","mentionedUsers","width","screenWidth","height","screenHeight","channel","Fragment","sdk","mentionManager","STRINGS","colors","topInset","left","right","keyboard","members","reset","searchStringRange","searchLimited","isLandscape","isShortened","visible","canRenderMembers","length","maxHeight","styles","suggestion","renderLimitGuide","createElement","style","borderTopColor","onBackground04","icon","size","containerStyle","marginRight","color","onBackground02","body3","GROUP_CHANNEL_THREAD","MENTION_LIMITED","config","mentionLimit","renderMembers","map","member","onPress","key","userId","userContainer","uri","profileUrl","userAvatar","userInfo","body2","onBackground01","numberOfLines","userNickname","nickname","LABELS","USER_NO_NAME","onBackground03","position","bottom","pointerEvents","container","bounces","keyboardDismissMode","keyboardShouldPersistTaps","scrollView","backgroundColor","background","bottomSpace","borderTopWidth","contentContainerStyle","paddingLeft","paddingRight","top","flexDirection","alignItems","justifyContent","flex","flexShrink","lineHeight","textAlignVertical","minWidth","paddingHorizontal"],"sources":["GroupChannelThreadSuggestedMentionList.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { Pressable, ScrollView, View, useWindowDimensions } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Avatar,\n Divider,\n Icon,\n Text,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { conditionChaining } from '@sendbird/uikit-utils';\n\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport useKeyboardStatus from '../../../hooks/useKeyboardStatus';\nimport useMentionSuggestion from '../../../hooks/useMentionSuggestion';\nimport { GroupChannelThreadContexts } from '../module/moduleContext';\nimport type { GroupChannelThreadProps } from '../types';\n\nconst GroupChannelThreadSuggestedMentionList = ({\n text,\n selection,\n inputHeight,\n bottomInset,\n onPressToMention,\n mentionedUsers,\n}: GroupChannelThreadProps['SuggestedMentionList']) => {\n const { width: screenWidth, height: screenHeight } = useWindowDimensions();\n const { channel } = useContext(GroupChannelThreadContexts.Fragment);\n const { sdk, mentionManager } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { topInset } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n const keyboard = useKeyboardStatus();\n\n const { members, reset, searchStringRange, searchLimited } = useMentionSuggestion({\n sdk,\n text,\n selection,\n channel,\n mentionedUsers,\n });\n\n const isLandscape = screenWidth > screenHeight;\n const isShortened = isLandscape && keyboard.visible;\n const canRenderMembers = members.length > 0;\n const maxHeight = isShortened ? screenHeight - (topInset + inputHeight + keyboard.height) : styles.suggestion.height;\n\n const renderLimitGuide = () => {\n return (\n <View style={[styles.searchLimited, { borderTopColor: colors.onBackground04 }]}>\n <Icon icon={'info'} size={20} containerStyle={{ marginRight: 4 }} color={colors.onBackground02} />\n <Text body3 color={colors.onBackground02}>\n {STRINGS.GROUP_CHANNEL_THREAD.MENTION_LIMITED(mentionManager.config.mentionLimit)}\n </Text>\n </View>\n );\n };\n\n const renderMembers = () => {\n return (\n <View>\n {members.map((member) => {\n return (\n <Pressable\n onPress={() => {\n onPressToMention(member, searchStringRange);\n reset();\n }}\n key={member.userId}\n style={styles.userContainer}\n >\n <Avatar size={28} uri={member.profileUrl} containerStyle={styles.userAvatar} />\n <View style={styles.userInfo}>\n <Text body2 color={colors.onBackground01} numberOfLines={1} style={styles.userNickname}>\n {member.nickname || STRINGS.LABELS.USER_NO_NAME}\n </Text>\n <Text body3 color={colors.onBackground03} numberOfLines={1} style={styles.userId}>\n {member.userId}\n </Text>\n <Divider style={{ position: 'absolute', bottom: 0 }} />\n </View>\n </Pressable>\n );\n })}\n </View>\n );\n };\n\n return (\n <Pressable\n onPress={reset}\n pointerEvents={canRenderMembers ? 'auto' : 'none'}\n style={[styles.container, { bottom: inputHeight + bottomInset }]}\n >\n <ScrollView\n bounces={false}\n keyboardDismissMode={'none'}\n keyboardShouldPersistTaps={'always'}\n style={[\n styles.scrollView,\n {\n maxHeight,\n backgroundColor: colors.background,\n bottom: keyboard.bottomSpace,\n },\n canRenderMembers && {\n borderTopWidth: 1,\n borderTopColor: colors.onBackground04,\n },\n ]}\n contentContainerStyle={{ paddingLeft: left, paddingRight: right }}\n >\n {conditionChaining([searchLimited, canRenderMembers], [renderLimitGuide(), renderMembers(), null])}\n </ScrollView>\n </Pressable>\n );\n};\n\nconst styles = createStyleSheet({\n suggestion: {\n height: 196,\n },\n container: {\n position: 'absolute',\n top: 0,\n right: 0,\n left: 0,\n },\n scrollView: {\n position: 'absolute',\n left: 0,\n right: 0,\n },\n userContainer: {\n paddingLeft: 16,\n flexDirection: 'row',\n height: 44,\n alignItems: 'center',\n justifyContent: 'center',\n },\n userAvatar: {\n marginRight: 16,\n },\n userInfo: {\n flexDirection: 'row',\n flex: 1,\n },\n userNickname: {\n flexShrink: 1,\n lineHeight: 44,\n textAlignVertical: 'center',\n marginRight: 6,\n },\n userId: {\n lineHeight: 44,\n textAlignVertical: 'center',\n minWidth: 32,\n flexShrink: 1,\n marginRight: 16,\n },\n searchLimited: {\n borderTopWidth: 1,\n paddingHorizontal: 16,\n height: 44,\n flexDirection: 'row',\n alignItems: 'center',\n },\n});\nexport default GroupChannelThreadSuggestedMentionList;\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export { default as GroupChannelThreadHeader } from './component/GroupChannelThreadHeader';
2
+ export { default as GroupChannelThreadMessageList } from './component/GroupChannelThreadMessageList';
3
+ export { default as GroupChannelThreadInput } from './component/GroupChannelThreadInput';
4
+ export { default as GroupChannelThreadSuggestedMentionList } from './component/GroupChannelThreadSuggestedMentionList';
5
+ export { default as GroupChannelThreadStatusEmpty } from './component/GroupChannelThreadStatusEmpty';
6
+ export { default as GroupChannelThreadStatusLoading } from './component/GroupChannelThreadStatusLoading';
7
+ export { default as createGroupChannelThreadModule } from './module/createGroupChannelThreadModule';
8
+ export { GroupChannelThreadContextsProvider, GroupChannelThreadContexts } from './module/moduleContext';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["default","GroupChannelThreadHeader","GroupChannelThreadMessageList","GroupChannelThreadInput","GroupChannelThreadSuggestedMentionList","GroupChannelThreadStatusEmpty","GroupChannelThreadStatusLoading","createGroupChannelThreadModule","GroupChannelThreadContextsProvider","GroupChannelThreadContexts"],"sources":["index.ts"],"sourcesContent":["export { default as GroupChannelThreadHeader } from './component/GroupChannelThreadHeader';\nexport { default as GroupChannelThreadMessageList } from './component/GroupChannelThreadMessageList';\nexport { default as GroupChannelThreadInput } from './component/GroupChannelThreadInput';\nexport { default as GroupChannelThreadSuggestedMentionList } from './component/GroupChannelThreadSuggestedMentionList';\nexport { default as GroupChannelThreadStatusEmpty } from './component/GroupChannelThreadStatusEmpty';\nexport { default as GroupChannelThreadStatusLoading } from './component/GroupChannelThreadStatusLoading';\nexport { default as createGroupChannelThreadModule } from './module/createGroupChannelThreadModule';\nexport { GroupChannelThreadContextsProvider, GroupChannelThreadContexts } from './module/moduleContext';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,wBAAwB,QAAQ,sCAAsC;AAC1F,SAASD,OAAO,IAAIE,6BAA6B,QAAQ,2CAA2C;AACpG,SAASF,OAAO,IAAIG,uBAAuB,QAAQ,qCAAqC;AACxF,SAASH,OAAO,IAAII,sCAAsC,QAAQ,oDAAoD;AACtH,SAASJ,OAAO,IAAIK,6BAA6B,QAAQ,2CAA2C;AACpG,SAASL,OAAO,IAAIM,+BAA+B,QAAQ,6CAA6C;AACxG,SAASN,OAAO,IAAIO,8BAA8B,QAAQ,yCAAyC;AACnG,SAASC,kCAAkC,EAAEC,0BAA0B,QAAQ,wBAAwB"}
@@ -0,0 +1,34 @@
1
+ import GroupChannelThreadHeader from '../component/GroupChannelThreadHeader';
2
+ import GroupChannelThreadInput from '../component/GroupChannelThreadInput';
3
+ import GroupChannelThreadMessageList from '../component/GroupChannelThreadMessageList';
4
+ import GroupChannelThreadParentMessageInfo from '../component/GroupChannelThreadParentMessageInfo';
5
+ import GroupChannelThreadStatusEmpty from '../component/GroupChannelThreadStatusEmpty';
6
+ import GroupChannelThreadStatusLoading from '../component/GroupChannelThreadStatusLoading';
7
+ import GroupChannelThreadSuggestedMentionList from '../component/GroupChannelThreadSuggestedMentionList';
8
+ import { GroupChannelThreadContextsProvider } from './moduleContext';
9
+ const createGroupChannelThreadModule = function () {
10
+ let {
11
+ Header = GroupChannelThreadHeader,
12
+ ParentMessageInfo = GroupChannelThreadParentMessageInfo,
13
+ MessageList = GroupChannelThreadMessageList,
14
+ Input = GroupChannelThreadInput,
15
+ SuggestedMentionList = GroupChannelThreadSuggestedMentionList,
16
+ StatusLoading = GroupChannelThreadStatusLoading,
17
+ StatusEmpty = GroupChannelThreadStatusEmpty,
18
+ Provider = GroupChannelThreadContextsProvider,
19
+ ...module
20
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
21
+ return {
22
+ Header,
23
+ ParentMessageInfo,
24
+ MessageList,
25
+ Input,
26
+ SuggestedMentionList,
27
+ StatusEmpty,
28
+ StatusLoading,
29
+ Provider,
30
+ ...module
31
+ };
32
+ };
33
+ export default createGroupChannelThreadModule;
34
+ //# sourceMappingURL=createGroupChannelThreadModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GroupChannelThreadHeader","GroupChannelThreadInput","GroupChannelThreadMessageList","GroupChannelThreadParentMessageInfo","GroupChannelThreadStatusEmpty","GroupChannelThreadStatusLoading","GroupChannelThreadSuggestedMentionList","GroupChannelThreadContextsProvider","createGroupChannelThreadModule","Header","ParentMessageInfo","MessageList","Input","SuggestedMentionList","StatusLoading","StatusEmpty","Provider","module","arguments","length","undefined"],"sources":["createGroupChannelThreadModule.tsx"],"sourcesContent":["import GroupChannelThreadHeader from '../component/GroupChannelThreadHeader';\nimport GroupChannelThreadInput from '../component/GroupChannelThreadInput';\nimport GroupChannelThreadMessageList from '../component/GroupChannelThreadMessageList';\nimport GroupChannelThreadParentMessageInfo from '../component/GroupChannelThreadParentMessageInfo';\nimport GroupChannelThreadStatusEmpty from '../component/GroupChannelThreadStatusEmpty';\nimport GroupChannelThreadStatusLoading from '../component/GroupChannelThreadStatusLoading';\nimport GroupChannelThreadSuggestedMentionList from '../component/GroupChannelThreadSuggestedMentionList';\nimport type { GroupChannelThreadModule } from '../types';\nimport { GroupChannelThreadContextsProvider } from './moduleContext';\n\nconst createGroupChannelThreadModule = ({\n Header = GroupChannelThreadHeader,\n ParentMessageInfo = GroupChannelThreadParentMessageInfo,\n MessageList = GroupChannelThreadMessageList,\n Input = GroupChannelThreadInput,\n SuggestedMentionList = GroupChannelThreadSuggestedMentionList,\n StatusLoading = GroupChannelThreadStatusLoading,\n StatusEmpty = GroupChannelThreadStatusEmpty,\n Provider = GroupChannelThreadContextsProvider,\n ...module\n}: Partial<GroupChannelThreadModule> = {}): GroupChannelThreadModule => {\n return {\n Header,\n ParentMessageInfo,\n MessageList,\n Input,\n SuggestedMentionList,\n StatusEmpty,\n StatusLoading,\n Provider,\n ...module,\n };\n};\n\nexport default createGroupChannelThreadModule;\n"],"mappings":"AAAA,OAAOA,wBAAwB,MAAM,uCAAuC;AAC5E,OAAOC,uBAAuB,MAAM,sCAAsC;AAC1E,OAAOC,6BAA6B,MAAM,4CAA4C;AACtF,OAAOC,mCAAmC,MAAM,kDAAkD;AAClG,OAAOC,6BAA6B,MAAM,4CAA4C;AACtF,OAAOC,+BAA+B,MAAM,8CAA8C;AAC1F,OAAOC,sCAAsC,MAAM,qDAAqD;AAExG,SAASC,kCAAkC,QAAQ,iBAAiB;AAEpE,MAAMC,8BAA8B,GAAG,SAAAA,CAAA,EAUiC;EAAA,IAVhC;IACtCC,MAAM,GAAGT,wBAAwB;IACjCU,iBAAiB,GAAGP,mCAAmC;IACvDQ,WAAW,GAAGT,6BAA6B;IAC3CU,KAAK,GAAGX,uBAAuB;IAC/BY,oBAAoB,GAAGP,sCAAsC;IAC7DQ,aAAa,GAAGT,+BAA+B;IAC/CU,WAAW,GAAGX,6BAA6B;IAC3CY,QAAQ,GAAGT,kCAAkC;IAC7C,GAAGU;EAC8B,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EACvC,OAAO;IACLT,MAAM;IACNC,iBAAiB;IACjBC,WAAW;IACXC,KAAK;IACLC,oBAAoB;IACpBE,WAAW;IACXD,aAAa;IACbE,QAAQ;IACR,GAAGC;EACL,CAAC;AACH,CAAC;AAED,eAAeT,8BAA8B"}
@@ -0,0 +1,137 @@
1
+ import React, { createContext, useRef, useState } from 'react';
2
+ import { Logger, NOOP, useFreshCallback } from '@sendbird/uikit-utils';
3
+ import ProviderLayout from '../../../components/ProviderLayout';
4
+ import { useLocalization } from '../../../hooks/useContext';
5
+ export const GroupChannelThreadContexts = {
6
+ Fragment: /*#__PURE__*/createContext({
7
+ headerTitle: '',
8
+ channel: {},
9
+ parentMessage: {},
10
+ setMessageToEdit: NOOP
11
+ }),
12
+ PubSub: /*#__PURE__*/createContext({
13
+ publish: NOOP,
14
+ subscribe: () => NOOP
15
+ }),
16
+ MessageList: /*#__PURE__*/createContext({
17
+ flatListRef: {
18
+ current: null
19
+ },
20
+ scrollToMessage: () => false,
21
+ lazyScrollToBottom: () => {
22
+ // noop
23
+ },
24
+ lazyScrollToIndex: () => {
25
+ // noop
26
+ }
27
+ })
28
+ };
29
+ export const GroupChannelThreadContextsProvider = _ref => {
30
+ let {
31
+ children,
32
+ channel,
33
+ parentMessage,
34
+ keyboardAvoidOffset = 0,
35
+ groupChannelThreadPubSub,
36
+ threadedMessages
37
+ } = _ref;
38
+ if (!channel) throw new Error('GroupChannel is not provided to GroupChannelThreadModule');
39
+ const {
40
+ STRINGS
41
+ } = useLocalization();
42
+ const [messageToEdit, setMessageToEdit] = useState();
43
+ const {
44
+ flatListRef,
45
+ lazyScrollToIndex,
46
+ lazyScrollToBottom,
47
+ scrollToMessage
48
+ } = useScrollActions({
49
+ threadedMessages: threadedMessages
50
+ });
51
+ return /*#__PURE__*/React.createElement(ProviderLayout, null, /*#__PURE__*/React.createElement(GroupChannelThreadContexts.Fragment.Provider, {
52
+ value: {
53
+ headerTitle: STRINGS.GROUP_CHANNEL_THREAD.HEADER_TITLE,
54
+ channel,
55
+ parentMessage,
56
+ keyboardAvoidOffset,
57
+ messageToEdit: messageToEdit,
58
+ setMessageToEdit
59
+ }
60
+ }, /*#__PURE__*/React.createElement(GroupChannelThreadContexts.PubSub.Provider, {
61
+ value: groupChannelThreadPubSub
62
+ }, /*#__PURE__*/React.createElement(GroupChannelThreadContexts.MessageList.Provider, {
63
+ value: {
64
+ flatListRef,
65
+ scrollToMessage,
66
+ lazyScrollToIndex,
67
+ lazyScrollToBottom
68
+ }
69
+ }, children))));
70
+ };
71
+ const useScrollActions = params => {
72
+ const {
73
+ threadedMessages
74
+ } = params;
75
+ const flatListRef = useRef(null);
76
+
77
+ // FIXME: Workaround, should run after data has been applied to UI.
78
+ const lazyScrollToBottom = useFreshCallback(params => {
79
+ if (!flatListRef.current) {
80
+ logFlatListRefWarning();
81
+ return;
82
+ }
83
+ setTimeout(() => {
84
+ if (flatListRef.current) {
85
+ flatListRef.current.scrollToEnd({
86
+ animated: (params === null || params === void 0 ? void 0 : params.animated) ?? false
87
+ });
88
+ }
89
+ }, (params === null || params === void 0 ? void 0 : params.timeout) ?? 0);
90
+ });
91
+
92
+ // FIXME: Workaround, should run after data has been applied to UI.
93
+ const lazyScrollToIndex = useFreshCallback(params => {
94
+ if (!flatListRef.current) {
95
+ logFlatListRefWarning();
96
+ return;
97
+ }
98
+ setTimeout(() => {
99
+ if (flatListRef.current) {
100
+ flatListRef.current.scrollToIndex({
101
+ index: (params === null || params === void 0 ? void 0 : params.index) ?? 0,
102
+ animated: (params === null || params === void 0 ? void 0 : params.animated) ?? false,
103
+ viewPosition: (params === null || params === void 0 ? void 0 : params.viewPosition) ?? 0.5
104
+ });
105
+ }
106
+ }, (params === null || params === void 0 ? void 0 : params.timeout) ?? 0);
107
+ });
108
+ const scrollToMessage = useFreshCallback((messageId, options) => {
109
+ if (!flatListRef.current) {
110
+ logFlatListRefWarning();
111
+ return false;
112
+ }
113
+ const foundMessageIndex = threadedMessages.findIndex(it => it.messageId === messageId);
114
+ const isIncludedInList = foundMessageIndex > -1;
115
+ if (isIncludedInList) {
116
+ lazyScrollToIndex({
117
+ index: foundMessageIndex,
118
+ animated: true,
119
+ timeout: 0,
120
+ viewPosition: options === null || options === void 0 ? void 0 : options.viewPosition
121
+ });
122
+ return true;
123
+ } else {
124
+ return false;
125
+ }
126
+ });
127
+ return {
128
+ flatListRef,
129
+ lazyScrollToIndex,
130
+ lazyScrollToBottom,
131
+ scrollToMessage
132
+ };
133
+ };
134
+ const logFlatListRefWarning = () => {
135
+ Logger.warn('Cannot find flatListRef.current, please render FlatList and pass the flatListRef' + 'or please try again after FlatList has been rendered.');
136
+ };
137
+ //# sourceMappingURL=moduleContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","createContext","useRef","useState","Logger","NOOP","useFreshCallback","ProviderLayout","useLocalization","GroupChannelThreadContexts","Fragment","headerTitle","channel","parentMessage","setMessageToEdit","PubSub","publish","subscribe","MessageList","flatListRef","current","scrollToMessage","lazyScrollToBottom","lazyScrollToIndex","GroupChannelThreadContextsProvider","_ref","children","keyboardAvoidOffset","groupChannelThreadPubSub","threadedMessages","Error","STRINGS","messageToEdit","useScrollActions","createElement","Provider","value","GROUP_CHANNEL_THREAD","HEADER_TITLE","params","logFlatListRefWarning","setTimeout","scrollToEnd","animated","timeout","scrollToIndex","index","viewPosition","messageId","options","foundMessageIndex","findIndex","it","isIncludedInList","warn"],"sources":["moduleContext.tsx"],"sourcesContent":["import React, { createContext, useRef, useState } from 'react';\nimport type { FlatList } from 'react-native';\n\nimport {\n ContextValue,\n Logger,\n NOOP,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUserMessage,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport ProviderLayout from '../../../components/ProviderLayout';\nimport { useLocalization } from '../../../hooks/useContext';\nimport type { PubSub } from '../../../utils/pubsub';\nimport type {\n GroupChannelThreadContextsType,\n GroupChannelThreadModule,\n GroupChannelThreadPubSubContextPayload,\n} from '../types';\nimport { GroupChannelThreadProps } from '../types';\n\nexport const GroupChannelThreadContexts: GroupChannelThreadContextsType = {\n Fragment: createContext({\n headerTitle: '',\n channel: {} as SendbirdGroupChannel,\n parentMessage: {} as SendbirdUserMessage | SendbirdFileMessage,\n setMessageToEdit: NOOP,\n }),\n PubSub: createContext({\n publish: NOOP,\n subscribe: () => NOOP,\n } as PubSub<GroupChannelThreadPubSubContextPayload>),\n MessageList: createContext({\n flatListRef: { current: null },\n scrollToMessage: () => false,\n lazyScrollToBottom: () => {\n // noop\n },\n lazyScrollToIndex: () => {\n // noop\n },\n } as MessageListContextValue),\n};\n\nexport const GroupChannelThreadContextsProvider: GroupChannelThreadModule['Provider'] = ({\n children,\n channel,\n parentMessage,\n keyboardAvoidOffset = 0,\n groupChannelThreadPubSub,\n threadedMessages,\n}) => {\n if (!channel) throw new Error('GroupChannel is not provided to GroupChannelThreadModule');\n\n const { STRINGS } = useLocalization();\n const [messageToEdit, setMessageToEdit] = useState<SendbirdUserMessage | SendbirdFileMessage>();\n const { flatListRef, lazyScrollToIndex, lazyScrollToBottom, scrollToMessage } = useScrollActions({\n threadedMessages: threadedMessages,\n });\n\n return (\n <ProviderLayout>\n <GroupChannelThreadContexts.Fragment.Provider\n value={{\n headerTitle: STRINGS.GROUP_CHANNEL_THREAD.HEADER_TITLE,\n channel,\n parentMessage,\n keyboardAvoidOffset,\n messageToEdit: messageToEdit,\n setMessageToEdit,\n }}\n >\n <GroupChannelThreadContexts.PubSub.Provider value={groupChannelThreadPubSub}>\n <GroupChannelThreadContexts.MessageList.Provider\n value={{\n flatListRef,\n scrollToMessage,\n lazyScrollToIndex,\n lazyScrollToBottom,\n }}\n >\n {children}\n </GroupChannelThreadContexts.MessageList.Provider>\n </GroupChannelThreadContexts.PubSub.Provider>\n </GroupChannelThreadContexts.Fragment.Provider>\n </ProviderLayout>\n );\n};\n\ntype MessageListContextValue = ContextValue<GroupChannelThreadContextsType['MessageList']>;\nconst useScrollActions = (params: Pick<GroupChannelThreadProps['Provider'], 'threadedMessages'>) => {\n const { threadedMessages } = params;\n const flatListRef = useRef<FlatList<SendbirdMessage>>(null);\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToBottom = useFreshCallback<MessageListContextValue['lazyScrollToIndex']>((params) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return;\n }\n\n setTimeout(() => {\n if (flatListRef.current) {\n flatListRef.current.scrollToEnd({ animated: params?.animated ?? false });\n }\n }, params?.timeout ?? 0);\n });\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToIndex = useFreshCallback<MessageListContextValue['lazyScrollToIndex']>((params) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return;\n }\n\n setTimeout(() => {\n if (flatListRef.current) {\n flatListRef.current.scrollToIndex({\n index: params?.index ?? 0,\n animated: params?.animated ?? false,\n viewPosition: params?.viewPosition ?? 0.5,\n });\n }\n }, params?.timeout ?? 0);\n });\n\n const scrollToMessage = useFreshCallback<MessageListContextValue['scrollToMessage']>((messageId, options) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return false;\n }\n\n const foundMessageIndex = threadedMessages.findIndex((it) => it.messageId === messageId);\n const isIncludedInList = foundMessageIndex > -1;\n\n if (isIncludedInList) {\n lazyScrollToIndex({\n index: foundMessageIndex,\n animated: true,\n timeout: 0,\n viewPosition: options?.viewPosition,\n });\n return true;\n } else {\n return false;\n }\n });\n\n return {\n flatListRef,\n lazyScrollToIndex,\n lazyScrollToBottom,\n scrollToMessage,\n };\n};\n\nconst logFlatListRefWarning = () => {\n Logger.warn(\n 'Cannot find flatListRef.current, please render FlatList and pass the flatListRef' +\n 'or please try again after FlatList has been rendered.',\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from 'react';\nimport type { FlatList } from 'react-native';\n\nimport type { UseGroupChannelMessagesOptions } from '@sendbird/uikit-chat-hooks';\nimport type {\n OnBeforeHandler,\n PickPartial,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n} from '@sendbird/uikit-utils';\n\nimport type { ChannelInputProps, SuggestedMentionListProps } from '../../components/ChannelInput';\nimport type { ChannelThreadMessageListProps } from '../../components/ChannelThreadMessageList';\nimport type { CommonComponent } from '../../types';\nimport type { PubSub } from '../../utils/pubsub';\n\nexport interface GroupChannelThreadProps {\n Fragment: {\n channel: SendbirdGroupChannel;\n parentMessage: SendbirdUserMessage | SendbirdFileMessage;\n startingPoint?: number;\n onParentMessageDeleted: () => void;\n onChannelDeleted: () => void;\n onPressHeaderLeft: GroupChannelThreadProps['Header']['onPressLeft'];\n onPressHeaderSubtitle?: GroupChannelThreadProps['Header']['onPressSubtitle'];\n onPressMediaMessage?: GroupChannelThreadProps['MessageList']['onPressMediaMessage'];\n\n onBeforeSendUserMessage?: OnBeforeHandler<SendbirdUserMessageCreateParams>;\n onBeforeSendFileMessage?: OnBeforeHandler<SendbirdFileMessageCreateParams>;\n onBeforeUpdateUserMessage?: OnBeforeHandler<SendbirdUserMessageUpdateParams>;\n onBeforeUpdateFileMessage?: OnBeforeHandler<SendbirdFileMessageUpdateParams>;\n\n renderMessage?: GroupChannelThreadProps['MessageList']['renderMessage'];\n\n enableMessageGrouping?: GroupChannelThreadProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelThreadProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: GroupChannelThreadProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n };\n Header: {\n onPressLeft: () => void;\n onPressSubtitle: () => void;\n };\n ParentMessageInfo: {\n channel: SendbirdGroupChannel;\n currentUserId?: string;\n onDeleteMessage: (message: SendbirdUserMessage | SendbirdFileMessage) => Promise<void>;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n };\n MessageList: Pick<\n ChannelThreadMessageListProps<SendbirdGroupChannel>,\n | 'enableMessageGrouping'\n | 'currentUserId'\n | 'channel'\n | 'messages'\n | 'newMessages'\n | 'scrolledAwayFromBottom'\n | 'onScrolledAwayFromBottom'\n | 'onTopReached'\n | 'onBottomReached'\n | 'onResendFailedMessage'\n | 'onDeleteMessage'\n | 'onPressMediaMessage'\n | 'renderMessage'\n | 'flatListProps'\n | 'hasNext'\n | 'searchItem'\n > & {\n onResetMessageList: () => Promise<void>;\n onResetMessageListWithStartingPoint: (startingPoint: number) => Promise<void>;\n startingPoint?: number;\n };\n Input: PickPartial<\n ChannelInputProps,\n | 'shouldRenderInput'\n | 'onPressSendUserMessage'\n | 'onPressSendFileMessage'\n | 'onPressUpdateUserMessage'\n | 'onPressUpdateFileMessage'\n | 'SuggestedMentionList'\n | 'AttachmentsButton',\n 'inputDisabled'\n >;\n\n SuggestedMentionList: SuggestedMentionListProps;\n Provider: {\n channel: SendbirdGroupChannel;\n keyboardAvoidOffset?: number;\n groupChannelThreadPubSub: PubSub<GroupChannelThreadPubSubContextPayload>;\n parentMessage: SendbirdUserMessage | SendbirdFileMessage;\n threadedMessages: SendbirdMessage[];\n };\n}\n\n/**\n * Internal context for GroupChannelThread\n * For example, the developer can create a custom header\n * with getting data from the domain context\n * */\nexport interface GroupChannelThreadContextsType {\n Fragment: React.Context<{\n headerTitle: string;\n keyboardAvoidOffset?: number;\n channel: SendbirdGroupChannel;\n parentMessage: SendbirdUserMessage | SendbirdFileMessage;\n messageToEdit?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n }>;\n PubSub: React.Context<PubSub<GroupChannelThreadPubSubContextPayload>>;\n MessageList: React.Context<{\n /**\n * ref object for FlatList of MessageList\n * */\n flatListRef: React.MutableRefObject<FlatList | null>;\n /**\n * Function that scrolls to a message within a group channel.\n * @param messageId {number} - The id of the message to scroll.\n * @param options {object} - Scroll options (optional).\n * @param options.focusAnimated {boolean} - Enable a shake animation on the message component upon completion of scrolling.\n * @param options.viewPosition {number} - Position information to adjust the visible area during scrolling. bottom(0) ~ top(1.0)\n *\n * @example\n * ```\n * const { scrollToMessage } = useContext(GroupChannelThreadContexts.MessageList);\n * const messageIncludedInMessageList = scrollToMessage(lastMessage.messageId, { focusAnimated: true, viewPosition: 1 });\n * if (!messageIncludedInMessageList) console.warn('Message not found in the message list.');\n * ```\n * */\n scrollToMessage: (messageId: number, options?: { focusAnimated?: boolean; viewPosition?: number }) => boolean;\n /**\n * Call the FlatList function asynchronously to scroll to bottom lazily\n * to avoid scrolling before data rendering has been committed.\n * */\n lazyScrollToBottom: (params?: { animated?: boolean; timeout?: number }) => void;\n /**\n * Call the FlatList function asynchronously to scroll to index lazily.\n * to avoid scrolling before data rendering has been committed.\n * */\n lazyScrollToIndex: (params?: {\n index?: number;\n animated?: boolean;\n timeout?: number;\n viewPosition?: number;\n }) => void;\n }>;\n}\n\nexport interface GroupChannelThreadModule {\n Provider: CommonComponent<GroupChannelThreadProps['Provider']>;\n Header: CommonComponent<GroupChannelThreadProps['Header']>;\n ParentMessageInfo: CommonComponent<GroupChannelThreadProps['ParentMessageInfo']>;\n MessageList: CommonComponent<GroupChannelThreadProps['MessageList']>;\n Input: CommonComponent<GroupChannelThreadProps['Input']>;\n SuggestedMentionList: CommonComponent<GroupChannelThreadProps['SuggestedMentionList']>;\n StatusEmpty: CommonComponent;\n StatusLoading: CommonComponent;\n}\n\nexport type GroupChannelThreadFragment = React.FC<GroupChannelThreadProps['Fragment']>;\n\nexport type GroupChannelThreadPubSubContextPayload =\n | {\n type: 'MESSAGE_SENT_PENDING' | 'MESSAGE_SENT_SUCCESS';\n data: {\n message: SendbirdUserMessage | SendbirdFileMessage;\n };\n }\n | {\n type: 'MESSAGES_RECEIVED' | 'MESSAGES_UPDATED';\n data: {\n messages: SendbirdMessage[];\n };\n }\n | {\n type: 'TYPING_BUBBLE_RENDERED';\n data?: undefined;\n };\n"],"mappings":""}
@@ -1,15 +1,16 @@
1
1
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
2
2
  import { MessageFilter } from '@sendbird/chat/groupChannel';
3
3
  import { ReplyType } from '@sendbird/chat/message';
4
- import { Box } from '@sendbird/uikit-react-native-foundation';
4
+ import { Box, useToast } from '@sendbird/uikit-react-native-foundation';
5
5
  import { useGroupChannelMessages } from '@sendbird/uikit-tools';
6
+ import { getReadableFileSize } from '@sendbird/uikit-utils';
6
7
  import { NOOP, PASS, confirmAndMarkAsRead, messageComparator, useFreshCallback, useIIFE, useRefTracker } from '@sendbird/uikit-utils';
7
8
  import GroupChannelMessageRenderer, { GroupChannelTypingIndicatorBubble } from '../components/GroupChannelMessageRenderer';
8
9
  import NewMessagesButton from '../components/NewMessagesButton';
9
10
  import ScrollToBottomButton from '../components/ScrollToBottomButton';
10
11
  import StatusComposition from '../components/StatusComposition';
11
12
  import createGroupChannelModule from '../domain/groupChannel/module/createGroupChannelModule';
12
- import { usePlatformService, useSendbirdChat } from '../hooks/useContext';
13
+ import { useLocalization, usePlatformService, useSendbirdChat } from '../hooks/useContext';
13
14
  import pubsub from '../utils/pubsub';
14
15
  const createGroupChannelFragment = initModule => {
15
16
  const GroupChannelModule = createGroupChannelModule(initModule);
@@ -25,6 +26,7 @@ const createGroupChannelFragment = initModule => {
25
26
  onPressHeaderRight = NOOP,
26
27
  onPressMediaMessage = NOOP,
27
28
  onChannelDeleted = NOOP,
29
+ onPressReplyMessageInThread = NOOP,
28
30
  onBeforeSendUserMessage = PASS,
29
31
  onBeforeSendFileMessage = PASS,
30
32
  onBeforeUpdateUserMessage = PASS,
@@ -43,15 +45,24 @@ const createGroupChannelFragment = initModule => {
43
45
  const {
44
46
  sdk,
45
47
  currentUser,
46
- sbOptions
48
+ sbOptions,
49
+ voiceMessageStatusManager
47
50
  } = useSendbirdChat();
51
+ const toast = useToast();
52
+ const {
53
+ STRINGS
54
+ } = useLocalization();
48
55
  const [internalSearchItem, setInternalSearchItem] = useState(searchItem);
49
56
  const navigateFromMessageSearch = useCallback(() => Boolean(searchItem), []);
50
57
  const [groupChannelPubSub] = useState(() => pubsub());
51
58
  const [scrolledAwayFromBottom, setScrolledAwayFromBottom] = useState(false);
52
59
  const scrolledAwayFromBottomRef = useRefTracker(scrolledAwayFromBottom);
53
60
  const replyType = useIIFE(() => {
54
- if (sbOptions.uikit.groupChannel.channel.replyType === 'none') return ReplyType.NONE;else return ReplyType.ONLY_REPLY_TO_CHANNEL;
61
+ if (sbOptions.uikit.groupChannel.channel.replyType === 'none') {
62
+ return ReplyType.NONE;
63
+ } else {
64
+ return ReplyType.ONLY_REPLY_TO_CHANNEL;
65
+ }
55
66
  });
56
67
  const {
57
68
  loading,
@@ -98,6 +109,7 @@ const createGroupChannelFragment = initModule => {
98
109
  return Promise.allSettled([playerService.reset(), recorderService.reset()]);
99
110
  };
100
111
  const _onPressHeaderLeft = useFreshCallback(async () => {
112
+ voiceMessageStatusManager.clear();
101
113
  await onBlurFragment();
102
114
  onPressHeaderLeft();
103
115
  });
@@ -109,6 +121,10 @@ const createGroupChannelFragment = initModule => {
109
121
  await onBlurFragment();
110
122
  onPressMediaMessage(message, deleteMessage, uri);
111
123
  });
124
+ const _onPressReplyMessageInThread = useFreshCallback(async (message, startingPoint) => {
125
+ await onBlurFragment();
126
+ onPressReplyMessageInThread(message, startingPoint);
127
+ });
112
128
  useEffect(() => {
113
129
  return () => {
114
130
  onBlurFragment();
@@ -160,9 +176,18 @@ const createGroupChannelFragment = initModule => {
160
176
  onSent(message);
161
177
  });
162
178
  const onPressSendFileMessage = useFreshCallback(async params => {
179
+ var _processedParams$file;
163
180
  const processedParams = await onBeforeSendFileMessage(params);
164
- const message = await sendFileMessage(processedParams, onPending);
165
- onSent(message);
181
+ const fileSize = ((_processedParams$file = processedParams.file) === null || _processedParams$file === void 0 ? void 0 : _processedParams$file.size) ?? processedParams.fileSize;
182
+ const uploadSizeLimit = sbOptions.appInfo.uploadSizeLimit;
183
+ if (fileSize && uploadSizeLimit && fileSize > uploadSizeLimit) {
184
+ const sizeLimitString = `${getReadableFileSize(uploadSizeLimit)} MB`;
185
+ toast.show(STRINGS.TOAST.FILE_UPLOAD_SIZE_LIMIT_EXCEEDED_ERROR(sizeLimitString), 'error');
186
+ return;
187
+ } else {
188
+ const message = await sendFileMessage(processedParams, onPending);
189
+ onSent(message);
190
+ }
166
191
  });
167
192
  const onPressUpdateUserMessage = useFreshCallback(async (message, params) => {
168
193
  const processedParams = await onBeforeUpdateUserMessage(params);
@@ -182,7 +207,8 @@ const createGroupChannelFragment = initModule => {
182
207
  enableTypingIndicator: enableTypingIndicator ?? sbOptions.uikit.groupChannel.channel.enableTypingIndicator,
183
208
  keyboardAvoidOffset: keyboardAvoidOffset,
184
209
  messages: messages,
185
- onUpdateSearchItem: onUpdateSearchItem
210
+ onUpdateSearchItem: onUpdateSearchItem,
211
+ onPressReplyMessageInThread: _onPressReplyMessageInThread
186
212
  }, /*#__PURE__*/React.createElement(GroupChannelModule.Header, {
187
213
  shouldHideRight: navigateFromMessageSearch,
188
214
  onPressHeaderLeft: _onPressHeaderLeft,