stream-chat-react-native-core 10.0.0-rc.4 → 10.0.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 (276) hide show
  1. package/lib/commonjs/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js +4 -1
  2. package/lib/commonjs/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js.map +1 -1
  3. package/lib/commonjs/components/Channel/hooks/useChannelLifecycle.js +2 -2
  4. package/lib/commonjs/components/Channel/hooks/useChannelLifecycle.js.map +1 -1
  5. package/lib/commonjs/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js +7 -0
  6. package/lib/commonjs/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js.map +1 -1
  7. package/lib/commonjs/components/ChannelPreview/ChannelPreviewMessage.js +4 -5
  8. package/lib/commonjs/components/ChannelPreview/ChannelPreviewMessage.js.map +1 -1
  9. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewPollLabel.js +8 -5
  10. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewPollLabel.js.map +1 -1
  11. package/lib/commonjs/components/Message/Message.js.map +1 -1
  12. package/lib/commonjs/components/Message/MessageItemView/Headers/SentToChannelHeader.js +6 -32
  13. package/lib/commonjs/components/Message/MessageItemView/Headers/SentToChannelHeader.js.map +1 -1
  14. package/lib/commonjs/components/Message/MessageItemView/MessageContent.js +2 -2
  15. package/lib/commonjs/components/Message/MessageItemView/MessageContent.js.map +1 -1
  16. package/lib/commonjs/components/Message/MessageItemView/MessageStatus.js +29 -9
  17. package/lib/commonjs/components/Message/MessageItemView/MessageStatus.js.map +1 -1
  18. package/lib/commonjs/components/Message/hooks/useOpenThreadAtMessage.js +57 -0
  19. package/lib/commonjs/components/Message/hooks/useOpenThreadAtMessage.js.map +1 -0
  20. package/lib/commonjs/components/Message/utils/messageActions.js +1 -1
  21. package/lib/commonjs/components/Message/utils/messageActions.js.map +1 -1
  22. package/lib/commonjs/components/MessageInput/components/AttachmentPreview/AttachmentUploadPreviewList.js +12 -8
  23. package/lib/commonjs/components/MessageInput/components/AttachmentPreview/AttachmentUploadPreviewList.js.map +1 -1
  24. package/lib/commonjs/components/MessageInput/components/AttachmentPreview/AudioAttachmentUploadPreview.js +3 -2
  25. package/lib/commonjs/components/MessageInput/components/AttachmentPreview/AudioAttachmentUploadPreview.js.map +1 -1
  26. package/lib/commonjs/components/MessageInput/hooks/useAudioRecorder.js +2 -2
  27. package/lib/commonjs/components/MessageInput/hooks/useAudioRecorder.js.map +1 -1
  28. package/lib/commonjs/components/MessageList/InlineUnreadIndicator.js +2 -2
  29. package/lib/commonjs/components/MessageList/InlineUnreadIndicator.js.map +1 -1
  30. package/lib/commonjs/components/MessageList/MessageList.js +1 -4
  31. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  32. package/lib/commonjs/components/MessageList/hooks/useMessageListFocus.js +18 -2
  33. package/lib/commonjs/components/MessageList/hooks/useMessageListFocus.js.map +1 -1
  34. package/lib/commonjs/components/Poll/Poll.js +5 -2
  35. package/lib/commonjs/components/Poll/Poll.js.map +1 -1
  36. package/lib/commonjs/components/Poll/components/PollAnswersList.js +4 -2
  37. package/lib/commonjs/components/Poll/components/PollAnswersList.js.map +1 -1
  38. package/lib/commonjs/components/Poll/components/PollOption.js +8 -3
  39. package/lib/commonjs/components/Poll/components/PollOption.js.map +1 -1
  40. package/lib/commonjs/components/Poll/components/PollResults/PollOptionFullResults.js +5 -2
  41. package/lib/commonjs/components/Poll/components/PollResults/PollOptionFullResults.js.map +1 -1
  42. package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js +3 -1
  43. package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js.map +1 -1
  44. package/lib/commonjs/components/Poll/components/PollResults/PollResults.js +4 -1
  45. package/lib/commonjs/components/Poll/components/PollResults/PollResults.js.map +1 -1
  46. package/lib/commonjs/components/Poll/hooks/usePollState.js +3 -0
  47. package/lib/commonjs/components/Poll/hooks/usePollState.js.map +1 -1
  48. package/lib/commonjs/components/Poll/hooks/usePollTextTranslation.js +17 -0
  49. package/lib/commonjs/components/Poll/hooks/usePollTextTranslation.js.map +1 -0
  50. package/lib/commonjs/components/Poll/index.js +11 -0
  51. package/lib/commonjs/components/Poll/index.js.map +1 -1
  52. package/lib/commonjs/components/Thread/components/ThreadFooterComponent.js +1 -2
  53. package/lib/commonjs/components/Thread/components/ThreadFooterComponent.js.map +1 -1
  54. package/lib/commonjs/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js +0 -15
  55. package/lib/commonjs/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js.map +1 -1
  56. package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
  57. package/lib/commonjs/contexts/messageListItemContext/MessageListItemContext.js.map +1 -1
  58. package/lib/commonjs/hooks/messagePreview/useMessagePreviewText.js +9 -4
  59. package/lib/commonjs/hooks/messagePreview/useMessagePreviewText.js.map +1 -1
  60. package/lib/commonjs/hooks/useTranslatedMessage.js +4 -3
  61. package/lib/commonjs/hooks/useTranslatedMessage.js.map +1 -1
  62. package/lib/commonjs/index.js +0 -12
  63. package/lib/commonjs/index.js.map +1 -1
  64. package/lib/commonjs/store/SqliteClient.js +1 -1
  65. package/lib/commonjs/store/mappers/mapPollToStorable.js +4 -0
  66. package/lib/commonjs/store/mappers/mapPollToStorable.js.map +1 -1
  67. package/lib/commonjs/store/mappers/mapStorableToPoll.js +5 -1
  68. package/lib/commonjs/store/mappers/mapStorableToPoll.js.map +1 -1
  69. package/lib/commonjs/store/schema.js +2 -0
  70. package/lib/commonjs/store/schema.js.map +1 -1
  71. package/lib/commonjs/types/types.js.map +1 -1
  72. package/lib/commonjs/utils/i18n/getTranslatedText.js +7 -0
  73. package/lib/commonjs/utils/i18n/getTranslatedText.js.map +1 -0
  74. package/lib/commonjs/utils/utils.js +35 -1
  75. package/lib/commonjs/utils/utils.js.map +1 -1
  76. package/lib/commonjs/version.json +1 -1
  77. package/lib/module/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js +4 -1
  78. package/lib/module/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js.map +1 -1
  79. package/lib/module/components/Channel/hooks/useChannelLifecycle.js +2 -2
  80. package/lib/module/components/Channel/hooks/useChannelLifecycle.js.map +1 -1
  81. package/lib/module/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js +7 -0
  82. package/lib/module/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js.map +1 -1
  83. package/lib/module/components/ChannelPreview/ChannelPreviewMessage.js +4 -5
  84. package/lib/module/components/ChannelPreview/ChannelPreviewMessage.js.map +1 -1
  85. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewPollLabel.js +8 -5
  86. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewPollLabel.js.map +1 -1
  87. package/lib/module/components/Message/Message.js.map +1 -1
  88. package/lib/module/components/Message/MessageItemView/Headers/SentToChannelHeader.js +6 -32
  89. package/lib/module/components/Message/MessageItemView/Headers/SentToChannelHeader.js.map +1 -1
  90. package/lib/module/components/Message/MessageItemView/MessageContent.js +2 -2
  91. package/lib/module/components/Message/MessageItemView/MessageContent.js.map +1 -1
  92. package/lib/module/components/Message/MessageItemView/MessageStatus.js +29 -9
  93. package/lib/module/components/Message/MessageItemView/MessageStatus.js.map +1 -1
  94. package/lib/module/components/Message/hooks/useOpenThreadAtMessage.js +57 -0
  95. package/lib/module/components/Message/hooks/useOpenThreadAtMessage.js.map +1 -0
  96. package/lib/module/components/Message/utils/messageActions.js +1 -1
  97. package/lib/module/components/Message/utils/messageActions.js.map +1 -1
  98. package/lib/module/components/MessageInput/components/AttachmentPreview/AttachmentUploadPreviewList.js +12 -8
  99. package/lib/module/components/MessageInput/components/AttachmentPreview/AttachmentUploadPreviewList.js.map +1 -1
  100. package/lib/module/components/MessageInput/components/AttachmentPreview/AudioAttachmentUploadPreview.js +3 -2
  101. package/lib/module/components/MessageInput/components/AttachmentPreview/AudioAttachmentUploadPreview.js.map +1 -1
  102. package/lib/module/components/MessageInput/hooks/useAudioRecorder.js +2 -2
  103. package/lib/module/components/MessageInput/hooks/useAudioRecorder.js.map +1 -1
  104. package/lib/module/components/MessageList/InlineUnreadIndicator.js +2 -2
  105. package/lib/module/components/MessageList/InlineUnreadIndicator.js.map +1 -1
  106. package/lib/module/components/MessageList/MessageList.js +1 -4
  107. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  108. package/lib/module/components/MessageList/hooks/useMessageListFocus.js +18 -2
  109. package/lib/module/components/MessageList/hooks/useMessageListFocus.js.map +1 -1
  110. package/lib/module/components/Poll/Poll.js +5 -2
  111. package/lib/module/components/Poll/Poll.js.map +1 -1
  112. package/lib/module/components/Poll/components/PollAnswersList.js +4 -2
  113. package/lib/module/components/Poll/components/PollAnswersList.js.map +1 -1
  114. package/lib/module/components/Poll/components/PollOption.js +8 -3
  115. package/lib/module/components/Poll/components/PollOption.js.map +1 -1
  116. package/lib/module/components/Poll/components/PollResults/PollOptionFullResults.js +5 -2
  117. package/lib/module/components/Poll/components/PollResults/PollOptionFullResults.js.map +1 -1
  118. package/lib/module/components/Poll/components/PollResults/PollResultItem.js +3 -1
  119. package/lib/module/components/Poll/components/PollResults/PollResultItem.js.map +1 -1
  120. package/lib/module/components/Poll/components/PollResults/PollResults.js +4 -1
  121. package/lib/module/components/Poll/components/PollResults/PollResults.js.map +1 -1
  122. package/lib/module/components/Poll/hooks/usePollState.js +3 -0
  123. package/lib/module/components/Poll/hooks/usePollState.js.map +1 -1
  124. package/lib/module/components/Poll/hooks/usePollTextTranslation.js +17 -0
  125. package/lib/module/components/Poll/hooks/usePollTextTranslation.js.map +1 -0
  126. package/lib/module/components/Poll/index.js +11 -0
  127. package/lib/module/components/Poll/index.js.map +1 -1
  128. package/lib/module/components/Thread/components/ThreadFooterComponent.js +1 -2
  129. package/lib/module/components/Thread/components/ThreadFooterComponent.js.map +1 -1
  130. package/lib/module/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js +0 -15
  131. package/lib/module/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.js.map +1 -1
  132. package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
  133. package/lib/module/contexts/messageListItemContext/MessageListItemContext.js.map +1 -1
  134. package/lib/module/hooks/messagePreview/useMessagePreviewText.js +9 -4
  135. package/lib/module/hooks/messagePreview/useMessagePreviewText.js.map +1 -1
  136. package/lib/module/hooks/useTranslatedMessage.js +4 -3
  137. package/lib/module/hooks/useTranslatedMessage.js.map +1 -1
  138. package/lib/module/index.js +0 -12
  139. package/lib/module/index.js.map +1 -1
  140. package/lib/module/store/SqliteClient.js +1 -1
  141. package/lib/module/store/mappers/mapPollToStorable.js +4 -0
  142. package/lib/module/store/mappers/mapPollToStorable.js.map +1 -1
  143. package/lib/module/store/mappers/mapStorableToPoll.js +5 -1
  144. package/lib/module/store/mappers/mapStorableToPoll.js.map +1 -1
  145. package/lib/module/store/schema.js +2 -0
  146. package/lib/module/store/schema.js.map +1 -1
  147. package/lib/module/types/types.js.map +1 -1
  148. package/lib/module/utils/i18n/getTranslatedText.js +7 -0
  149. package/lib/module/utils/i18n/getTranslatedText.js.map +1 -0
  150. package/lib/module/utils/utils.js +35 -1
  151. package/lib/module/utils/utils.js.map +1 -1
  152. package/lib/module/version.json +1 -1
  153. package/lib/typescript/ai-components/services/media-picker-service/index.d.ts +1 -1
  154. package/lib/typescript/components/Channel/hooks/useChannelLifecycle.d.ts.map +1 -1
  155. package/lib/typescript/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.d.ts.map +1 -1
  156. package/lib/typescript/components/ChannelPreview/ChannelPreviewMessage.d.ts.map +1 -1
  157. package/lib/typescript/components/ChannelPreview/hooks/useChannelPreviewPollLabel.d.ts.map +1 -1
  158. package/lib/typescript/components/Message/Message.d.ts +2 -1
  159. package/lib/typescript/components/Message/Message.d.ts.map +1 -1
  160. package/lib/typescript/components/Message/MessageItemView/Headers/SentToChannelHeader.d.ts.map +1 -1
  161. package/lib/typescript/components/Message/MessageItemView/MessageContent.d.ts.map +1 -1
  162. package/lib/typescript/components/Message/MessageItemView/MessageStatus.d.ts +6 -0
  163. package/lib/typescript/components/Message/MessageItemView/MessageStatus.d.ts.map +1 -1
  164. package/lib/typescript/components/Message/hooks/useOpenThreadAtMessage.d.ts +14 -0
  165. package/lib/typescript/components/Message/hooks/useOpenThreadAtMessage.d.ts.map +1 -0
  166. package/lib/typescript/components/MessageInput/components/AttachmentPreview/AttachmentUploadPreviewList.d.ts.map +1 -1
  167. package/lib/typescript/components/MessageInput/components/AttachmentPreview/AudioAttachmentUploadPreview.d.ts.map +1 -1
  168. package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
  169. package/lib/typescript/components/MessageList/hooks/useMessageListFocus.d.ts +5 -2
  170. package/lib/typescript/components/MessageList/hooks/useMessageListFocus.d.ts.map +1 -1
  171. package/lib/typescript/components/Poll/Poll.d.ts.map +1 -1
  172. package/lib/typescript/components/Poll/components/PollAnswersList.d.ts.map +1 -1
  173. package/lib/typescript/components/Poll/components/PollOption.d.ts.map +1 -1
  174. package/lib/typescript/components/Poll/components/PollResults/PollOptionFullResults.d.ts.map +1 -1
  175. package/lib/typescript/components/Poll/components/PollResults/PollResultItem.d.ts.map +1 -1
  176. package/lib/typescript/components/Poll/components/PollResults/PollResults.d.ts.map +1 -1
  177. package/lib/typescript/components/Poll/hooks/usePollState.d.ts +1 -0
  178. package/lib/typescript/components/Poll/hooks/usePollState.d.ts.map +1 -1
  179. package/lib/typescript/components/Poll/hooks/usePollTextTranslation.d.ts +7 -0
  180. package/lib/typescript/components/Poll/hooks/usePollTextTranslation.d.ts.map +1 -0
  181. package/lib/typescript/components/Poll/index.d.ts +1 -0
  182. package/lib/typescript/components/Poll/index.d.ts.map +1 -1
  183. package/lib/typescript/components/Thread/components/ThreadFooterComponent.d.ts.map +1 -1
  184. package/lib/typescript/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.d.ts.map +1 -1
  185. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +2 -1
  186. package/lib/typescript/contexts/messageContext/MessageContext.d.ts.map +1 -1
  187. package/lib/typescript/contexts/messageListItemContext/MessageListItemContext.d.ts +10 -6
  188. package/lib/typescript/contexts/messageListItemContext/MessageListItemContext.d.ts.map +1 -1
  189. package/lib/typescript/hooks/messagePreview/useMessagePreviewText.d.ts.map +1 -1
  190. package/lib/typescript/hooks/useTranslatedMessage.d.ts.map +1 -1
  191. package/lib/typescript/i18n/keys.d.ts +2 -2
  192. package/lib/typescript/i18n/keys.d.ts.map +1 -1
  193. package/lib/typescript/index.d.ts +0 -1
  194. package/lib/typescript/index.d.ts.map +1 -1
  195. package/lib/typescript/store/mappers/mapPollToStorable.d.ts.map +1 -1
  196. package/lib/typescript/store/mappers/mapStorableToPoll.d.ts.map +1 -1
  197. package/lib/typescript/store/schema.d.ts +2 -0
  198. package/lib/typescript/store/schema.d.ts.map +1 -1
  199. package/lib/typescript/types/types.d.ts +0 -4
  200. package/lib/typescript/types/types.d.ts.map +1 -1
  201. package/lib/typescript/utils/i18n/getTranslatedText.d.ts +8 -0
  202. package/lib/typescript/utils/i18n/getTranslatedText.d.ts.map +1 -0
  203. package/lib/typescript/utils/utils.d.ts.map +1 -1
  204. package/package.json +2 -2
  205. package/src/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.tsx +1 -1
  206. package/src/components/AttachmentPicker/components/AttachmentMediaPicker/__tests__/AttachmentPickerItem.test.tsx +29 -1
  207. package/src/components/Channel/__tests__/Channel.test.tsx +40 -7
  208. package/src/components/Channel/hooks/useChannelLifecycle.ts +8 -4
  209. package/src/components/Channel/hooks/useCreateOwnCapabilitiesContext.ts +1 -1
  210. package/src/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.tsx +8 -0
  211. package/src/components/ChannelPreview/ChannelPreviewMessage.tsx +2 -7
  212. package/src/components/ChannelPreview/__tests__/ChannelPreviewView.test.tsx +41 -0
  213. package/src/components/ChannelPreview/hooks/__tests__/useChannelPreviewPollLabel.test.tsx +28 -3
  214. package/src/components/ChannelPreview/hooks/useChannelPreviewPollLabel.ts +8 -4
  215. package/src/components/Message/Message.tsx +5 -2
  216. package/src/components/Message/MessageItemView/Headers/SentToChannelHeader.tsx +4 -32
  217. package/src/components/Message/MessageItemView/MessageContent.tsx +3 -2
  218. package/src/components/Message/MessageItemView/MessageStatus.tsx +43 -4
  219. package/src/components/Message/MessageItemView/__tests__/MessageContent.test.tsx +68 -1
  220. package/src/components/Message/MessageItemView/__tests__/MessageStatus.test.tsx +57 -0
  221. package/src/components/Message/hooks/useOpenThreadAtMessage.ts +50 -0
  222. package/src/components/Message/utils/__tests__/messageActions.test.ts +57 -0
  223. package/src/components/Message/utils/messageActions.ts +1 -1
  224. package/src/components/MessageInput/__tests__/AttachmentUploadPreviewList.test.tsx +34 -6
  225. package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreview.test.tsx +24 -3
  226. package/src/components/MessageInput/__tests__/SendMessageDisallowedIndicator.test.tsx +3 -6
  227. package/src/components/MessageInput/components/AttachmentPreview/AttachmentUploadPreviewList.tsx +19 -8
  228. package/src/components/MessageInput/components/AttachmentPreview/AudioAttachmentUploadPreview.tsx +2 -5
  229. package/src/components/MessageInput/hooks/useAudioRecorder.tsx +2 -2
  230. package/src/components/MessageList/InlineUnreadIndicator.tsx +2 -2
  231. package/src/components/MessageList/MessageList.tsx +1 -5
  232. package/src/components/MessageList/__tests__/InlineUnreadIndicator.test.tsx +2 -2
  233. package/src/components/MessageList/__tests__/MessageList.test.tsx +163 -0
  234. package/src/components/MessageList/hooks/useMessageListFocus.ts +22 -2
  235. package/src/components/Poll/Poll.tsx +4 -2
  236. package/src/components/Poll/__tests__/PollTranslation.test.tsx +152 -0
  237. package/src/components/Poll/components/PollAnswersList.tsx +5 -1
  238. package/src/components/Poll/components/PollOption.tsx +8 -4
  239. package/src/components/Poll/components/PollResults/PollOptionFullResults.tsx +5 -2
  240. package/src/components/Poll/components/PollResults/PollResultItem.tsx +3 -1
  241. package/src/components/Poll/components/PollResults/PollResults.tsx +4 -2
  242. package/src/components/Poll/hooks/usePollState.ts +4 -0
  243. package/src/components/Poll/hooks/usePollTextTranslation.ts +19 -0
  244. package/src/components/Poll/index.ts +1 -0
  245. package/src/components/Thread/__tests__/Thread.test.tsx +46 -1
  246. package/src/components/Thread/components/ThreadFooterComponent.tsx +0 -1
  247. package/src/contexts/channelPinnedMessageListContext/ChannelPinnedMessageListContext.tsx +5 -14
  248. package/src/contexts/messageContext/MessageContext.tsx +2 -1
  249. package/src/contexts/messageListItemContext/MessageListItemContext.tsx +15 -6
  250. package/src/hooks/__tests__/useTranslatedMessage.test.tsx +20 -0
  251. package/src/hooks/messagePreview/__tests__/useMessagePreviewText.test.tsx +37 -2
  252. package/src/hooks/messagePreview/useMessagePreviewText.tsx +5 -2
  253. package/src/hooks/useTranslatedMessage.ts +6 -11
  254. package/src/i18n/__tests__/catalog.fixture.json +2 -2
  255. package/src/i18n/keys.ts +2 -2
  256. package/src/index.ts +0 -1
  257. package/src/store/SqliteClient.ts +1 -1
  258. package/src/store/apis/__tests__/pollTranslations.test.ts +136 -0
  259. package/src/store/mappers/mapPollToStorable.ts +6 -0
  260. package/src/store/mappers/mapStorableToPoll.ts +4 -0
  261. package/src/store/schema.ts +4 -0
  262. package/src/types/stream-chat-common-custom-data.d.ts +0 -3
  263. package/src/types/types.ts +0 -5
  264. package/src/utils/__tests__/utils.test.ts +42 -1
  265. package/src/utils/i18n/__tests__/getTranslatedText.test.ts +17 -0
  266. package/src/utils/i18n/getTranslatedText.ts +10 -0
  267. package/src/utils/utils.ts +57 -1
  268. package/src/version.json +1 -1
  269. package/lib/commonjs/utils/setupCommandUIMiddlewares.js +0 -37
  270. package/lib/commonjs/utils/setupCommandUIMiddlewares.js.map +0 -1
  271. package/lib/module/utils/setupCommandUIMiddlewares.js +0 -37
  272. package/lib/module/utils/setupCommandUIMiddlewares.js.map +0 -1
  273. package/lib/typescript/utils/setupCommandUIMiddlewares.d.ts +0 -3
  274. package/lib/typescript/utils/setupCommandUIMiddlewares.d.ts.map +0 -1
  275. package/src/utils/__tests__/setupCommandUIMiddlewares.test.ts +0 -49
  276. package/src/utils/setupCommandUIMiddlewares.ts +0 -34
@@ -13,6 +13,7 @@ export const mapStorableToPoll = (pollRow: TableRow<'poll'>): PollResponseData =
13
13
  created_by,
14
14
  created_by_id,
15
15
  description,
16
+ description_i18n,
16
17
  enforce_unique_vote,
17
18
  id,
18
19
  is_closed,
@@ -20,6 +21,7 @@ export const mapStorableToPoll = (pollRow: TableRow<'poll'>): PollResponseData =
20
21
  latest_votes_by_option,
21
22
  max_votes_allowed,
22
23
  name,
24
+ name_i18n,
23
25
  options,
24
26
  own_votes,
25
27
  updated_at,
@@ -37,6 +39,7 @@ export const mapStorableToPoll = (pollRow: TableRow<'poll'>): PollResponseData =
37
39
  created_by_id,
38
40
  custom: {},
39
41
  description: description ?? '',
42
+ description_i18n: description_i18n ? (JSON.parse(description_i18n) ?? undefined) : undefined,
40
43
  enforce_unique_vote,
41
44
  id,
42
45
  is_closed,
@@ -44,6 +47,7 @@ export const mapStorableToPoll = (pollRow: TableRow<'poll'>): PollResponseData =
44
47
  latest_votes_by_option: JSON.parse(latest_votes_by_option),
45
48
  max_votes_allowed,
46
49
  name,
50
+ name_i18n: name_i18n ? (JSON.parse(name_i18n) ?? undefined) : undefined,
47
51
  options: JSON.parse(options),
48
52
  own_votes: own_votes ? JSON.parse(own_votes) : [],
49
53
  updated_at: mapStorableToRequiredTimestamp(updated_at),
@@ -225,6 +225,7 @@ export const tables: Tables = {
225
225
  created_by: 'TEXT',
226
226
  created_by_id: 'TEXT',
227
227
  description: 'TEXT',
228
+ description_i18n: 'TEXT',
228
229
  enforce_unique_vote: 'BOOLEAN DEFAULT FALSE',
229
230
  id: 'TEXT NOT NULL',
230
231
  is_closed: 'BOOLEAN DEFAULT FALSE',
@@ -232,6 +233,7 @@ export const tables: Tables = {
232
233
  latest_votes_by_option: 'TEXT',
233
234
  max_votes_allowed: 'INTEGER DEFAULT 1',
234
235
  name: 'TEXT',
236
+ name_i18n: 'TEXT',
235
237
  options: 'TEXT',
236
238
  own_votes: 'TEXT',
237
239
  updated_at: 'INTEGER',
@@ -462,7 +464,9 @@ export type Schema = {
462
464
  allow_answers?: boolean;
463
465
  allow_user_suggested_options?: boolean;
464
466
  description?: string;
467
+ description_i18n?: string;
465
468
  is_closed?: boolean;
469
+ name_i18n?: string;
466
470
  own_votes?: string;
467
471
  voting_visibility?: string;
468
472
  };
@@ -3,7 +3,6 @@ import 'stream-chat';
3
3
  import {
4
4
  DefaultAttachmentData,
5
5
  DefaultChannelData,
6
- DefaultCommandData,
7
6
  DefaultEventData,
8
7
  DefaultMemberData,
9
8
  DefaultMessageData,
@@ -21,8 +20,6 @@ declare module 'stream-chat' {
21
20
 
22
21
  interface CustomChannelData extends DefaultChannelData {}
23
22
 
24
- interface CustomCommandData extends DefaultCommandData {}
25
-
26
23
  interface CustomEventData extends DefaultEventData {}
27
24
 
28
25
  interface CustomMemberData extends DefaultMemberData {}
@@ -60,11 +60,6 @@ export interface DefaultChannelData {
60
60
  name?: string;
61
61
  }
62
62
 
63
- export interface DefaultCommandData {
64
- flag: unknown;
65
- imgur: unknown;
66
- }
67
-
68
63
  /* eslint-disable @typescript-eslint/no-empty-object-type */
69
64
 
70
65
  export interface DefaultEventData {}
@@ -1,4 +1,45 @@
1
- import { formatMsToMinSec, getUrlWithoutParams } from '../utils';
1
+ import { formatMsToMinSec, getInitialsFromName, getUrlWithoutParams } from '../utils';
2
+
3
+ describe('getInitialsFromName', () => {
4
+ it('should return the uppercased first letter of the first two words', () => {
5
+ expect(getInitialsFromName('ivan sekovanikj')).toBe('IS');
6
+ expect(getInitialsFromName(' Jane Mary Doe ')).toBe('JM');
7
+ expect(getInitialsFromName('Jane Mary Doe', 3)).toBe('JMD');
8
+ expect(getInitialsFromName('Jane')).toBe('J');
9
+ });
10
+
11
+ it('should return an empty string for empty or blank names', () => {
12
+ expect(getInitialsFromName('')).toBe('');
13
+ expect(getInitialsFromName(' ')).toBe('');
14
+ });
15
+
16
+ it('should keep characters outside the Basic Multilingual Plane intact', () => {
17
+ expect(getInitialsFromName('😀 Smiley')).toBe('😀S');
18
+ expect(getInitialsFromName('𝒜lice Bob')).toBe('𝒜B');
19
+ });
20
+
21
+ it('should keep emoji sequences intact', () => {
22
+ expect(getInitialsFromName('👍🏽 Thumb')).toBe('👍🏽T');
23
+ expect(getInitialsFromName('🇺🇸 Flag')).toBe('🇺🇸F');
24
+ expect(getInitialsFromName('🇺🇸🇬🇧 Flags')).toBe('🇺🇸F');
25
+ expect(getInitialsFromName('👨‍👩‍👧 Family')).toBe('👨‍👩‍👧F');
26
+ expect(getInitialsFromName('❤️ Heart')).toBe('❤️H');
27
+ expect(getInitialsFromName('🏴󠁧󠁢󠁥󠁮󠁧󠁿 England')).toBe('🏴󠁧󠁢󠁥󠁮󠁧󠁿E');
28
+ });
29
+
30
+ it('should bound the length of a pathological emoji sequence', () => {
31
+ const initials = getInitialsFromName(`${'👨‍👩‍👧'.repeat(2000)} x`);
32
+
33
+ expect(initials.length).toBeLessThanOrEqual(33);
34
+ expect(initials.endsWith('X')).toBe(true);
35
+ });
36
+
37
+ it('should take the first code unit of words that do not start with an emoji', () => {
38
+ expect(getInitialsFromName('Иван Петров')).toBe('ИП');
39
+ expect(getInitialsFromName('大学 同学')).toBe('大同');
40
+ expect(getInitialsFromName('1️⃣ One')).toBe('1O');
41
+ });
42
+ });
2
43
 
3
44
  describe('getUrlWithoutParams', () => {
4
45
  const testUrlMap: Record<string, string> = {
@@ -0,0 +1,17 @@
1
+ import { getTranslatedText } from '../getTranslatedText';
2
+
3
+ describe('getTranslatedText', () => {
4
+ const i18n = { de_text: 'Wie geht es?', language: 'en' };
5
+
6
+ it('returns the translation into the given language', () => {
7
+ expect(getTranslatedText(i18n, 'de')).toBe('Wie geht es?');
8
+ });
9
+
10
+ it('returns undefined when there is no translation into the given language', () => {
11
+ expect(getTranslatedText(i18n, 'fr')).toBeUndefined();
12
+ });
13
+
14
+ it('returns undefined when the text has no translations', () => {
15
+ expect(getTranslatedText(undefined, 'de')).toBeUndefined();
16
+ });
17
+ });
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Returns the translation of a text into `language`, or undefined if there is none.
3
+ *
4
+ * The UI language can be any registered string, while `i18n` only carries the languages the
5
+ * auto-translation endpoint supports, so an unsupported language returns undefined.
6
+ */
7
+ export const getTranslatedText = (
8
+ i18n: Record<string, string> | undefined,
9
+ language: string,
10
+ ): string | undefined => i18n?.[`${language}_text`];
@@ -313,6 +313,55 @@ export const checkQuotedMessageEquality = (
313
313
  return quotedMessageEqual;
314
314
  };
315
315
 
316
+ const ZERO_WIDTH_JOINER = 0x200d;
317
+ // The longest real emoji sequences are ~15 code units, this only bounds pathological input.
318
+ const MAX_EMOJI_LENGTH = 32;
319
+ // Emoji start with a high surrogate or sit in the BMP symbol blocks (e.g. ❤ U+2764). Kept as
320
+ // one-character strings so a word's first character can be compared without `charCodeAt`.
321
+ const SYMBOLS_START = String.fromCharCode(0x2000);
322
+ const SYMBOLS_END = String.fromCharCode(0x2bff);
323
+ const HIGH_SURROGATE_START = String.fromCharCode(0xd800);
324
+ const HIGH_SURROGATE_END = String.fromCharCode(0xdbff);
325
+
326
+ const isRegionalIndicator = (codePoint: number) => codePoint >= 0x1f1e6 && codePoint <= 0x1f1ff;
327
+
328
+ // Code points that attach to the preceding emoji instead of starting a new character.
329
+ const isEmojiModifier = (codePoint: number) =>
330
+ (codePoint >= 0xfe00 && codePoint <= 0xfe0f) || // variation selectors
331
+ (codePoint >= 0x1f3fb && codePoint <= 0x1f3ff) || // skin tone modifiers
332
+ (codePoint >= 0xe0020 && codePoint <= 0xe007f); // tags, used by subdivision flags
333
+
334
+ const codePointLength = (codePoint: number) => (codePoint > 0xffff ? 2 : 1);
335
+
336
+ /**
337
+ * Returns the first character of a string that starts with an emoji, keeping skin tones, flags
338
+ * and ZWJ sequences intact. Hermes has no `Intl.Segmenter`, so the common cases are covered with
339
+ * explicit code point ranges.
340
+ */
341
+ const getFirstEmoji = (text: string) => {
342
+ const first = text.codePointAt(0) as number;
343
+ let end = codePointLength(first);
344
+
345
+ if (isRegionalIndicator(first)) {
346
+ const next = text.codePointAt(end);
347
+ if (next !== undefined && isRegionalIndicator(next)) {
348
+ end += 2;
349
+ }
350
+ }
351
+ while (end < text.length && end < MAX_EMOJI_LENGTH) {
352
+ const codePoint = text.codePointAt(end) as number;
353
+ if (isEmojiModifier(codePoint)) {
354
+ end += codePointLength(codePoint);
355
+ } else if (codePoint === ZERO_WIDTH_JOINER && end + 1 < text.length) {
356
+ end += 1 + codePointLength(text.codePointAt(end + 1) as number);
357
+ } else {
358
+ break;
359
+ }
360
+ }
361
+
362
+ return text.slice(0, end);
363
+ };
364
+
316
365
  /**
317
366
  * Returns the uppercase first letters of the first words of a name.
318
367
  *
@@ -328,7 +377,14 @@ export const getInitialsFromName = (name: string, numberOfInitials: number = 2)
328
377
  return trimmed
329
378
  .split(/\s+/)
330
379
  .slice(0, numberOfInitials)
331
- .map((n) => n.charAt(0).toUpperCase())
380
+ .map((n) => {
381
+ const first = n.charAt(0);
382
+ // Plain names take the same `charAt(0)` path as before; only possible emoji do more work.
383
+ const mayBeEmoji =
384
+ first >= SYMBOLS_START &&
385
+ (first <= SYMBOLS_END || (first >= HIGH_SURROGATE_START && first <= HIGH_SURROGATE_END));
386
+ return (mayBeEmoji ? getFirstEmoji(n) : first).toUpperCase();
387
+ })
332
388
  .join('');
333
389
  };
334
390
 
package/src/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "10.0.0-rc.4"
2
+ "version": "10.0.0"
3
3
  }
@@ -1,37 +0,0 @@
1
- Object.defineProperty(exports, "__esModule", {
2
- value: true
3
- });
4
- exports.setupCommandUIMiddlewares = void 0;
5
- var _streamChat = require("stream-chat");
6
- var setupCommandUIMiddlewares = messageComposer => {
7
- messageComposer.compositionMiddlewareExecutor.insert({
8
- middleware: [(0, _streamChat.createCommandInjectionMiddleware)(messageComposer)],
9
- position: {
10
- after: 'stream-io/message-composer-middleware/attachments'
11
- },
12
- unique: true
13
- });
14
- messageComposer.draftCompositionMiddlewareExecutor.insert({
15
- middleware: [(0, _streamChat.createDraftCommandInjectionMiddleware)(messageComposer)],
16
- position: {
17
- after: 'stream-io/message-composer-middleware/draft-attachments'
18
- },
19
- unique: true
20
- });
21
- messageComposer.textComposer.middlewareExecutor.insert({
22
- middleware: [(0, _streamChat.createActiveCommandGuardMiddleware)()],
23
- position: {
24
- before: 'stream-io/text-composer/commands-middleware'
25
- },
26
- unique: true
27
- });
28
- messageComposer.textComposer.middlewareExecutor.insert({
29
- middleware: [(0, _streamChat.createCommandStringExtractionMiddleware)()],
30
- position: {
31
- after: 'stream-io/text-composer/commands-middleware'
32
- },
33
- unique: true
34
- });
35
- };
36
- exports.setupCommandUIMiddlewares = setupCommandUIMiddlewares;
37
- //# sourceMappingURL=setupCommandUIMiddlewares.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_streamChat","require","setupCommandUIMiddlewares","messageComposer","compositionMiddlewareExecutor","insert","middleware","createCommandInjectionMiddleware","position","after","unique","draftCompositionMiddlewareExecutor","createDraftCommandInjectionMiddleware","textComposer","middlewareExecutor","createActiveCommandGuardMiddleware","before","createCommandStringExtractionMiddleware","exports"],"sourceRoot":"../../../src","sources":["utils/setupCommandUIMiddlewares.ts"],"mappings":";;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AASO,IAAMC,yBAAyB,GAAIC,eAAgC,IAAK;EAC7EA,eAAe,CAACC,6BAA6B,CAACC,MAAM,CAAC;IACnDC,UAAU,EAAE,CAAC,IAAAC,4CAAgC,EAACJ,eAAe,CAAC,CAAC;IAC/DK,QAAQ,EAAE;MAAEC,KAAK,EAAE;IAAoD,CAAC;IACxEC,MAAM,EAAE;EACV,CAAC,CAAC;EAEFP,eAAe,CAACQ,kCAAkC,CAACN,MAAM,CAAC;IACxDC,UAAU,EAAE,CAAC,IAAAM,iDAAqC,EAACT,eAAe,CAAC,CAAC;IACpEK,QAAQ,EAAE;MAAEC,KAAK,EAAE;IAA0D,CAAC;IAC9EC,MAAM,EAAE;EACV,CAAC,CAAC;EAEFP,eAAe,CAACU,YAAY,CAACC,kBAAkB,CAACT,MAAM,CAAC;IACrDC,UAAU,EAAE,CAAC,IAAAS,8CAAkC,EAAC,CAAC,CAA2B;IAC5EP,QAAQ,EAAE;MAAEQ,MAAM,EAAE;IAA8C,CAAC;IACnEN,MAAM,EAAE;EACV,CAAC,CAAC;EAEFP,eAAe,CAACU,YAAY,CAACC,kBAAkB,CAACT,MAAM,CAAC;IACrDC,UAAU,EAAE,CAAC,IAAAW,mDAAuC,EAAC,CAAC,CAA2B;IACjFT,QAAQ,EAAE;MAAEC,KAAK,EAAE;IAA8C,CAAC;IAClEC,MAAM,EAAE;EACV,CAAC,CAAC;AACJ,CAAC;AAACQ,OAAA,CAAAhB,yBAAA,GAAAA,yBAAA","ignoreList":[]}
@@ -1,37 +0,0 @@
1
- Object.defineProperty(exports, "__esModule", {
2
- value: true
3
- });
4
- exports.setupCommandUIMiddlewares = void 0;
5
- var _streamChat = require("stream-chat");
6
- var setupCommandUIMiddlewares = messageComposer => {
7
- messageComposer.compositionMiddlewareExecutor.insert({
8
- middleware: [(0, _streamChat.createCommandInjectionMiddleware)(messageComposer)],
9
- position: {
10
- after: 'stream-io/message-composer-middleware/attachments'
11
- },
12
- unique: true
13
- });
14
- messageComposer.draftCompositionMiddlewareExecutor.insert({
15
- middleware: [(0, _streamChat.createDraftCommandInjectionMiddleware)(messageComposer)],
16
- position: {
17
- after: 'stream-io/message-composer-middleware/draft-attachments'
18
- },
19
- unique: true
20
- });
21
- messageComposer.textComposer.middlewareExecutor.insert({
22
- middleware: [(0, _streamChat.createActiveCommandGuardMiddleware)()],
23
- position: {
24
- before: 'stream-io/text-composer/commands-middleware'
25
- },
26
- unique: true
27
- });
28
- messageComposer.textComposer.middlewareExecutor.insert({
29
- middleware: [(0, _streamChat.createCommandStringExtractionMiddleware)()],
30
- position: {
31
- after: 'stream-io/text-composer/commands-middleware'
32
- },
33
- unique: true
34
- });
35
- };
36
- exports.setupCommandUIMiddlewares = setupCommandUIMiddlewares;
37
- //# sourceMappingURL=setupCommandUIMiddlewares.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_streamChat","require","setupCommandUIMiddlewares","messageComposer","compositionMiddlewareExecutor","insert","middleware","createCommandInjectionMiddleware","position","after","unique","draftCompositionMiddlewareExecutor","createDraftCommandInjectionMiddleware","textComposer","middlewareExecutor","createActiveCommandGuardMiddleware","before","createCommandStringExtractionMiddleware","exports"],"sourceRoot":"../../../src","sources":["utils/setupCommandUIMiddlewares.ts"],"mappings":";;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AASO,IAAMC,yBAAyB,GAAIC,eAAgC,IAAK;EAC7EA,eAAe,CAACC,6BAA6B,CAACC,MAAM,CAAC;IACnDC,UAAU,EAAE,CAAC,IAAAC,4CAAgC,EAACJ,eAAe,CAAC,CAAC;IAC/DK,QAAQ,EAAE;MAAEC,KAAK,EAAE;IAAoD,CAAC;IACxEC,MAAM,EAAE;EACV,CAAC,CAAC;EAEFP,eAAe,CAACQ,kCAAkC,CAACN,MAAM,CAAC;IACxDC,UAAU,EAAE,CAAC,IAAAM,iDAAqC,EAACT,eAAe,CAAC,CAAC;IACpEK,QAAQ,EAAE;MAAEC,KAAK,EAAE;IAA0D,CAAC;IAC9EC,MAAM,EAAE;EACV,CAAC,CAAC;EAEFP,eAAe,CAACU,YAAY,CAACC,kBAAkB,CAACT,MAAM,CAAC;IACrDC,UAAU,EAAE,CAAC,IAAAS,8CAAkC,EAAC,CAAC,CAA2B;IAC5EP,QAAQ,EAAE;MAAEQ,MAAM,EAAE;IAA8C,CAAC;IACnEN,MAAM,EAAE;EACV,CAAC,CAAC;EAEFP,eAAe,CAACU,YAAY,CAACC,kBAAkB,CAACT,MAAM,CAAC;IACrDC,UAAU,EAAE,CAAC,IAAAW,mDAAuC,EAAC,CAAC,CAA2B;IACjFT,QAAQ,EAAE;MAAEC,KAAK,EAAE;IAA8C,CAAC;IAClEC,MAAM,EAAE;EACV,CAAC,CAAC;AACJ,CAAC;AAACQ,OAAA,CAAAhB,yBAAA,GAAAA,yBAAA","ignoreList":[]}
@@ -1,3 +0,0 @@
1
- import { MessageComposer } from 'stream-chat';
2
- export declare const setupCommandUIMiddlewares: (messageComposer: MessageComposer) => void;
3
- //# sourceMappingURL=setupCommandUIMiddlewares.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setupCommandUIMiddlewares.d.ts","sourceRoot":"","sources":["../../../src/utils/setupCommandUIMiddlewares.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,eAAe,EAEhB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,yBAAyB,GAAI,iBAAiB,eAAe,SAwBzE,CAAC"}
@@ -1,49 +0,0 @@
1
- import type { MessageComposer } from 'stream-chat';
2
-
3
- import { initiateClientWithChannels } from '../../mock-builders/api/initiateClientWithChannels';
4
- import { setupCommandUIMiddlewares } from '../setupCommandUIMiddlewares';
5
-
6
- const countMiddleware = (composer: MessageComposer) => {
7
- const count = (middleware: ReadonlyArray<{ id: string }>, id: string) =>
8
- middleware.filter((md) => md.id === id).length;
9
-
10
- return {
11
- composition: count(
12
- composer.compositionMiddlewareExecutor.installedMiddleware,
13
- 'stream-io/message-composer-middleware/command-string-injection',
14
- ),
15
- draftComposition: count(
16
- composer.draftCompositionMiddlewareExecutor.installedMiddleware,
17
- 'stream-io/message-composer-middleware/draft-command-string-injection',
18
- ),
19
- textActiveCommandGuard: count(
20
- composer.textComposer.middlewareExecutor.installedMiddleware,
21
- 'stream-io/text-composer/active-command-guard',
22
- ),
23
- textCommandStringExtraction: count(
24
- composer.textComposer.middlewareExecutor.installedMiddleware,
25
- 'stream-io/text-composer/command-string-extraction',
26
- ),
27
- };
28
- };
29
-
30
- describe('setupCommandUIMiddlewares', () => {
31
- it('inserts each command middleware once, however often it runs on the same composer', async () => {
32
- const {
33
- channels: [channel],
34
- } = await initiateClientWithChannels();
35
- const composer = channel.messageComposer;
36
-
37
- // The `messageComposer` setup function re-runs on every config change and re-subscription.
38
- setupCommandUIMiddlewares(composer);
39
- setupCommandUIMiddlewares(composer);
40
- setupCommandUIMiddlewares(composer);
41
-
42
- expect(countMiddleware(composer)).toEqual({
43
- composition: 1,
44
- draftComposition: 1,
45
- textActiveCommandGuard: 1,
46
- textCommandStringExtraction: 1,
47
- });
48
- });
49
- });
@@ -1,34 +0,0 @@
1
- import {
2
- createActiveCommandGuardMiddleware,
3
- createCommandInjectionMiddleware,
4
- createCommandStringExtractionMiddleware,
5
- createDraftCommandInjectionMiddleware,
6
- MessageComposer,
7
- TextComposerMiddleware,
8
- } from 'stream-chat';
9
-
10
- export const setupCommandUIMiddlewares = (messageComposer: MessageComposer) => {
11
- messageComposer.compositionMiddlewareExecutor.insert({
12
- middleware: [createCommandInjectionMiddleware(messageComposer)],
13
- position: { after: 'stream-io/message-composer-middleware/attachments' },
14
- unique: true,
15
- });
16
-
17
- messageComposer.draftCompositionMiddlewareExecutor.insert({
18
- middleware: [createDraftCommandInjectionMiddleware(messageComposer)],
19
- position: { after: 'stream-io/message-composer-middleware/draft-attachments' },
20
- unique: true,
21
- });
22
-
23
- messageComposer.textComposer.middlewareExecutor.insert({
24
- middleware: [createActiveCommandGuardMiddleware() as TextComposerMiddleware],
25
- position: { before: 'stream-io/text-composer/commands-middleware' },
26
- unique: true,
27
- });
28
-
29
- messageComposer.textComposer.middlewareExecutor.insert({
30
- middleware: [createCommandStringExtractionMiddleware() as TextComposerMiddleware],
31
- position: { after: 'stream-io/text-composer/commands-middleware' },
32
- unique: true,
33
- });
34
- };