@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
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useCallback","useRef","useState","useChannelHandler","Logger","NOOP","getGroupChannelChatAvailableState","isDifferentChannel","useFreshCallback","useUniqHandlerId","ProviderLayout","MESSAGE_FOCUS_ANIMATION_DELAY","useLocalization","useSendbirdChat","GroupChannelContexts","Fragment","headerTitle","channel","setMessageToEdit","setMessageToReply","TypingIndicator","typingUsers","PubSub","publish","subscribe","MessageList","flatListRef","current","scrollToMessage","lazyScrollToBottom","lazyScrollToIndex","GroupChannelContextsProvider","_ref","children","enableTypingIndicator","keyboardAvoidOffset","groupChannelPubSub","messages","onUpdateSearchItem","Error","handlerId","STRINGS","currentUser","sdk","setTypingUsers","messageToEdit","messageToReply","useScrollActions","updateInputMode","mode","message","undefined","onMessageDeleted","_","messageId","onChannelFrozen","frozenChannel","url","isGroupChannel","frozen","onUserMuted","mutedChannel","user","_sdk$currentUser","userId","onTypingStatusUpdated","eventChannel","getTypingUsers","createElement","Provider","value","GROUP_CHANNEL","HEADER_TITLE","params","logFlatListRefWarning","setTimeout","_flatListRef$current","scrollToOffset","offset","animated","timeout","_flatListRef$current2","scrollToIndex","index","viewPosition","options","foundMessageIndex","findIndex","it","isIncludedInList","focusAnimated","startingPoint","createdAt","warn"],"sources":["moduleContext.tsx"],"sourcesContent":["import React, { createContext, useCallback, useRef, useState } from 'react';\nimport type { FlatList } from 'react-native';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport {\n ContextValue,\n Logger,\n NOOP,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUser,\n SendbirdUserMessage,\n getGroupChannelChatAvailableState,\n isDifferentChannel,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport ProviderLayout from '../../../components/ProviderLayout';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY } from '../../../constants';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport type { PubSub } from '../../../utils/pubsub';\nimport type { GroupChannelContextsType, GroupChannelModule, GroupChannelPubSubContextPayload } from '../types';\nimport { GroupChannelProps } from '../types';\n\nexport const GroupChannelContexts: GroupChannelContextsType = {\n Fragment: createContext({\n headerTitle: '',\n channel: {} as SendbirdGroupChannel,\n setMessageToEdit: NOOP,\n setMessageToReply: NOOP,\n }),\n TypingIndicator: createContext({\n typingUsers: [] as SendbirdUser[],\n }),\n PubSub: createContext({\n publish: NOOP,\n subscribe: () => NOOP,\n } as PubSub<GroupChannelPubSubContextPayload>),\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 GroupChannelContextsProvider: GroupChannelModule['Provider'] = ({\n children,\n channel,\n enableTypingIndicator,\n keyboardAvoidOffset = 0,\n groupChannelPubSub,\n messages,\n onUpdateSearchItem,\n}) => {\n if (!channel) throw new Error('GroupChannel is not provided to GroupChannelModule');\n\n const handlerId = useUniqHandlerId('GroupChannelContextsProvider');\n const { STRINGS } = useLocalization();\n const { currentUser, sdk } = useSendbirdChat();\n\n const [typingUsers, setTypingUsers] = useState<SendbirdUser[]>([]);\n const [messageToEdit, setMessageToEdit] = useState<SendbirdUserMessage | SendbirdFileMessage>();\n const [messageToReply, setMessageToReply] = useState<SendbirdUserMessage | SendbirdFileMessage>();\n\n const { flatListRef, lazyScrollToIndex, lazyScrollToBottom, scrollToMessage } = useScrollActions({\n messages,\n onUpdateSearchItem,\n });\n\n const updateInputMode = (mode: 'send' | 'edit' | 'reply', message?: SendbirdUserMessage | SendbirdFileMessage) => {\n if (mode === 'send' || !message) {\n setMessageToEdit(undefined);\n setMessageToReply(undefined);\n return;\n } else if (mode === 'edit') {\n setMessageToEdit(message);\n setMessageToReply(undefined);\n return;\n } else if (mode === 'reply') {\n setMessageToEdit(undefined);\n setMessageToReply(message);\n return;\n }\n };\n\n useChannelHandler(sdk, handlerId, {\n onMessageDeleted(_, messageId) {\n if (messageToReply?.messageId === messageId) {\n setMessageToReply(undefined);\n }\n },\n onChannelFrozen(frozenChannel) {\n if (frozenChannel.url === channel.url) {\n if (frozenChannel.isGroupChannel() && getGroupChannelChatAvailableState(channel).frozen) {\n setMessageToReply(undefined);\n }\n }\n },\n onUserMuted(mutedChannel, user) {\n if (mutedChannel.url === channel.url && user.userId === sdk.currentUser?.userId) {\n setMessageToReply(undefined);\n }\n },\n onTypingStatusUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!enableTypingIndicator) return;\n setTypingUsers(eventChannel.getTypingUsers());\n },\n });\n\n return (\n <ProviderLayout>\n <GroupChannelContexts.Fragment.Provider\n value={{\n headerTitle: STRINGS.GROUP_CHANNEL.HEADER_TITLE(currentUser?.userId ?? '', channel),\n channel,\n keyboardAvoidOffset,\n messageToEdit,\n setMessageToEdit: useCallback((message) => updateInputMode('edit', message), []),\n messageToReply,\n setMessageToReply: useCallback((message) => updateInputMode('reply', message), []),\n }}\n >\n <GroupChannelContexts.PubSub.Provider value={groupChannelPubSub}>\n <GroupChannelContexts.TypingIndicator.Provider value={{ typingUsers }}>\n <GroupChannelContexts.MessageList.Provider\n value={{\n flatListRef,\n scrollToMessage,\n lazyScrollToIndex,\n lazyScrollToBottom,\n }}\n >\n {children}\n </GroupChannelContexts.MessageList.Provider>\n </GroupChannelContexts.TypingIndicator.Provider>\n </GroupChannelContexts.PubSub.Provider>\n </GroupChannelContexts.Fragment.Provider>\n </ProviderLayout>\n );\n};\n\ntype MessageListContextValue = ContextValue<GroupChannelContextsType['MessageList']>;\nconst useScrollActions = (params: Pick<GroupChannelProps['Provider'], 'messages' | 'onUpdateSearchItem'>) => {\n const { messages, onUpdateSearchItem } = 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 flatListRef.current?.scrollToOffset({ offset: 0, animated: params?.animated ?? false });\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 flatListRef.current?.scrollToIndex({\n index: params?.index ?? 0,\n animated: params?.animated ?? false,\n viewPosition: params?.viewPosition ?? 0.5,\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 = messages.findIndex((it) => it.messageId === messageId);\n const isIncludedInList = foundMessageIndex > -1;\n\n if (isIncludedInList) {\n if (options?.focusAnimated) {\n setTimeout(\n () => onUpdateSearchItem({ startingPoint: messages[foundMessageIndex].createdAt }),\n MESSAGE_FOCUS_ANIMATION_DELAY,\n );\n }\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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"}
1
+ {"version":3,"names":["React","createContext","useCallback","useRef","useState","useChannelHandler","Logger","NOOP","getGroupChannelChatAvailableState","isDifferentChannel","useFreshCallback","useUniqHandlerId","ProviderLayout","MESSAGE_FOCUS_ANIMATION_DELAY","useLocalization","useSendbirdChat","GroupChannelContexts","Fragment","headerTitle","channel","setMessageToEdit","setMessageToReply","TypingIndicator","typingUsers","PubSub","publish","subscribe","MessageList","flatListRef","current","scrollToMessage","lazyScrollToBottom","lazyScrollToIndex","GroupChannelContextsProvider","_ref","children","enableTypingIndicator","keyboardAvoidOffset","groupChannelPubSub","messages","onUpdateSearchItem","onPressReplyMessageInThread","Error","handlerId","STRINGS","currentUser","sdk","sbOptions","setTypingUsers","messageToEdit","messageToReply","useScrollActions","updateInputMode","mode","message","undefined","onPressMessageToReply","parentMessage","uikit","groupChannel","replyType","Number","MAX_SAFE_INTEGER","onMessageDeleted","_","messageId","onChannelFrozen","frozenChannel","url","isGroupChannel","frozen","onUserMuted","mutedChannel","user","_sdk$currentUser","userId","onTypingStatusUpdated","eventChannel","getTypingUsers","createElement","Provider","value","GROUP_CHANNEL","HEADER_TITLE","params","logFlatListRefWarning","setTimeout","_flatListRef$current","scrollToOffset","offset","animated","timeout","_flatListRef$current2","scrollToIndex","index","viewPosition","options","foundMessageIndex","findIndex","it","isIncludedInList","focusAnimated","startingPoint","createdAt","warn"],"sources":["moduleContext.tsx"],"sourcesContent":["import React, { createContext, useCallback, useRef, useState } from 'react';\nimport type { FlatList } from 'react-native';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport {\n ContextValue,\n Logger,\n NOOP,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUser,\n SendbirdUserMessage,\n getGroupChannelChatAvailableState,\n isDifferentChannel,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport ProviderLayout from '../../../components/ProviderLayout';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY } from '../../../constants';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport type { PubSub } from '../../../utils/pubsub';\nimport type { GroupChannelContextsType, GroupChannelModule, GroupChannelPubSubContextPayload } from '../types';\nimport { GroupChannelProps } from '../types';\n\nexport const GroupChannelContexts: GroupChannelContextsType = {\n Fragment: createContext({\n headerTitle: '',\n channel: {} as SendbirdGroupChannel,\n setMessageToEdit: NOOP,\n setMessageToReply: NOOP,\n }),\n TypingIndicator: createContext({\n typingUsers: [] as SendbirdUser[],\n }),\n PubSub: createContext({\n publish: NOOP,\n subscribe: () => NOOP,\n } as PubSub<GroupChannelPubSubContextPayload>),\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 GroupChannelContextsProvider: GroupChannelModule['Provider'] = ({\n children,\n channel,\n enableTypingIndicator,\n keyboardAvoidOffset = 0,\n groupChannelPubSub,\n messages,\n onUpdateSearchItem,\n onPressReplyMessageInThread,\n}) => {\n if (!channel) throw new Error('GroupChannel is not provided to GroupChannelModule');\n\n const handlerId = useUniqHandlerId('GroupChannelContextsProvider');\n const { STRINGS } = useLocalization();\n const { currentUser, sdk, sbOptions } = useSendbirdChat();\n\n const [typingUsers, setTypingUsers] = useState<SendbirdUser[]>([]);\n const [messageToEdit, setMessageToEdit] = useState<SendbirdUserMessage | SendbirdFileMessage>();\n const [messageToReply, setMessageToReply] = useState<SendbirdUserMessage | SendbirdFileMessage>();\n\n const { flatListRef, lazyScrollToIndex, lazyScrollToBottom, scrollToMessage } = useScrollActions({\n messages,\n onUpdateSearchItem,\n });\n\n const updateInputMode = (mode: 'send' | 'edit' | 'reply', message?: SendbirdUserMessage | SendbirdFileMessage) => {\n if (mode === 'send' || !message) {\n setMessageToEdit(undefined);\n setMessageToReply(undefined);\n return;\n } else if (mode === 'edit') {\n setMessageToEdit(message);\n setMessageToReply(undefined);\n return;\n } else if (mode === 'reply') {\n setMessageToEdit(undefined);\n setMessageToReply(message);\n return;\n }\n };\n\n const onPressMessageToReply = (parentMessage?: SendbirdUserMessage | SendbirdFileMessage) => {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && parentMessage) {\n onPressReplyMessageInThread?.(parentMessage, Number.MAX_SAFE_INTEGER);\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n updateInputMode('reply', parentMessage);\n }\n };\n\n useChannelHandler(sdk, handlerId, {\n onMessageDeleted(_, messageId) {\n if (messageToReply?.messageId === messageId) {\n setMessageToReply(undefined);\n }\n },\n onChannelFrozen(frozenChannel) {\n if (frozenChannel.url === channel.url) {\n if (frozenChannel.isGroupChannel() && getGroupChannelChatAvailableState(channel).frozen) {\n setMessageToReply(undefined);\n }\n }\n },\n onUserMuted(mutedChannel, user) {\n if (mutedChannel.url === channel.url && user.userId === sdk.currentUser?.userId) {\n setMessageToReply(undefined);\n }\n },\n onTypingStatusUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!enableTypingIndicator) return;\n setTypingUsers(eventChannel.getTypingUsers());\n },\n });\n\n return (\n <ProviderLayout>\n <GroupChannelContexts.Fragment.Provider\n value={{\n headerTitle: STRINGS.GROUP_CHANNEL.HEADER_TITLE(currentUser?.userId ?? '', channel),\n channel,\n keyboardAvoidOffset,\n messageToEdit,\n setMessageToEdit: useCallback((message) => updateInputMode('edit', message), []),\n messageToReply,\n setMessageToReply: useCallback((message) => onPressMessageToReply(message), []),\n }}\n >\n <GroupChannelContexts.PubSub.Provider value={groupChannelPubSub}>\n <GroupChannelContexts.TypingIndicator.Provider value={{ typingUsers }}>\n <GroupChannelContexts.MessageList.Provider\n value={{\n flatListRef,\n scrollToMessage,\n lazyScrollToIndex,\n lazyScrollToBottom,\n onPressReplyMessageInThread,\n }}\n >\n {children}\n </GroupChannelContexts.MessageList.Provider>\n </GroupChannelContexts.TypingIndicator.Provider>\n </GroupChannelContexts.PubSub.Provider>\n </GroupChannelContexts.Fragment.Provider>\n </ProviderLayout>\n );\n};\n\ntype MessageListContextValue = ContextValue<GroupChannelContextsType['MessageList']>;\nconst useScrollActions = (params: Pick<GroupChannelProps['Provider'], 'messages' | 'onUpdateSearchItem'>) => {\n const { messages, onUpdateSearchItem } = 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 flatListRef.current?.scrollToOffset({ offset: 0, animated: params?.animated ?? false });\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 flatListRef.current?.scrollToIndex({\n index: params?.index ?? 0,\n animated: params?.animated ?? false,\n viewPosition: params?.viewPosition ?? 0.5,\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 = messages.findIndex((it) => it.messageId === messageId);\n const isIncludedInList = foundMessageIndex > -1;\n\n if (isIncludedInList) {\n if (options?.focusAnimated) {\n setTimeout(\n () => onUpdateSearchItem({ startingPoint: messages[foundMessageIndex].createdAt }),\n MESSAGE_FOCUS_ANIMATION_DELAY,\n );\n }\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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"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from 'react';\nimport type { FlatList } from 'react-native';\n\nimport type { MessageCollectionParams, MessageFilterParams } from '@sendbird/chat/groupChannel';\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 SendbirdUser,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n} from '@sendbird/uikit-utils';\n\nimport type { ChannelInputProps, SuggestedMentionListProps } from '../../components/ChannelInput';\nimport type { ChannelMessageListProps } from '../../components/ChannelMessageList';\nimport type { CommonComponent } from '../../types';\nimport type { PubSub } from '../../utils/pubsub';\n\nexport type MessageListQueryParamsType = Omit<MessageCollectionParams, 'filter'> & MessageFilterParams;\nexport interface GroupChannelProps {\n Fragment: {\n channel: SendbirdGroupChannel;\n onChannelDeleted: () => void;\n onPressHeaderLeft: GroupChannelProps['Header']['onPressHeaderLeft'];\n onPressHeaderRight: GroupChannelProps['Header']['onPressHeaderRight'];\n onPressMediaMessage?: GroupChannelProps['MessageList']['onPressMediaMessage'];\n\n onBeforeSendUserMessage?: OnBeforeHandler<SendbirdUserMessageCreateParams>;\n onBeforeSendFileMessage?: OnBeforeHandler<SendbirdFileMessageCreateParams>;\n onBeforeUpdateUserMessage?: OnBeforeHandler<SendbirdUserMessageUpdateParams>;\n onBeforeUpdateFileMessage?: OnBeforeHandler<SendbirdFileMessageUpdateParams>;\n\n renderMessage?: GroupChannelProps['MessageList']['renderMessage'];\n renderNewMessagesButton?: GroupChannelProps['MessageList']['renderNewMessagesButton'];\n renderScrollToBottomButton?: GroupChannelProps['MessageList']['renderScrollToBottomButton'];\n\n enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];\n enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: GroupChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n\n searchItem?: GroupChannelProps['MessageList']['searchItem'];\n\n /**\n * @description You can specify the query parameters for the message list.\n * @example\n * ```\n * <GroupChannelFragment messageListQueryParams={{ prevResultLimit: 20, customTypesFilter: ['filter'] }} />\n * ```\n * */\n messageListQueryParams?: MessageListQueryParamsType;\n /** @deprecated Please use `messageListQueryParams` instead */\n collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];\n };\n Header: {\n shouldHideRight: () => boolean;\n onPressHeaderLeft: () => void;\n onPressHeaderRight: () => void;\n };\n MessageList: Pick<\n ChannelMessageListProps<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 | 'renderNewMessagesButton'\n | 'renderScrollToBottomButton'\n | 'flatListProps'\n | 'hasNext'\n | 'searchItem'\n > & {\n onResetMessageList: () => Promise<void>;\n onResetMessageListWithStartingPoint: (startingPoint: number) => Promise<void>;\n\n // Changing the search item will trigger the focus animation on messages.\n onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;\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 enableTypingIndicator: boolean;\n keyboardAvoidOffset?: number;\n groupChannelPubSub: PubSub<GroupChannelPubSubContextPayload>;\n\n messages: SendbirdMessage[];\n // Changing the search item will trigger the focus animation on messages.\n onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;\n };\n}\n\n/**\n * Internal context for GroupChannel\n * For example, the developer can create a custom header\n * with getting data from the domain context\n * */\nexport interface GroupChannelContextsType {\n Fragment: React.Context<{\n headerTitle: string;\n keyboardAvoidOffset?: number;\n channel: SendbirdGroupChannel;\n messageToEdit?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n messageToReply?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToReply: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n }>;\n TypingIndicator: React.Context<{\n typingUsers: SendbirdUser[];\n }>;\n PubSub: React.Context<PubSub<GroupChannelPubSubContextPayload>>;\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(GroupChannelContexts.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}\nexport interface GroupChannelModule {\n Provider: CommonComponent<GroupChannelProps['Provider']>;\n Header: CommonComponent<GroupChannelProps['Header']>;\n MessageList: CommonComponent<GroupChannelProps['MessageList']>;\n Input: CommonComponent<GroupChannelProps['Input']>;\n SuggestedMentionList: CommonComponent<GroupChannelProps['SuggestedMentionList']>;\n StatusEmpty: CommonComponent;\n StatusLoading: CommonComponent;\n}\n\nexport type GroupChannelFragment = React.FC<GroupChannelProps['Fragment']>;\n\nexport type GroupChannelPubSubContextPayload =\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
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from 'react';\nimport type { FlatList } from 'react-native';\n\nimport type { MessageCollectionParams, MessageFilterParams } from '@sendbird/chat/groupChannel';\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 SendbirdSendableMessage,\n SendbirdUser,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n} from '@sendbird/uikit-utils';\n\nimport type { ChannelInputProps, SuggestedMentionListProps } from '../../components/ChannelInput';\nimport type { ChannelMessageListProps } from '../../components/ChannelMessageList';\nimport type { CommonComponent } from '../../types';\nimport type { PubSub } from '../../utils/pubsub';\n\nexport type MessageListQueryParamsType = Omit<MessageCollectionParams, 'filter'> & MessageFilterParams;\nexport interface GroupChannelProps {\n Fragment: {\n channel: SendbirdGroupChannel;\n onChannelDeleted: () => void;\n onPressHeaderLeft: GroupChannelProps['Header']['onPressHeaderLeft'];\n onPressHeaderRight: GroupChannelProps['Header']['onPressHeaderRight'];\n onPressMediaMessage?: GroupChannelProps['MessageList']['onPressMediaMessage'];\n onPressReplyMessageInThread?: GroupChannelProps['Provider']['onPressReplyMessageInThread'];\n\n onBeforeSendUserMessage?: OnBeforeHandler<SendbirdUserMessageCreateParams>;\n onBeforeSendFileMessage?: OnBeforeHandler<SendbirdFileMessageCreateParams>;\n onBeforeUpdateUserMessage?: OnBeforeHandler<SendbirdUserMessageUpdateParams>;\n onBeforeUpdateFileMessage?: OnBeforeHandler<SendbirdFileMessageUpdateParams>;\n\n renderMessage?: GroupChannelProps['MessageList']['renderMessage'];\n renderNewMessagesButton?: GroupChannelProps['MessageList']['renderNewMessagesButton'];\n renderScrollToBottomButton?: GroupChannelProps['MessageList']['renderScrollToBottomButton'];\n\n enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];\n enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: GroupChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n\n searchItem?: GroupChannelProps['MessageList']['searchItem'];\n\n /**\n * @description You can specify the query parameters for the message list.\n * @example\n * ```\n * <GroupChannelFragment messageListQueryParams={{ prevResultLimit: 20, customTypesFilter: ['filter'] }} />\n * ```\n * */\n messageListQueryParams?: MessageListQueryParamsType;\n /** @deprecated Please use `messageListQueryParams` instead */\n collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];\n };\n Header: {\n shouldHideRight: () => boolean;\n onPressHeaderLeft: () => void;\n onPressHeaderRight: () => void;\n };\n MessageList: Pick<\n ChannelMessageListProps<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 | 'renderNewMessagesButton'\n | 'renderScrollToBottomButton'\n | 'flatListProps'\n | 'hasNext'\n | 'searchItem'\n > & {\n onResetMessageList: () => Promise<void>;\n onResetMessageListWithStartingPoint: (startingPoint: number) => Promise<void>;\n\n // Changing the search item will trigger the focus animation on messages.\n onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;\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 enableTypingIndicator: boolean;\n keyboardAvoidOffset?: number;\n groupChannelPubSub: PubSub<GroupChannelPubSubContextPayload>;\n\n messages: SendbirdMessage[];\n // Changing the search item will trigger the focus animation on messages.\n onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;\n onPressReplyMessageInThread: (parentMessage: SendbirdSendableMessage, startingPoint?: number) => void;\n };\n}\n\n/**\n * Internal context for GroupChannel\n * For example, the developer can create a custom header\n * with getting data from the domain context\n * */\nexport interface GroupChannelContextsType {\n Fragment: React.Context<{\n headerTitle: string;\n keyboardAvoidOffset?: number;\n channel: SendbirdGroupChannel;\n messageToEdit?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n messageToReply?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToReply: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n }>;\n TypingIndicator: React.Context<{\n typingUsers: SendbirdUser[];\n }>;\n PubSub: React.Context<PubSub<GroupChannelPubSubContextPayload>>;\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(GroupChannelContexts.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 onPressReplyMessageInThread?: (parentMessage: SendbirdSendableMessage, startingPoint?: number) => void;\n }>;\n}\nexport interface GroupChannelModule {\n Provider: CommonComponent<GroupChannelProps['Provider']>;\n Header: CommonComponent<GroupChannelProps['Header']>;\n MessageList: CommonComponent<GroupChannelProps['MessageList']>;\n Input: CommonComponent<GroupChannelProps['Input']>;\n SuggestedMentionList: CommonComponent<GroupChannelProps['SuggestedMentionList']>;\n StatusEmpty: CommonComponent;\n StatusLoading: CommonComponent;\n}\n\nexport type GroupChannelFragment = React.FC<GroupChannelProps['Fragment']>;\n\nexport type GroupChannelPubSubContextPayload =\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":""}
@@ -0,0 +1,73 @@
1
+ import React, { useContext } from 'react';
2
+ import { View } from 'react-native';
3
+ import { Icon, Text, createStyleSheet, useHeaderStyle, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
4
+ import { useLocalization, useSendbirdChat } from '../../../hooks/useContext';
5
+ import { GroupChannelThreadContexts } from '../module/moduleContext';
6
+ const GroupChannelThreadHeader = _ref => {
7
+ let {
8
+ onPressLeft,
9
+ onPressSubtitle
10
+ } = _ref;
11
+ const {
12
+ headerTitle,
13
+ channel
14
+ } = useContext(GroupChannelThreadContexts.Fragment);
15
+ const {
16
+ HeaderComponent
17
+ } = useHeaderStyle();
18
+ const {
19
+ STRINGS
20
+ } = useLocalization();
21
+ const {
22
+ select,
23
+ colors,
24
+ palette
25
+ } = useUIKitTheme();
26
+ const {
27
+ currentUser
28
+ } = useSendbirdChat();
29
+ const renderSubtitle = () => {
30
+ if (!currentUser) return null;
31
+ return /*#__PURE__*/React.createElement(Text, {
32
+ onPress: onPressSubtitle,
33
+ caption2: true,
34
+ style: styles.subtitle,
35
+ color: select({
36
+ light: palette.primary300,
37
+ dark: palette.primary200
38
+ }),
39
+ numberOfLines: 1
40
+ }, STRINGS.GROUP_CHANNEL_THREAD.HEADER_SUBTITLE(currentUser.userId, channel));
41
+ };
42
+ return /*#__PURE__*/React.createElement(HeaderComponent, {
43
+ clearTitleMargin: true,
44
+ title: /*#__PURE__*/React.createElement(View, {
45
+ style: styles.titleContainer
46
+ }, /*#__PURE__*/React.createElement(View, {
47
+ style: {
48
+ flexShrink: 1
49
+ }
50
+ }, /*#__PURE__*/React.createElement(Text, {
51
+ h2: true,
52
+ color: colors.onBackground01,
53
+ numberOfLines: 1
54
+ }, headerTitle), renderSubtitle())),
55
+ left: /*#__PURE__*/React.createElement(Icon, {
56
+ icon: 'arrow-left',
57
+ size: 24
58
+ }),
59
+ onPressLeft: onPressLeft
60
+ });
61
+ };
62
+ const styles = createStyleSheet({
63
+ titleContainer: {
64
+ maxWidth: '100%',
65
+ flexDirection: 'row',
66
+ width: '100%'
67
+ },
68
+ subtitle: {
69
+ marginTop: 2
70
+ }
71
+ });
72
+ export default GroupChannelThreadHeader;
73
+ //# sourceMappingURL=GroupChannelThreadHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useContext","View","Icon","Text","createStyleSheet","useHeaderStyle","useUIKitTheme","useLocalization","useSendbirdChat","GroupChannelThreadContexts","GroupChannelThreadHeader","_ref","onPressLeft","onPressSubtitle","headerTitle","channel","Fragment","HeaderComponent","STRINGS","select","colors","palette","currentUser","renderSubtitle","createElement","onPress","caption2","style","styles","subtitle","color","light","primary300","dark","primary200","numberOfLines","GROUP_CHANNEL_THREAD","HEADER_SUBTITLE","userId","clearTitleMargin","title","titleContainer","flexShrink","h2","onBackground01","left","icon","size","maxWidth","flexDirection","width","marginTop"],"sources":["GroupChannelThreadHeader.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { View } from 'react-native';\n\nimport { Icon, Text, createStyleSheet, useHeaderStyle, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\n\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelThreadContexts } from '../module/moduleContext';\nimport type { GroupChannelThreadProps } from '../types';\n\nconst GroupChannelThreadHeader = ({ onPressLeft, onPressSubtitle }: GroupChannelThreadProps['Header']) => {\n const { headerTitle, channel } = useContext(GroupChannelThreadContexts.Fragment);\n const { HeaderComponent } = useHeaderStyle();\n const { STRINGS } = useLocalization();\n const { select, colors, palette } = useUIKitTheme();\n const { currentUser } = useSendbirdChat();\n\n const renderSubtitle = () => {\n if (!currentUser) return null;\n\n return (\n <Text\n onPress={onPressSubtitle}\n caption2\n style={styles.subtitle}\n color={select({ light: palette.primary300, dark: palette.primary200 })}\n numberOfLines={1}\n >\n {STRINGS.GROUP_CHANNEL_THREAD.HEADER_SUBTITLE(currentUser.userId, channel)}\n </Text>\n );\n };\n\n return (\n <HeaderComponent\n clearTitleMargin\n title={\n <View style={styles.titleContainer}>\n <View style={{ flexShrink: 1 }}>\n <Text h2 color={colors.onBackground01} numberOfLines={1}>\n {headerTitle}\n </Text>\n {renderSubtitle()}\n </View>\n </View>\n }\n left={<Icon icon={'arrow-left'} size={24} />}\n onPressLeft={onPressLeft}\n />\n );\n};\n\nconst styles = createStyleSheet({\n titleContainer: {\n maxWidth: '100%',\n flexDirection: 'row',\n width: '100%',\n },\n subtitle: {\n marginTop: 2,\n },\n});\n\nexport default GroupChannelThreadHeader;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,SAASC,IAAI,QAAQ,cAAc;AAEnC,SAASC,IAAI,EAAEC,IAAI,EAAEC,gBAAgB,EAAEC,cAAc,EAAEC,aAAa,QAAQ,yCAAyC;AAErH,SAASC,eAAe,EAAEC,eAAe,QAAQ,2BAA2B;AAC5E,SAASC,0BAA0B,QAAQ,yBAAyB;AAGpE,MAAMC,wBAAwB,GAAGC,IAAA,IAAyE;EAAA,IAAxE;IAAEC,WAAW;IAAEC;EAAmD,CAAC,GAAAF,IAAA;EACnG,MAAM;IAAEG,WAAW;IAAEC;EAAQ,CAAC,GAAGf,UAAU,CAACS,0BAA0B,CAACO,QAAQ,CAAC;EAChF,MAAM;IAAEC;EAAgB,CAAC,GAAGZ,cAAc,EAAE;EAC5C,MAAM;IAAEa;EAAQ,CAAC,GAAGX,eAAe,EAAE;EACrC,MAAM;IAAEY,MAAM;IAAEC,MAAM;IAAEC;EAAQ,CAAC,GAAGf,aAAa,EAAE;EACnD,MAAM;IAAEgB;EAAY,CAAC,GAAGd,eAAe,EAAE;EAEzC,MAAMe,cAAc,GAAGA,CAAA,KAAM;IAC3B,IAAI,CAACD,WAAW,EAAE,OAAO,IAAI;IAE7B,oBACEvB,KAAA,CAAAyB,aAAA,CAACrB,IAAI;MACHsB,OAAO,EAAEZ,eAAgB;MACzBa,QAAQ;MACRC,KAAK,EAAEC,MAAM,CAACC,QAAS;MACvBC,KAAK,EAAEX,MAAM,CAAC;QAAEY,KAAK,EAAEV,OAAO,CAACW,UAAU;QAAEC,IAAI,EAAEZ,OAAO,CAACa;MAAW,CAAC,CAAE;MACvEC,aAAa,EAAE;IAAE,GAEhBjB,OAAO,CAACkB,oBAAoB,CAACC,eAAe,CAACf,WAAW,CAACgB,MAAM,EAAEvB,OAAO,CAAC,CACrE;EAEX,CAAC;EAED,oBACEhB,KAAA,CAAAyB,aAAA,CAACP,eAAe;IACdsB,gBAAgB;IAChBC,KAAK,eACHzC,KAAA,CAAAyB,aAAA,CAACvB,IAAI;MAAC0B,KAAK,EAAEC,MAAM,CAACa;IAAe,gBACjC1C,KAAA,CAAAyB,aAAA,CAACvB,IAAI;MAAC0B,KAAK,EAAE;QAAEe,UAAU,EAAE;MAAE;IAAE,gBAC7B3C,KAAA,CAAAyB,aAAA,CAACrB,IAAI;MAACwC,EAAE;MAACb,KAAK,EAAEV,MAAM,CAACwB,cAAe;MAACT,aAAa,EAAE;IAAE,GACrDrB,WAAW,CACP,EACNS,cAAc,EAAE,CACZ,CAEV;IACDsB,IAAI,eAAE9C,KAAA,CAAAyB,aAAA,CAACtB,IAAI;MAAC4C,IAAI,EAAE,YAAa;MAACC,IAAI,EAAE;IAAG,EAAI;IAC7CnC,WAAW,EAAEA;EAAY,EACzB;AAEN,CAAC;AAED,MAAMgB,MAAM,GAAGxB,gBAAgB,CAAC;EAC9BqC,cAAc,EAAE;IACdO,QAAQ,EAAE,MAAM;IAChBC,aAAa,EAAE,KAAK;IACpBC,KAAK,EAAE;EACT,CAAC;EACDrB,QAAQ,EAAE;IACRsB,SAAS,EAAE;EACb;AACF,CAAC,CAAC;AAEF,eAAezC,wBAAwB"}
@@ -0,0 +1,34 @@
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, { useContext } from 'react';
3
+ import { getGroupChannelChatAvailableState } from '@sendbird/uikit-utils';
4
+ import ChannelInput from '../../../components/ChannelInput';
5
+ import { GroupChannelThreadContexts } from '../module/moduleContext';
6
+ const GroupChannelThreadInput = _ref => {
7
+ let {
8
+ inputDisabled,
9
+ ...props
10
+ } = _ref;
11
+ const {
12
+ channel,
13
+ keyboardAvoidOffset = 0,
14
+ messageToEdit,
15
+ setMessageToEdit,
16
+ parentMessage
17
+ } = useContext(GroupChannelThreadContexts.Fragment);
18
+ const chatAvailableState = getGroupChannelChatAvailableState(channel);
19
+ return /*#__PURE__*/React.createElement(ChannelInput, _extends({
20
+ channel: channel,
21
+ messageToEdit: messageToEdit,
22
+ setMessageToEdit: setMessageToEdit,
23
+ messageForThread: parentMessage,
24
+ keyboardAvoidOffset: keyboardAvoidOffset,
25
+ inputMuted: chatAvailableState.muted,
26
+ inputFrozen: chatAvailableState.frozen,
27
+ inputDisabled: inputDisabled ?? chatAvailableState.disabled,
28
+ MessageToReplyPreview: () => {
29
+ return null;
30
+ }
31
+ }, props));
32
+ };
33
+ export default /*#__PURE__*/React.memo(GroupChannelThreadInput);
34
+ //# sourceMappingURL=GroupChannelThreadInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useContext","getGroupChannelChatAvailableState","ChannelInput","GroupChannelThreadContexts","GroupChannelThreadInput","_ref","inputDisabled","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","parentMessage","Fragment","chatAvailableState","createElement","_extends","messageForThread","inputMuted","muted","inputFrozen","frozen","disabled","MessageToReplyPreview","memo"],"sources":["GroupChannelThreadInput.tsx"],"sourcesContent":["import React, { useContext } from 'react';\n\nimport { getGroupChannelChatAvailableState } from '@sendbird/uikit-utils';\n\nimport ChannelInput from '../../../components/ChannelInput';\nimport { GroupChannelThreadContexts } from '../module/moduleContext';\nimport type { GroupChannelThreadProps } from '../types';\n\nconst GroupChannelThreadInput = ({ inputDisabled, ...props }: GroupChannelThreadProps['Input']) => {\n const {\n channel,\n keyboardAvoidOffset = 0,\n messageToEdit,\n setMessageToEdit,\n parentMessage,\n } = useContext(GroupChannelThreadContexts.Fragment);\n\n const chatAvailableState = getGroupChannelChatAvailableState(channel);\n\n return (\n <ChannelInput\n channel={channel}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n messageForThread={parentMessage}\n keyboardAvoidOffset={keyboardAvoidOffset}\n inputMuted={chatAvailableState.muted}\n inputFrozen={chatAvailableState.frozen}\n inputDisabled={inputDisabled ?? chatAvailableState.disabled}\n MessageToReplyPreview={() => {\n return null;\n }}\n {...props}\n />\n );\n};\n\nexport default React.memo(GroupChannelThreadInput);\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AAEzC,SAASC,iCAAiC,QAAQ,uBAAuB;AAEzE,OAAOC,YAAY,MAAM,kCAAkC;AAC3D,SAASC,0BAA0B,QAAQ,yBAAyB;AAGpE,MAAMC,uBAAuB,GAAGC,IAAA,IAAmE;EAAA,IAAlE;IAAEC,aAAa;IAAE,GAAGC;EAAwC,CAAC,GAAAF,IAAA;EAC5F,MAAM;IACJG,OAAO;IACPC,mBAAmB,GAAG,CAAC;IACvBC,aAAa;IACbC,gBAAgB;IAChBC;EACF,CAAC,GAAGZ,UAAU,CAACG,0BAA0B,CAACU,QAAQ,CAAC;EAEnD,MAAMC,kBAAkB,GAAGb,iCAAiC,CAACO,OAAO,CAAC;EAErE,oBACET,KAAA,CAAAgB,aAAA,CAACb,YAAY,EAAAc,QAAA;IACXR,OAAO,EAAEA,OAAQ;IACjBE,aAAa,EAAEA,aAAc;IAC7BC,gBAAgB,EAAEA,gBAAiB;IACnCM,gBAAgB,EAAEL,aAAc;IAChCH,mBAAmB,EAAEA,mBAAoB;IACzCS,UAAU,EAAEJ,kBAAkB,CAACK,KAAM;IACrCC,WAAW,EAAEN,kBAAkB,CAACO,MAAO;IACvCf,aAAa,EAAEA,aAAa,IAAIQ,kBAAkB,CAACQ,QAAS;IAC5DC,qBAAqB,EAAEA,CAAA,KAAM;MAC3B,OAAO,IAAI;IACb;EAAE,GACEhB,KAAK,EACT;AAEN,CAAC;AAED,4BAAeR,KAAK,CAACyB,IAAI,CAACpB,uBAAuB,CAAC"}
@@ -0,0 +1,117 @@
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, { useContext, useEffect, useLayoutEffect, useRef } from 'react';
3
+ import { useChannelHandler } from '@sendbird/uikit-chat-hooks';
4
+ import { isDifferentChannel, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';
5
+ import ChannelThreadMessageList from '../../../components/ChannelThreadMessageList';
6
+ import { useSendbirdChat } from '../../../hooks/useContext';
7
+ import { GroupChannelThreadContexts } from '../module/moduleContext';
8
+ const GroupChannelThreadMessageList = props => {
9
+ const {
10
+ sdk
11
+ } = useSendbirdChat();
12
+ const {
13
+ setMessageToEdit
14
+ } = useContext(GroupChannelThreadContexts.Fragment);
15
+ const {
16
+ subscribe
17
+ } = useContext(GroupChannelThreadContexts.PubSub);
18
+ const {
19
+ flatListRef,
20
+ lazyScrollToBottom,
21
+ lazyScrollToIndex
22
+ } = useContext(GroupChannelThreadContexts.MessageList);
23
+ const id = useUniqHandlerId('GroupChannelThreadMessageList');
24
+ const ignorePropReached = useRef(false);
25
+ const _onTopReached = () => {
26
+ if (!ignorePropReached.current) {
27
+ props.onTopReached();
28
+ }
29
+ };
30
+ const _onBottomReached = () => {
31
+ if (!ignorePropReached.current) {
32
+ props.onBottomReached();
33
+ }
34
+ };
35
+ const scrollToBottom = useFreshCallback(async function () {
36
+ let animated = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
37
+ if (props.hasNext()) {
38
+ props.onScrolledAwayFromBottom(false);
39
+ await props.onResetMessageList();
40
+ props.onScrolledAwayFromBottom(false);
41
+ lazyScrollToBottom({
42
+ animated
43
+ });
44
+ } else {
45
+ lazyScrollToBottom({
46
+ animated
47
+ });
48
+ }
49
+ });
50
+ useLayoutEffect(() => {
51
+ if (props.startingPoint) {
52
+ const foundMessageIndex = props.messages.findIndex(it => it.createdAt === props.startingPoint);
53
+ const isIncludedInList = foundMessageIndex > -1;
54
+ if (isIncludedInList) {
55
+ ignorePropReached.current = true;
56
+ const timeout = 300;
57
+ lazyScrollToIndex({
58
+ index: foundMessageIndex,
59
+ animated: true,
60
+ timeout: timeout
61
+ });
62
+ setTimeout(() => {
63
+ ignorePropReached.current = false;
64
+ }, timeout + 50);
65
+ }
66
+ }
67
+ }, [props.startingPoint]);
68
+ useChannelHandler(sdk, id, {
69
+ onReactionUpdated(channel, event) {
70
+ if (isDifferentChannel(channel, props.channel)) return;
71
+ const recentMessage = props.messages[0];
72
+ const isRecentMessage = recentMessage && recentMessage.messageId === event.messageId;
73
+ const scrollReachedBottomAndCanScroll = !props.scrolledAwayFromBottom && !props.hasNext();
74
+ if (isRecentMessage && scrollReachedBottomAndCanScroll) {
75
+ lazyScrollToBottom({
76
+ animated: true,
77
+ timeout: 250
78
+ });
79
+ }
80
+ }
81
+ });
82
+ useEffect(() => {
83
+ return subscribe(_ref => {
84
+ let {
85
+ type
86
+ } = _ref;
87
+ switch (type) {
88
+ case 'TYPING_BUBBLE_RENDERED':
89
+ case 'MESSAGES_RECEIVED':
90
+ {
91
+ if (!props.scrolledAwayFromBottom) {
92
+ scrollToBottom(true);
93
+ }
94
+ break;
95
+ }
96
+ case 'MESSAGE_SENT_SUCCESS':
97
+ case 'MESSAGE_SENT_PENDING':
98
+ {
99
+ scrollToBottom(false);
100
+ break;
101
+ }
102
+ }
103
+ });
104
+ }, [props.scrolledAwayFromBottom]);
105
+ return /*#__PURE__*/React.createElement(ChannelThreadMessageList, _extends({}, props, {
106
+ ref: flatListRef,
107
+ onTopReached: _onTopReached,
108
+ onBottomReached: _onBottomReached,
109
+ onEditMessage: setMessageToEdit,
110
+ onPressNewMessagesButton: scrollToBottom,
111
+ onPressScrollToBottomButton: scrollToBottom,
112
+ renderNewMessagesButton: null,
113
+ renderScrollToBottomButton: null
114
+ }));
115
+ };
116
+ export default /*#__PURE__*/React.memo(GroupChannelThreadMessageList);
117
+ //# sourceMappingURL=GroupChannelThreadMessageList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useContext","useEffect","useLayoutEffect","useRef","useChannelHandler","isDifferentChannel","useFreshCallback","useUniqHandlerId","ChannelThreadMessageList","useSendbirdChat","GroupChannelThreadContexts","GroupChannelThreadMessageList","props","sdk","setMessageToEdit","Fragment","subscribe","PubSub","flatListRef","lazyScrollToBottom","lazyScrollToIndex","MessageList","id","ignorePropReached","_onTopReached","current","onTopReached","_onBottomReached","onBottomReached","scrollToBottom","animated","arguments","length","undefined","hasNext","onScrolledAwayFromBottom","onResetMessageList","startingPoint","foundMessageIndex","messages","findIndex","it","createdAt","isIncludedInList","timeout","index","setTimeout","onReactionUpdated","channel","event","recentMessage","isRecentMessage","messageId","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","_ref","type","createElement","_extends","ref","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","renderNewMessagesButton","renderScrollToBottomButton","memo"],"sources":["GroupChannelThreadMessageList.tsx"],"sourcesContent":["import React, { useContext, useEffect, useLayoutEffect, useRef } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { isDifferentChannel, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport ChannelThreadMessageList from '../../../components/ChannelThreadMessageList';\nimport { useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelThreadContexts } from '../module/moduleContext';\nimport type { GroupChannelThreadProps } from '../types';\n\nconst GroupChannelThreadMessageList = (props: GroupChannelThreadProps['MessageList']) => {\n const { sdk } = useSendbirdChat();\n const { setMessageToEdit } = useContext(GroupChannelThreadContexts.Fragment);\n const { subscribe } = useContext(GroupChannelThreadContexts.PubSub);\n const { flatListRef, lazyScrollToBottom, lazyScrollToIndex } = useContext(GroupChannelThreadContexts.MessageList);\n\n const id = useUniqHandlerId('GroupChannelThreadMessageList');\n const ignorePropReached = useRef(false);\n\n const _onTopReached = () => {\n if (!ignorePropReached.current) {\n props.onTopReached();\n }\n };\n\n const _onBottomReached = () => {\n if (!ignorePropReached.current) {\n props.onBottomReached();\n }\n };\n\n const scrollToBottom = useFreshCallback(async (animated = false) => {\n if (props.hasNext()) {\n props.onScrolledAwayFromBottom(false);\n\n await props.onResetMessageList();\n props.onScrolledAwayFromBottom(false);\n lazyScrollToBottom({ animated });\n } else {\n lazyScrollToBottom({ animated });\n }\n });\n\n useLayoutEffect(() => {\n if (props.startingPoint) {\n const foundMessageIndex = props.messages.findIndex((it) => it.createdAt === props.startingPoint);\n const isIncludedInList = foundMessageIndex > -1;\n if (isIncludedInList) {\n ignorePropReached.current = true;\n const timeout = 300;\n lazyScrollToIndex({ index: foundMessageIndex, animated: true, timeout: timeout });\n setTimeout(() => {\n ignorePropReached.current = false;\n }, timeout + 50);\n }\n }\n }, [props.startingPoint]);\n\n useChannelHandler(sdk, id, {\n onReactionUpdated(channel, event) {\n if (isDifferentChannel(channel, props.channel)) return;\n const recentMessage = props.messages[0];\n const isRecentMessage = recentMessage && recentMessage.messageId === event.messageId;\n const scrollReachedBottomAndCanScroll = !props.scrolledAwayFromBottom && !props.hasNext();\n if (isRecentMessage && scrollReachedBottomAndCanScroll) {\n lazyScrollToBottom({ animated: true, timeout: 250 });\n }\n },\n });\n\n useEffect(() => {\n return subscribe(({ type }) => {\n switch (type) {\n case 'TYPING_BUBBLE_RENDERED':\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n return (\n <ChannelThreadMessageList\n {...props}\n ref={flatListRef}\n onTopReached={_onTopReached}\n onBottomReached={_onBottomReached}\n onEditMessage={setMessageToEdit}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n renderNewMessagesButton={null}\n renderScrollToBottomButton={null}\n />\n );\n};\n\nexport default React.memo(GroupChannelThreadMessageList);\n"],"mappings":"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"}