@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
@@ -105,6 +105,24 @@ export interface StringSet {
105
105
  /** GroupChannel > Suggested mention list */
106
106
  MENTION_LIMITED: (mentionLimit: number) => string;
107
107
  };
108
+ GROUP_CHANNEL_THREAD: {
109
+ /** GroupChannelThread > Header */
110
+ HEADER_TITLE: string;
111
+ HEADER_SUBTITLE: (currentUserId: string, channel: SendbirdGroupChannel) => string;
112
+ /** GroupChannelThread > List */
113
+ LIST_DATE_SEPARATOR: (date: Date, locale?: Locale) => string;
114
+ LIST_BUTTON_NEW_MSG: (newMessages: SendbirdMessage[]) => string;
115
+ /** GroupChannelThread > Message bubble */
116
+ MESSAGE_BUBBLE_TIME: (message: SendbirdMessage, locale?: Locale) => string;
117
+ MESSAGE_BUBBLE_FILE_TITLE: (message: SendbirdFileMessage) => string;
118
+ MESSAGE_BUBBLE_EDITED_POSTFIX: string;
119
+ MESSAGE_BUBBLE_UNKNOWN_TITLE: (message: SendbirdMessage) => string;
120
+ MESSAGE_BUBBLE_UNKNOWN_DESC: (message: SendbirdMessage) => string;
121
+ PARENT_MESSAGE_TIME: (message: SendbirdMessage, locale?: Locale) => string;
122
+ REPLY_COUNT: (replyCount: number, maxReplyCount?: number) => string;
123
+ /** GroupChannelThread > Suggested mention list */
124
+ MENTION_LIMITED: (mentionLimit: number) => string;
125
+ };
108
126
  GROUP_CHANNEL_SETTINGS: {
109
127
  /** GroupChannelSettings > Header */
110
128
  HEADER_TITLE: string;
@@ -236,6 +254,8 @@ export interface StringSet {
236
254
  CHANNEL_INPUT_PLACEHOLDER_DISABLED: string;
237
255
  CHANNEL_INPUT_PLACEHOLDER_MUTED: string;
238
256
  CHANNEL_INPUT_PLACEHOLDER_REPLY: string;
257
+ CHANNEL_INPUT_PLACEHOLDER_REPLY_IN_THREAD: string;
258
+ CHANNEL_INPUT_PLACEHOLDER_REPLY_TO_THREAD: string;
239
259
  CHANNEL_INPUT_EDIT_OK: string;
240
260
  CHANNEL_INPUT_EDIT_CANCEL: string;
241
261
  /** ChannelInput > Attachments **/
@@ -251,6 +271,7 @@ export interface StringSet {
251
271
  CHANNEL_MESSAGE_SAVE: string;
252
272
  CHANNEL_MESSAGE_DELETE: string;
253
273
  CHANNEL_MESSAGE_REPLY: string;
274
+ CHANNEL_MESSAGE_THREAD: string;
254
275
  /** Channel > Message > Delete confirm **/
255
276
  CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE: string;
256
277
  CHANNEL_MESSAGE_DELETE_CONFIRM_OK: string;
@@ -308,6 +329,8 @@ export interface StringSet {
308
329
  UNKNOWN_ERROR: string;
309
330
  GET_CHANNEL_ERROR: string;
310
331
  FIND_PARENT_MSG_ERROR: string;
332
+ THREAD_PARENT_MESSAGE_DELETED_ERROR: string;
333
+ FILE_UPLOAD_SIZE_LIMIT_EXCEEDED_ERROR: (uploadSizeLimit: string) => string;
311
334
  };
312
335
  PROFILE_CARD: {
313
336
  BUTTON_MESSAGE: string;
@@ -1,5 +1,5 @@
1
1
  import type { Locale } from 'date-fns';
2
- import type { PartialDeep } from '@sendbird/uikit-utils';
2
+ import { PartialDeep } from '@sendbird/uikit-utils';
3
3
  import type { StringSet } from './StringSet.type';
4
4
  type StringSetCreateOptions = {
5
5
  dateLocale: Locale;
@@ -1,8 +1,10 @@
1
1
  import type { ComponentType, ErrorInfo, ReactNode } from 'react';
2
+ import type { MMKV } from 'react-native-mmkv';
2
3
  import type { SendbirdUser } from '@sendbird/uikit-utils';
4
+ export type LocalCacheStorage = AsyncLocalCacheStorage | MMKVLocalCacheStorage;
3
5
  export type KeyValuePairGet = [string, string | null];
4
6
  export type KeyValuePairSet = [string, string];
5
- export interface LocalCacheStorage {
7
+ export interface AsyncLocalCacheStorage {
6
8
  getAllKeys(): Promise<readonly string[] | string[]>;
7
9
  getItem(key: string): Promise<string | null>;
8
10
  setItem(key: string, value: string): Promise<void>;
@@ -11,6 +13,7 @@ export interface LocalCacheStorage {
11
13
  multiGet?(keys: string[]): Promise<readonly KeyValuePairGet[] | KeyValuePairGet[]>;
12
14
  multiRemove?(keys: string[]): Promise<void>;
13
15
  }
16
+ export type MMKVLocalCacheStorage = Pick<MMKV, 'getString' | 'set' | 'delete' | 'getAllKeys'>;
14
17
  export type ErrorBoundaryProps = {
15
18
  error: Error;
16
19
  errorInfo: ErrorInfo;
@@ -1,2 +1,2 @@
1
- declare const VERSION = "3.5.4";
1
+ declare const VERSION = "3.7.0";
2
2
  export default VERSION;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sendbird/uikit-react-native",
3
- "version": "3.5.4",
3
+ "version": "3.7.0",
4
4
  "description": "Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.",
5
5
  "keywords": [
6
6
  "sendbird",
@@ -60,22 +60,21 @@
60
60
  },
61
61
  "dependencies": {
62
62
  "@openspacelabs/react-native-zoomable-view": "^2.1.5",
63
- "@sendbird/uikit-chat-hooks": "3.5.4",
64
- "@sendbird/uikit-react-native-foundation": "3.5.4",
65
- "@sendbird/uikit-tools": "0.0.1-alpha.76",
66
- "@sendbird/uikit-utils": "3.5.4"
63
+ "@sendbird/uikit-chat-hooks": "3.7.0",
64
+ "@sendbird/uikit-react-native-foundation": "3.7.0",
65
+ "@sendbird/uikit-tools": "0.0.1-alpha.77",
66
+ "@sendbird/uikit-utils": "3.7.0"
67
67
  },
68
68
  "devDependencies": {
69
69
  "@bam.tech/react-native-image-resizer": "^3.0.4",
70
- "@react-native-camera-roll/camera-roll": "^5.4.0",
71
- "@react-native-clipboard/clipboard": "^1.8.5",
72
- "@react-native-community/netinfo": "^9.3.0",
70
+ "@react-native-async-storage/async-storage": "^1.17.6",
71
+ "@react-native-camera-roll/camera-roll": "^7.8.1",
72
+ "@react-native-clipboard/clipboard": "^1.14.1",
73
+ "@react-native-community/netinfo": "^11.3.2",
73
74
  "@react-native-firebase/app": "^14.4.0",
74
75
  "@react-native-firebase/messaging": "^14.4.0",
75
- "@sendbird/react-native-scrollview-enhancer": "^0.2.1",
76
76
  "@types/react": "*",
77
77
  "@types/react-native": "*",
78
- "@types/react-native-video": "^5.0.14",
79
78
  "date-fns": "^2.28.0",
80
79
  "expo-av": "^13.2.1",
81
80
  "expo-clipboard": "^4.1.2",
@@ -89,26 +88,28 @@
89
88
  "glob": "^7.2.0",
90
89
  "inquirer": "^8.2.0",
91
90
  "js-convert-case": "^4.2.0",
92
- "react": "17.0.2",
93
- "react-native": "0.67.5",
94
- "react-native-audio-recorder-player": "^3.6.0",
91
+ "react": "18.2.0",
92
+ "react-native": "0.74.3",
93
+ "react-native-audio-recorder-player": "^3.6.10",
95
94
  "react-native-builder-bob": "^0.18.0",
96
- "react-native-create-thumbnail": "^1.5.1",
97
- "react-native-document-picker": "^8.0.0",
98
- "react-native-file-access": "^2.5.0",
99
- "react-native-image-picker": "^4.7.1",
100
- "react-native-permissions": "^3.6.0",
101
- "react-native-safe-area-context": "^3.3.2",
102
- "react-native-video": "^5.2.0",
95
+ "react-native-create-thumbnail": "^2.0.0",
96
+ "react-native-document-picker": "^9.3.0",
97
+ "react-native-file-access": "^3.1.0",
98
+ "react-native-image-picker": "^7.1.2",
99
+ "react-native-mmkv": "^2.12.2",
100
+ "react-native-permissions": "^3.10.1",
101
+ "react-native-safe-area-context": "^4.10.8",
102
+ "react-native-video": "^6.3.0",
103
103
  "typescript": "5.2.2"
104
104
  },
105
105
  "peerDependencies": {
106
106
  "@bam.tech/react-native-image-resizer": ">=3.0.0",
107
+ "@react-native-async-storage/async-storage": "^1.17.6",
107
108
  "@react-native-camera-roll/camera-roll": ">=5.0.0",
108
109
  "@react-native-clipboard/clipboard": ">=1.8.5",
109
110
  "@react-native-community/netinfo": ">=9.3.0",
110
111
  "@react-native-firebase/messaging": ">=14.4.0",
111
- "@sendbird/chat": "^4.10.7",
112
+ "@sendbird/chat": "^4.12.9",
112
113
  "@sendbird/react-native-scrollview-enhancer": "*",
113
114
  "date-fns": ">=2.28.0",
114
115
  "expo-av": ">=12.0.4",
@@ -126,6 +127,7 @@
126
127
  "react-native-document-picker": ">=8.0.0",
127
128
  "react-native-file-access": ">=2.4.3",
128
129
  "react-native-image-picker": ">=4.7.1",
130
+ "react-native-mmkv": "^2.0.0",
129
131
  "react-native-permissions": ">=3.6.0",
130
132
  "react-native-safe-area-context": ">=3.3.2",
131
133
  "react-native-video": ">=5.2.0"
@@ -134,6 +136,9 @@
134
136
  "@bam.tech/react-native-image-resizer": {
135
137
  "optional": true
136
138
  },
139
+ "@react-native-async-storage/async-storage": {
140
+ "optional": true
141
+ },
137
142
  "@react-native-camera-roll/camera-roll": {
138
143
  "optional": true
139
144
  },
@@ -203,5 +208,5 @@
203
208
  ]
204
209
  ]
205
210
  },
206
- "gitHead": "98ab944367959657368a0f2f2abb3782b2fb88f2"
211
+ "gitHead": "51d39985ece857b026d311c621ec3c555cf896a1"
207
212
  }
@@ -53,6 +53,7 @@ const SendInput = forwardRef<RNTextInput, SendInputProps>(function SendInput(
53
53
  channel,
54
54
  messageToReply,
55
55
  setMessageToReply,
56
+ messageForThread,
56
57
  },
57
58
  ref,
58
59
  ) {
@@ -71,11 +72,22 @@ const SendInput = forwardRef<RNTextInput, SendInputProps>(function SendInput(
71
72
 
72
73
  const messageReplyParams = useIIFE(() => {
73
74
  const { groupChannel } = sbOptions.uikit;
74
- if (!channel.isGroupChannel() || groupChannel.channel.replyType === 'none' || !messageToReply) return {};
75
- return {
76
- parentMessageId: messageToReply.messageId,
77
- isReplyToChannel: true,
78
- };
75
+
76
+ if (channel.isGroupChannel()) {
77
+ if (groupChannel.channel.replyType === 'quote_reply' && messageToReply) {
78
+ return {
79
+ parentMessageId: messageToReply.messageId,
80
+ isReplyToChannel: true,
81
+ };
82
+ } else if (groupChannel.channel.replyType === 'thread' && messageForThread) {
83
+ return {
84
+ parentMessageId: messageForThread.messageId,
85
+ isReplyToChannel: true,
86
+ };
87
+ }
88
+ }
89
+
90
+ return {};
79
91
  });
80
92
 
81
93
  const messageMentionParams = useIIFE(() => {
@@ -152,6 +164,13 @@ const SendInput = forwardRef<RNTextInput, SendInputProps>(function SendInput(
152
164
  if (inputFrozen) return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_DISABLED;
153
165
  if (inputDisabled) return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_DISABLED;
154
166
  if (messageToReply) return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_REPLY;
167
+ if (messageForThread) {
168
+ if (messageForThread.threadInfo && messageForThread.threadInfo.replyCount > 0) {
169
+ return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_REPLY_TO_THREAD;
170
+ } else {
171
+ return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_REPLY_IN_THREAD;
172
+ }
173
+ }
155
174
 
156
175
  return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_ACTIVE;
157
176
  };
@@ -65,6 +65,7 @@ export type ChannelInputProps = {
65
65
  // reply - only available on group channel
66
66
  messageToReply?: undefined | SendbirdUserMessage | SendbirdFileMessage;
67
67
  setMessageToReply?: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;
68
+ messageForThread?: undefined | SendbirdUserMessage | SendbirdFileMessage;
68
69
 
69
70
  // mention
70
71
  SuggestedMentionList?: CommonComponent<SuggestedMentionListProps>;
@@ -57,9 +57,10 @@ export type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpe
57
57
 
58
58
  onEditMessage: (message: HandleableMessage) => void;
59
59
  onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel
60
+ onReplyInThreadMessage?: (message: HandleableMessage) => void; // only available on group channel
60
61
  onDeleteMessage: (message: HandleableMessage) => Promise<void>;
61
62
  onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;
62
- onPressParentMessage?: (parentMessage: SendbirdMessage) => void;
63
+ onPressParentMessage?: (parentMessage: SendbirdMessage, childMessage: HandleableMessage) => void;
63
64
  onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;
64
65
 
65
66
  renderMessage: (props: {
@@ -70,12 +71,14 @@ export type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpe
70
71
  onPress?: () => void;
71
72
  onLongPress?: () => void;
72
73
  onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];
74
+ onReplyInThreadMessage?: ChannelMessageListProps<T>['onReplyInThreadMessage'];
73
75
  onShowUserProfile?: UserProfileContextType['show'];
74
76
  channel: T;
75
77
  currentUserId?: ChannelMessageListProps<T>['currentUserId'];
76
78
  enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];
77
79
  bottomSheetItem?: BottomSheetItem;
78
80
  isFirstItem: boolean;
81
+ hideParentMessage?: boolean;
79
82
  }) => React.ReactElement | null;
80
83
  renderNewMessagesButton:
81
84
  | null
@@ -93,6 +96,7 @@ const ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel
93
96
  channel,
94
97
  onEditMessage,
95
98
  onReplyMessage,
99
+ onReplyInThreadMessage,
96
100
  onDeleteMessage,
97
101
  onResendFailedMessage,
98
102
  onPressMediaMessage,
@@ -123,6 +127,7 @@ const ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel
123
127
  currentUserId,
124
128
  onEditMessage,
125
129
  onReplyMessage,
130
+ onReplyInThreadMessage,
126
131
  onDeleteMessage,
127
132
  onResendFailedMessage,
128
133
  onPressMediaMessage,
@@ -139,6 +144,7 @@ const ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel
139
144
  onPress,
140
145
  onLongPress,
141
146
  onPressParentMessage,
147
+ onReplyInThreadMessage,
142
148
  onShowUserProfile: show,
143
149
  enableMessageGrouping,
144
150
  channel,
@@ -196,6 +202,7 @@ const useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdO
196
202
  onResendFailedMessage,
197
203
  onEditMessage,
198
204
  onReplyMessage,
205
+ onReplyInThreadMessage,
199
206
  onDeleteMessage,
200
207
  onPressMediaMessage,
201
208
  }: Pick<
@@ -204,6 +211,7 @@ const useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdO
204
211
  | 'currentUserId'
205
212
  | 'onEditMessage'
206
213
  | 'onReplyMessage'
214
+ | 'onReplyInThreadMessage'
207
215
  | 'onDeleteMessage'
208
216
  | 'onResendFailedMessage'
209
217
  | 'onPressMediaMessage'
@@ -322,6 +330,12 @@ const useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdO
322
330
  title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,
323
331
  onPress: () => onReplyMessage?.(message),
324
332
  }),
333
+ replyInThread: (message: HandleableMessage) => ({
334
+ disabled: Boolean(message.parentMessageId),
335
+ icon: 'thread' as const,
336
+ title: STRINGS.LABELS.CHANNEL_MESSAGE_THREAD,
337
+ onPress: () => onReplyInThreadMessage?.(message),
338
+ }),
325
339
  download: (message: HandleableMessage) => ({
326
340
  icon: 'download' as const,
327
341
  title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,
@@ -336,8 +350,12 @@ const useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdO
336
350
  sheetItems.push(menu.edit(message));
337
351
  sheetItems.push(menu.delete(message));
338
352
  }
339
- if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {
340
- sheetItems.push(menu.reply(message));
353
+ if (channel.isGroupChannel()) {
354
+ if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {
355
+ sheetItems.push(menu.replyInThread(message));
356
+ } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {
357
+ sheetItems.push(menu.reply(message));
358
+ }
341
359
  }
342
360
  }
343
361
  }
@@ -350,8 +368,12 @@ const useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdO
350
368
  if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {
351
369
  sheetItems.push(menu.delete(message));
352
370
  }
353
- if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {
354
- sheetItems.push(menu.reply(message));
371
+ if (channel.isGroupChannel()) {
372
+ if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {
373
+ sheetItems.push(menu.replyInThread(message));
374
+ } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {
375
+ sheetItems.push(menu.reply(message));
376
+ }
355
377
  }
356
378
  }
357
379
  }