stream-chat-react-native-core 5.0.0-offline-support.12 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/lib/commonjs/components/{MessageInput/AudioAttachmentUploadPreview.js → Attachment/AudioAttachment.js} +38 -64
  2. package/lib/commonjs/components/Attachment/AudioAttachment.js.map +1 -0
  3. package/lib/commonjs/components/Attachment/Card.js +1 -0
  4. package/lib/commonjs/components/Attachment/Card.js.map +1 -1
  5. package/lib/commonjs/components/Attachment/FileAttachment.js +16 -7
  6. package/lib/commonjs/components/Attachment/FileAttachment.js.map +1 -1
  7. package/lib/commonjs/components/Attachment/FileAttachmentGroup.js +132 -12
  8. package/lib/commonjs/components/Attachment/FileAttachmentGroup.js.map +1 -1
  9. package/lib/commonjs/components/Attachment/Gallery.js +41 -35
  10. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  11. package/lib/commonjs/components/Attachment/Giphy.js +17 -13
  12. package/lib/commonjs/components/Attachment/Giphy.js.map +1 -1
  13. package/lib/commonjs/components/Attachment/VideoThumbnail.js +12 -6
  14. package/lib/commonjs/components/Attachment/VideoThumbnail.js.map +1 -1
  15. package/lib/commonjs/components/Attachment/utils/getGiphyMimeType.js +15 -0
  16. package/lib/commonjs/components/Attachment/utils/getGiphyMimeType.js.map +1 -0
  17. package/lib/commonjs/components/Channel/Channel.js +19 -19
  18. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  19. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js +0 -2
  20. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  21. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +2 -0
  22. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  23. package/lib/commonjs/components/ChannelList/hooks/listeners/useNewMessage.js +16 -4
  24. package/lib/commonjs/components/ChannelList/hooks/listeners/useNewMessage.js.map +1 -1
  25. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +12 -7
  26. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  27. package/lib/commonjs/components/ChannelPreview/ChannelPreview.js +10 -6
  28. package/lib/commonjs/components/ChannelPreview/ChannelPreview.js.map +1 -1
  29. package/lib/commonjs/components/ImageGallery/ImageGallery.js +38 -30
  30. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  31. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js +11 -10
  32. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -1
  33. package/lib/commonjs/components/ImageGallery/components/ImageGrid.js +2 -2
  34. package/lib/commonjs/components/ImageGallery/components/ImageGrid.js.map +1 -1
  35. package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js +6 -0
  36. package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -1
  37. package/lib/commonjs/components/Message/Message.js +7 -7
  38. package/lib/commonjs/components/Message/Message.js.map +1 -1
  39. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js +7 -3
  40. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  41. package/lib/commonjs/components/Message/MessageSimple/utils/parseLinks.js +1 -1
  42. package/lib/commonjs/components/Message/MessageSimple/utils/parseLinks.js.map +1 -1
  43. package/lib/commonjs/components/Message/MessageSimple/utils/parseLinks.test.js +1 -1
  44. package/lib/commonjs/components/Message/MessageSimple/utils/parseLinks.test.js.map +1 -1
  45. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js +1 -1
  46. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  47. package/lib/commonjs/components/MessageInput/FileUploadPreview.js +38 -44
  48. package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
  49. package/lib/commonjs/components/MessageList/MessageList.js +5 -5
  50. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  51. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +10 -9
  52. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +1 -1
  53. package/lib/commonjs/components/index.js +13 -13
  54. package/lib/commonjs/components/index.js.map +1 -1
  55. package/lib/commonjs/contexts/imageGalleryContext/ImageGalleryContext.js +13 -14
  56. package/lib/commonjs/contexts/imageGalleryContext/ImageGalleryContext.js.map +1 -1
  57. package/lib/commonjs/contexts/imageGalleryContext/ImageGalleryContext.md +1 -1
  58. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +2 -2
  59. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  60. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +0 -2
  61. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  62. package/lib/commonjs/contexts/messagesContext/MessagesContext.js +2 -2
  63. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  64. package/lib/commonjs/contexts/themeContext/utils/theme.js +2 -2
  65. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  66. package/lib/commonjs/index.js +13 -1
  67. package/lib/commonjs/index.js.map +1 -1
  68. package/lib/commonjs/mock-builders/DB/mock.js +1 -13
  69. package/lib/commonjs/mock-builders/DB/mock.js.map +1 -1
  70. package/lib/commonjs/mock-builders/event/messageNew.js +2 -0
  71. package/lib/commonjs/mock-builders/event/messageNew.js.map +1 -1
  72. package/lib/commonjs/store/QuickSqliteClient.js +7 -3
  73. package/lib/commonjs/store/QuickSqliteClient.js.map +1 -1
  74. package/lib/commonjs/store/apis/getChannels.js +2 -15
  75. package/lib/commonjs/store/apis/getChannels.js.map +1 -1
  76. package/lib/commonjs/store/apis/getChannelsForFilterSort.js +37 -0
  77. package/lib/commonjs/store/apis/getChannelsForFilterSort.js.map +1 -0
  78. package/lib/commonjs/store/apis/index.js +264 -0
  79. package/lib/commonjs/store/apis/index.js.map +1 -0
  80. package/lib/commonjs/store/apis/queries/selectChannelIdsForFilterSort.js +1 -1
  81. package/lib/commonjs/store/apis/queries/selectChannelIdsForFilterSort.js.map +1 -1
  82. package/lib/commonjs/store/apis/queries/selectChannels.js +2 -2
  83. package/lib/commonjs/store/apis/queries/selectChannels.js.map +1 -1
  84. package/lib/commonjs/store/sqlite-utils/appendWhereCluase.js +1 -2
  85. package/lib/commonjs/store/sqlite-utils/appendWhereCluase.js.map +1 -1
  86. package/lib/commonjs/test-utils/BetterSqlite.js +54 -0
  87. package/lib/commonjs/test-utils/BetterSqlite.js.map +1 -0
  88. package/lib/commonjs/version.json +1 -1
  89. package/lib/module/components/{MessageInput/AudioAttachmentUploadPreview.js → Attachment/AudioAttachment.js} +38 -64
  90. package/lib/module/components/Attachment/AudioAttachment.js.map +1 -0
  91. package/lib/module/components/Attachment/Card.js +1 -0
  92. package/lib/module/components/Attachment/Card.js.map +1 -1
  93. package/lib/module/components/Attachment/FileAttachment.js +16 -7
  94. package/lib/module/components/Attachment/FileAttachment.js.map +1 -1
  95. package/lib/module/components/Attachment/FileAttachmentGroup.js +132 -12
  96. package/lib/module/components/Attachment/FileAttachmentGroup.js.map +1 -1
  97. package/lib/module/components/Attachment/Gallery.js +41 -35
  98. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  99. package/lib/module/components/Attachment/Giphy.js +17 -13
  100. package/lib/module/components/Attachment/Giphy.js.map +1 -1
  101. package/lib/module/components/Attachment/VideoThumbnail.js +12 -6
  102. package/lib/module/components/Attachment/VideoThumbnail.js.map +1 -1
  103. package/lib/module/components/Attachment/utils/getGiphyMimeType.js +15 -0
  104. package/lib/module/components/Attachment/utils/getGiphyMimeType.js.map +1 -0
  105. package/lib/module/components/Channel/Channel.js +19 -19
  106. package/lib/module/components/Channel/Channel.js.map +1 -1
  107. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js +0 -2
  108. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  109. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +2 -0
  110. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  111. package/lib/module/components/ChannelList/hooks/listeners/useNewMessage.js +16 -4
  112. package/lib/module/components/ChannelList/hooks/listeners/useNewMessage.js.map +1 -1
  113. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +12 -7
  114. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  115. package/lib/module/components/ChannelPreview/ChannelPreview.js +10 -6
  116. package/lib/module/components/ChannelPreview/ChannelPreview.js.map +1 -1
  117. package/lib/module/components/ImageGallery/ImageGallery.js +38 -30
  118. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  119. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js +11 -10
  120. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -1
  121. package/lib/module/components/ImageGallery/components/ImageGrid.js +2 -2
  122. package/lib/module/components/ImageGallery/components/ImageGrid.js.map +1 -1
  123. package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js +6 -0
  124. package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -1
  125. package/lib/module/components/Message/Message.js +7 -7
  126. package/lib/module/components/Message/Message.js.map +1 -1
  127. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js +7 -3
  128. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  129. package/lib/module/components/Message/MessageSimple/utils/parseLinks.js +1 -1
  130. package/lib/module/components/Message/MessageSimple/utils/parseLinks.js.map +1 -1
  131. package/lib/module/components/Message/MessageSimple/utils/parseLinks.test.js +1 -1
  132. package/lib/module/components/Message/MessageSimple/utils/parseLinks.test.js.map +1 -1
  133. package/lib/module/components/Message/MessageSimple/utils/renderText.js +1 -1
  134. package/lib/module/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  135. package/lib/module/components/MessageInput/FileUploadPreview.js +38 -44
  136. package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
  137. package/lib/module/components/MessageList/MessageList.js +5 -5
  138. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  139. package/lib/module/components/MessageOverlay/MessageOverlay.js +10 -9
  140. package/lib/module/components/MessageOverlay/MessageOverlay.js.map +1 -1
  141. package/lib/module/components/index.js +13 -13
  142. package/lib/module/components/index.js.map +1 -1
  143. package/lib/module/contexts/imageGalleryContext/ImageGalleryContext.js +13 -14
  144. package/lib/module/contexts/imageGalleryContext/ImageGalleryContext.js.map +1 -1
  145. package/lib/module/contexts/imageGalleryContext/ImageGalleryContext.md +1 -1
  146. package/lib/module/contexts/messageInputContext/MessageInputContext.js +2 -2
  147. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  148. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +0 -2
  149. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  150. package/lib/module/contexts/messagesContext/MessagesContext.js +2 -2
  151. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  152. package/lib/module/contexts/themeContext/utils/theme.js +2 -2
  153. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  154. package/lib/module/index.js +13 -1
  155. package/lib/module/index.js.map +1 -1
  156. package/lib/module/mock-builders/DB/mock.js +1 -13
  157. package/lib/module/mock-builders/DB/mock.js.map +1 -1
  158. package/lib/module/mock-builders/event/messageNew.js +2 -0
  159. package/lib/module/mock-builders/event/messageNew.js.map +1 -1
  160. package/lib/module/store/QuickSqliteClient.js +7 -3
  161. package/lib/module/store/QuickSqliteClient.js.map +1 -1
  162. package/lib/module/store/apis/getChannels.js +2 -15
  163. package/lib/module/store/apis/getChannels.js.map +1 -1
  164. package/lib/module/store/apis/getChannelsForFilterSort.js +37 -0
  165. package/lib/module/store/apis/getChannelsForFilterSort.js.map +1 -0
  166. package/lib/module/store/apis/index.js +264 -0
  167. package/lib/module/store/apis/index.js.map +1 -0
  168. package/lib/module/store/apis/queries/selectChannelIdsForFilterSort.js +1 -1
  169. package/lib/module/store/apis/queries/selectChannelIdsForFilterSort.js.map +1 -1
  170. package/lib/module/store/apis/queries/selectChannels.js +2 -2
  171. package/lib/module/store/apis/queries/selectChannels.js.map +1 -1
  172. package/lib/module/store/sqlite-utils/appendWhereCluase.js +1 -2
  173. package/lib/module/store/sqlite-utils/appendWhereCluase.js.map +1 -1
  174. package/lib/module/test-utils/BetterSqlite.js +54 -0
  175. package/lib/module/test-utils/BetterSqlite.js.map +1 -0
  176. package/lib/module/version.json +1 -1
  177. package/lib/typescript/components/Attachment/AudioAttachment.d.ts +23 -0
  178. package/lib/typescript/components/Attachment/FileAttachmentGroup.d.ts +1 -1
  179. package/lib/typescript/components/Attachment/Gallery.d.ts +1 -1
  180. package/lib/typescript/components/Attachment/Giphy.d.ts +1 -1
  181. package/lib/typescript/components/Attachment/utils/getGiphyMimeType.d.ts +6 -0
  182. package/lib/typescript/components/Channel/Channel.d.ts +1 -1
  183. package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts +1 -1
  184. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
  185. package/lib/typescript/components/ImageGallery/components/ImageGrid.d.ts +1 -1
  186. package/lib/typescript/components/ImageGallery/hooks/useImageGalleryGestures.d.ts +2 -1
  187. package/lib/typescript/components/Message/Message.d.ts +9 -3
  188. package/lib/typescript/components/MessageInput/FileUploadPreview.d.ts +1 -1
  189. package/lib/typescript/components/MessageList/MessageList.d.ts +1 -1
  190. package/lib/typescript/components/index.d.ts +1 -1
  191. package/lib/typescript/contexts/imageGalleryContext/ImageGalleryContext.d.ts +9 -10
  192. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +1 -1
  193. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +1 -4
  194. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts +1 -1
  195. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +3 -0
  196. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +2 -2
  197. package/lib/typescript/index.d.ts +2 -0
  198. package/lib/typescript/store/QuickSqliteClient.d.ts +4 -0
  199. package/lib/typescript/store/apis/getChannels.d.ts +13 -5
  200. package/lib/typescript/store/apis/getChannelsForFilterSort.d.ts +17 -0
  201. package/lib/typescript/store/apis/index.d.ts +20 -0
  202. package/lib/typescript/store/apis/queries/selectChannelIdsForFilterSort.d.ts +10 -1
  203. package/lib/typescript/{__tests__/utils → test-utils}/BetterSqlite.d.ts +1 -1
  204. package/package.json +5 -4
  205. package/src/__tests__/offline-feature.test.js +1 -2
  206. package/src/components/{MessageInput/AudioAttachmentUploadPreview.tsx → Attachment/AudioAttachment.tsx} +82 -131
  207. package/src/components/Attachment/Card.tsx +1 -0
  208. package/src/components/Attachment/FileAttachment.tsx +3 -0
  209. package/src/components/Attachment/FileAttachmentGroup.tsx +119 -9
  210. package/src/components/Attachment/Gallery.tsx +30 -19
  211. package/src/components/Attachment/Giphy.tsx +15 -8
  212. package/src/components/Attachment/VideoThumbnail.tsx +3 -2
  213. package/src/components/Attachment/utils/getGiphyMimeType.ts +13 -0
  214. package/src/components/Channel/Channel.tsx +5 -4
  215. package/src/components/Channel/hooks/useCreateInputMessageInputContext.ts +0 -2
  216. package/src/components/Channel/hooks/useCreateMessagesContext.ts +2 -0
  217. package/src/components/ChannelList/__tests__/ChannelList.test.js +28 -0
  218. package/src/components/ChannelList/hooks/listeners/useNewMessage.ts +18 -5
  219. package/src/components/ChannelList/hooks/usePaginatedChannels.ts +19 -10
  220. package/src/components/ChannelPreview/ChannelPreview.tsx +6 -3
  221. package/src/components/ImageGallery/ImageGallery.tsx +32 -19
  222. package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +6 -6
  223. package/src/components/ImageGallery/__tests__/ImageGalleryFooter.test.tsx +3 -3
  224. package/src/components/ImageGallery/__tests__/ImageGalleryGrid.test.tsx +3 -3
  225. package/src/components/ImageGallery/__tests__/ImageGalleryHeader.test.tsx +3 -3
  226. package/src/components/ImageGallery/components/ImageGalleryVideoControl.tsx +12 -7
  227. package/src/components/ImageGallery/components/ImageGrid.tsx +3 -3
  228. package/src/components/ImageGallery/hooks/useImageGalleryGestures.tsx +16 -0
  229. package/src/components/Message/Message.tsx +10 -2
  230. package/src/components/Message/MessageSimple/MessageTextContainer.tsx +22 -2
  231. package/src/components/Message/MessageSimple/__tests__/MessageContent.test.js +4 -2
  232. package/src/components/Message/MessageSimple/__tests__/__snapshots__/MessageAvatar.test.js.snap +1 -0
  233. package/src/components/Message/MessageSimple/utils/parseLinks.test.ts +4 -0
  234. package/src/components/Message/MessageSimple/utils/parseLinks.ts +1 -1
  235. package/src/components/Message/MessageSimple/utils/renderText.tsx +1 -1
  236. package/src/components/MessageInput/FileUploadPreview.tsx +34 -26
  237. package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewExpo.test.tsx +15 -8
  238. package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewNative.test.tsx +15 -8
  239. package/src/components/MessageInput/__tests__/FileUploadPreview.test.js +5 -5
  240. package/src/components/MessageList/MessageList.tsx +6 -6
  241. package/src/components/MessageOverlay/MessageOverlay.tsx +1 -0
  242. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +4 -0
  243. package/src/components/index.ts +1 -1
  244. package/src/contexts/imageGalleryContext/ImageGalleryContext.md +1 -1
  245. package/src/contexts/imageGalleryContext/ImageGalleryContext.tsx +19 -14
  246. package/src/contexts/messageInputContext/MessageInputContext.tsx +0 -6
  247. package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +0 -2
  248. package/src/contexts/messagesContext/MessagesContext.tsx +3 -0
  249. package/src/contexts/themeContext/utils/theme.ts +4 -4
  250. package/src/index.ts +3 -0
  251. package/src/mock-builders/DB/mock.ts +4 -9
  252. package/src/mock-builders/event/messageNew.js +2 -0
  253. package/src/store/QuickSqliteClient.ts +11 -7
  254. package/src/store/apis/getChannels.ts +17 -14
  255. package/src/store/apis/getChannelsForFilterSort.ts +45 -0
  256. package/src/store/apis/index.ts +20 -0
  257. package/src/store/apis/queries/selectChannelIdsForFilterSort.ts +12 -2
  258. package/src/store/apis/queries/selectChannels.ts +9 -3
  259. package/src/store/sqlite-utils/appendWhereCluase.ts +1 -2
  260. package/src/{__tests__/utils → test-utils}/BetterSqlite.js +1 -1
  261. package/src/version.json +1 -1
  262. package/lib/commonjs/components/MessageInput/AudioAttachmentUploadPreview.js.map +0 -1
  263. package/lib/module/components/MessageInput/AudioAttachmentUploadPreview.js.map +0 -1
  264. package/lib/typescript/components/MessageInput/AudioAttachmentUploadPreview.d.ts +0 -26
@@ -247,12 +247,12 @@ export type Theme = {
247
247
  editingBoxHeaderTitle: TextStyle;
248
248
  };
249
249
  fileUploadPreview: {
250
- audioAttachmentFileContainer: ViewStyle;
251
- audioAttachmentUploadPreview: {
250
+ audioAttachment: {
252
251
  progressControlView: ViewStyle;
253
252
  progressDurationText: TextStyle;
254
253
  roundedView: ViewStyle;
255
254
  };
255
+ audioAttachmentFileContainer: ViewStyle;
256
256
  dismiss: ViewStyle;
257
257
  fileContainer: ViewStyle;
258
258
  fileContentContainer: ViewStyle;
@@ -746,12 +746,12 @@ export const defaultTheme: Theme = {
746
746
  editingBoxHeaderTitle: {},
747
747
  },
748
748
  fileUploadPreview: {
749
- audioAttachmentFileContainer: {},
750
- audioAttachmentUploadPreview: {
749
+ audioAttachment: {
751
750
  progressControlView: {},
752
751
  progressDurationText: {},
753
752
  roundedView: {},
754
753
  },
754
+ audioAttachmentFileContainer: {},
755
755
  dismiss: {},
756
756
  fileContainer: {},
757
757
  fileContentContainer: {},
package/src/index.ts CHANGED
@@ -22,3 +22,6 @@ export { default as heTranslations } from './i18n/he.json';
22
22
 
23
23
  export { QuickSqliteClient } from './store/QuickSqliteClient';
24
24
  export { version } from './version.json';
25
+
26
+ import * as OfflineStoreApis from './store/apis';
27
+ export { OfflineStoreApis };
@@ -1,8 +1,8 @@
1
- import Database from 'better-sqlite3';
1
+ import Sqlite3 from 'better-sqlite3';
2
2
 
3
3
  import type { PreparedQueries } from '../../store/types';
4
4
 
5
- export let db: Database;
5
+ export let db: Sqlite3.Database;
6
6
 
7
7
  export const sqliteMock = {
8
8
  close: () => {
@@ -15,7 +15,7 @@ export const sqliteMock = {
15
15
  executeSql: (dbName: string, queryInput: string, params: unknown[]) => {
16
16
  const query = queryInput.trim().toLowerCase();
17
17
  const stmt = db.prepare(query);
18
- let result = [];
18
+ let result: unknown[] = [];
19
19
 
20
20
  if (query.indexOf('select') === 0) {
21
21
  if (params) {
@@ -98,15 +98,10 @@ export const sqliteMock = {
98
98
  };
99
99
  },
100
100
  open: () => {
101
- db = new Database('foobar.db');
101
+ db = new Sqlite3('foobar.db');
102
102
  return {
103
103
  message: '',
104
104
  status: 0,
105
105
  };
106
106
  },
107
107
  };
108
-
109
- export const initializeDBMocking = () => {
110
- global.sqlite = sqliteMock;
111
- };
112
- export const resetDBMocking = () => (global.sqlite = undefined);
@@ -1,6 +1,8 @@
1
1
  export default (client, newMessage, channel = {}) => {
2
2
  client.dispatchEvent({
3
3
  channel,
4
+ channel_id: channel.id,
5
+ channel_type: channel.type,
4
6
  cid: channel.cid,
5
7
  message: newMessage,
6
8
  type: 'message.new',
@@ -1,11 +1,9 @@
1
1
  /* eslint-disable no-underscore-dangle */
2
- // Importing following package just to avoid errors using sqlite global.
3
- // @ts-ignore
4
- // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars
5
- import types from 'react-native-quick-sqlite';
2
+ import type { QuickSQLite } from 'react-native-quick-sqlite';
3
+ let sqlite: typeof QuickSQLite;
6
4
 
7
5
  try {
8
- require('react-native-quick-sqlite');
6
+ sqlite = require('react-native-quick-sqlite')?.QuickSQLite;
9
7
  } catch (e) {
10
8
  // Failed for one of the reason
11
9
  // 1. Running on expo, where we don't support offline storage yet.
@@ -17,13 +15,18 @@ import { tables } from './schema';
17
15
  import { createCreateTableQuery } from './sqlite-utils/createCreateTableQuery';
18
16
  import type { PreparedQueries, Table } from './types';
19
17
 
18
+ /**
19
+ * QuickSqliteClient takes care of any direct interaction with sqlite.
20
+ * This way usage react-native-quick-sqlite package is scoped to a single class/file.
21
+ */
20
22
  export class QuickSqliteClient {
21
- static dbVersion = 0;
23
+ static dbVersion = 2;
22
24
 
23
25
  static dbName = DB_NAME;
24
26
  static dbLocation = DB_LOCATION;
25
27
 
26
28
  static getDbVersion = () => this.dbVersion;
29
+ // Force a specific db version. This is mainly useful for testsuit.
27
30
  static setDbVersion = (version: number) => (this.dbVersion = version);
28
31
 
29
32
  static openDB = () => {
@@ -89,13 +92,14 @@ export class QuickSqliteClient {
89
92
 
90
93
  static initializeDatabase = () => {
91
94
  // @ts-ignore
92
- if (window.sqlite === undefined) {
95
+ if (sqlite === undefined) {
93
96
  throw new Error(
94
97
  'Please install "react-native-quick-sqlite" package to enable offline support',
95
98
  );
96
99
  }
97
100
 
98
101
  const version = this.getUserPragmaVersion();
102
+
99
103
  if (version !== this.dbVersion) {
100
104
  this.dropTables();
101
105
  this.updateUserPragmaVersion(this.dbVersion);
@@ -1,36 +1,39 @@
1
- import type { DefaultStreamChatGenerics } from 'src/types/types';
2
- import type { ChannelAPIResponse, ChannelFilters, ChannelSort } from 'stream-chat';
1
+ import type { ChannelAPIResponse } from 'stream-chat';
3
2
 
4
3
  import { getMessages } from './getChannelMessages';
5
4
  import { getMembers } from './getMembers';
6
5
  import { getReads } from './getReads';
7
- import { selectChannelIdsForFilterSort } from './queries/selectChannelIdsForFilterSort';
8
6
  import { selectChannels } from './queries/selectChannels';
9
7
 
8
+ import type { DefaultStreamChatGenerics } from '../../types/types';
10
9
  import { mapStorableToChannel } from '../mappers/mapStorableToChannel';
11
10
 
11
+ /**
12
+ * Returns the list of channels with state enriched for given channel ids.
13
+ *
14
+ * @param {Object} param
15
+ * @param {Array} param.channelIds List of channel ids to fetch.
16
+ * @param {Array} param.currentUserId Id of the current logged in user.
17
+ *
18
+ * @returns {Array} Channels with enriched state.
19
+ */
12
20
  export const getChannels = <
13
21
  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
14
22
  >({
23
+ channelIds,
15
24
  currentUserId,
16
- filters,
17
- sort,
18
25
  }: {
26
+ channelIds: string[];
19
27
  currentUserId: string;
20
- filters?: ChannelFilters<StreamChatGenerics>;
21
- sort?: ChannelSort<StreamChatGenerics>;
22
28
  }): Omit<ChannelAPIResponse<StreamChatGenerics>, 'duration'>[] => {
23
- if (!filters && !sort) {
24
- console.warn('Please provide the query (filters/sort) to fetch channels from DB');
25
- return [];
26
- }
27
-
28
- const channelIds = selectChannelIdsForFilterSort({ filters, sort });
29
29
  const channels = selectChannels({ channelIds });
30
30
 
31
31
  const cidVsMembers = getMembers<StreamChatGenerics>({ channelIds });
32
32
  const cidVsReads = getReads<StreamChatGenerics>({ channelIds });
33
- const cidVsMessages = getMessages<StreamChatGenerics>({ channelIds, currentUserId });
33
+ const cidVsMessages = getMessages<StreamChatGenerics>({
34
+ channelIds,
35
+ currentUserId,
36
+ });
34
37
 
35
38
  // Enrich the channels with state
36
39
  return channels.map((c) => ({
@@ -0,0 +1,45 @@
1
+ import type { DefaultStreamChatGenerics } from 'src/types/types';
2
+ import type { ChannelAPIResponse, ChannelFilters, ChannelSort } from 'stream-chat';
3
+
4
+ import { getChannels } from './getChannels';
5
+ import { selectChannelIdsForFilterSort } from './queries/selectChannelIdsForFilterSort';
6
+
7
+ /**
8
+ * Gets the channels from database for given filter and sort query.
9
+ *
10
+ * @param {Object} param
11
+ * @param {string} param.currentUserId Id of current logged in user
12
+ * @param {Object} param.filters Filters for channels https://getstream.io/chat/docs/javascript/query_channels/?language=javascript&q=su#query-parameters
13
+ * @param {Object} param.sort Sort for channels https://getstream.io/chat/docs/javascript/query_channels/?language=javascript&q=su#query-parameters
14
+ *
15
+ * @returns Array of channels corresponding to filters & sort. Returns null if filters + sort query doesn't exist in "channelQueries" table.
16
+ */
17
+ export const getChannelsForFilterSort = <
18
+ StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
19
+ >({
20
+ currentUserId,
21
+ filters,
22
+ sort,
23
+ }: {
24
+ currentUserId: string;
25
+ filters?: ChannelFilters<StreamChatGenerics>;
26
+ sort?: ChannelSort<StreamChatGenerics>;
27
+ }): Omit<ChannelAPIResponse<StreamChatGenerics>, 'duration'>[] | null => {
28
+ if (!filters && !sort) {
29
+ console.warn('Please provide the query (filters/sort) to fetch channels from DB');
30
+ return null;
31
+ }
32
+
33
+ const channelIds = selectChannelIdsForFilterSort({ filters, sort });
34
+
35
+ if (!channelIds) return null;
36
+
37
+ if (channelIds.length === 0) {
38
+ return [];
39
+ }
40
+
41
+ return getChannels({
42
+ channelIds,
43
+ currentUserId,
44
+ });
45
+ };
@@ -0,0 +1,20 @@
1
+ export * from './deleteChannel';
2
+ export * from './deleteMember';
3
+ export * from './deleteMessagesForChannel';
4
+ export * from './deleteReactions';
5
+ export * from './getAllChannelIds';
6
+ export * from './getChannelMessages';
7
+ export * from './getChannels';
8
+ export * from './getChannelsForFilterSort';
9
+ export * from './getLastSyncedAt';
10
+ export * from './getMembers';
11
+ export * from './getReads';
12
+ export * from './updateMessage';
13
+ export * from './updateReaction';
14
+ export * from './upsertChannelData';
15
+ export * from './upsertChannels';
16
+ export * from './upsertCidsForQuery';
17
+ export * from './upsertLastSyncedAt';
18
+ export * from './upsertMembers';
19
+ export * from './upsertMessages';
20
+ export * from './upsertReads';
@@ -6,6 +6,16 @@ import { createSelectQuery } from '../../sqlite-utils/createSelectQuery';
6
6
 
7
7
  import { convertFilterSortToQuery } from '../utils/convertFilterSortToQuery';
8
8
 
9
+ /**
10
+ * Gets the channel ids from database for given filter and sort query.
11
+ *
12
+ * @param {Object} param
13
+ * @param {Object} param.filters Filters for channels https://getstream.io/chat/docs/javascript/query_channels/?language=javascript&q=su#query-parameters
14
+ * @param {Object} param.sort Sort for channels https://getstream.io/chat/docs/javascript/query_channels/?language=javascript&q=su#query-parameters
15
+ *
16
+ * @returns Array of channel ids corresponding to filters & sort. Returns null if filters + sort query doesn't exist in "channelQueries" table.
17
+ */
18
+
9
19
  export const selectChannelIdsForFilterSort = <
10
20
  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
11
21
  >({
@@ -14,7 +24,7 @@ export const selectChannelIdsForFilterSort = <
14
24
  }: {
15
25
  filters?: ChannelFilters<StreamChatGenerics>;
16
26
  sort?: ChannelSort<StreamChatGenerics>;
17
- }): string[] => {
27
+ }): string[] | null => {
18
28
  const query = convertFilterSortToQuery({ filters, sort });
19
29
  const results = QuickSqliteClient.executeSql.apply(
20
30
  null,
@@ -24,5 +34,5 @@ export const selectChannelIdsForFilterSort = <
24
34
  );
25
35
 
26
36
  const channelIdsStr = results?.[0]?.cids;
27
- return channelIdsStr ? JSON.parse(channelIdsStr) : [];
37
+ return channelIdsStr ? JSON.parse(channelIdsStr) : null;
28
38
  };
@@ -5,9 +5,15 @@ import type { TableRowJoinedUser } from '../../types';
5
5
  export const selectChannels = ({
6
6
  channelIds,
7
7
  }: { channelIds?: string[] } = {}): TableRowJoinedUser<'channels'>[] => {
8
- const query = createSelectQuery('channels', ['*'], {
9
- cid: channelIds,
10
- });
8
+ const query = createSelectQuery(
9
+ 'channels',
10
+ ['*'],
11
+ channelIds
12
+ ? {
13
+ cid: channelIds,
14
+ }
15
+ : undefined,
16
+ );
11
17
 
12
18
  const result = QuickSqliteClient.executeSql.apply(null, query);
13
19
 
@@ -15,7 +15,6 @@ export const appendWhereClause = <T extends keyof Schema>(
15
15
  if (value === undefined) continue;
16
16
 
17
17
  if (Array.isArray(value)) {
18
- if (value.length === 0) continue;
19
18
  const questionMarks = Array(Object.keys(value).length).fill('?').join(',');
20
19
  whereClause.push(`${key} in (${questionMarks})`);
21
20
  whereParams.push(...value);
@@ -25,7 +24,7 @@ export const appendWhereClause = <T extends keyof Schema>(
25
24
  }
26
25
  }
27
26
 
28
- if (!whereParams.length) {
27
+ if (!whereParams.length && !whereClause.length) {
29
28
  return [selectQuery, []];
30
29
  }
31
30
 
@@ -1,6 +1,6 @@
1
1
  import Database from 'better-sqlite3';
2
2
 
3
- import { tables } from '../../store/schema';
3
+ import { tables } from '../store/schema';
4
4
 
5
5
  export class BetterSqlite {
6
6
  db = null;
package/src/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "5.0.0-offline-support.12"
2
+ "version": "5.0.0"
3
3
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["AudioAttachmentUploadPreview.tsx"],"names":["dayjs","extend","duration","FILE_PREVIEW_HEIGHT","styles","StyleSheet","create","fileContainer","borderRadius","borderWidth","flexDirection","height","paddingLeft","paddingRight","fileContentContainer","filenameText","fontSize","fontWeight","fileTextContainer","justifyContent","flatList","marginBottom","maxHeight","overlay","marginLeft","marginRight","progressControlView","flex","progressDurationText","roundedView","alignItems","alignSelf","display","elevation","shadowOffset","width","shadowOpacity","shadowRadius","AudioAttachmentUploadPreviewWithContext","props","soundRef","React","useRef","fileUploads","index","item","onLoad","onPlayPause","onProgress","handleLoad","payload","id","handleProgress","data","currentTime","seekableDuration","handlePlayPause","isPausedStatusAvailable","current","undefined","progress","seek","setPositionAsync","paused","playAsync","pauseAsync","handleProgressDrag","position","handleEnd","onPlaybackStatusUpdate","playbackStatus","isLoaded","error","console","log","durationMillis","positionMillis","isPlaying","isBuffering","didJustFinish","isLooping","Sound","Player","initiateSound","file","uri","initializeSound","stopAsync","unloadAsync","initalPlayPause","theme","colors","accent_blue","black","grey_dark","grey_whisper","static_black","static_white","messageInput","fileUploadPreview","audioAttachmentUploadPreview","progressValueInSeconds","progressDuration","format","lastIndexOfDot","name","lastIndexOf","length","borderColor","backgroundColor","shadowColor","color","I18nManager","isRTL","writingDirection","slice","AudioAttachmentUploadPreview","removeFile","uploadFile","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\nimport { I18nManager, StyleSheet, Text, TouchableOpacity, View } from 'react-native';\n\nimport dayjs from 'dayjs';\nimport duration from 'dayjs/plugin/duration';\n\nimport {\n FileUpload,\n MessageInputContextValue,\n useMessageInputContext,\n useTheme,\n} from '../../contexts';\nimport { Pause, Play } from '../../icons';\nimport {\n PlaybackStatus,\n Sound,\n SoundReturnType,\n VideoPayloadData,\n VideoProgressData,\n} from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { ProgressControl } from '../ProgressControl/ProgressControl';\n\ndayjs.extend(duration);\n\nconst FILE_PREVIEW_HEIGHT = 70;\n\nconst styles = StyleSheet.create({\n fileContainer: {\n borderRadius: 12,\n borderWidth: 1,\n flexDirection: 'row',\n height: FILE_PREVIEW_HEIGHT,\n paddingLeft: 8,\n paddingRight: 8,\n },\n fileContentContainer: { flexDirection: 'row' },\n filenameText: {\n fontSize: 14,\n fontWeight: 'bold',\n paddingLeft: 10,\n },\n fileTextContainer: {\n justifyContent: 'space-around',\n },\n flatList: { marginBottom: 12, maxHeight: FILE_PREVIEW_HEIGHT * 2.5 + 16 },\n overlay: {\n borderRadius: 12,\n marginLeft: 8,\n marginRight: 8,\n },\n progressControlView: {\n flex: 8,\n },\n progressDurationText: {\n flex: 4,\n fontSize: 12,\n paddingLeft: 10,\n paddingRight: 8,\n },\n roundedView: {\n alignItems: 'center',\n alignSelf: 'center',\n borderRadius: 50,\n display: 'flex',\n elevation: 4,\n height: 36,\n justifyContent: 'center',\n shadowOffset: {\n height: 2,\n width: 0,\n },\n shadowOpacity: 0.23,\n shadowRadius: 2.62,\n width: 36,\n },\n});\n\nexport type AudioAttachmentUploadPreviewPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n MessageInputContextValue<StreamChatGenerics>,\n 'fileUploads' | 'removeFile' | 'uploadFile'\n> & {\n index: number;\n item: FileUpload;\n onLoad: (index: string, duration: number) => void;\n onPlayPause: (index: string, status?: boolean) => void;\n onProgress: (index: string, currentTime?: number, hasEnd?: boolean) => void;\n testID: string;\n};\n\nconst AudioAttachmentUploadPreviewWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: AudioAttachmentUploadPreviewPropsWithContext<StreamChatGenerics>,\n) => {\n const soundRef = React.useRef<SoundReturnType | null>(null);\n const { fileUploads, index, item, onLoad, onPlayPause, onProgress } = props;\n\n const handleLoad = (payload: VideoPayloadData) => {\n onLoad(item.id, payload.duration);\n };\n\n const handleProgress = (data: VideoProgressData) => {\n if (data.currentTime && data.seekableDuration) {\n onProgress(item.id, data.currentTime);\n }\n };\n\n const handlePlayPause = async (isPausedStatusAvailable?: boolean) => {\n if (soundRef.current) {\n if (isPausedStatusAvailable === undefined) {\n if (item.progress === 1) {\n // For native CLI\n if (soundRef.current.seek) soundRef.current.seek(0);\n // For expo CLI\n if (soundRef.current.setPositionAsync) soundRef.current.setPositionAsync(0);\n }\n if (item.paused) {\n if (soundRef.current.playAsync) await soundRef.current.playAsync();\n onPlayPause(item.id, false);\n } else {\n if (soundRef.current.pauseAsync) await soundRef.current.pauseAsync();\n onPlayPause(item.id, true);\n }\n } else {\n onPlayPause(item.id, isPausedStatusAvailable);\n }\n }\n };\n\n const handleProgressDrag = async (position: number) => {\n onProgress(item.id, position);\n if (soundRef.current?.seek) soundRef.current.seek(position);\n if (soundRef.current?.setPositionAsync) {\n await soundRef.current.setPositionAsync(position * 1000);\n }\n };\n\n const handleEnd = () => {\n onPlayPause(item.id, true);\n onProgress(item.id, item.duration, true);\n };\n\n const onPlaybackStatusUpdate = (playbackStatus: PlaybackStatus) => {\n if (!playbackStatus.isLoaded) {\n // Update your UI for the unloaded state\n if (playbackStatus.error) {\n console.log(`Encountered a fatal error during playback: ${playbackStatus.error}`);\n }\n } else {\n const { durationMillis, positionMillis } = playbackStatus;\n onLoad(item.id, durationMillis / 1000);\n // Update your UI for the loaded state\n if (playbackStatus.isPlaying) {\n // Update your UI for the playing state\n onProgress(item.id, positionMillis / 1000);\n } else {\n // Update your UI for the paused state\n }\n\n if (playbackStatus.isBuffering) {\n // Update your UI for the buffering state\n }\n\n if (playbackStatus.didJustFinish && !playbackStatus.isLooping) {\n // The player has just finished playing and will stop. Maybe you want to play something else?\n // status: opposite of pause,says i am playing\n handleEnd();\n }\n }\n };\n\n useEffect(() => {\n if (Sound.Player === null) {\n const initiateSound = async () => {\n if (item && item.file && item.file.uri) {\n soundRef.current = await Sound.initializeSound(\n { uri: item.file.uri },\n {},\n onPlaybackStatusUpdate,\n );\n }\n };\n initiateSound();\n }\n\n return () => {\n if (soundRef.current?.stopAsync && soundRef.current.unloadAsync) {\n soundRef.current.stopAsync();\n soundRef.current.unloadAsync();\n }\n };\n }, []);\n\n // This is needed for expo applications where the rerender doesn't occur on time thefore you need to update the state of the sound.\n useEffect(() => {\n const initalPlayPause = async () => {\n if (soundRef.current) {\n if (item.paused) {\n if (soundRef.current.pauseAsync) await soundRef.current.pauseAsync();\n } else {\n if (soundRef.current.playAsync) await soundRef.current.playAsync();\n }\n }\n };\n if (!Sound.Player) {\n initalPlayPause();\n }\n }, [item.paused]);\n\n const {\n theme: {\n colors: { accent_blue, black, grey_dark, grey_whisper, static_black, static_white },\n messageInput: {\n fileUploadPreview: {\n audioAttachmentUploadPreview: { progressControlView, progressDurationText, roundedView },\n fileContainer,\n fileContentContainer,\n filenameText,\n fileTextContainer,\n },\n },\n },\n } = useTheme();\n\n const progressValueInSeconds = (item.duration as number) * (item.progress as number);\n\n const progressDuration = progressValueInSeconds\n ? progressValueInSeconds / 3600 >= 1\n ? dayjs.duration(progressValueInSeconds, 'second').format('HH:mm:ss')\n : dayjs.duration(progressValueInSeconds, 'second').format('mm:ss')\n : '00:00';\n\n const lastIndexOfDot = item.file.name.lastIndexOf('.');\n\n return (\n <View\n style={[\n styles.fileContainer,\n index === fileUploads.length - 1\n ? {\n marginBottom: 0,\n }\n : {},\n {\n borderColor: grey_whisper,\n width: -16,\n },\n fileContainer,\n ]}\n testID='audio-attachment-upload-preview'\n >\n <View style={[styles.fileContentContainer, fileContentContainer]}>\n <TouchableOpacity\n accessibilityLabel='Play Pause Button'\n onPress={() => handlePlayPause()}\n style={[\n styles.roundedView,\n roundedView,\n { backgroundColor: static_white, shadowColor: black },\n ]}\n >\n {item.paused ? (\n <Play height={24} pathFill={static_black} width={24} />\n ) : (\n <Pause height={24} pathFill={static_black} width={24} />\n )}\n </TouchableOpacity>\n <View style={[styles.fileTextContainer, fileTextContainer]}>\n <Text\n accessibilityLabel='File Name'\n numberOfLines={1}\n style={[\n styles.filenameText,\n {\n color: black,\n width:\n 16 - // 16 = horizontal padding\n 40 - // 40 = file icon size\n 24 - // 24 = close icon size\n 24, // 24 = internal padding\n },\n I18nManager.isRTL ? { writingDirection: 'rtl' } : { writingDirection: 'ltr' },\n filenameText,\n ]}\n >\n {item.file.name.slice(0, 12) + '...' + item.file.name.slice(lastIndexOfDot)}\n </Text>\n <View\n style={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'row',\n }}\n >\n {/* <ExpoSoundPlayer filePaused={!!item.paused} soundRef={soundRef} /> */}\n {Sound.Player && (\n <Sound.Player\n onEnd={handleEnd}\n onLoad={handleLoad}\n onProgress={handleProgress}\n paused={item.paused as boolean}\n soundRef={soundRef}\n testID='sound-player'\n uri={item.file.uri}\n />\n )}\n <Text style={[styles.progressDurationText, { color: grey_dark }, progressDurationText]}>\n {progressDuration}\n </Text>\n <View style={[styles.progressControlView, progressControlView]}>\n <ProgressControl\n duration={item.duration as number}\n filledColor={accent_blue}\n onPlayPause={handlePlayPause}\n onProgressDrag={handleProgressDrag}\n progress={item.progress as number}\n testID='progress-control'\n width={110}\n />\n </View>\n </View>\n </View>\n </View>\n </View>\n );\n};\n\nexport type AudioAttachmentUploadPreviewProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<AudioAttachmentUploadPreviewPropsWithContext<StreamChatGenerics>> & {\n index: number;\n item: FileUpload;\n onLoad: (index: string, duration: number) => void;\n onPlayPause: (index: string, status?: boolean) => void;\n onProgress: (index: string, currentTime?: number, hasEnd?: boolean) => void;\n testID: string;\n};\n\n/**\n * AudioAttachmentUploadPreview\n * UI Component to preview the audio files set for upload\n */\nexport const AudioAttachmentUploadPreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: AudioAttachmentUploadPreviewProps<StreamChatGenerics>,\n) => {\n const { fileUploads, removeFile, uploadFile } = useMessageInputContext<StreamChatGenerics>();\n\n return (\n <AudioAttachmentUploadPreviewWithContext\n {...{ fileUploads, removeFile, uploadFile }}\n {...props}\n />\n );\n};\n\nAudioAttachmentUploadPreview.displayName =\n 'AudioAttachmentUploadPreview{messageInput{autoAttachmentUploadPreview}}';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["AudioAttachmentUploadPreview.tsx"],"names":["dayjs","extend","duration","FILE_PREVIEW_HEIGHT","styles","StyleSheet","create","fileContainer","borderRadius","borderWidth","flexDirection","height","paddingLeft","paddingRight","fileContentContainer","filenameText","fontSize","fontWeight","fileTextContainer","justifyContent","flatList","marginBottom","maxHeight","overlay","marginLeft","marginRight","progressControlView","flex","progressDurationText","roundedView","alignItems","alignSelf","display","elevation","shadowOffset","width","shadowOpacity","shadowRadius","AudioAttachmentUploadPreviewWithContext","props","soundRef","React","useRef","fileUploads","index","item","onLoad","onPlayPause","onProgress","handleLoad","payload","id","handleProgress","data","currentTime","seekableDuration","handlePlayPause","isPausedStatusAvailable","current","undefined","progress","seek","setPositionAsync","paused","playAsync","pauseAsync","handleProgressDrag","position","handleEnd","onPlaybackStatusUpdate","playbackStatus","isLoaded","error","console","log","durationMillis","positionMillis","isPlaying","isBuffering","didJustFinish","isLooping","Sound","Player","initiateSound","file","uri","initializeSound","stopAsync","unloadAsync","initalPlayPause","theme","colors","accent_blue","black","grey_dark","grey_whisper","static_black","static_white","messageInput","fileUploadPreview","audioAttachmentUploadPreview","progressValueInSeconds","progressDuration","format","lastIndexOfDot","name","lastIndexOf","length","borderColor","backgroundColor","shadowColor","color","I18nManager","isRTL","writingDirection","slice","AudioAttachmentUploadPreview","removeFile","uploadFile","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\nimport { I18nManager, StyleSheet, Text, TouchableOpacity, View } from 'react-native';\n\nimport dayjs from 'dayjs';\nimport duration from 'dayjs/plugin/duration';\n\nimport {\n FileUpload,\n MessageInputContextValue,\n useMessageInputContext,\n useTheme,\n} from '../../contexts';\nimport { Pause, Play } from '../../icons';\nimport {\n PlaybackStatus,\n Sound,\n SoundReturnType,\n VideoPayloadData,\n VideoProgressData,\n} from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { ProgressControl } from '../ProgressControl/ProgressControl';\n\ndayjs.extend(duration);\n\nconst FILE_PREVIEW_HEIGHT = 70;\n\nconst styles = StyleSheet.create({\n fileContainer: {\n borderRadius: 12,\n borderWidth: 1,\n flexDirection: 'row',\n height: FILE_PREVIEW_HEIGHT,\n paddingLeft: 8,\n paddingRight: 8,\n },\n fileContentContainer: { flexDirection: 'row' },\n filenameText: {\n fontSize: 14,\n fontWeight: 'bold',\n paddingLeft: 10,\n },\n fileTextContainer: {\n justifyContent: 'space-around',\n },\n flatList: { marginBottom: 12, maxHeight: FILE_PREVIEW_HEIGHT * 2.5 + 16 },\n overlay: {\n borderRadius: 12,\n marginLeft: 8,\n marginRight: 8,\n },\n progressControlView: {\n flex: 8,\n },\n progressDurationText: {\n flex: 4,\n fontSize: 12,\n paddingLeft: 10,\n paddingRight: 8,\n },\n roundedView: {\n alignItems: 'center',\n alignSelf: 'center',\n borderRadius: 50,\n display: 'flex',\n elevation: 4,\n height: 36,\n justifyContent: 'center',\n shadowOffset: {\n height: 2,\n width: 0,\n },\n shadowOpacity: 0.23,\n shadowRadius: 2.62,\n width: 36,\n },\n});\n\nexport type AudioAttachmentUploadPreviewPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n MessageInputContextValue<StreamChatGenerics>,\n 'fileUploads' | 'removeFile' | 'uploadFile'\n> & {\n index: number;\n item: FileUpload;\n onLoad: (index: string, duration: number) => void;\n onPlayPause: (index: string, status?: boolean) => void;\n onProgress: (index: string, currentTime?: number, hasEnd?: boolean) => void;\n testID: string;\n};\n\nconst AudioAttachmentUploadPreviewWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: AudioAttachmentUploadPreviewPropsWithContext<StreamChatGenerics>,\n) => {\n const soundRef = React.useRef<SoundReturnType | null>(null);\n const { fileUploads, index, item, onLoad, onPlayPause, onProgress } = props;\n\n const handleLoad = (payload: VideoPayloadData) => {\n onLoad(item.id, payload.duration);\n };\n\n const handleProgress = (data: VideoProgressData) => {\n if (data.currentTime && data.seekableDuration) {\n onProgress(item.id, data.currentTime);\n }\n };\n\n const handlePlayPause = async (isPausedStatusAvailable?: boolean) => {\n if (soundRef.current) {\n if (isPausedStatusAvailable === undefined) {\n if (item.progress === 1) {\n // For native CLI\n if (soundRef.current.seek) soundRef.current.seek(0);\n // For expo CLI\n if (soundRef.current.setPositionAsync) soundRef.current.setPositionAsync(0);\n }\n if (item.paused) {\n if (soundRef.current.playAsync) await soundRef.current.playAsync();\n onPlayPause(item.id, false);\n } else {\n if (soundRef.current.pauseAsync) await soundRef.current.pauseAsync();\n onPlayPause(item.id, true);\n }\n } else {\n onPlayPause(item.id, isPausedStatusAvailable);\n }\n }\n };\n\n const handleProgressDrag = async (position: number) => {\n onProgress(item.id, position);\n if (soundRef.current?.seek) soundRef.current.seek(position);\n if (soundRef.current?.setPositionAsync) {\n await soundRef.current.setPositionAsync(position * 1000);\n }\n };\n\n const handleEnd = () => {\n onPlayPause(item.id, true);\n onProgress(item.id, item.duration, true);\n };\n\n const onPlaybackStatusUpdate = (playbackStatus: PlaybackStatus) => {\n if (!playbackStatus.isLoaded) {\n // Update your UI for the unloaded state\n if (playbackStatus.error) {\n console.log(`Encountered a fatal error during playback: ${playbackStatus.error}`);\n }\n } else {\n const { durationMillis, positionMillis } = playbackStatus;\n onLoad(item.id, durationMillis / 1000);\n // Update your UI for the loaded state\n if (playbackStatus.isPlaying) {\n // Update your UI for the playing state\n onProgress(item.id, positionMillis / 1000);\n } else {\n // Update your UI for the paused state\n }\n\n if (playbackStatus.isBuffering) {\n // Update your UI for the buffering state\n }\n\n if (playbackStatus.didJustFinish && !playbackStatus.isLooping) {\n // The player has just finished playing and will stop. Maybe you want to play something else?\n // status: opposite of pause,says i am playing\n handleEnd();\n }\n }\n };\n\n useEffect(() => {\n if (Sound.Player === null) {\n const initiateSound = async () => {\n if (item && item.file && item.file.uri) {\n soundRef.current = await Sound.initializeSound(\n { uri: item.file.uri },\n {},\n onPlaybackStatusUpdate,\n );\n }\n };\n initiateSound();\n }\n\n return () => {\n if (soundRef.current?.stopAsync && soundRef.current.unloadAsync) {\n soundRef.current.stopAsync();\n soundRef.current.unloadAsync();\n }\n };\n }, []);\n\n // This is needed for expo applications where the rerender doesn't occur on time thefore you need to update the state of the sound.\n useEffect(() => {\n const initalPlayPause = async () => {\n if (soundRef.current) {\n if (item.paused) {\n if (soundRef.current.pauseAsync) await soundRef.current.pauseAsync();\n } else {\n if (soundRef.current.playAsync) await soundRef.current.playAsync();\n }\n }\n };\n if (!Sound.Player) {\n initalPlayPause();\n }\n }, [item.paused]);\n\n const {\n theme: {\n colors: { accent_blue, black, grey_dark, grey_whisper, static_black, static_white },\n messageInput: {\n fileUploadPreview: {\n audioAttachmentUploadPreview: { progressControlView, progressDurationText, roundedView },\n fileContainer,\n fileContentContainer,\n filenameText,\n fileTextContainer,\n },\n },\n },\n } = useTheme();\n\n const progressValueInSeconds = (item.duration as number) * (item.progress as number);\n\n const progressDuration = progressValueInSeconds\n ? progressValueInSeconds / 3600 >= 1\n ? dayjs.duration(progressValueInSeconds, 'second').format('HH:mm:ss')\n : dayjs.duration(progressValueInSeconds, 'second').format('mm:ss')\n : '00:00';\n\n const lastIndexOfDot = item.file.name.lastIndexOf('.');\n\n return (\n <View\n style={[\n styles.fileContainer,\n index === fileUploads.length - 1\n ? {\n marginBottom: 0,\n }\n : {},\n {\n borderColor: grey_whisper,\n width: -16,\n },\n fileContainer,\n ]}\n testID='audio-attachment-upload-preview'\n >\n <View style={[styles.fileContentContainer, fileContentContainer]}>\n <TouchableOpacity\n accessibilityLabel='Play Pause Button'\n onPress={() => handlePlayPause()}\n style={[\n styles.roundedView,\n roundedView,\n { backgroundColor: static_white, shadowColor: black },\n ]}\n >\n {item.paused ? (\n <Play height={24} pathFill={static_black} width={24} />\n ) : (\n <Pause height={24} pathFill={static_black} width={24} />\n )}\n </TouchableOpacity>\n <View style={[styles.fileTextContainer, fileTextContainer]}>\n <Text\n accessibilityLabel='File Name'\n numberOfLines={1}\n style={[\n styles.filenameText,\n {\n color: black,\n width:\n 16 - // 16 = horizontal padding\n 40 - // 40 = file icon size\n 24 - // 24 = close icon size\n 24, // 24 = internal padding\n },\n I18nManager.isRTL ? { writingDirection: 'rtl' } : { writingDirection: 'ltr' },\n filenameText,\n ]}\n >\n {item.file.name.slice(0, 12) + '...' + item.file.name.slice(lastIndexOfDot)}\n </Text>\n <View\n style={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'row',\n }}\n >\n {/* <ExpoSoundPlayer filePaused={!!item.paused} soundRef={soundRef} /> */}\n {Sound.Player && (\n <Sound.Player\n onEnd={handleEnd}\n onLoad={handleLoad}\n onProgress={handleProgress}\n paused={item.paused as boolean}\n soundRef={soundRef}\n testID='sound-player'\n uri={item.file.uri}\n />\n )}\n <Text style={[styles.progressDurationText, { color: grey_dark }, progressDurationText]}>\n {progressDuration}\n </Text>\n <View style={[styles.progressControlView, progressControlView]}>\n <ProgressControl\n duration={item.duration as number}\n filledColor={accent_blue}\n onPlayPause={handlePlayPause}\n onProgressDrag={handleProgressDrag}\n progress={item.progress as number}\n testID='progress-control'\n width={110}\n />\n </View>\n </View>\n </View>\n </View>\n </View>\n );\n};\n\nexport type AudioAttachmentUploadPreviewProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<AudioAttachmentUploadPreviewPropsWithContext<StreamChatGenerics>> & {\n index: number;\n item: FileUpload;\n onLoad: (index: string, duration: number) => void;\n onPlayPause: (index: string, status?: boolean) => void;\n onProgress: (index: string, currentTime?: number, hasEnd?: boolean) => void;\n testID: string;\n};\n\n/**\n * AudioAttachmentUploadPreview\n * UI Component to preview the audio files set for upload\n */\nexport const AudioAttachmentUploadPreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: AudioAttachmentUploadPreviewProps<StreamChatGenerics>,\n) => {\n const { fileUploads, removeFile, uploadFile } = useMessageInputContext<StreamChatGenerics>();\n\n return (\n <AudioAttachmentUploadPreviewWithContext\n {...{ fileUploads, removeFile, uploadFile }}\n {...props}\n />\n );\n};\n\nAudioAttachmentUploadPreview.displayName =\n 'AudioAttachmentUploadPreview{messageInput{autoAttachmentUploadPreview}}';\n"]}
@@ -1,26 +0,0 @@
1
- import { FileUpload, MessageInputContextValue } from '../../contexts';
2
- import type { DefaultStreamChatGenerics } from '../../types/types';
3
- export declare type AudioAttachmentUploadPreviewPropsWithContext<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Pick<MessageInputContextValue<StreamChatGenerics>, 'fileUploads' | 'removeFile' | 'uploadFile'> & {
4
- index: number;
5
- item: FileUpload;
6
- onLoad: (index: string, duration: number) => void;
7
- onPlayPause: (index: string, status?: boolean) => void;
8
- onProgress: (index: string, currentTime?: number, hasEnd?: boolean) => void;
9
- testID: string;
10
- };
11
- export declare type AudioAttachmentUploadPreviewProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Partial<AudioAttachmentUploadPreviewPropsWithContext<StreamChatGenerics>> & {
12
- index: number;
13
- item: FileUpload;
14
- onLoad: (index: string, duration: number) => void;
15
- onPlayPause: (index: string, status?: boolean) => void;
16
- onProgress: (index: string, currentTime?: number, hasEnd?: boolean) => void;
17
- testID: string;
18
- };
19
- /**
20
- * AudioAttachmentUploadPreview
21
- * UI Component to preview the audio files set for upload
22
- */
23
- export declare const AudioAttachmentUploadPreview: {
24
- <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(props: AudioAttachmentUploadPreviewProps<StreamChatGenerics>): JSX.Element;
25
- displayName: string;
26
- };