stream-chat-react-native-core 5.5.1 → 5.6.0-beta.1

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 (321) hide show
  1. package/lib/commonjs/components/Attachment/Gallery.js +21 -16
  2. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  3. package/lib/commonjs/components/Attachment/GalleryImage.js +19 -3
  4. package/lib/commonjs/components/Attachment/GalleryImage.js.map +1 -1
  5. package/lib/commonjs/components/Channel/Channel.js +535 -149
  6. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  7. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +6 -0
  8. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  9. package/lib/commonjs/components/ChannelList/ChannelList.js +4 -15
  10. package/lib/commonjs/components/ChannelList/ChannelList.js.map +1 -1
  11. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +112 -38
  12. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  13. package/lib/commonjs/components/Chat/Chat.js +16 -20
  14. package/lib/commonjs/components/Chat/Chat.js.map +1 -1
  15. package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js +2 -4
  16. package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js.map +1 -1
  17. package/lib/commonjs/components/Message/Message.js +21 -10
  18. package/lib/commonjs/components/Message/Message.js.map +1 -1
  19. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js +14 -12
  20. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  21. package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js +9 -30
  22. package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js.map +1 -1
  23. package/lib/commonjs/components/Message/hooks/useMessageActions.js +21 -19
  24. package/lib/commonjs/components/Message/hooks/useMessageActions.js.map +1 -1
  25. package/lib/commonjs/components/MessageInput/FileUploadPreview.js +28 -21
  26. package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
  27. package/lib/commonjs/components/MessageInput/ImageUploadPreview.js +23 -16
  28. package/lib/commonjs/components/MessageInput/ImageUploadPreview.js.map +1 -1
  29. package/lib/commonjs/components/MessageInput/MessageInput.js +39 -27
  30. package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
  31. package/lib/commonjs/components/MessageInput/SendButton.js +1 -1
  32. package/lib/commonjs/components/MessageInput/SendButton.js.map +1 -1
  33. package/lib/commonjs/components/index.js +1 -14
  34. package/lib/commonjs/components/index.js.map +1 -1
  35. package/lib/commonjs/contexts/chatContext/ChatContext.js +2 -2
  36. package/lib/commonjs/contexts/chatContext/ChatContext.js.map +1 -1
  37. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +134 -86
  38. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  39. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js +1 -0
  40. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  41. package/lib/commonjs/contexts/messagesContext/MessagesContext.js +2 -2
  42. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  43. package/lib/commonjs/hooks/useTranslatedMessage.js +1 -1
  44. package/lib/commonjs/hooks/useTranslatedMessage.js.map +1 -1
  45. package/lib/commonjs/mock-builders/DB/mock.js +2 -2
  46. package/lib/commonjs/mock-builders/DB/mock.js.map +1 -1
  47. package/lib/commonjs/mock-builders/api/deleteMessage.js +20 -0
  48. package/lib/commonjs/mock-builders/api/deleteMessage.js.map +1 -0
  49. package/lib/commonjs/mock-builders/api/deleteReaction.js +21 -0
  50. package/lib/commonjs/mock-builders/api/deleteReaction.js.map +1 -0
  51. package/lib/commonjs/mock-builders/api/sendReaction.js +21 -0
  52. package/lib/commonjs/mock-builders/api/sendReaction.js.map +1 -0
  53. package/lib/commonjs/mock-builders/event/connectionChanged.js +2 -0
  54. package/lib/commonjs/mock-builders/event/connectionChanged.js.map +1 -1
  55. package/lib/commonjs/store/QuickSqliteClient.js +40 -51
  56. package/lib/commonjs/store/QuickSqliteClient.js.map +1 -1
  57. package/lib/commonjs/store/apis/addPendingTask.js +37 -0
  58. package/lib/commonjs/store/apis/addPendingTask.js.map +1 -0
  59. package/lib/commonjs/store/apis/deleteMessage.js +26 -0
  60. package/lib/commonjs/store/apis/deleteMessage.js.map +1 -0
  61. package/lib/commonjs/store/apis/deletePendingTask.js +22 -0
  62. package/lib/commonjs/store/apis/deletePendingTask.js.map +1 -0
  63. package/lib/commonjs/store/apis/deleteReaction.js +30 -0
  64. package/lib/commonjs/store/apis/deleteReaction.js.map +1 -0
  65. package/lib/commonjs/store/apis/getChannelMessages.js +3 -3
  66. package/lib/commonjs/store/apis/getChannelMessages.js.map +1 -1
  67. package/lib/commonjs/store/apis/getChannels.js +1 -1
  68. package/lib/commonjs/store/apis/getChannels.js.map +1 -1
  69. package/lib/commonjs/store/apis/getPendingTasks.js +26 -0
  70. package/lib/commonjs/store/apis/getPendingTasks.js.map +1 -0
  71. package/lib/commonjs/store/apis/index.js +13 -0
  72. package/lib/commonjs/store/apis/index.js.map +1 -1
  73. package/lib/commonjs/store/apis/insertReaction.js +28 -0
  74. package/lib/commonjs/store/apis/insertReaction.js.map +1 -0
  75. package/lib/commonjs/store/apis/updateMessage.js.map +1 -1
  76. package/lib/commonjs/store/apis/updateReaction.js.map +1 -1
  77. package/lib/commonjs/store/mappers/mapDateTimeToStorable.js.map +1 -1
  78. package/lib/commonjs/store/mappers/mapMessageToStorable.js +3 -1
  79. package/lib/commonjs/store/mappers/mapMessageToStorable.js.map +1 -1
  80. package/lib/commonjs/store/mappers/mapStorableToTask.js +23 -0
  81. package/lib/commonjs/store/mappers/mapStorableToTask.js.map +1 -0
  82. package/lib/commonjs/store/mappers/mapTaskToStorable.js +18 -0
  83. package/lib/commonjs/store/mappers/mapTaskToStorable.js.map +1 -0
  84. package/lib/commonjs/store/schema.js +11 -0
  85. package/lib/commonjs/store/schema.js.map +1 -1
  86. package/lib/commonjs/store/sqlite-utils/appendOrderByClause.js +24 -0
  87. package/lib/commonjs/store/sqlite-utils/appendOrderByClause.js.map +1 -0
  88. package/lib/commonjs/store/sqlite-utils/createCreateTableQuery.js +1 -1
  89. package/lib/commonjs/store/sqlite-utils/createCreateTableQuery.js.map +1 -1
  90. package/lib/commonjs/store/sqlite-utils/createSelectQuery.js +8 -1
  91. package/lib/commonjs/store/sqlite-utils/createSelectQuery.js.map +1 -1
  92. package/lib/commonjs/store/sqlite-utils/createUpdateQuery.js +2 -2
  93. package/lib/commonjs/store/sqlite-utils/createUpdateQuery.js.map +1 -1
  94. package/lib/commonjs/store/sqlite-utils/createUpsertQuery.js +1 -1
  95. package/lib/commonjs/store/sqlite-utils/createUpsertQuery.js.map +1 -1
  96. package/lib/commonjs/utils/DBSyncManager.js +436 -0
  97. package/lib/commonjs/utils/DBSyncManager.js.map +1 -0
  98. package/lib/commonjs/utils/addReactionToLocalState.js +92 -0
  99. package/lib/commonjs/utils/addReactionToLocalState.js.map +1 -0
  100. package/lib/commonjs/utils/removeReactionFromLocalState.js +39 -0
  101. package/lib/commonjs/utils/removeReactionFromLocalState.js.map +1 -0
  102. package/lib/{module/components/Message → commonjs}/utils/removeReservedFields.js +1 -1
  103. package/lib/commonjs/utils/removeReservedFields.js.map +1 -0
  104. package/lib/commonjs/utils/utils.js +9 -3
  105. package/lib/commonjs/utils/utils.js.map +1 -1
  106. package/lib/commonjs/version.json +1 -1
  107. package/lib/module/components/Attachment/Gallery.js +21 -16
  108. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  109. package/lib/module/components/Attachment/GalleryImage.js +19 -3
  110. package/lib/module/components/Attachment/GalleryImage.js.map +1 -1
  111. package/lib/module/components/Channel/Channel.js +535 -149
  112. package/lib/module/components/Channel/Channel.js.map +1 -1
  113. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +6 -0
  114. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  115. package/lib/module/components/ChannelList/ChannelList.js +4 -15
  116. package/lib/module/components/ChannelList/ChannelList.js.map +1 -1
  117. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +112 -38
  118. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  119. package/lib/module/components/Chat/Chat.js +16 -20
  120. package/lib/module/components/Chat/Chat.js.map +1 -1
  121. package/lib/module/components/Chat/hooks/useCreateChatContext.js +2 -4
  122. package/lib/module/components/Chat/hooks/useCreateChatContext.js.map +1 -1
  123. package/lib/module/components/Message/Message.js +21 -10
  124. package/lib/module/components/Message/Message.js.map +1 -1
  125. package/lib/module/components/Message/MessageSimple/MessageFooter.js +14 -12
  126. package/lib/module/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  127. package/lib/module/components/Message/hooks/useMessageActionHandlers.js +9 -30
  128. package/lib/module/components/Message/hooks/useMessageActionHandlers.js.map +1 -1
  129. package/lib/module/components/Message/hooks/useMessageActions.js +21 -19
  130. package/lib/module/components/Message/hooks/useMessageActions.js.map +1 -1
  131. package/lib/module/components/MessageInput/FileUploadPreview.js +28 -21
  132. package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
  133. package/lib/module/components/MessageInput/ImageUploadPreview.js +23 -16
  134. package/lib/module/components/MessageInput/ImageUploadPreview.js.map +1 -1
  135. package/lib/module/components/MessageInput/MessageInput.js +39 -27
  136. package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
  137. package/lib/module/components/MessageInput/SendButton.js +1 -1
  138. package/lib/module/components/MessageInput/SendButton.js.map +1 -1
  139. package/lib/module/components/index.js +1 -14
  140. package/lib/module/components/index.js.map +1 -1
  141. package/lib/module/contexts/chatContext/ChatContext.js +2 -2
  142. package/lib/module/contexts/chatContext/ChatContext.js.map +1 -1
  143. package/lib/module/contexts/messageInputContext/MessageInputContext.js +134 -86
  144. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  145. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js +1 -0
  146. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  147. package/lib/module/contexts/messagesContext/MessagesContext.js +2 -2
  148. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  149. package/lib/module/hooks/useTranslatedMessage.js +1 -1
  150. package/lib/module/hooks/useTranslatedMessage.js.map +1 -1
  151. package/lib/module/mock-builders/DB/mock.js +2 -2
  152. package/lib/module/mock-builders/DB/mock.js.map +1 -1
  153. package/lib/module/mock-builders/api/deleteMessage.js +20 -0
  154. package/lib/module/mock-builders/api/deleteMessage.js.map +1 -0
  155. package/lib/module/mock-builders/api/deleteReaction.js +21 -0
  156. package/lib/module/mock-builders/api/deleteReaction.js.map +1 -0
  157. package/lib/module/mock-builders/api/sendReaction.js +21 -0
  158. package/lib/module/mock-builders/api/sendReaction.js.map +1 -0
  159. package/lib/module/mock-builders/event/connectionChanged.js +2 -0
  160. package/lib/module/mock-builders/event/connectionChanged.js.map +1 -1
  161. package/lib/module/store/QuickSqliteClient.js +40 -51
  162. package/lib/module/store/QuickSqliteClient.js.map +1 -1
  163. package/lib/module/store/apis/addPendingTask.js +37 -0
  164. package/lib/module/store/apis/addPendingTask.js.map +1 -0
  165. package/lib/module/store/apis/deleteMessage.js +26 -0
  166. package/lib/module/store/apis/deleteMessage.js.map +1 -0
  167. package/lib/module/store/apis/deletePendingTask.js +22 -0
  168. package/lib/module/store/apis/deletePendingTask.js.map +1 -0
  169. package/lib/module/store/apis/deleteReaction.js +30 -0
  170. package/lib/module/store/apis/deleteReaction.js.map +1 -0
  171. package/lib/module/store/apis/getChannelMessages.js +3 -3
  172. package/lib/module/store/apis/getChannelMessages.js.map +1 -1
  173. package/lib/module/store/apis/getChannels.js +1 -1
  174. package/lib/module/store/apis/getChannels.js.map +1 -1
  175. package/lib/module/store/apis/getPendingTasks.js +26 -0
  176. package/lib/module/store/apis/getPendingTasks.js.map +1 -0
  177. package/lib/module/store/apis/index.js +13 -0
  178. package/lib/module/store/apis/index.js.map +1 -1
  179. package/lib/module/store/apis/insertReaction.js +28 -0
  180. package/lib/module/store/apis/insertReaction.js.map +1 -0
  181. package/lib/module/store/apis/updateMessage.js.map +1 -1
  182. package/lib/module/store/apis/updateReaction.js.map +1 -1
  183. package/lib/module/store/mappers/mapDateTimeToStorable.js.map +1 -1
  184. package/lib/module/store/mappers/mapMessageToStorable.js +3 -1
  185. package/lib/module/store/mappers/mapMessageToStorable.js.map +1 -1
  186. package/lib/module/store/mappers/mapStorableToTask.js +23 -0
  187. package/lib/module/store/mappers/mapStorableToTask.js.map +1 -0
  188. package/lib/module/store/mappers/mapTaskToStorable.js +18 -0
  189. package/lib/module/store/mappers/mapTaskToStorable.js.map +1 -0
  190. package/lib/module/store/schema.js +11 -0
  191. package/lib/module/store/schema.js.map +1 -1
  192. package/lib/module/store/sqlite-utils/appendOrderByClause.js +24 -0
  193. package/lib/module/store/sqlite-utils/appendOrderByClause.js.map +1 -0
  194. package/lib/module/store/sqlite-utils/createCreateTableQuery.js +1 -1
  195. package/lib/module/store/sqlite-utils/createCreateTableQuery.js.map +1 -1
  196. package/lib/module/store/sqlite-utils/createSelectQuery.js +8 -1
  197. package/lib/module/store/sqlite-utils/createSelectQuery.js.map +1 -1
  198. package/lib/module/store/sqlite-utils/createUpdateQuery.js +2 -2
  199. package/lib/module/store/sqlite-utils/createUpdateQuery.js.map +1 -1
  200. package/lib/module/store/sqlite-utils/createUpsertQuery.js +1 -1
  201. package/lib/module/store/sqlite-utils/createUpsertQuery.js.map +1 -1
  202. package/lib/module/utils/DBSyncManager.js +436 -0
  203. package/lib/module/utils/DBSyncManager.js.map +1 -0
  204. package/lib/module/utils/addReactionToLocalState.js +92 -0
  205. package/lib/module/utils/addReactionToLocalState.js.map +1 -0
  206. package/lib/module/utils/removeReactionFromLocalState.js +39 -0
  207. package/lib/module/utils/removeReactionFromLocalState.js.map +1 -0
  208. package/lib/{commonjs/components/Message → module}/utils/removeReservedFields.js +1 -1
  209. package/lib/module/utils/removeReservedFields.js.map +1 -0
  210. package/lib/module/utils/utils.js +9 -3
  211. package/lib/module/utils/utils.js.map +1 -1
  212. package/lib/module/version.json +1 -1
  213. package/lib/typescript/components/Channel/Channel.d.ts +1 -1
  214. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
  215. package/lib/typescript/components/ChannelList/hooks/usePaginatedChannels.d.ts +2 -1
  216. package/lib/typescript/components/Chat/hooks/useCreateChatContext.d.ts +1 -1
  217. package/lib/typescript/components/Message/Message.d.ts +1 -1
  218. package/lib/typescript/components/Message/hooks/useMessageActionHandlers.d.ts +1 -1
  219. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts +1 -1
  220. package/lib/typescript/components/MessageInput/FileUploadPreview.d.ts +2 -1
  221. package/lib/typescript/components/MessageInput/ImageUploadPreview.d.ts +2 -1
  222. package/lib/typescript/components/MessageInput/MessageInput.d.ts +2 -1
  223. package/lib/typescript/components/index.d.ts +1 -2
  224. package/lib/typescript/contexts/chatContext/ChatContext.d.ts +1 -2
  225. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +1 -1
  226. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +3 -0
  227. package/lib/typescript/store/apis/addPendingTask.d.ts +2 -0
  228. package/lib/typescript/store/apis/deleteMessage.d.ts +4 -0
  229. package/lib/typescript/store/apis/deletePendingTask.d.ts +3 -0
  230. package/lib/typescript/store/apis/deleteReaction.d.ts +6 -0
  231. package/lib/typescript/store/apis/getChannelMessages.d.ts +1 -1
  232. package/lib/typescript/store/apis/getPendingTasks.d.ts +3 -0
  233. package/lib/typescript/store/apis/index.d.ts +1 -0
  234. package/lib/typescript/store/apis/insertReaction.d.ts +6 -0
  235. package/lib/typescript/store/apis/updateMessage.d.ts +2 -2
  236. package/lib/typescript/store/apis/updateReaction.d.ts +2 -2
  237. package/lib/typescript/store/mappers/mapDateTimeToStorable.d.ts +1 -1
  238. package/lib/typescript/store/mappers/mapMessageToStorable.d.ts +2 -2
  239. package/lib/typescript/store/mappers/mapStorableToTask.d.ts +2 -0
  240. package/lib/typescript/store/mappers/mapTaskToStorable.d.ts +26 -0
  241. package/lib/typescript/store/schema.d.ts +12 -1
  242. package/lib/typescript/store/sqlite-utils/appendOrderByClause.d.ts +3 -0
  243. package/lib/typescript/store/sqlite-utils/createSelectQuery.d.ts +1 -1
  244. package/lib/typescript/store/types.d.ts +21 -0
  245. package/lib/typescript/types/types.d.ts +3 -1
  246. package/lib/typescript/utils/DBSyncManager.d.ts +47 -0
  247. package/lib/typescript/utils/addReactionToLocalState.d.ts +9 -0
  248. package/lib/typescript/utils/removeReactionFromLocalState.d.ts +8 -0
  249. package/lib/typescript/{components/Message/utils → utils}/removeReservedFields.d.ts +2 -2
  250. package/lib/typescript/utils/utils.d.ts +3 -3
  251. package/package.json +4 -3
  252. package/src/__tests__/offline-feature.test.js +19 -2
  253. package/src/__tests__/optimistic-update.test.js +368 -0
  254. package/src/components/Attachment/Gallery.tsx +5 -1
  255. package/src/components/Attachment/GalleryImage.tsx +16 -2
  256. package/src/components/Channel/Channel.tsx +266 -57
  257. package/src/components/Channel/hooks/useCreateMessagesContext.ts +6 -0
  258. package/src/components/ChannelList/ChannelList.tsx +2 -10
  259. package/src/components/ChannelList/hooks/listeners/__tests__/useChannelUpdated.test.tsx +0 -1
  260. package/src/components/ChannelList/hooks/usePaginatedChannels.ts +76 -26
  261. package/src/components/Chat/Chat.tsx +5 -9
  262. package/src/components/Chat/__tests__/Chat.test.js +1 -1
  263. package/src/components/Chat/hooks/useCreateChatContext.ts +0 -2
  264. package/src/components/Message/Message.tsx +18 -2
  265. package/src/components/Message/MessageSimple/MessageFooter.tsx +2 -1
  266. package/src/components/Message/hooks/useMessageActionHandlers.ts +10 -21
  267. package/src/components/Message/hooks/useMessageActions.tsx +10 -5
  268. package/src/components/MessageInput/FileUploadPreview.tsx +7 -2
  269. package/src/components/MessageInput/ImageUploadPreview.tsx +7 -3
  270. package/src/components/MessageInput/MessageInput.tsx +17 -3
  271. package/src/components/MessageInput/SendButton.tsx +1 -1
  272. package/src/components/index.ts +1 -2
  273. package/src/contexts/chatContext/ChatContext.tsx +1 -2
  274. package/src/contexts/messageInputContext/MessageInputContext.tsx +95 -57
  275. package/src/contexts/messageInputContext/__tests__/__snapshots__/sendMessage.test.tsx.snap +29 -3
  276. package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts +1 -0
  277. package/src/contexts/messagesContext/MessagesContext.tsx +4 -1
  278. package/src/hooks/useTranslatedMessage.ts +1 -1
  279. package/src/mock-builders/DB/mock.ts +2 -2
  280. package/src/mock-builders/api/deleteMessage.js +18 -0
  281. package/src/mock-builders/api/deleteReaction.js +19 -0
  282. package/src/mock-builders/api/sendReaction.tsx +19 -0
  283. package/src/mock-builders/event/connectionChanged.js +2 -1
  284. package/src/store/QuickSqliteClient.ts +39 -37
  285. package/src/store/apis/addPendingTask.ts +24 -0
  286. package/src/store/apis/deleteMessage.ts +13 -0
  287. package/src/store/apis/deletePendingTask.ts +12 -0
  288. package/src/store/apis/deleteReaction.ts +26 -0
  289. package/src/store/apis/getChannelMessages.ts +1 -1
  290. package/src/store/apis/getChannels.ts +2 -2
  291. package/src/store/apis/getPendingTasks.ts +13 -0
  292. package/src/store/apis/index.ts +1 -0
  293. package/src/store/apis/insertReaction.ts +29 -0
  294. package/src/store/apis/updateMessage.ts +2 -2
  295. package/src/store/apis/updateReaction.ts +2 -2
  296. package/src/store/mappers/mapDateTimeToStorable.ts +1 -1
  297. package/src/store/mappers/mapMessageToStorable.ts +8 -2
  298. package/src/store/mappers/mapStorableToTask.ts +13 -0
  299. package/src/store/mappers/mapTaskToStorable.ts +7 -0
  300. package/src/store/schema.ts +25 -1
  301. package/src/store/sqlite-utils/appendOrderByClause.ts +24 -0
  302. package/src/store/sqlite-utils/createCreateTableQuery.ts +2 -2
  303. package/src/store/sqlite-utils/createSelectQuery.ts +4 -1
  304. package/src/store/sqlite-utils/createUpdateQuery.ts +3 -2
  305. package/src/store/sqlite-utils/createUpsertQuery.ts +1 -1
  306. package/src/store/types.ts +28 -0
  307. package/src/types/types.ts +4 -1
  308. package/src/utils/DBSyncManager.ts +222 -0
  309. package/src/utils/addReactionToLocalState.ts +87 -0
  310. package/src/utils/removeReactionFromLocalState.ts +39 -0
  311. package/src/{components/Message/utils → utils}/removeReservedFields.ts +7 -3
  312. package/src/utils/utils.ts +14 -5
  313. package/src/version.json +1 -1
  314. package/lib/commonjs/components/Chat/hooks/useConnectionRecovered.js +0 -171
  315. package/lib/commonjs/components/Chat/hooks/useConnectionRecovered.js.map +0 -1
  316. package/lib/commonjs/components/Message/utils/removeReservedFields.js.map +0 -1
  317. package/lib/module/components/Chat/hooks/useConnectionRecovered.js +0 -171
  318. package/lib/module/components/Chat/hooks/useConnectionRecovered.js.map +0 -1
  319. package/lib/module/components/Message/utils/removeReservedFields.js.map +0 -1
  320. package/lib/typescript/components/Chat/hooks/useConnectionRecovered.d.ts +0 -10
  321. package/src/components/Chat/hooks/useConnectionRecovered.ts +0 -92
@@ -38,6 +38,7 @@ import type { UploadProgressIndicatorProps } from '../../components/MessageInput
38
38
  import type { MessageType } from '../../components/MessageList/hooks/useMessageList';
39
39
  import { compressImage, getLocalAssetUri, pickDocument } from '../../native';
40
40
  import type { Asset, DefaultStreamChatGenerics, File, UnknownType } from '../../types/types';
41
+ import { removeReservedFields } from '../../utils/removeReservedFields';
41
42
  import {
42
43
  ACITriggerSettings,
43
44
  ACITriggerSettingsParams,
@@ -416,7 +417,7 @@ export const MessageInputProvider = <
416
417
  }>) => {
417
418
  const { closePicker, openPicker, selectedPicker, setSelectedPicker } =
418
419
  useAttachmentPickerContext();
419
- const { appSettings, client } = useChatContext<StreamChatGenerics>();
420
+ const { appSettings, client, enableOfflineSupport } = useChatContext<StreamChatGenerics>();
420
421
 
421
422
  const getFileUploadConfig = () => {
422
423
  const fileConfig = appSettings?.app?.file_upload_config;
@@ -490,19 +491,19 @@ export const MessageInputProvider = <
490
491
  return true;
491
492
  }
492
493
 
493
- for (const image of imageUploads) {
494
- if (!image || image.state === FileState.UPLOAD_FAILED) {
495
- continue;
496
- }
497
- if (image.state === FileState.UPLOADING) {
498
- // TODO: show error to user that they should wait until image is uploaded
499
- return false;
494
+ const imagesAndFiles = [...imageUploads, ...fileUploads];
495
+ if (enableOfflineSupport) {
496
+ // Allow only if none of the attachments have unsupported status
497
+ for (const file of imagesAndFiles) {
498
+ if (file.state === FileState.NOT_SUPPORTED) {
499
+ return false;
500
+ }
500
501
  }
501
502
 
502
503
  return true;
503
504
  }
504
505
 
505
- for (const file of fileUploads) {
506
+ for (const file of imagesAndFiles) {
506
507
  if (!file || file.state === FileState.UPLOAD_FAILED) {
507
508
  continue;
508
509
  }
@@ -622,6 +623,62 @@ export const MessageInputProvider = <
622
623
  setText('');
623
624
  };
624
625
 
626
+ const mapImageUploadToAttachment = (image: ImageUpload) => {
627
+ const mime_type: string | boolean = lookup(image.file.filename as string);
628
+ return {
629
+ fallback: image.file.name,
630
+ image_url: image.url,
631
+ mime_type: mime_type ? mime_type : undefined,
632
+ original_height: image.height,
633
+ original_width: image.width,
634
+ originalFile: image.file,
635
+ type: 'image',
636
+ } as Attachment;
637
+ };
638
+
639
+ const mapFileUploadToAttachment = (file: FileUpload) => {
640
+ const mime_type: string | boolean = lookup(file.file.name as string);
641
+ if (file.file.type?.startsWith('image/')) {
642
+ return {
643
+ fallback: file.file.name,
644
+ image_url: file.url,
645
+ mime_type: mime_type ? mime_type : undefined,
646
+ originalFile: file.file,
647
+ type: 'image',
648
+ };
649
+ } else if (file.file.type?.startsWith('audio/')) {
650
+ return {
651
+ asset_url: file.url || file.file.uri,
652
+ duration: file.file.duration,
653
+ file_size: file.file.size,
654
+ mime_type: file.file.type,
655
+ originalFile: file.file,
656
+ title: file.file.name,
657
+ type: 'audio',
658
+ };
659
+ } else if (file.file.type?.startsWith('video/')) {
660
+ return {
661
+ asset_url: file.url || file.file.uri,
662
+ duration: file.file.duration,
663
+ file_size: file.file.size,
664
+ mime_type: file.file.type,
665
+ originalFile: file.file,
666
+ thumb_url: file.thumb_url,
667
+ title: file.file.name,
668
+ type: 'video',
669
+ };
670
+ } else {
671
+ return {
672
+ asset_url: file.url || file.file.uri,
673
+ file_size: file.file.size,
674
+ mime_type: file.file.type,
675
+ originalFile: file.file,
676
+ title: file.file.name,
677
+ type: 'file',
678
+ };
679
+ }
680
+ };
681
+
625
682
  // TODO: Figure out why this is async, as it doesn't await any promise.
626
683
  // eslint-disable-next-line require-await
627
684
  const sendMessage = async () => {
@@ -647,7 +704,15 @@ export const MessageInputProvider = <
647
704
 
648
705
  const attachments = [] as Attachment<StreamChatGenerics>[];
649
706
  for (const image of imageUploads) {
650
- if (!image || image.state === FileState.UPLOAD_FAILED) {
707
+ if (enableOfflineSupport) {
708
+ if (image.state === FileState.NOT_SUPPORTED) {
709
+ return;
710
+ }
711
+ attachments.push(mapImageUploadToAttachment(image));
712
+ continue;
713
+ }
714
+
715
+ if ((!image || image.state === FileState.UPLOAD_FAILED) && !enableOfflineSupport) {
651
716
  continue;
652
717
  }
653
718
 
@@ -666,67 +731,32 @@ export const MessageInputProvider = <
666
731
  }
667
732
 
668
733
  // To get the mime type of the image from the file name and send it as an response for an image
669
- const mime_type: string | boolean = lookup(image.file.filename as string);
670
-
671
734
  if (image.state === FileState.UPLOADED || image.state === FileState.FINISHED) {
672
- attachments.push({
673
- fallback: image.file.name,
674
- image_url: image.url,
675
- mime_type: mime_type ? mime_type : undefined,
676
- original_height: image.height,
677
- original_width: image.width,
678
- type: 'image',
679
- });
735
+ attachments.push(mapImageUploadToAttachment(image));
680
736
  }
681
737
  }
682
738
 
683
739
  for (const file of fileUploads) {
740
+ if (enableOfflineSupport) {
741
+ if (file.state === FileState.NOT_SUPPORTED) {
742
+ return;
743
+ }
744
+ attachments.push(mapFileUploadToAttachment(file));
745
+ continue;
746
+ }
747
+
684
748
  if (!file || file.state === FileState.UPLOAD_FAILED) {
685
749
  continue;
686
750
  }
751
+
687
752
  if (file.state === FileState.UPLOADING) {
688
753
  // TODO: show error to user that they should wait until image is uploaded
689
754
  sending.current = false;
690
755
  return;
691
756
  }
692
- const mime_type: string | boolean = lookup(file.file.name as string);
693
757
 
694
758
  if (file.state === FileState.UPLOADED || file.state === FileState.FINISHED) {
695
- if (file.file.type?.startsWith('image/')) {
696
- attachments.push({
697
- fallback: file.file.name,
698
- image_url: file.url,
699
- mime_type: mime_type ? mime_type : undefined,
700
- type: 'image',
701
- });
702
- } else if (file.file.type?.startsWith('audio/')) {
703
- attachments.push({
704
- asset_url: file.url,
705
- duration: file.file.duration,
706
- file_size: file.file.size,
707
- mime_type: file.file.type,
708
- title: file.file.name,
709
- type: 'audio',
710
- });
711
- } else if (file.file.type?.startsWith('video/')) {
712
- attachments.push({
713
- asset_url: file.url,
714
- duration: file.file.duration,
715
- file_size: file.file.size,
716
- mime_type: file.file.type,
717
- thumb_url: file.thumb_url,
718
- title: file.file.name,
719
- type: 'video',
720
- });
721
- } else {
722
- attachments.push({
723
- asset_url: file.url,
724
- file_size: file.file.size,
725
- mime_type: file.file.type,
726
- title: file.file.name,
727
- type: 'file',
728
- });
729
- }
759
+ attachments.push(mapFileUploadToAttachment(file));
730
760
  }
731
761
  }
732
762
 
@@ -748,7 +778,12 @@ export const MessageInputProvider = <
748
778
  // TODO: Remove this line and show an error when submit fails
749
779
  value.clearEditingState();
750
780
 
751
- const updateMessagePromise = value.editMessage(updatedMessage).then(value.clearEditingState);
781
+ const updateMessagePromise = value
782
+ .editMessage(
783
+ // @ts-ignore
784
+ removeReservedFields(updatedMessage),
785
+ )
786
+ .then(value.clearEditingState);
752
787
  resetInput(attachments);
753
788
  logChatPromiseExecution(updateMessagePromise, 'update message');
754
789
 
@@ -1073,8 +1108,11 @@ export const MessageInputProvider = <
1073
1108
 
1074
1109
  const newImage: ImageUpload = {
1075
1110
  file: image,
1111
+ height: image.height,
1076
1112
  id,
1077
1113
  state: imageState,
1114
+ url: image.uri,
1115
+ width: image.width,
1078
1116
  };
1079
1117
 
1080
1118
  await Promise.all([
@@ -7,12 +7,14 @@ Object {
7
7
  "fallback": undefined,
8
8
  "image_url": undefined,
9
9
  "mime_type": undefined,
10
+ "originalFile": Object {
11
+ "uri": "http://www.jackblack.com/tenac_iousd.bmp",
12
+ },
10
13
  "original_height": undefined,
11
14
  "original_width": undefined,
12
15
  "type": "image",
13
16
  },
14
17
  ],
15
- "created_at": "Sat Jul 02 2022 23:55:13 GMT+0530 (India Standard Time)",
16
18
  "html": "<p>regular</p>",
17
19
  "id": "7a85f744-cc89-4f82-a1d4-5456432cc8bf",
18
20
  "mentioned_users": Array [
@@ -21,8 +23,6 @@ Object {
21
23
  ],
22
24
  "quoted_message": undefined,
23
25
  "text": "",
24
- "type": "regular",
25
- "updated_at": "Sat Jul 02 2022 23:55:13 GMT+0530 (India Standard Time)",
26
26
  "user": Object {
27
27
  "banned": false,
28
28
  "created_at": "2020-04-27T13:39:49.331742Z",
@@ -43,6 +43,11 @@ Object {
43
43
  "asset_url": undefined,
44
44
  "file_size": undefined,
45
45
  "mime_type": "file",
46
+ "originalFile": Object {
47
+ "name": "dummy.pdf",
48
+ "state": "uploaded",
49
+ "type": "file",
50
+ },
46
51
  "title": "dummy.pdf",
47
52
  "type": "file",
48
53
  },
@@ -51,6 +56,11 @@ Object {
51
56
  "duration": undefined,
52
57
  "file_size": undefined,
53
58
  "mime_type": "video/mp4",
59
+ "originalFile": Object {
60
+ "name": "dummy.pdf",
61
+ "state": "finished",
62
+ "type": "video/mp4",
63
+ },
54
64
  "thumb_url": undefined,
55
65
  "title": "dummy.pdf",
56
66
  "type": "video",
@@ -60,6 +70,11 @@ Object {
60
70
  "duration": undefined,
61
71
  "file_size": undefined,
62
72
  "mime_type": "audio/mp3",
73
+ "originalFile": Object {
74
+ "name": "dummy.pdf",
75
+ "state": "uploaded",
76
+ "type": "audio/mp3",
77
+ },
63
78
  "title": "dummy.pdf",
64
79
  "type": "audio",
65
80
  },
@@ -67,6 +82,11 @@ Object {
67
82
  "fallback": "dummy.pdf",
68
83
  "image_url": undefined,
69
84
  "mime_type": "application/pdf",
85
+ "originalFile": Object {
86
+ "name": "dummy.pdf",
87
+ "state": "finished",
88
+ "type": "image/jpeg",
89
+ },
70
90
  "type": "image",
71
91
  },
72
92
  ],
@@ -88,6 +108,9 @@ Object {
88
108
  "fallback": undefined,
89
109
  "image_url": undefined,
90
110
  "mime_type": undefined,
111
+ "originalFile": Object {
112
+ "uri": "http://www.jackblack.com/tenac_iousd.bmp",
113
+ },
91
114
  "original_height": undefined,
92
115
  "original_width": undefined,
93
116
  "type": "image",
@@ -96,6 +119,9 @@ Object {
96
119
  "fallback": undefined,
97
120
  "image_url": undefined,
98
121
  "mime_type": undefined,
122
+ "originalFile": Object {
123
+ "uri": "http://www.jackblack.com/tenac_iousd.bmp",
124
+ },
99
125
  "original_height": undefined,
100
126
  "original_width": undefined,
101
127
  "type": "image",
@@ -84,6 +84,7 @@ export const useMessageDetailsForState = <
84
84
  },
85
85
  id,
86
86
  state: 'finished',
87
+ thumb_url: attachment.thumb_url,
87
88
  url: attachment.asset_url,
88
89
  });
89
90
  }
@@ -87,6 +87,8 @@ export type MessagesContextValue<
87
87
  * Defaults to: [DateHeader](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageList/DateHeader.tsx)
88
88
  **/
89
89
  DateHeader: React.ComponentType<DateHeaderProps>;
90
+ deleteMessage: (message: MessageResponse<StreamChatGenerics>) => Promise<void>;
91
+ deleteReaction: (type: string, messageId: string) => Promise<void>;
90
92
 
91
93
  /** Should keyboard be dismissed when messaged is touched */
92
94
  dismissKeyboardOnMessageTouch: boolean;
@@ -176,11 +178,11 @@ export type MessagesContextValue<
176
178
  * Custom message pinned component
177
179
  */
178
180
  MessagePinnedHeader: React.ComponentType<MessagePinnedHeaderProps<StreamChatGenerics>>;
181
+
179
182
  /**
180
183
  * UI component for MessageReplies
181
184
  * Defaults to: [MessageReplies](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageSimple/MessageReplies.tsx)
182
185
  */
183
-
184
186
  MessageReplies: React.ComponentType<MessageRepliesProps<StreamChatGenerics>>;
185
187
  /**
186
188
  * UI Component for MessageRepliesAvatars
@@ -226,6 +228,7 @@ export type MessagesContextValue<
226
228
  * Defaults to: [ScrollToBottomButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/scroll-to-bottom-button/)
227
229
  */
228
230
  ScrollToBottomButton: React.ComponentType<ScrollToBottomButtonProps>;
231
+ sendReaction: (type: string, messageId: string) => Promise<void>;
229
232
  setEditingState: (message: MessageType<StreamChatGenerics>) => void;
230
233
  setQuotedMessageState: (message: MessageType<StreamChatGenerics>) => void;
231
234
  supportedReactions: ReactionData[];
@@ -19,7 +19,7 @@ export const useTranslatedMessage = <
19
19
 
20
20
  const translationKey: TranslationKey = `${userLanguage}_text`;
21
21
 
22
- if (message.i18n && translationKey in message.i18n) {
22
+ if (message.i18n && translationKey in message.i18n && message.type !== 'deleted') {
23
23
  return {
24
24
  ...message,
25
25
  text: message.i18n[translationKey],
@@ -12,7 +12,7 @@ export const sqliteMock = {
12
12
  status: 0,
13
13
  };
14
14
  },
15
- executeSql: (dbName: string, queryInput: string, params: unknown[]) => {
15
+ execute: (dbName: string, queryInput: string, params: unknown[]) => {
16
16
  const query = queryInput.trim().toLowerCase();
17
17
  const stmt = db.prepare(query);
18
18
  let result: unknown[] = [];
@@ -72,7 +72,7 @@ export const sqliteMock = {
72
72
  status: 0,
73
73
  };
74
74
  },
75
- executeSqlBatch: (dbName: string, queriesArr: PreparedQueries[]) => {
75
+ executeBatch: (dbName: string, queriesArr: PreparedQueries[]) => {
76
76
  queriesArr.forEach((queryAndParams) => {
77
77
  const query = queryAndParams[0];
78
78
  const params = queryAndParams[1];
@@ -0,0 +1,18 @@
1
+ import { mockedApiResponse } from './utils';
2
+
3
+ import { generateMessage } from '../generator/message';
4
+ /**
5
+ * Returns the api response for sendMessage api.
6
+ *
7
+ * api - /channels/{type}/{id}/message
8
+ *
9
+ * @param {*} message
10
+ */
11
+ export const deleteMessageApi = (message = generateMessage()) => {
12
+ const result = {
13
+ duration: 0.01,
14
+ message,
15
+ };
16
+
17
+ return mockedApiResponse(result, 'delete');
18
+ };
@@ -0,0 +1,19 @@
1
+ import { mockedApiResponse } from './utils';
2
+
3
+ import { generateReaction } from '../generator/reaction';
4
+ /**
5
+ * Returns the api response for sendMessage api.
6
+ *
7
+ * api - /messages/{id}/reaction
8
+ *
9
+ * @param {*} message
10
+ */
11
+ export const deleteReactionApi = (message, reaction = generateReaction()) => {
12
+ const result = {
13
+ duration: 0.01,
14
+ message,
15
+ reaction,
16
+ };
17
+
18
+ return mockedApiResponse(result, 'delete');
19
+ };
@@ -0,0 +1,19 @@
1
+ import { mockedApiResponse } from './utils';
2
+
3
+ import { generateReaction } from '../generator/reaction';
4
+ /**
5
+ * Returns the api response for sendMessage api.
6
+ *
7
+ * api - /messages/{id}/reaction
8
+ *
9
+ * @param {*} message
10
+ */
11
+ export const sendReactionApi = (message, reaction = generateReaction()) => {
12
+ const result = {
13
+ duration: 0.01,
14
+ message,
15
+ reaction,
16
+ };
17
+
18
+ return mockedApiResponse(result, 'post');
19
+ };
@@ -1,5 +1,6 @@
1
- export default (client) => {
1
+ export default (client, online = true) => {
2
2
  client.dispatchEvent({
3
+ online,
3
4
  type: 'connection.changed',
4
5
  });
5
6
  };
@@ -3,14 +3,14 @@ import type { QuickSQLite } from 'react-native-quick-sqlite';
3
3
  let sqlite: typeof QuickSQLite;
4
4
 
5
5
  try {
6
- sqlite = require('react-native-quick-sqlite')?.QuickSQLite;
6
+ sqlite = require('react-native-quick-sqlite').QuickSQLite;
7
7
  } catch (e) {
8
8
  // Failed for one of the reason
9
9
  // 1. Running on expo, where we don't support offline storage yet.
10
10
  // 2. Offline support is disabled, in which case this library is not installed.
11
11
  }
12
12
 
13
- import { DB_LOCATION, DB_NAME, DB_STATUS_ERROR } from './constants';
13
+ import { DB_LOCATION, DB_NAME } from './constants';
14
14
  import { tables } from './schema';
15
15
  import { createCreateTableQuery } from './sqlite-utils/createCreateTableQuery';
16
16
  import type { PreparedQueries, Table } from './types';
@@ -20,7 +20,7 @@ import type { PreparedQueries, Table } from './types';
20
20
  * This way usage react-native-quick-sqlite package is scoped to a single class/file.
21
21
  */
22
22
  export class QuickSqliteClient {
23
- static dbVersion = 2;
23
+ static dbVersion = 3;
24
24
 
25
25
  static dbName = DB_NAME;
26
26
  static dbLocation = DB_LOCATION;
@@ -30,46 +30,47 @@ export class QuickSqliteClient {
30
30
  static setDbVersion = (version: number) => (this.dbVersion = version);
31
31
 
32
32
  static openDB = () => {
33
- const { message, status } = sqlite.open(this.dbName, this.dbLocation);
34
- sqlite.executeSql(this.dbName, `PRAGMA foreign_keys = ON`, []);
35
-
36
- if (status === DB_STATUS_ERROR) {
37
- console.error(`Error opening database ${this.dbName}: ${message}`);
33
+ try {
34
+ sqlite.open(this.dbName, this.dbLocation);
35
+ sqlite.execute(this.dbName, `PRAGMA foreign_keys = ON`, []);
36
+ } catch (e) {
37
+ console.error(`Error opening database ${this.dbName}: ${e}`);
38
38
  }
39
39
  };
40
40
 
41
41
  static closeDB = () => {
42
- const { message, status } = sqlite.close(this.dbName);
43
-
44
- if (status === DB_STATUS_ERROR) {
45
- console.error(`Error closing database ${this.dbName}: ${message}`);
42
+ try {
43
+ sqlite.close(this.dbName);
44
+ } catch (e) {
45
+ console.error(`Error closing database ${this.dbName}: ${e}`);
46
46
  }
47
47
  };
48
48
 
49
49
  static executeSqlBatch = (queries: PreparedQueries[]) => {
50
+ if (!queries || !queries.length) return;
50
51
  this.openDB();
51
52
 
52
- const res = sqlite.executeSqlBatch(DB_NAME, queries);
53
-
54
- if (res.status === 1) {
55
- console.error(`Query/queries failed: ${res.message} ${JSON.stringify(res)}`);
53
+ try {
54
+ sqlite.executeBatch(DB_NAME, queries);
55
+ this.closeDB();
56
+ } catch (e) {
57
+ this.closeDB();
58
+ throw new Error(`Query/queries failed: ${e}`);
56
59
  }
57
-
58
- this.closeDB();
59
60
  };
60
61
 
61
62
  static executeSql = (query: string, params?: string[]) => {
62
63
  this.openDB();
63
64
 
64
- const { message, rows, status } = sqlite.executeSql(DB_NAME, query, params);
65
+ try {
66
+ const { rows } = sqlite.execute(DB_NAME, query, params);
67
+ this.closeDB();
65
68
 
66
- this.closeDB();
67
-
68
- if (status === 1) {
69
- console.error(`Query/queries failed: ${message}: `, query);
69
+ return rows ? rows._array : [];
70
+ } catch (e) {
71
+ this.closeDB();
72
+ throw new Error(`Query/queries failed: ${e}: `);
70
73
  }
71
-
72
- return rows ? rows._array : [];
73
74
  };
74
75
 
75
76
  static dropTables = () => {
@@ -82,9 +83,10 @@ export class QuickSqliteClient {
82
83
  };
83
84
 
84
85
  static deleteDatabase = () => {
85
- const { message, status } = sqlite.delete(this.dbName, this.dbLocation);
86
- if (status === DB_STATUS_ERROR) {
87
- throw new Error(`Error deleting DB: ${message}`);
86
+ try {
87
+ sqlite.delete(this.dbName, this.dbLocation);
88
+ } catch (e) {
89
+ throw new Error(`Error deleting DB: ${e}`);
88
90
  }
89
91
 
90
92
  return true;
@@ -118,7 +120,7 @@ export class QuickSqliteClient {
118
120
  static updateUserPragmaVersion = (version: number) => {
119
121
  this.openDB();
120
122
 
121
- sqlite.executeSql(DB_NAME, `PRAGMA user_version = ${version}`, []);
123
+ sqlite.execute(DB_NAME, `PRAGMA user_version = ${version}`, []);
122
124
 
123
125
  this.closeDB();
124
126
  };
@@ -126,15 +128,15 @@ export class QuickSqliteClient {
126
128
  static getUserPragmaVersion = () => {
127
129
  this.openDB();
128
130
 
129
- const { message, rows, status } = sqlite.executeSql(DB_NAME, `PRAGMA user_version`, []);
130
-
131
- this.closeDB();
132
- if (status === 1) {
133
- console.error(`Querying for user_version failed: ${message}`);
131
+ try {
132
+ const { rows } = sqlite.execute(DB_NAME, `PRAGMA user_version`, []);
133
+ const result = rows ? rows._array : [];
134
+ this.closeDB();
135
+ return result[0].user_version as number;
136
+ } catch (e) {
137
+ this.closeDB();
138
+ throw new Error(`Querying for user_version failed: ${e}`);
134
139
  }
135
-
136
- const result = rows ? rows._array : [];
137
- return result[0].user_version as number;
138
140
  };
139
141
 
140
142
  static resetDB = () => {
@@ -0,0 +1,24 @@
1
+ import { mapTaskToStorable } from '../mappers/mapTaskToStorable';
2
+ import { QuickSqliteClient } from '../QuickSqliteClient';
3
+ import { createDeleteQuery } from '../sqlite-utils/createDeleteQuery';
4
+ import { createUpsertQuery } from '../sqlite-utils/createUpsertQuery';
5
+ import type { PendingTask } from '../types';
6
+
7
+ export const addPendingTask = (task: PendingTask) => {
8
+ const storable = mapTaskToStorable(task);
9
+ const query = createUpsertQuery('pendingTasks', storable);
10
+
11
+ QuickSqliteClient.executeSql.apply(null, query);
12
+
13
+ return () => {
14
+ const { channelId, channelType, payload, type } = storable;
15
+ const query = createDeleteQuery('pendingTasks', {
16
+ channelId,
17
+ channelType,
18
+ payload,
19
+ type,
20
+ });
21
+
22
+ QuickSqliteClient.executeSql.apply(null, query);
23
+ };
24
+ };
@@ -0,0 +1,13 @@
1
+ import { QuickSqliteClient } from '../QuickSqliteClient';
2
+ import { createDeleteQuery } from '../sqlite-utils/createDeleteQuery';
3
+
4
+ export const deleteMessage = ({ flush = true, id }: { id: string; flush?: boolean }) => {
5
+ const query = createDeleteQuery('messages', {
6
+ id,
7
+ });
8
+ if (flush) {
9
+ QuickSqliteClient.executeSql.apply(null, query);
10
+ }
11
+
12
+ return [query];
13
+ };
@@ -0,0 +1,12 @@
1
+ import { QuickSqliteClient } from '../QuickSqliteClient';
2
+ import { createDeleteQuery } from '../sqlite-utils/createDeleteQuery';
3
+
4
+ export const deletePendingTask = ({ id }: { id: number }) => {
5
+ const query = createDeleteQuery('pendingTasks', {
6
+ id,
7
+ });
8
+
9
+ QuickSqliteClient.executeSql.apply(null, query);
10
+
11
+ return [query];
12
+ };
@@ -0,0 +1,26 @@
1
+ import { QuickSqliteClient } from '../QuickSqliteClient';
2
+ import { createDeleteQuery } from '../sqlite-utils/createDeleteQuery';
3
+
4
+ export const deleteReaction = ({
5
+ flush = true,
6
+ messageId,
7
+ reactionType,
8
+ userId,
9
+ }: {
10
+ messageId: string;
11
+ reactionType: string;
12
+ userId: string;
13
+ flush?: boolean;
14
+ }) => {
15
+ const query = createDeleteQuery('reactions', {
16
+ messageId,
17
+ type: reactionType,
18
+ userId,
19
+ });
20
+
21
+ if (flush) {
22
+ QuickSqliteClient.executeSql.apply(null, query);
23
+ }
24
+
25
+ return [query];
26
+ };