stream-chat-react-native-core 9.0.1 → 9.0.2-beta.2

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 (461) hide show
  1. package/README.md +1 -1
  2. package/lib/commonjs/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js +6 -2
  3. package/lib/commonjs/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js.map +1 -1
  4. package/lib/commonjs/components/Indicators/EmptyStateIndicator.js +1 -1
  5. package/lib/commonjs/components/Indicators/EmptyStateIndicator.js.map +1 -1
  6. package/lib/commonjs/components/Message/MessageItemView/utils/renderText.test.js +1 -1
  7. package/lib/commonjs/components/Message/MessageItemView/utils/renderText.test.js.map +1 -1
  8. package/lib/commonjs/components/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.js +8 -3
  9. package/lib/commonjs/components/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.js.map +1 -1
  10. package/lib/commonjs/components/MessageList/hooks/useMessageList.js.map +1 -1
  11. package/lib/commonjs/components/Poll/CreatePollContent.js +3 -3
  12. package/lib/commonjs/components/Poll/CreatePollContent.js.map +1 -1
  13. package/lib/commonjs/i18n/en.json +8 -0
  14. package/lib/commonjs/i18n/es.json +8 -0
  15. package/lib/commonjs/i18n/fr.json +8 -0
  16. package/lib/commonjs/i18n/he.json +8 -0
  17. package/lib/commonjs/i18n/hi.json +8 -0
  18. package/lib/commonjs/i18n/it.json +8 -0
  19. package/lib/commonjs/i18n/ja.json +8 -0
  20. package/lib/commonjs/i18n/ko.json +8 -0
  21. package/lib/commonjs/i18n/nl.json +8 -0
  22. package/lib/commonjs/i18n/pt-br.json +8 -0
  23. package/lib/commonjs/i18n/ru.json +8 -0
  24. package/lib/commonjs/i18n/tr.json +8 -0
  25. package/lib/commonjs/mock-builders/DB/mock.js.map +1 -1
  26. package/lib/commonjs/mock-builders/api/channelMocks.js +38 -31
  27. package/lib/commonjs/mock-builders/api/channelMocks.js.map +1 -1
  28. package/lib/commonjs/mock-builders/api/deleteMessage.js.map +1 -1
  29. package/lib/commonjs/mock-builders/api/deleteReaction.js.map +1 -1
  30. package/lib/commonjs/mock-builders/api/error.js.map +1 -1
  31. package/lib/commonjs/mock-builders/api/getOrCreateChannel.js.map +1 -1
  32. package/lib/commonjs/mock-builders/api/initiateClientWithChannels.js +1 -1
  33. package/lib/commonjs/mock-builders/api/initiateClientWithChannels.js.map +1 -1
  34. package/lib/commonjs/mock-builders/api/queryChannels.js.map +1 -1
  35. package/lib/commonjs/mock-builders/api/queryMembers.js +12 -11
  36. package/lib/commonjs/mock-builders/api/queryMembers.js.map +1 -1
  37. package/lib/commonjs/mock-builders/api/sendMessage.js.map +1 -1
  38. package/lib/commonjs/mock-builders/api/sendReaction.js.map +1 -1
  39. package/lib/commonjs/mock-builders/api/threadReplies.js.map +1 -1
  40. package/lib/commonjs/mock-builders/api/useMockedApis.js.map +1 -1
  41. package/lib/commonjs/mock-builders/api/utils.js.map +1 -1
  42. package/lib/commonjs/mock-builders/attachments.js.map +1 -1
  43. package/lib/commonjs/mock-builders/event/channelDeleted.js +3 -2
  44. package/lib/commonjs/mock-builders/event/channelDeleted.js.map +1 -1
  45. package/lib/commonjs/mock-builders/event/channelHidden.js +3 -2
  46. package/lib/commonjs/mock-builders/event/channelHidden.js.map +1 -1
  47. package/lib/commonjs/mock-builders/event/channelTruncated.js +3 -2
  48. package/lib/commonjs/mock-builders/event/channelTruncated.js.map +1 -1
  49. package/lib/commonjs/mock-builders/event/channelUpdated.js +3 -2
  50. package/lib/commonjs/mock-builders/event/channelUpdated.js.map +1 -1
  51. package/lib/commonjs/mock-builders/event/channelVisible.js +3 -2
  52. package/lib/commonjs/mock-builders/event/channelVisible.js.map +1 -1
  53. package/lib/commonjs/mock-builders/event/connectionChanged.js +3 -2
  54. package/lib/commonjs/mock-builders/event/connectionChanged.js.map +1 -1
  55. package/lib/commonjs/mock-builders/event/connectionRecovered.js +3 -2
  56. package/lib/commonjs/mock-builders/event/connectionRecovered.js.map +1 -1
  57. package/lib/commonjs/mock-builders/event/memberAdded.js +3 -2
  58. package/lib/commonjs/mock-builders/event/memberAdded.js.map +1 -1
  59. package/lib/commonjs/mock-builders/event/memberRemoved.js +3 -2
  60. package/lib/commonjs/mock-builders/event/memberRemoved.js.map +1 -1
  61. package/lib/commonjs/mock-builders/event/memberUpdated.js +3 -2
  62. package/lib/commonjs/mock-builders/event/memberUpdated.js.map +1 -1
  63. package/lib/commonjs/mock-builders/event/messageDeleted.js +3 -2
  64. package/lib/commonjs/mock-builders/event/messageDeleted.js.map +1 -1
  65. package/lib/commonjs/mock-builders/event/messageNew.js +3 -2
  66. package/lib/commonjs/mock-builders/event/messageNew.js.map +1 -1
  67. package/lib/commonjs/mock-builders/event/messageRead.js +3 -2
  68. package/lib/commonjs/mock-builders/event/messageRead.js.map +1 -1
  69. package/lib/commonjs/mock-builders/event/messageUpdated.js +3 -2
  70. package/lib/commonjs/mock-builders/event/messageUpdated.js.map +1 -1
  71. package/lib/commonjs/mock-builders/event/notificationAddedToChannel.js +3 -2
  72. package/lib/commonjs/mock-builders/event/notificationAddedToChannel.js.map +1 -1
  73. package/lib/commonjs/mock-builders/event/notificationChannelMutesUpdated.js +3 -2
  74. package/lib/commonjs/mock-builders/event/notificationChannelMutesUpdated.js.map +1 -1
  75. package/lib/commonjs/mock-builders/event/notificationMarkRead.js +3 -2
  76. package/lib/commonjs/mock-builders/event/notificationMarkRead.js.map +1 -1
  77. package/lib/commonjs/mock-builders/event/notificationMarkUnread.js +3 -2
  78. package/lib/commonjs/mock-builders/event/notificationMarkUnread.js.map +1 -1
  79. package/lib/commonjs/mock-builders/event/notificationMessageNew.js +3 -2
  80. package/lib/commonjs/mock-builders/event/notificationMessageNew.js.map +1 -1
  81. package/lib/commonjs/mock-builders/event/notificationMutesUpdated.js +3 -2
  82. package/lib/commonjs/mock-builders/event/notificationMutesUpdated.js.map +1 -1
  83. package/lib/commonjs/mock-builders/event/notificationRemovedFromChannel.js +3 -2
  84. package/lib/commonjs/mock-builders/event/notificationRemovedFromChannel.js.map +1 -1
  85. package/lib/commonjs/mock-builders/event/reactionDeleted.js +3 -2
  86. package/lib/commonjs/mock-builders/event/reactionDeleted.js.map +1 -1
  87. package/lib/commonjs/mock-builders/event/reactionNew.js +3 -2
  88. package/lib/commonjs/mock-builders/event/reactionNew.js.map +1 -1
  89. package/lib/commonjs/mock-builders/event/reactionUpdated.js +3 -2
  90. package/lib/commonjs/mock-builders/event/reactionUpdated.js.map +1 -1
  91. package/lib/commonjs/mock-builders/event/typing.js +3 -2
  92. package/lib/commonjs/mock-builders/event/typing.js.map +1 -1
  93. package/lib/commonjs/mock-builders/event/userPresence.js +3 -2
  94. package/lib/commonjs/mock-builders/event/userPresence.js.map +1 -1
  95. package/lib/commonjs/mock-builders/event/userUpdated.js +3 -2
  96. package/lib/commonjs/mock-builders/event/userUpdated.js.map +1 -1
  97. package/lib/commonjs/mock-builders/generator/attachment.js +0 -3
  98. package/lib/commonjs/mock-builders/generator/attachment.js.map +1 -1
  99. package/lib/commonjs/mock-builders/generator/channel.js +10 -12
  100. package/lib/commonjs/mock-builders/generator/channel.js.map +1 -1
  101. package/lib/commonjs/mock-builders/generator/member.js +3 -2
  102. package/lib/commonjs/mock-builders/generator/member.js.map +1 -1
  103. package/lib/commonjs/mock-builders/generator/message.js +12 -7
  104. package/lib/commonjs/mock-builders/generator/message.js.map +1 -1
  105. package/lib/commonjs/mock-builders/generator/reaction.js +3 -2
  106. package/lib/commonjs/mock-builders/generator/reaction.js.map +1 -1
  107. package/lib/commonjs/mock-builders/generator/user.js +4 -3
  108. package/lib/commonjs/mock-builders/generator/user.js.map +1 -1
  109. package/lib/commonjs/mock-builders/mock.js +15 -11
  110. package/lib/commonjs/mock-builders/mock.js.map +1 -1
  111. package/lib/commonjs/store/apis/addPendingTask.js.map +1 -1
  112. package/lib/commonjs/store/apis/deleteMessage.js.map +1 -1
  113. package/lib/commonjs/store/apis/upsertDraft.js.map +1 -1
  114. package/lib/commonjs/store/sqlite-utils/appendOrderByClause.js.map +1 -1
  115. package/lib/commonjs/store/sqlite-utils/appendWhereCluase.js.map +1 -1
  116. package/lib/commonjs/store/sqlite-utils/createCreateTableQuery.js.map +1 -1
  117. package/lib/commonjs/test-utils/BetterSqlite.js +11 -7
  118. package/lib/commonjs/test-utils/BetterSqlite.js.map +1 -1
  119. package/lib/commonjs/version.json +1 -1
  120. package/lib/module/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js +6 -2
  121. package/lib/module/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js.map +1 -1
  122. package/lib/module/components/Indicators/EmptyStateIndicator.js +1 -1
  123. package/lib/module/components/Indicators/EmptyStateIndicator.js.map +1 -1
  124. package/lib/module/components/Message/MessageItemView/utils/renderText.test.js +1 -1
  125. package/lib/module/components/Message/MessageItemView/utils/renderText.test.js.map +1 -1
  126. package/lib/module/components/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.js +8 -3
  127. package/lib/module/components/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.js.map +1 -1
  128. package/lib/module/components/MessageList/hooks/useMessageList.js.map +1 -1
  129. package/lib/module/components/Poll/CreatePollContent.js +3 -3
  130. package/lib/module/components/Poll/CreatePollContent.js.map +1 -1
  131. package/lib/module/i18n/en.json +8 -0
  132. package/lib/module/i18n/es.json +8 -0
  133. package/lib/module/i18n/fr.json +8 -0
  134. package/lib/module/i18n/he.json +8 -0
  135. package/lib/module/i18n/hi.json +8 -0
  136. package/lib/module/i18n/it.json +8 -0
  137. package/lib/module/i18n/ja.json +8 -0
  138. package/lib/module/i18n/ko.json +8 -0
  139. package/lib/module/i18n/nl.json +8 -0
  140. package/lib/module/i18n/pt-br.json +8 -0
  141. package/lib/module/i18n/ru.json +8 -0
  142. package/lib/module/i18n/tr.json +8 -0
  143. package/lib/module/mock-builders/DB/mock.js.map +1 -1
  144. package/lib/module/mock-builders/api/channelMocks.js +38 -31
  145. package/lib/module/mock-builders/api/channelMocks.js.map +1 -1
  146. package/lib/module/mock-builders/api/deleteMessage.js.map +1 -1
  147. package/lib/module/mock-builders/api/deleteReaction.js.map +1 -1
  148. package/lib/module/mock-builders/api/error.js.map +1 -1
  149. package/lib/module/mock-builders/api/getOrCreateChannel.js.map +1 -1
  150. package/lib/module/mock-builders/api/initiateClientWithChannels.js +1 -1
  151. package/lib/module/mock-builders/api/initiateClientWithChannels.js.map +1 -1
  152. package/lib/module/mock-builders/api/queryChannels.js.map +1 -1
  153. package/lib/module/mock-builders/api/queryMembers.js +12 -11
  154. package/lib/module/mock-builders/api/queryMembers.js.map +1 -1
  155. package/lib/module/mock-builders/api/sendMessage.js.map +1 -1
  156. package/lib/module/mock-builders/api/sendReaction.js.map +1 -1
  157. package/lib/module/mock-builders/api/threadReplies.js.map +1 -1
  158. package/lib/module/mock-builders/api/useMockedApis.js.map +1 -1
  159. package/lib/module/mock-builders/api/utils.js.map +1 -1
  160. package/lib/module/mock-builders/attachments.js.map +1 -1
  161. package/lib/module/mock-builders/event/channelDeleted.js +3 -2
  162. package/lib/module/mock-builders/event/channelDeleted.js.map +1 -1
  163. package/lib/module/mock-builders/event/channelHidden.js +3 -2
  164. package/lib/module/mock-builders/event/channelHidden.js.map +1 -1
  165. package/lib/module/mock-builders/event/channelTruncated.js +3 -2
  166. package/lib/module/mock-builders/event/channelTruncated.js.map +1 -1
  167. package/lib/module/mock-builders/event/channelUpdated.js +3 -2
  168. package/lib/module/mock-builders/event/channelUpdated.js.map +1 -1
  169. package/lib/module/mock-builders/event/channelVisible.js +3 -2
  170. package/lib/module/mock-builders/event/channelVisible.js.map +1 -1
  171. package/lib/module/mock-builders/event/connectionChanged.js +3 -2
  172. package/lib/module/mock-builders/event/connectionChanged.js.map +1 -1
  173. package/lib/module/mock-builders/event/connectionRecovered.js +3 -2
  174. package/lib/module/mock-builders/event/connectionRecovered.js.map +1 -1
  175. package/lib/module/mock-builders/event/memberAdded.js +3 -2
  176. package/lib/module/mock-builders/event/memberAdded.js.map +1 -1
  177. package/lib/module/mock-builders/event/memberRemoved.js +3 -2
  178. package/lib/module/mock-builders/event/memberRemoved.js.map +1 -1
  179. package/lib/module/mock-builders/event/memberUpdated.js +3 -2
  180. package/lib/module/mock-builders/event/memberUpdated.js.map +1 -1
  181. package/lib/module/mock-builders/event/messageDeleted.js +3 -2
  182. package/lib/module/mock-builders/event/messageDeleted.js.map +1 -1
  183. package/lib/module/mock-builders/event/messageNew.js +3 -2
  184. package/lib/module/mock-builders/event/messageNew.js.map +1 -1
  185. package/lib/module/mock-builders/event/messageRead.js +3 -2
  186. package/lib/module/mock-builders/event/messageRead.js.map +1 -1
  187. package/lib/module/mock-builders/event/messageUpdated.js +3 -2
  188. package/lib/module/mock-builders/event/messageUpdated.js.map +1 -1
  189. package/lib/module/mock-builders/event/notificationAddedToChannel.js +3 -2
  190. package/lib/module/mock-builders/event/notificationAddedToChannel.js.map +1 -1
  191. package/lib/module/mock-builders/event/notificationChannelMutesUpdated.js +3 -2
  192. package/lib/module/mock-builders/event/notificationChannelMutesUpdated.js.map +1 -1
  193. package/lib/module/mock-builders/event/notificationMarkRead.js +3 -2
  194. package/lib/module/mock-builders/event/notificationMarkRead.js.map +1 -1
  195. package/lib/module/mock-builders/event/notificationMarkUnread.js +3 -2
  196. package/lib/module/mock-builders/event/notificationMarkUnread.js.map +1 -1
  197. package/lib/module/mock-builders/event/notificationMessageNew.js +3 -2
  198. package/lib/module/mock-builders/event/notificationMessageNew.js.map +1 -1
  199. package/lib/module/mock-builders/event/notificationMutesUpdated.js +3 -2
  200. package/lib/module/mock-builders/event/notificationMutesUpdated.js.map +1 -1
  201. package/lib/module/mock-builders/event/notificationRemovedFromChannel.js +3 -2
  202. package/lib/module/mock-builders/event/notificationRemovedFromChannel.js.map +1 -1
  203. package/lib/module/mock-builders/event/reactionDeleted.js +3 -2
  204. package/lib/module/mock-builders/event/reactionDeleted.js.map +1 -1
  205. package/lib/module/mock-builders/event/reactionNew.js +3 -2
  206. package/lib/module/mock-builders/event/reactionNew.js.map +1 -1
  207. package/lib/module/mock-builders/event/reactionUpdated.js +3 -2
  208. package/lib/module/mock-builders/event/reactionUpdated.js.map +1 -1
  209. package/lib/module/mock-builders/event/typing.js +3 -2
  210. package/lib/module/mock-builders/event/typing.js.map +1 -1
  211. package/lib/module/mock-builders/event/userPresence.js +3 -2
  212. package/lib/module/mock-builders/event/userPresence.js.map +1 -1
  213. package/lib/module/mock-builders/event/userUpdated.js +3 -2
  214. package/lib/module/mock-builders/event/userUpdated.js.map +1 -1
  215. package/lib/module/mock-builders/generator/attachment.js +0 -3
  216. package/lib/module/mock-builders/generator/attachment.js.map +1 -1
  217. package/lib/module/mock-builders/generator/channel.js +10 -12
  218. package/lib/module/mock-builders/generator/channel.js.map +1 -1
  219. package/lib/module/mock-builders/generator/member.js +3 -2
  220. package/lib/module/mock-builders/generator/member.js.map +1 -1
  221. package/lib/module/mock-builders/generator/message.js +12 -7
  222. package/lib/module/mock-builders/generator/message.js.map +1 -1
  223. package/lib/module/mock-builders/generator/reaction.js +3 -2
  224. package/lib/module/mock-builders/generator/reaction.js.map +1 -1
  225. package/lib/module/mock-builders/generator/user.js +4 -3
  226. package/lib/module/mock-builders/generator/user.js.map +1 -1
  227. package/lib/module/mock-builders/mock.js +15 -11
  228. package/lib/module/mock-builders/mock.js.map +1 -1
  229. package/lib/module/store/apis/addPendingTask.js.map +1 -1
  230. package/lib/module/store/apis/deleteMessage.js.map +1 -1
  231. package/lib/module/store/apis/upsertDraft.js.map +1 -1
  232. package/lib/module/store/sqlite-utils/appendOrderByClause.js.map +1 -1
  233. package/lib/module/store/sqlite-utils/appendWhereCluase.js.map +1 -1
  234. package/lib/module/store/sqlite-utils/createCreateTableQuery.js.map +1 -1
  235. package/lib/module/test-utils/BetterSqlite.js +11 -7
  236. package/lib/module/test-utils/BetterSqlite.js.map +1 -1
  237. package/lib/module/version.json +1 -1
  238. package/lib/typescript/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.d.ts.map +1 -1
  239. package/lib/typescript/components/Indicators/EmptyStateIndicator.d.ts.map +1 -1
  240. package/lib/typescript/components/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.d.ts.map +1 -1
  241. package/lib/typescript/components/Poll/CreatePollContent.d.ts.map +1 -1
  242. package/lib/typescript/components/UIComponents/SwipableWrapper.d.ts +1 -1
  243. package/lib/typescript/components/UIComponents/SwipableWrapper.d.ts.map +1 -1
  244. package/lib/typescript/i18n/en.json +8 -0
  245. package/lib/typescript/i18n/es.json +8 -0
  246. package/lib/typescript/i18n/fr.json +8 -0
  247. package/lib/typescript/i18n/he.json +8 -0
  248. package/lib/typescript/i18n/hi.json +8 -0
  249. package/lib/typescript/i18n/it.json +8 -0
  250. package/lib/typescript/i18n/ja.json +8 -0
  251. package/lib/typescript/i18n/ko.json +8 -0
  252. package/lib/typescript/i18n/nl.json +8 -0
  253. package/lib/typescript/i18n/pt-br.json +8 -0
  254. package/lib/typescript/i18n/ru.json +8 -0
  255. package/lib/typescript/i18n/tr.json +8 -0
  256. package/lib/typescript/store/OfflineDB.d.ts +1 -1
  257. package/lib/typescript/store/OfflineDB.d.ts.map +1 -1
  258. package/lib/typescript/store/apis/addPendingTask.d.ts.map +1 -1
  259. package/lib/typescript/store/apis/deleteMessage.d.ts +2 -1
  260. package/lib/typescript/store/apis/deleteMessage.d.ts.map +1 -1
  261. package/lib/typescript/store/apis/upsertDraft.d.ts +1 -1
  262. package/lib/typescript/store/apis/upsertDraft.d.ts.map +1 -1
  263. package/lib/typescript/store/sqlite-utils/createCreateTableQuery.d.ts.map +1 -1
  264. package/lib/typescript/test-utils/BetterSqlite.d.ts +4 -3
  265. package/lib/typescript/test-utils/BetterSqlite.d.ts.map +1 -1
  266. package/lib/typescript/utils/i18n/Streami18n.d.ts +8 -0
  267. package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
  268. package/package.json +5 -3
  269. package/src/__tests__/offline-support/{offline-feature.js → offline-feature.tsx} +282 -139
  270. package/src/__tests__/offline-support/{optimistic-update.js → optimistic-update.tsx} +154 -84
  271. package/src/components/Attachment/__tests__/{Attachment.test.js → Attachment.test.tsx} +12 -8
  272. package/src/components/Attachment/__tests__/{Gallery.test.js → Gallery.test.tsx} +10 -3
  273. package/src/components/Attachment/__tests__/{Giphy.test.js → Giphy.test.tsx} +48 -19
  274. package/src/components/Attachment/__tests__/{buildGallery.test.js → buildGallery.test.ts} +4 -2
  275. package/src/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.tsx +4 -2
  276. package/src/components/AutoCompleteInput/__tests__/{AutoCompleteInput.test.js → AutoCompleteInput.test.tsx} +21 -11
  277. package/src/components/Channel/__tests__/{Channel.test.js → Channel.test.tsx} +129 -89
  278. package/src/components/Channel/__tests__/{isAttachmentEqualHandler.test.js → isAttachmentEqualHandler.test.tsx} +25 -8
  279. package/src/components/Channel/__tests__/{ownCapabilities.test.js → ownCapabilities.test.tsx} +16 -12
  280. package/src/components/Channel/__tests__/{useMessageListPagination.test.js → useMessageListPagination.test.tsx} +105 -63
  281. package/src/components/ChannelList/__tests__/{ChannelList.test.js → ChannelList.test.tsx} +63 -29
  282. package/src/components/ChannelList/__tests__/{ChannelListView.test.js → ChannelListView.test.tsx} +30 -20
  283. package/src/components/ChannelList/hooks/__tests__/useChannelActionItems.test.tsx +6 -6
  284. package/src/components/ChannelList/hooks/__tests__/useChannelActionItemsById.test.tsx +2 -2
  285. package/src/components/ChannelList/hooks/listeners/__tests__/useChannelUpdated.test.tsx +17 -14
  286. package/src/components/ChannelPreview/__tests__/ChannelDetailsBottomSheet.test.tsx +14 -4
  287. package/src/components/ChannelPreview/__tests__/ChannelPreview.test.tsx +23 -12
  288. package/src/components/ChannelPreview/__tests__/{ChannelPreviewView.test.js → ChannelPreviewView.test.tsx} +9 -34
  289. package/src/components/ChannelPreview/__tests__/ChannelSwipableWrapper.test.tsx +4 -2
  290. package/src/components/ChannelPreview/hooks/__tests__/useChannelPreviewDisplayPresence.test.tsx +1 -1
  291. package/src/components/Chat/__tests__/{Chat.test.js → Chat.test.tsx} +37 -30
  292. package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +10 -14
  293. package/src/components/ImageGallery/__tests__/ImageGalleryFooter.test.tsx +3 -3
  294. package/src/components/ImageGallery/__tests__/ImageGalleryGrid.test.tsx +5 -4
  295. package/src/components/ImageGallery/__tests__/ImageGalleryHeader.test.tsx +7 -6
  296. package/src/components/ImageGallery/components/__tests__/ImageGalleryHeader.test.tsx +9 -13
  297. package/src/components/Indicators/EmptyStateIndicator.tsx +3 -1
  298. package/src/components/Message/MessageItemView/__tests__/{Message.test.js → Message.test.tsx} +20 -11
  299. package/src/components/Message/MessageItemView/__tests__/{MessageAuthor.test.js → MessageAuthor.test.tsx} +10 -12
  300. package/src/components/Message/MessageItemView/__tests__/{MessageContent.test.js → MessageContent.test.tsx} +22 -12
  301. package/src/components/Message/MessageItemView/__tests__/{MessageItemView.test.js → MessageItemView.test.tsx} +11 -4
  302. package/src/components/Message/MessageItemView/__tests__/{MessagePinnedHeader.test.js → MessagePinnedHeader.test.tsx} +5 -3
  303. package/src/components/Message/MessageItemView/__tests__/{MessageReplies.test.js → MessageReplies.test.tsx} +15 -36
  304. package/src/components/Message/MessageItemView/__tests__/{MessageStatus.test.js → MessageStatus.test.tsx} +20 -10
  305. package/src/components/Message/MessageItemView/__tests__/MessageTextContainer.test.tsx +8 -8
  306. package/src/components/Message/MessageItemView/__tests__/{ReactionListBottom.test.js → ReactionListBottom.test.tsx} +19 -8
  307. package/src/components/Message/MessageItemView/__tests__/{ReactionListTop.test.js → ReactionListTop.test.tsx} +8 -4
  308. package/src/components/Message/MessageItemView/utils/renderText.test.tsx +2 -4
  309. package/src/components/Message/MessageItemView/utils/renderText.tsx +1 -1
  310. package/src/components/Message/hooks/__tests__/useShouldUseOverlayStyles.test.tsx +2 -2
  311. package/src/components/MessageInput/__tests__/{AttachButton.test.js → AttachButton.test.tsx} +14 -4
  312. package/src/components/MessageInput/__tests__/{AttachmentUploadPreviewList.test.js → AttachmentUploadPreviewList.test.tsx} +27 -8
  313. package/src/components/MessageInput/__tests__/{AudioAttachmentUploadPreview.test.js → AudioAttachmentUploadPreview.test.tsx} +18 -5
  314. package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewExpo.test.tsx +47 -15
  315. package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewNative.test.tsx +57 -17
  316. package/src/components/MessageInput/__tests__/{InputButtons.test.js → InputButtons.test.tsx} +14 -4
  317. package/src/components/MessageInput/__tests__/{MessageComposer.test.js → MessageComposer.test.tsx} +28 -20
  318. package/src/components/MessageInput/__tests__/{SendButton.test.js → SendButton.test.tsx} +13 -4
  319. package/src/components/MessageInput/__tests__/{SendMessageDisallowedIndicator.test.js → SendMessageDisallowedIndicator.test.tsx} +47 -31
  320. package/src/components/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.tsx +8 -3
  321. package/src/components/MessageList/__tests__/{MessageList.test.js → MessageList.test.tsx} +31 -34
  322. package/src/components/MessageList/__tests__/{MessageSystem.test.js → MessageSystem.test.tsx} +13 -5
  323. package/src/components/MessageList/__tests__/{ScrollToBottomButton.test.js → ScrollToBottomButton.test.tsx} +8 -12
  324. package/src/components/MessageList/__tests__/{TypingIndicator.test.js → TypingIndicator.test.tsx} +6 -4
  325. package/src/components/MessageList/__tests__/useMessageList.test.tsx +2 -2
  326. package/src/components/MessageList/hooks/useMessageList.ts +1 -1
  327. package/src/components/MessageMenu/__tests__/MessageActionList.test.tsx +4 -1
  328. package/src/components/MessageMenu/__tests__/MessageActionListItem.test.tsx +1 -0
  329. package/src/components/MessageMenu/__tests__/MessageReactionPicker.test.tsx +6 -2
  330. package/src/components/MessageMenu/__tests__/MessageUserReactions.test.tsx +3 -3
  331. package/src/components/MessageMenu/__tests__/MessageUserReactionsAvatar.test.tsx +7 -3
  332. package/src/components/MessageMenu/__tests__/MessageUserReactionsItem.test.tsx +2 -1
  333. package/src/components/Poll/CreatePollContent.tsx +5 -3
  334. package/src/components/Thread/__tests__/{Thread.test.js → Thread.test.tsx} +41 -13
  335. package/src/components/Thread/__tests__/__snapshots__/{Thread.test.js.snap → Thread.test.tsx.snap} +0 -21
  336. package/src/components/UIComponents/SwipableWrapper.tsx +1 -1
  337. package/src/components/UIComponents/__tests__/SwipableWrapper.test.tsx +1 -1
  338. package/src/contexts/messageInputContext/__tests__/filePickers.test.tsx +31 -10
  339. package/src/contexts/messageInputContext/__tests__/sendMessage.test.tsx +24 -12
  340. package/src/contexts/overlayContext/__tests__/MessageOverlayHostLayer.test.tsx +2 -2
  341. package/src/hooks/__tests__/useTranslatedMessage.test.tsx +4 -4
  342. package/src/i18n/en.json +8 -0
  343. package/src/i18n/es.json +8 -0
  344. package/src/i18n/fr.json +8 -0
  345. package/src/i18n/he.json +8 -0
  346. package/src/i18n/hi.json +8 -0
  347. package/src/i18n/it.json +8 -0
  348. package/src/i18n/ja.json +8 -0
  349. package/src/i18n/ko.json +8 -0
  350. package/src/i18n/nl.json +8 -0
  351. package/src/i18n/pt-br.json +8 -0
  352. package/src/i18n/ru.json +8 -0
  353. package/src/i18n/tr.json +8 -0
  354. package/src/mock-builders/DB/mock.ts +1 -1
  355. package/src/mock-builders/api/channelMocks.tsx +39 -29
  356. package/src/mock-builders/api/deleteMessage.ts +21 -0
  357. package/src/mock-builders/api/deleteReaction.ts +23 -0
  358. package/src/mock-builders/api/{error.js → error.ts} +13 -5
  359. package/src/mock-builders/api/getOrCreateChannel.ts +22 -11
  360. package/src/mock-builders/api/{initiateClientWithChannels.js → initiateClientWithChannels.ts} +21 -3
  361. package/src/mock-builders/api/{queryChannels.js → queryChannels.ts} +2 -4
  362. package/src/mock-builders/api/{queryMembers.js → queryMembers.ts} +29 -27
  363. package/src/mock-builders/api/sendMessage.ts +25 -0
  364. package/src/mock-builders/api/sendReaction.ts +9 -5
  365. package/src/mock-builders/api/threadReplies.ts +18 -0
  366. package/src/mock-builders/api/{useMockedApis.js → useMockedApis.ts} +5 -4
  367. package/src/mock-builders/api/utils.ts +16 -0
  368. package/src/mock-builders/{attachments.js → attachments.ts} +24 -8
  369. package/src/mock-builders/event/channelDeleted.ts +12 -0
  370. package/src/mock-builders/event/channelHidden.ts +12 -0
  371. package/src/mock-builders/event/channelTruncated.ts +12 -0
  372. package/src/mock-builders/event/channelUpdated.ts +12 -0
  373. package/src/mock-builders/event/channelVisible.ts +12 -0
  374. package/src/mock-builders/event/connectionChanged.ts +11 -0
  375. package/src/mock-builders/event/connectionRecovered.ts +10 -0
  376. package/src/mock-builders/event/memberAdded.ts +19 -0
  377. package/src/mock-builders/event/memberRemoved.ts +18 -0
  378. package/src/mock-builders/event/memberUpdated.ts +18 -0
  379. package/src/mock-builders/event/messageDeleted.ts +23 -0
  380. package/src/mock-builders/event/messageNew.ts +26 -0
  381. package/src/mock-builders/event/messageRead.ts +23 -0
  382. package/src/mock-builders/event/messageUpdated.ts +23 -0
  383. package/src/mock-builders/event/notificationAddedToChannel.ts +12 -0
  384. package/src/mock-builders/event/notificationChannelMutesUpdated.ts +12 -0
  385. package/src/mock-builders/event/notificationMarkRead.ts +12 -0
  386. package/src/mock-builders/event/notificationMarkUnread.ts +22 -0
  387. package/src/mock-builders/event/notificationMessageNew.ts +12 -0
  388. package/src/mock-builders/event/notificationMutesUpdated.ts +16 -0
  389. package/src/mock-builders/event/notificationRemovedFromChannel.ts +12 -0
  390. package/src/mock-builders/event/reactionDeleted.ts +26 -0
  391. package/src/mock-builders/event/reactionNew.ts +26 -0
  392. package/src/mock-builders/event/reactionUpdated.ts +26 -0
  393. package/src/mock-builders/event/typing.ts +18 -0
  394. package/src/mock-builders/event/userPresence.ts +13 -0
  395. package/src/mock-builders/event/userUpdated.ts +13 -0
  396. package/src/mock-builders/generator/{attachment.js → attachment.ts} +17 -13
  397. package/src/mock-builders/generator/channel.ts +70 -39
  398. package/src/mock-builders/generator/member.ts +18 -0
  399. package/src/mock-builders/generator/message.ts +50 -0
  400. package/src/mock-builders/generator/reaction.ts +15 -0
  401. package/src/mock-builders/generator/{user.js → user.ts} +20 -16
  402. package/src/mock-builders/mock.ts +79 -0
  403. package/src/state-store/__tests__/audio-player.test.ts +3 -1
  404. package/src/state-store/__tests__/image-gallery-state-store.test.ts +31 -28
  405. package/src/state-store/__tests__/video-player-pool.test.ts +9 -9
  406. package/src/store/apis/__tests__/updatePendingTask.test.ts +17 -6
  407. package/src/store/apis/addPendingTask.ts +2 -1
  408. package/src/store/apis/deleteMessage.ts +2 -1
  409. package/src/store/apis/upsertDraft.ts +2 -2
  410. package/src/store/sqlite-utils/appendOrderByClause.ts +1 -1
  411. package/src/store/sqlite-utils/appendWhereCluase.ts +1 -1
  412. package/src/store/sqlite-utils/createCreateTableQuery.ts +7 -5
  413. package/src/test-utils/BetterSqlite.ts +38 -0
  414. package/src/utils/__tests__/{Streami18n.test.js → Streami18n.test.ts} +66 -31
  415. package/src/utils/__tests__/getResizedImageUrl.test.ts +10 -8
  416. package/src/utils/__tests__/{utils.test.js → utils.test.ts} +1 -1
  417. package/src/version.json +1 -1
  418. package/src/mock-builders/api/deleteMessage.js +0 -18
  419. package/src/mock-builders/api/deleteReaction.js +0 -19
  420. package/src/mock-builders/api/sendMessage.js +0 -18
  421. package/src/mock-builders/api/threadReplies.js +0 -16
  422. package/src/mock-builders/api/utils.js +0 -7
  423. package/src/mock-builders/event/channelDeleted.js +0 -7
  424. package/src/mock-builders/event/channelHidden.js +0 -7
  425. package/src/mock-builders/event/channelTruncated.js +0 -7
  426. package/src/mock-builders/event/channelUpdated.js +0 -7
  427. package/src/mock-builders/event/channelVisible.js +0 -7
  428. package/src/mock-builders/event/connectionChanged.js +0 -6
  429. package/src/mock-builders/event/connectionRecovered.js +0 -5
  430. package/src/mock-builders/event/memberAdded.js +0 -10
  431. package/src/mock-builders/event/memberRemoved.js +0 -9
  432. package/src/mock-builders/event/memberUpdated.js +0 -9
  433. package/src/mock-builders/event/messageDeleted.js +0 -8
  434. package/src/mock-builders/event/messageNew.js +0 -11
  435. package/src/mock-builders/event/messageRead.js +0 -15
  436. package/src/mock-builders/event/messageUpdated.js +0 -8
  437. package/src/mock-builders/event/notificationAddedToChannel.js +0 -7
  438. package/src/mock-builders/event/notificationChannelMutesUpdated.js +0 -7
  439. package/src/mock-builders/event/notificationMarkRead.js +0 -7
  440. package/src/mock-builders/event/notificationMarkUnread.js +0 -12
  441. package/src/mock-builders/event/notificationMessageNew.js +0 -7
  442. package/src/mock-builders/event/notificationMutesUpdated.js +0 -11
  443. package/src/mock-builders/event/notificationRemovedFromChannel.js +0 -7
  444. package/src/mock-builders/event/reactionDeleted.js +0 -9
  445. package/src/mock-builders/event/reactionNew.js +0 -9
  446. package/src/mock-builders/event/reactionUpdated.js +0 -9
  447. package/src/mock-builders/event/typing.js +0 -9
  448. package/src/mock-builders/event/userPresence.js +0 -8
  449. package/src/mock-builders/event/userUpdated.js +0 -8
  450. package/src/mock-builders/generator/member.js +0 -13
  451. package/src/mock-builders/generator/message.js +0 -32
  452. package/src/mock-builders/generator/reaction.js +0 -12
  453. package/src/mock-builders/mock.js +0 -57
  454. package/src/test-utils/BetterSqlite.js +0 -36
  455. /package/src/components/Message/MessageItemView/__tests__/__snapshots__/{MessageAuthor.test.js.snap → MessageAuthor.test.tsx.snap} +0 -0
  456. /package/src/components/Message/MessageItemView/__tests__/__snapshots__/{MessagePinnedHeader.test.js.snap → MessagePinnedHeader.test.tsx.snap} +0 -0
  457. /package/src/components/MessageInput/__tests__/__snapshots__/{AttachButton.test.js.snap → AttachButton.test.tsx.snap} +0 -0
  458. /package/src/components/MessageInput/__tests__/__snapshots__/{SendButton.test.js.snap → SendButton.test.tsx.snap} +0 -0
  459. /package/src/components/MessageList/__tests__/__snapshots__/{MessageSystem.test.js.snap → MessageSystem.test.tsx.snap} +0 -0
  460. /package/src/components/MessageList/__tests__/__snapshots__/{ScrollToBottomButton.test.js.snap → ScrollToBottomButton.test.tsx.snap} +0 -0
  461. /package/src/components/MessageList/__tests__/__snapshots__/{TypingIndicator.test.js.snap → TypingIndicator.test.tsx.snap} +0 -0
@@ -3,9 +3,18 @@ import { View } from 'react-native';
3
3
 
4
4
  import { act, cleanup, render, screen, waitFor } from '@testing-library/react-native';
5
5
 
6
+ import type {
7
+ Channel as ChannelLLC,
8
+ ChannelAPIResponse,
9
+ ChannelMemberResponse,
10
+ LocalMessage,
11
+ ReactionResponse,
12
+ StreamChat,
13
+ UserResponse,
14
+ } from 'stream-chat';
6
15
  import { v4 as uuidv4 } from 'uuid';
7
16
 
8
- import { Channel } from '../../components/Channel/Channel';
17
+ import { Channel as ChannelRaw } from '../../components/Channel/Channel';
9
18
  import { Chat } from '../../components/Chat/Chat';
10
19
  import { MessageInputContext, MessagesContext } from '../../contexts';
11
20
  import { deleteMessageApi } from '../../mock-builders/api/deleteMessage';
@@ -28,27 +37,64 @@ import { SqliteClient } from '../../store/SqliteClient';
28
37
  import { BetterSqlite } from '../../test-utils/BetterSqlite';
29
38
  import { MessageStatusTypes } from '../../utils/utils';
30
39
 
40
+ // `initialValue` is not part of Channel's props today, but these legacy tests pass it to
41
+ // mimic a pre-populated input. Keep the runtime behavior unchanged and widen the prop type
42
+ // at the component boundary so TS stops complaining.
43
+ const Channel = ChannelRaw as unknown as React.ComponentType<
44
+ React.ComponentProps<typeof ChannelRaw> & { initialValue?: string }
45
+ >;
46
+
47
+ // Tests reach into internal / private StreamChat + LLC Channel APIs (sync manager, legacy
48
+ // `wsConnection`, `_deleteMessage`, `_sendReaction`, `_sendMessage`). Helpers narrow at the
49
+ // call sites without sprinkling `any` everywhere.
50
+ type TestPendingTask = { id: number; type: string; payload: unknown };
51
+ type TestSyncManager = {
52
+ invokeSyncStatusListeners: (recovered: boolean) => Promise<void>;
53
+ };
54
+ // Intentionally not intersected with the real `StreamChat['offlineDb']` — the
55
+ // real `syncManager` member is a class with `invokeSyncStatusListeners` marked
56
+ // private, which conflicts with the test-only accessor. Kept as a standalone
57
+ // test shim shape.
58
+ type TestOfflineDb = {
59
+ addPendingTask: (task: {
60
+ channelId: string | undefined;
61
+ channelType: string;
62
+ messageId: string;
63
+ payload: unknown;
64
+ type: string;
65
+ }) => Promise<void>;
66
+ deletePendingTask: (params: { id: number }) => Promise<void>;
67
+ getPendingTasks: () => Promise<TestPendingTask[]>;
68
+ syncManager: TestSyncManager;
69
+ };
70
+ const getOfflineDb = (client: StreamChat): TestOfflineDb =>
71
+ client.offlineDb as unknown as TestOfflineDb;
72
+
31
73
  test('Workaround to allow exporting tests', () => expect(true).toBe(true));
32
74
 
33
75
  export const OptimisticUpdates = () => {
34
76
  describe('Optimistic Updates', () => {
35
- let chatClient;
77
+ let chatClient: StreamChat;
36
78
 
37
- const getRandomInt = (lower, upper) => Math.floor(lower + Math.random() * (upper - lower + 1));
79
+ const getRandomInt = (lower: number, upper: number) =>
80
+ Math.floor(lower + Math.random() * (upper - lower + 1));
38
81
  const createChannel = () => {
39
82
  const allUsers = Array(20).fill(1).map(generateUser);
40
- const allMessages = [];
41
- const allMembers = [];
42
- const allReactions = [];
43
- const allReads = [];
83
+ const allMessages: LocalMessage[] = [];
84
+ const allMembers: ChannelMemberResponse[] = [];
85
+ const allReactions: ReactionResponse[] = [];
86
+ const allReads: Array<{
87
+ last_read: Date;
88
+ unread_messages: number;
89
+ user: ReturnType<typeof generateUser> | undefined;
90
+ }> = [];
44
91
  const id = uuidv4();
45
92
  const cid = `messaging:${id}`;
46
93
  const begin = getRandomInt(0, allUsers.length - 2); // begin shouldn't be the end of users.length
47
94
  const end = getRandomInt(begin + 1, allUsers.length - 1);
48
95
  const usersForMembers = allUsers.slice(begin, end);
49
- const members = usersForMembers.map((user) =>
96
+ const members = usersForMembers.map((user: UserResponse) =>
50
97
  generateMember({
51
- cid,
52
98
  user,
53
99
  }),
54
100
  );
@@ -62,7 +108,7 @@ export const OptimisticUpdates = () => {
62
108
  const end = getRandomInt(begin + 1, usersForMembers.length - 1);
63
109
 
64
110
  const usersForReactions = usersForMembers.slice(begin, end);
65
- const reactions = usersForReactions.map((user) =>
111
+ const reactions = usersForReactions.map((user: UserResponse) =>
66
112
  generateReaction({
67
113
  message_id: id,
68
114
  user,
@@ -74,11 +120,11 @@ export const OptimisticUpdates = () => {
74
120
  id,
75
121
  latest_reactions: reactions,
76
122
  user,
77
- userId: user.id,
123
+ user_id: user.id,
78
124
  });
79
125
  });
80
126
 
81
- const reads = members.map((member) => ({
127
+ const reads = members.map((member: ChannelMemberResponse) => ({
82
128
  last_read: new Date(new Date().setDate(new Date().getDate() - getRandomInt(0, 20))),
83
129
  unread_messages: getRandomInt(0, messages.length),
84
130
  user: member.user,
@@ -88,12 +134,17 @@ export const OptimisticUpdates = () => {
88
134
  allMembers.push(...members);
89
135
  allReads.push(...reads);
90
136
 
137
+ // `cid` is not part of `GeneratedChannelResponseCustomValues`, but tests rely on reading it
138
+ // back as a top-level field on the generated channel response — keep the runtime shape and
139
+ // widen the input type.
91
140
  return generateChannelResponse({
92
141
  cid,
93
142
  id,
94
143
  members,
95
144
  messages,
96
- });
145
+ } as unknown as Parameters<typeof generateChannelResponse>[0]) as ReturnType<
146
+ typeof generateChannelResponse
147
+ > & { cid: string; id: string };
97
148
  };
98
149
 
99
150
  beforeEach(async () => {
@@ -112,10 +163,13 @@ export const OptimisticUpdates = () => {
112
163
  await SqliteClient.initializeDatabase();
113
164
  await BetterSqlite.openDB();
114
165
  await upsertChannels({
115
- channels: [channelResponse],
166
+ channels: [channelResponse] as unknown as ChannelAPIResponse[],
116
167
  isLatestMessagesSet: true,
117
168
  });
118
- chatClient.wsConnection = { isHealthy: true, onlineStatusChanged: jest.fn() };
169
+ chatClient.wsConnection = {
170
+ isHealthy: true,
171
+ onlineStatusChanged: jest.fn(),
172
+ } as unknown as StreamChat['wsConnection'];
119
173
  });
120
174
 
121
175
  afterEach(() => {
@@ -125,11 +179,19 @@ export const OptimisticUpdates = () => {
125
179
  jest.clearAllMocks();
126
180
  });
127
181
 
128
- let channel;
182
+ let channel: ChannelLLC;
129
183
  // This component is used for performing effects in a component that consumes ChannelContext,
130
184
  // i.e. making use of the callbacks & values provided by the Channel component.
131
185
  // the effect is called every time channelContext changes
132
- const CallbackEffectWithContext = ({ callback, children, context }) => {
186
+ const CallbackEffectWithContext = <T,>({
187
+ callback,
188
+ children,
189
+ context,
190
+ }: {
191
+ callback: (ctx: T) => Promise<void> | void;
192
+ children: React.ReactNode;
193
+ context: React.Context<T>;
194
+ }) => {
133
195
  const ctx = useContext(context);
134
196
  const [ready, setReady] = useState(false);
135
197
  useEffect(() => {
@@ -145,7 +207,7 @@ export const OptimisticUpdates = () => {
145
207
  return null;
146
208
  }
147
209
 
148
- return children;
210
+ return <>{children}</>;
149
211
  };
150
212
 
151
213
  describe('delete message', () => {
@@ -175,7 +237,7 @@ export const OptimisticUpdates = () => {
175
237
  await waitFor(async () => {
176
238
  const pendingTasksRows = await BetterSqlite.selectFromTable('pendingTasks');
177
239
  const pendingTaskType = pendingTasksRows?.[0]?.type;
178
- const pendingTaskPayload = JSON.parse(pendingTasksRows?.[0]?.payload || '{}');
240
+ const pendingTaskPayload = JSON.parse((pendingTasksRows?.[0]?.payload as string) || '{}');
179
241
  expect(pendingTaskType).toBe('delete-message');
180
242
  expect(pendingTaskPayload[0]).toBe(message.id);
181
243
  });
@@ -235,7 +297,7 @@ export const OptimisticUpdates = () => {
235
297
  await waitFor(async () => {
236
298
  const pendingTasksRows = await BetterSqlite.selectFromTable('pendingTasks');
237
299
  const pendingTaskType = pendingTasksRows?.[0]?.type;
238
- const pendingTaskPayload = JSON.parse(pendingTasksRows?.[0]?.payload || '{}');
300
+ const pendingTaskPayload = JSON.parse((pendingTasksRows?.[0]?.payload as string) || '{}');
239
301
  expect(pendingTaskType).toBe('send-reaction');
240
302
  expect(pendingTaskPayload[0]).toBe(targetMessage.id);
241
303
  });
@@ -276,7 +338,7 @@ export const OptimisticUpdates = () => {
276
338
  localMessage: newMessage,
277
339
  message: newMessage,
278
340
  options: {},
279
- });
341
+ } as unknown as Awaited<ReturnType<typeof channel.messageComposer.compose>>);
280
342
 
281
343
  render(
282
344
  <Chat client={chatClient} enableOfflineSupport>
@@ -301,7 +363,7 @@ export const OptimisticUpdates = () => {
301
363
  await waitFor(async () => {
302
364
  const pendingTasksRows = await BetterSqlite.selectFromTable('pendingTasks');
303
365
  const pendingTaskType = pendingTasksRows?.[0]?.type;
304
- const pendingTaskPayload = JSON.parse(pendingTasksRows?.[0]?.payload || '{}');
366
+ const pendingTaskPayload = JSON.parse((pendingTasksRows?.[0]?.payload as string) || '{}');
305
367
  expect(pendingTaskType).toBe('send-message');
306
368
  expect(pendingTaskPayload[0].id).toEqual(newMessage.id);
307
369
  expect(pendingTaskPayload[0].text).toEqual(newMessage.text);
@@ -319,7 +381,7 @@ export const OptimisticUpdates = () => {
319
381
  <CallbackEffectWithContext
320
382
  callback={async ({ sendMessage }) => {
321
383
  useMockedApis(chatClient, [sendMessageApi(newMessage)]);
322
- await sendMessage({ customMessageData: newMessage });
384
+ await sendMessage();
323
385
  }}
324
386
  context={MessageInputContext}
325
387
  >
@@ -365,7 +427,7 @@ export const OptimisticUpdates = () => {
365
427
  await waitFor(async () => {
366
428
  const pendingTasksRows = await BetterSqlite.selectFromTable('pendingTasks');
367
429
  const pendingTaskType = pendingTasksRows?.[0]?.type;
368
- const pendingTaskPayload = JSON.parse(pendingTasksRows?.[0]?.payload || '{}');
430
+ const pendingTaskPayload = JSON.parse((pendingTasksRows?.[0]?.payload as string) || '{}');
369
431
  expect(pendingTaskType).toBe('delete-reaction');
370
432
  expect(pendingTaskPayload[0]).toBe(targetMessage.id);
371
433
  });
@@ -408,22 +470,24 @@ export const OptimisticUpdates = () => {
408
470
  <Chat client={chatClient} enableOfflineSupport>
409
471
  <Channel
410
472
  channel={channel}
411
- doUpdateMessageRequest={async (_channelId, localMessage, options) => {
412
- await chatClient.offlineDb.addPendingTask({
413
- channelId: channel.id,
414
- channelType: channel.type,
415
- messageId: message.id,
416
- payload: [localMessage, undefined, options],
417
- type: 'update-message',
418
- });
419
- return {
420
- message: {
421
- ...localMessage,
422
- message_text_updated_at: new Date(),
423
- updated_at: new Date(),
424
- },
425
- };
426
- }}
473
+ doUpdateMessageRequest={
474
+ (async (_channelId: string, localMessage: LocalMessage, options: unknown) => {
475
+ await getOfflineDb(chatClient).addPendingTask({
476
+ channelId: channel.id,
477
+ channelType: channel.type,
478
+ messageId: message.id,
479
+ payload: [localMessage, undefined, options],
480
+ type: 'update-message',
481
+ });
482
+ return {
483
+ message: {
484
+ ...localMessage,
485
+ message_text_updated_at: new Date(),
486
+ updated_at: new Date(),
487
+ },
488
+ };
489
+ }) as unknown as React.ComponentProps<typeof Channel>['doUpdateMessageRequest']
490
+ }
427
491
  >
428
492
  <CallbackEffectWithContext
429
493
  callback={async ({ editMessage }) => {
@@ -452,12 +516,12 @@ export const OptimisticUpdates = () => {
452
516
  const dbMessages = await BetterSqlite.selectFromTable('messages');
453
517
  const dbMessage = dbMessages.find((row) => row.id === message.id);
454
518
 
455
- expect(updatedMessage.text).toBe(editedText);
456
- expect(updatedMessage.message_text_updated_at).toBeTruthy();
519
+ expect(updatedMessage!.text).toBe(editedText);
520
+ expect(updatedMessage!.message_text_updated_at).toBeTruthy();
457
521
  expect(pendingTasksRows).toHaveLength(1);
458
522
  expect(pendingTasksRows[0].type).toBe('update-message');
459
- expect(dbMessage.text).toBe(editedText);
460
- expect(dbMessage.messageTextUpdatedAt).toBeTruthy();
523
+ expect(dbMessage!.text).toBe(editedText);
524
+ expect(dbMessage!.messageTextUpdatedAt).toBeTruthy();
461
525
  });
462
526
  });
463
527
 
@@ -504,9 +568,9 @@ export const OptimisticUpdates = () => {
504
568
  const dbMessages = await BetterSqlite.selectFromTable('messages');
505
569
  const dbMessage = dbMessages.find((row) => row.id === message.id);
506
570
 
507
- expect(updatedMessage.text).toBe(editedText);
571
+ expect(updatedMessage!.text).toBe(editedText);
508
572
  expect(pendingTasksRows).toHaveLength(0);
509
- expect(dbMessage.text).toBe(editedText);
573
+ expect(dbMessage!.text).toBe(editedText);
510
574
  });
511
575
  });
512
576
 
@@ -518,16 +582,18 @@ export const OptimisticUpdates = () => {
518
582
  <Chat client={chatClient} enableOfflineSupport>
519
583
  <Channel
520
584
  channel={channel}
521
- doUpdateMessageRequest={() => {
522
- const optimisticMessage = channel.state.findMessage(message.id);
523
- optimisticStateSpy(optimisticMessage);
524
-
525
- return {
526
- message: {
527
- ...optimisticMessage,
528
- },
529
- };
530
- }}
585
+ doUpdateMessageRequest={
586
+ (() => {
587
+ const optimisticMessage = channel.state.findMessage(message.id);
588
+ optimisticStateSpy(optimisticMessage);
589
+
590
+ return {
591
+ message: {
592
+ ...optimisticMessage,
593
+ },
594
+ };
595
+ }) as unknown as React.ComponentProps<typeof Channel>['doUpdateMessageRequest']
596
+ }
531
597
  >
532
598
  <CallbackEffectWithContext
533
599
  callback={async ({ editMessage }) => {
@@ -611,12 +677,12 @@ export const OptimisticUpdates = () => {
611
677
  const pendingTasksRows = await BetterSqlite.selectFromTable('pendingTasks');
612
678
  const dbMessages = await BetterSqlite.selectFromTable('messages');
613
679
  const dbMessage = dbMessages.find((row) => row.id === message.id);
614
- const storedAttachments = JSON.parse(dbMessage.attachments);
680
+ const storedAttachments = JSON.parse(dbMessage!.attachments as string);
615
681
 
616
- expect(updatedMessage.text).toBe(editedText);
617
- expect(updatedMessage.attachments[0].asset_url).toBe(localUri);
682
+ expect(updatedMessage!.text).toBe(editedText);
683
+ expect(updatedMessage!.attachments![0].asset_url).toBe(localUri);
618
684
  expect(pendingTasksRows).toHaveLength(0);
619
- expect(dbMessage.text).toBe(editedText);
685
+ expect(dbMessage!.text).toBe(editedText);
620
686
  expect(storedAttachments[0].asset_url).toBe(localUri);
621
687
  });
622
688
  });
@@ -681,7 +747,7 @@ export const OptimisticUpdates = () => {
681
747
  localMessage: newMessage,
682
748
  message: newMessage,
683
749
  options: {},
684
- });
750
+ } as unknown as Awaited<ReturnType<typeof channel.messageComposer.compose>>);
685
751
 
686
752
  // initialValue is needed as a prop to trick the message input ctx into thinking
687
753
  // we are sending a message.
@@ -726,20 +792,20 @@ export const OptimisticUpdates = () => {
726
792
  status: MessageStatusTypes.SENDING,
727
793
  text: 'offline resend',
728
794
  user: chatClient.user,
729
- userId: chatClient.userID,
795
+ user_id: chatClient.userID,
730
796
  });
731
797
  const serverMessage = generateMessage({
732
798
  id: localMessage.id,
733
799
  text: localMessage.text,
734
800
  user: chatClient.user,
735
- userId: chatClient.userID,
801
+ user_id: chatClient.userID,
736
802
  });
737
803
 
738
- jest.spyOn(channel.messageComposer, 'compose').mockResolvedValue({
739
- localMessage,
740
- message: localMessage,
741
- options: {},
742
- });
804
+ jest
805
+ .spyOn(channel.messageComposer, 'compose')
806
+ .mockResolvedValue({ localMessage, message: localMessage } as unknown as Awaited<
807
+ ReturnType<typeof channel.messageComposer.compose>
808
+ >);
743
809
 
744
810
  render(
745
811
  <Chat client={chatClient} enableOfflineSupport>
@@ -758,23 +824,25 @@ export const OptimisticUpdates = () => {
758
824
  );
759
825
  await waitFor(() => expect(screen.getByTestId('children')).toBeTruthy());
760
826
 
761
- let pendingTask;
827
+ let pendingTask: TestPendingTask | undefined;
762
828
  await waitFor(async () => {
763
- const pendingTasks = await chatClient.offlineDb.getPendingTasks();
829
+ const pendingTasks = await getOfflineDb(chatClient).getPendingTasks();
764
830
  expect(pendingTasks).toHaveLength(1);
765
831
  pendingTask = pendingTasks[0];
766
832
  });
767
833
 
768
834
  expect(channel.state.messages.some((message) => message.id === localMessage.id)).toBe(true);
769
835
 
770
- jest.spyOn(channel, 'watch').mockResolvedValue({});
836
+ jest
837
+ .spyOn(channel, 'watch')
838
+ .mockResolvedValue({} as Awaited<ReturnType<typeof channel.watch>>);
771
839
 
772
840
  channel.state.removeMessage(localMessage);
773
841
  channel.state.addMessageSorted(serverMessage, true);
774
- await chatClient.offlineDb.deletePendingTask({ id: pendingTask.id });
842
+ await getOfflineDb(chatClient).deletePendingTask({ id: pendingTask!.id });
775
843
 
776
844
  await act(async () => {
777
- await chatClient.offlineDb.syncManager.invokeSyncStatusListeners(true);
845
+ await getOfflineDb(chatClient).syncManager.invokeSyncStatusListeners(true);
778
846
  });
779
847
 
780
848
  await waitFor(() => {
@@ -793,14 +861,14 @@ export const OptimisticUpdates = () => {
793
861
  status: MessageStatusTypes.SENDING,
794
862
  text: 'offline resend unresolved',
795
863
  user: chatClient.user,
796
- userId: chatClient.userID,
864
+ user_id: chatClient.userID,
797
865
  });
798
866
 
799
- jest.spyOn(channel.messageComposer, 'compose').mockResolvedValue({
800
- localMessage,
801
- message: localMessage,
802
- options: {},
803
- });
867
+ jest
868
+ .spyOn(channel.messageComposer, 'compose')
869
+ .mockResolvedValue({ localMessage, message: localMessage } as unknown as Awaited<
870
+ ReturnType<typeof channel.messageComposer.compose>
871
+ >);
804
872
 
805
873
  render(
806
874
  <Chat client={chatClient} enableOfflineSupport>
@@ -819,20 +887,22 @@ export const OptimisticUpdates = () => {
819
887
  );
820
888
  await waitFor(() => expect(screen.getByTestId('children')).toBeTruthy());
821
889
 
822
- let pendingTask;
890
+ let pendingTask: TestPendingTask | undefined;
823
891
  await waitFor(async () => {
824
- const pendingTasks = await chatClient.offlineDb.getPendingTasks();
892
+ const pendingTasks = await getOfflineDb(chatClient).getPendingTasks();
825
893
  expect(pendingTasks).toHaveLength(1);
826
894
  pendingTask = pendingTasks[0];
827
895
  });
828
896
 
829
- jest.spyOn(channel, 'watch').mockResolvedValue({});
897
+ jest
898
+ .spyOn(channel, 'watch')
899
+ .mockResolvedValue({} as Awaited<ReturnType<typeof channel.watch>>);
830
900
 
831
901
  channel.state.removeMessage(localMessage);
832
- await chatClient.offlineDb.deletePendingTask({ id: pendingTask.id });
902
+ await getOfflineDb(chatClient).deletePendingTask({ id: pendingTask!.id });
833
903
 
834
904
  await act(async () => {
835
- await chatClient.offlineDb.syncManager.invokeSyncStatusListeners(true);
905
+ await getOfflineDb(chatClient).syncManager.invokeSyncStatusListeners(true);
836
906
  });
837
907
 
838
908
  await waitFor(() => {
@@ -1,9 +1,11 @@
1
- import React from 'react';
1
+ import React, { ComponentProps } from 'react';
2
2
 
3
3
  import { render, waitFor } from '@testing-library/react-native';
4
4
  import { v4 as uuidv4 } from 'uuid';
5
5
 
6
+ import type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';
6
7
  import { MessageProvider } from '../../../contexts/messageContext/MessageContext';
8
+ import type { MessagesContextValue } from '../../../contexts/messagesContext/MessagesContext';
7
9
  import { MessagesProvider } from '../../../contexts/messagesContext/MessagesContext';
8
10
  import { ThemeProvider } from '../../../contexts/themeContext/ThemeContext';
9
11
  import {
@@ -24,18 +26,20 @@ jest.mock('../../../native.ts', () => ({
24
26
  isSoundPackageAvailable: jest.fn(() => false),
25
27
  }));
26
28
 
27
- const getAttachmentComponent = (props) => {
29
+ const getAttachmentComponent = (props: ComponentProps<typeof Attachment>) => {
28
30
  const message = generateMessage();
29
31
  return (
30
32
  <ThemeProvider>
31
33
  <MessagesProvider
32
- value={{
33
- ImageLoadingFailedIndicator,
34
- ImageLoadingIndicator,
35
- FilePreview: FilePreviewDefault,
36
- }}
34
+ value={
35
+ {
36
+ ImageLoadingFailedIndicator,
37
+ ImageLoadingIndicator,
38
+ FilePreview: FilePreviewDefault,
39
+ } as unknown as MessagesContextValue
40
+ }
37
41
  >
38
- <MessageProvider value={{ message }}>
42
+ <MessageProvider value={{ message } as unknown as MessageContextValue}>
39
43
  <Attachment {...props} />
40
44
  </MessageProvider>
41
45
  </MessagesProvider>
@@ -1,6 +1,7 @@
1
- import React from 'react';
1
+ import React, { ComponentProps } from 'react';
2
2
 
3
3
  import { fireEvent, render, screen, waitFor } from '@testing-library/react-native';
4
+ import type { Attachment, ChannelResponse } from 'stream-chat';
4
5
 
5
6
  import { OverlayProvider } from '../../../contexts/overlayContext/OverlayProvider';
6
7
 
@@ -31,7 +32,10 @@ describe('Gallery', () => {
31
32
 
32
33
  const user1 = generateUser();
33
34
 
34
- const getComponent = async (attachments = [], channelProps = {}) => {
35
+ const getComponent = async (
36
+ attachments: Attachment[] = [],
37
+ channelProps: Partial<ComponentProps<typeof Channel>> = {},
38
+ ) => {
35
39
  const chatClient = await getTestClientWithUser({ id: 'testID' });
36
40
 
37
41
  const mockedChannel = generateChannelResponse({
@@ -39,7 +43,10 @@ describe('Gallery', () => {
39
43
  messages: [generateMessage({ attachments, user: user1 })],
40
44
  });
41
45
  useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
42
- const channel = chatClient.channel('messaging', mockedChannel.id);
46
+ const channel = chatClient.channel(
47
+ 'messaging',
48
+ (mockedChannel.channel as unknown as ChannelResponse).id,
49
+ );
43
50
  await channel.watch();
44
51
 
45
52
  return (
@@ -1,4 +1,5 @@
1
- import React from 'react';
1
+ import React, { ComponentProps } from 'react';
2
+ import type { Image, ImageStyle, StyleProp } from 'react-native';
2
3
 
3
4
  import {
4
5
  act,
@@ -9,8 +10,11 @@ import {
9
10
  userEvent,
10
11
  waitFor,
11
12
  } from '@testing-library/react-native';
13
+ import type { Channel as ChannelType, ChannelResponse, StreamChat } from 'stream-chat';
12
14
 
15
+ import type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';
13
16
  import { MessageProvider } from '../../../contexts/messageContext/MessageContext';
17
+ import type { MessagesContextValue } from '../../../contexts/messagesContext/MessagesContext';
14
18
  import { MessagesProvider } from '../../../contexts/messagesContext/MessagesContext';
15
19
  import { OverlayProvider } from '../../../contexts/overlayContext/OverlayProvider';
16
20
 
@@ -38,21 +42,34 @@ const streami18n = new Streami18n({
38
42
  describe('Giphy', () => {
39
43
  const lightTheme = mergeThemes({ scheme: 'light' });
40
44
 
41
- const getAttachmentComponent = (props, messageContextValue = {}) => {
45
+ const getAttachmentComponent = (
46
+ props: ComponentProps<typeof Giphy>,
47
+ messageContextValue: Partial<MessageContextValue> = {},
48
+ ) => {
42
49
  const message = generateMessage();
43
50
  return (
44
51
  <ThemeProvider>
45
- <MessagesProvider value={{ ImageLoadingFailedIndicator, ImageLoadingIndicator }}>
46
- <MessageProvider value={{ message, ...messageContextValue }}>
52
+ <MessagesProvider
53
+ value={
54
+ {
55
+ ImageLoadingFailedIndicator,
56
+ ImageLoadingIndicator,
57
+ } as unknown as MessagesContextValue
58
+ }
59
+ >
60
+ <MessageProvider
61
+ value={{ message, ...messageContextValue } as unknown as MessageContextValue}
62
+ >
47
63
  <Giphy {...props} />
48
64
  </MessageProvider>
49
65
  </MessagesProvider>
50
66
  </ThemeProvider>
51
67
  );
52
68
  };
53
- let chatClient;
54
- let channel;
55
- let attachment;
69
+ let chatClient: StreamChat;
70
+ let channel: ChannelType;
71
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
72
+ let attachment: any;
56
73
 
57
74
  const actions = [
58
75
  { name: 'image_action', text: 'Send', value: 'send' },
@@ -91,7 +108,10 @@ describe('Giphy', () => {
91
108
 
92
109
  chatClient = await getTestClientWithUser({ id: 'testID' });
93
110
  useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
94
- channel = chatClient.channel('messaging', mockedChannel.id);
111
+ channel = chatClient.channel(
112
+ 'messaging',
113
+ (mockedChannel.channel as unknown as ChannelResponse).id,
114
+ );
95
115
  await channel.watch();
96
116
  };
97
117
 
@@ -176,14 +196,17 @@ describe('Giphy', () => {
176
196
  attachment.giphy = giphy;
177
197
  render(getAttachmentComponent({ attachment, giphyVersion: 'fixed_height' }));
178
198
  await waitFor(() => {
179
- const checkImageProps = (imageProps, specificSizedGiphyData) => {
180
- let imageStyle = imageProps.style;
199
+ const checkImageProps = (
200
+ imageProps: ComponentProps<typeof Image>,
201
+ specificSizedGiphyData: { height: string; url: string; width: string },
202
+ ) => {
203
+ let imageStyle = imageProps.style as StyleProp<ImageStyle>;
181
204
  if (Array.isArray(imageStyle)) {
182
205
  imageStyle = Object.assign({}, ...imageStyle);
183
206
  }
184
- expect(imageStyle.height).toBe(parseFloat(specificSizedGiphyData.height));
185
- expect(imageStyle.width).toBe(parseFloat(specificSizedGiphyData.width));
186
- expect(imageProps.source.uri).toBe(specificSizedGiphyData.url);
207
+ expect((imageStyle as ImageStyle).height).toBe(parseFloat(specificSizedGiphyData.height));
208
+ expect((imageStyle as ImageStyle).width).toBe(parseFloat(specificSizedGiphyData.width));
209
+ expect((imageProps.source as { uri: string }).uri).toBe(specificSizedGiphyData.url);
187
210
  };
188
211
  checkImageProps(
189
212
  screen.getByLabelText('Giphy Attachment Image').props,
@@ -192,14 +215,17 @@ describe('Giphy', () => {
192
215
  });
193
216
  render(getAttachmentComponent({ attachment, giphyVersion: 'original' }));
194
217
  await waitFor(() => {
195
- const checkImageProps = (imageProps, specificSizedGiphyData) => {
196
- let imageStyle = imageProps.style;
218
+ const checkImageProps = (
219
+ imageProps: ComponentProps<typeof Image>,
220
+ specificSizedGiphyData: { height: string; url: string; width: string },
221
+ ) => {
222
+ let imageStyle = imageProps.style as StyleProp<ImageStyle>;
197
223
  if (Array.isArray(imageStyle)) {
198
224
  imageStyle = Object.assign({}, ...imageStyle);
199
225
  }
200
- expect(imageStyle.height).toBe(parseFloat(specificSizedGiphyData.height));
201
- expect(imageStyle.width).toBe(parseFloat(specificSizedGiphyData.width));
202
- expect(imageProps.source.uri).toBe(specificSizedGiphyData.url);
226
+ expect((imageStyle as ImageStyle).height).toBe(parseFloat(specificSizedGiphyData.height));
227
+ expect((imageStyle as ImageStyle).width).toBe(parseFloat(specificSizedGiphyData.width));
228
+ expect((imageProps.source as { uri: string }).uri).toBe(specificSizedGiphyData.url);
203
229
  };
204
230
  checkImageProps(
205
231
  screen.getByLabelText('Giphy Attachment Image').props,
@@ -321,7 +347,10 @@ describe('Giphy', () => {
321
347
 
322
348
  const chatClient = await getTestClientWithUser({ id: 'testID' });
323
349
  useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
324
- const channel = chatClient.channel('messaging', mockedChannel.id);
350
+ const channel = chatClient.channel(
351
+ 'messaging',
352
+ (mockedChannel.channel as unknown as ChannelResponse).id,
353
+ );
325
354
  await channel.watch();
326
355
 
327
356
  render(