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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/lib/commonjs/components/Channel/Channel.js +22 -16
  2. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  3. package/lib/commonjs/components/Chat/Chat.js +1 -1
  4. package/lib/commonjs/components/Chat/Chat.js.map +1 -1
  5. package/lib/commonjs/components/Chat/hooks/useAppSettings.js +51 -22
  6. package/lib/commonjs/components/Chat/hooks/useAppSettings.js.map +1 -1
  7. package/lib/commonjs/components/Chat/hooks/useIsOnline.js +1 -1
  8. package/lib/commonjs/components/Chat/hooks/useIsOnline.js.map +1 -1
  9. package/lib/commonjs/contexts/chatContext/ChatContext.js.map +1 -1
  10. package/lib/commonjs/store/QuickSqliteClient.js +46 -1
  11. package/lib/commonjs/store/QuickSqliteClient.js.map +1 -1
  12. package/lib/commonjs/store/QuickSqliteClient_v4.js +112 -0
  13. package/lib/commonjs/store/QuickSqliteClient_v4.js.map +1 -0
  14. package/lib/commonjs/store/apis/getAppSettings.js +23 -0
  15. package/lib/commonjs/store/apis/getAppSettings.js.map +1 -0
  16. package/lib/commonjs/store/apis/getPendingTasks.js.map +1 -1
  17. package/lib/commonjs/store/apis/index.js +26 -0
  18. package/lib/commonjs/store/apis/index.js.map +1 -1
  19. package/lib/commonjs/store/apis/queries/selectChannels.js.map +1 -1
  20. package/lib/commonjs/store/apis/queries/selectMembersForChannels.js.map +1 -1
  21. package/lib/commonjs/store/apis/queries/selectMessagesForChannels.js.map +1 -1
  22. package/lib/commonjs/store/apis/queries/selectReactionsForMessages.js.map +1 -1
  23. package/lib/commonjs/store/apis/queries/selectReadsForChannels.js.map +1 -1
  24. package/lib/commonjs/store/apis/upsertAppSettings.js +26 -0
  25. package/lib/commonjs/store/apis/upsertAppSettings.js.map +1 -0
  26. package/lib/commonjs/store/schema.js +1 -0
  27. package/lib/commonjs/store/schema.js.map +1 -1
  28. package/lib/commonjs/version.json +1 -1
  29. package/lib/module/components/Channel/Channel.js +22 -16
  30. package/lib/module/components/Channel/Channel.js.map +1 -1
  31. package/lib/module/components/Chat/Chat.js +1 -1
  32. package/lib/module/components/Chat/Chat.js.map +1 -1
  33. package/lib/module/components/Chat/hooks/useAppSettings.js +51 -22
  34. package/lib/module/components/Chat/hooks/useAppSettings.js.map +1 -1
  35. package/lib/module/components/Chat/hooks/useIsOnline.js +1 -1
  36. package/lib/module/components/Chat/hooks/useIsOnline.js.map +1 -1
  37. package/lib/module/contexts/chatContext/ChatContext.js.map +1 -1
  38. package/lib/module/store/QuickSqliteClient.js +46 -1
  39. package/lib/module/store/QuickSqliteClient.js.map +1 -1
  40. package/lib/module/store/QuickSqliteClient_v4.js +112 -0
  41. package/lib/module/store/QuickSqliteClient_v4.js.map +1 -0
  42. package/lib/module/store/apis/getAppSettings.js +23 -0
  43. package/lib/module/store/apis/getAppSettings.js.map +1 -0
  44. package/lib/module/store/apis/getPendingTasks.js.map +1 -1
  45. package/lib/module/store/apis/index.js +26 -0
  46. package/lib/module/store/apis/index.js.map +1 -1
  47. package/lib/module/store/apis/queries/selectChannels.js.map +1 -1
  48. package/lib/module/store/apis/queries/selectMembersForChannels.js.map +1 -1
  49. package/lib/module/store/apis/queries/selectMessagesForChannels.js.map +1 -1
  50. package/lib/module/store/apis/queries/selectReactionsForMessages.js.map +1 -1
  51. package/lib/module/store/apis/queries/selectReadsForChannels.js.map +1 -1
  52. package/lib/module/store/apis/upsertAppSettings.js +26 -0
  53. package/lib/module/store/apis/upsertAppSettings.js.map +1 -0
  54. package/lib/module/store/schema.js +1 -0
  55. package/lib/module/store/schema.js.map +1 -1
  56. package/lib/module/version.json +1 -1
  57. package/lib/typescript/components/Chat/hooks/useAppSettings.d.ts +2 -2
  58. package/lib/typescript/components/Chat/hooks/useIsOnline.d.ts +1 -1
  59. package/lib/typescript/contexts/chatContext/ChatContext.d.ts +1 -1
  60. package/lib/typescript/store/QuickSqliteClient.d.ts +4 -1
  61. package/lib/typescript/store/QuickSqliteClient_v4.d.ts +12 -0
  62. package/lib/typescript/store/apis/getAppSettings.d.ts +4 -0
  63. package/lib/typescript/store/apis/getPendingTasks.d.ts +1 -1
  64. package/lib/typescript/store/apis/index.d.ts +2 -0
  65. package/lib/typescript/store/apis/upsertAppSettings.d.ts +6 -0
  66. package/lib/typescript/store/schema.d.ts +1 -0
  67. package/package.json +1 -1
  68. package/src/components/Attachment/__tests__/Gallery.test.js +9 -2
  69. package/src/components/Attachment/__tests__/Giphy.test.js +9 -5
  70. package/src/components/Channel/Channel.tsx +8 -1
  71. package/src/components/Chat/Chat.tsx +1 -1
  72. package/src/components/Chat/hooks/__tests__/useAppSettings.test.tsx +1 -0
  73. package/src/components/Chat/hooks/useAppSettings.ts +19 -6
  74. package/src/components/Chat/hooks/useIsOnline.ts +1 -1
  75. package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +29 -15
  76. package/src/components/ImageGallery/__tests__/ImageGalleryFooter.test.tsx +12 -6
  77. package/src/components/ImageGallery/__tests__/ImageGalleryHeader.test.tsx +9 -4
  78. package/src/contexts/chatContext/ChatContext.tsx +1 -1
  79. package/src/contexts/messageInputContext/__tests__/MessageInputContext.test.tsx +8 -3
  80. package/src/contexts/messageInputContext/__tests__/uploadFile.test.tsx +16 -6
  81. package/src/store/QuickSqliteClient.ts +49 -5
  82. package/src/store/QuickSqliteClient_v4.ts +98 -0
  83. package/src/store/apis/getAppSettings.ts +19 -0
  84. package/src/store/apis/getPendingTasks.ts +2 -1
  85. package/src/store/apis/index.ts +2 -0
  86. package/src/store/apis/queries/selectChannels.ts +4 -1
  87. package/src/store/apis/queries/selectMembersForChannels.ts +1 -1
  88. package/src/store/apis/queries/selectMessagesForChannels.ts +1 -1
  89. package/src/store/apis/queries/selectReactionsForMessages.ts +1 -1
  90. package/src/store/apis/queries/selectReadsForChannels.ts +1 -1
  91. package/src/store/apis/upsertAppSettings.ts +23 -0
  92. package/src/store/schema.ts +2 -0
  93. package/src/version.json +1 -1
@@ -80,6 +80,19 @@ Object.keys(_getAllChannelIds).forEach(function (key) {
80
80
  });
81
81
  });
82
82
 
83
+ var _getAppSettings = require("./getAppSettings");
84
+
85
+ Object.keys(_getAppSettings).forEach(function (key) {
86
+ if (key === "default" || key === "__esModule") return;
87
+ if (key in exports && exports[key] === _getAppSettings[key]) return;
88
+ Object.defineProperty(exports, key, {
89
+ enumerable: true,
90
+ get: function get() {
91
+ return _getAppSettings[key];
92
+ }
93
+ });
94
+ });
95
+
83
96
  var _getChannelMessages = require("./getChannelMessages");
84
97
 
85
98
  Object.keys(_getChannelMessages).forEach(function (key) {
@@ -184,6 +197,19 @@ Object.keys(_updateReaction).forEach(function (key) {
184
197
  });
185
198
  });
186
199
 
200
+ var _upsertAppSettings = require("./upsertAppSettings");
201
+
202
+ Object.keys(_upsertAppSettings).forEach(function (key) {
203
+ if (key === "default" || key === "__esModule") return;
204
+ if (key in exports && exports[key] === _upsertAppSettings[key]) return;
205
+ Object.defineProperty(exports, key, {
206
+ enumerable: true,
207
+ get: function get() {
208
+ return _upsertAppSettings[key];
209
+ }
210
+ });
211
+ });
212
+
187
213
  var _upsertChannelData = require("./upsertChannelData");
188
214
 
189
215
  Object.keys(_upsertChannelData).forEach(function (key) {
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from './deleteChannel';\nexport * from './deleteMember';\nexport * from './deleteMessage';\nexport * from './deleteMessagesForChannel';\nexport * from './deleteReactions';\nexport * from './getAllChannelIds';\nexport * from './getChannelMessages';\nexport * from './getChannels';\nexport * from './getChannelsForFilterSort';\nexport * from './getLastSyncedAt';\nexport * from './getMembers';\nexport * from './getReads';\nexport * from './updateMessage';\nexport * from './updateReaction';\nexport * from './upsertChannelData';\nexport * from './upsertChannels';\nexport * from './upsertCidsForQuery';\nexport * from './upsertLastSyncedAt';\nexport * from './upsertMembers';\nexport * from './upsertMessages';\nexport * from './upsertReads';\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from './deleteChannel';\nexport * from './deleteMember';\nexport * from './deleteMessage';\nexport * from './deleteMessagesForChannel';\nexport * from './deleteReactions';\nexport * from './getAllChannelIds';\nexport * from './getAppSettings';\nexport * from './getChannelMessages';\nexport * from './getChannels';\nexport * from './getChannelsForFilterSort';\nexport * from './getLastSyncedAt';\nexport * from './getMembers';\nexport * from './getReads';\nexport * from './updateMessage';\nexport * from './updateReaction';\nexport * from './upsertAppSettings';\nexport * from './upsertChannelData';\nexport * from './upsertChannels';\nexport * from './upsertCidsForQuery';\nexport * from './upsertLastSyncedAt';\nexport * from './upsertMembers';\nexport * from './upsertMessages';\nexport * from './upsertReads';\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["selectChannels.ts"],"names":["selectChannels","channelIds","query","cid","undefined","result","QuickSqliteClient","executeSql","apply","sort","a","b","indexOf"],"mappings":";;;;;AAAA;;AACA;;AAGO,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,GAE0C;AAAA,iFAAzC,EAAyC;AAAA,MADtEC,UACsE,QADtEA,UACsE;;AACtE,MAAMC,KAAK,GAAG,0CACZ,UADY,EAEZ,CAAC,GAAD,CAFY,EAGZD,UAAU,GACN;AACEE,IAAAA,GAAG,EAAEF;AADP,GADM,GAING,SAPQ,CAAd;;AAUA,MAAMC,MAAM,GAAGC,qCAAkBC,UAAlB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCN,KAAzC,CAAf;;AAEA,MAAID,UAAJ,EAAgB;AACd,WAAOI,MAAM,CAACI,IAAP,CAAY,UAACC,CAAD,EAAIC,CAAJ;AAAA,aAAUV,UAAU,CAACW,OAAX,CAAmBF,CAAC,CAACP,GAArB,IAA4BF,UAAU,CAACW,OAAX,CAAmBD,CAAC,CAACR,GAArB,CAAtC;AAAA,KAAZ,CAAP;AACD,GAFD,MAEO;AACL,WAAOE,MAAP;AACD;AACF,CApBM","sourcesContent":["import { QuickSqliteClient } from '../../QuickSqliteClient';\nimport { createSelectQuery } from '../../sqlite-utils/createSelectQuery';\nimport type { TableRowJoinedUser } from '../../types';\n\nexport const selectChannels = ({\n channelIds,\n}: { channelIds?: string[] } = {}): TableRowJoinedUser<'channels'>[] => {\n const query = createSelectQuery(\n 'channels',\n ['*'],\n channelIds\n ? {\n cid: channelIds,\n }\n : undefined,\n );\n\n const result = QuickSqliteClient.executeSql.apply(null, query);\n\n if (channelIds) {\n return result.sort((a, b) => channelIds.indexOf(a.cid) - channelIds.indexOf(b.cid));\n } else {\n return result;\n }\n};\n"]}
1
+ {"version":3,"sources":["selectChannels.ts"],"names":["selectChannels","channelIds","query","cid","undefined","result","QuickSqliteClient","executeSql","apply","sort","a","b","indexOf"],"mappings":";;;;;AAAA;;AACA;;AAGO,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,GAE0C;AAAA,iFAAzC,EAAyC;AAAA,MADtEC,UACsE,QADtEA,UACsE;;AACtE,MAAMC,KAAK,GAAG,0CACZ,UADY,EAEZ,CAAC,GAAD,CAFY,EAGZD,UAAU,GACN;AACEE,IAAAA,GAAG,EAAEF;AADP,GADM,GAING,SAPQ,CAAd;;AAUA,MAAMC,MAAM,GAAGC,qCAAkBC,UAAlB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCN,KAAzC,CAAf;;AAEA,MAAID,UAAJ,EAAgB;AACd,WAAOI,MAAM,CAACI,IAAP,CACL,UAACC,CAAD,EAAqBC,CAArB;AAAA,aACEV,UAAU,CAACW,OAAX,CAAmBF,CAAC,CAACP,GAArB,IAA4BF,UAAU,CAACW,OAAX,CAAmBD,CAAC,CAACR,GAArB,CAD9B;AAAA,KADK,CAAP;AAID,GALD,MAKO;AACL,WAAOE,MAAP;AACD;AACF,CAvBM","sourcesContent":["import { QuickSqliteClient } from '../../QuickSqliteClient';\nimport { createSelectQuery } from '../../sqlite-utils/createSelectQuery';\nimport type { TableRowJoinedUser } from '../../types';\n\nexport const selectChannels = ({\n channelIds,\n}: { channelIds?: string[] } = {}): TableRowJoinedUser<'channels'>[] => {\n const query = createSelectQuery(\n 'channels',\n ['*'],\n channelIds\n ? {\n cid: channelIds,\n }\n : undefined,\n );\n\n const result = QuickSqliteClient.executeSql.apply(null, query);\n\n if (channelIds) {\n return result.sort(\n (a: { cid: string }, b: { cid: string }) =>\n channelIds.indexOf(a.cid) - channelIds.indexOf(b.cid),\n );\n } else {\n return result;\n }\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["selectMembersForChannels.ts"],"names":["selectMembersForChannels","cids","questionMarks","Array","length","fill","join","membersColumnNames","Object","keys","tables","members","columns","map","name","userColumnNames","users","result","QuickSqliteClient","executeSql","r","JSON","parse","value"],"mappings":";;;;;AAEA;;AACA;;AAEO,IAAMA,wBAAwB,GAAG,SAA3BA,wBAA2B,CAACC,IAAD,EAAqD;AAC3F,MAAMC,aAAa,GAAGC,KAAK,CAACF,IAAI,CAACG,MAAN,CAAL,CAAmBC,IAAnB,CAAwB,GAAxB,EAA6BC,IAA7B,CAAkC,GAAlC,CAAtB;AACA,MAAMC,kBAAkB,GAAGC,MAAM,CAACC,IAAP,CAAYC,eAAOC,OAAP,CAAeC,OAA3B,EACxBC,GADwB,CACpB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADoB,EAExBR,IAFwB,CAEnB,IAFmB,CAA3B;AAGA,MAAMS,eAAe,GAAGP,MAAM,CAACC,IAAP,CAAYC,eAAOM,KAAP,CAAaJ,OAAzB,EACrBC,GADqB,CACjB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADiB,EAErBR,IAFqB,CAEhB,IAFgB,CAAxB;;AAIA,MAAMW,MAAM,GAAGC,qCAAkBC,UAAlB,0EAILJ,eAJK,8BAMPR,kBANO,yHAYGL,aAZH,4CAabD,IAba,CAAf;;AAgBA,SAAOgB,MAAM,CAACJ,GAAP,CAAW,UAACO,CAAD;AAAA,WAAOC,IAAI,CAACC,KAAL,CAAWF,CAAC,CAACG,KAAb,CAAP;AAAA,GAAX,CAAP;AACD,CA1BM","sourcesContent":["import type { TableRowJoinedUser } from 'src/store/types';\n\nimport { QuickSqliteClient } from '../../QuickSqliteClient';\nimport { tables } from '../../schema';\n\nexport const selectMembersForChannels = (cids: string[]): TableRowJoinedUser<'members'>[] => {\n const questionMarks = Array(cids.length).fill('?').join(',');\n const membersColumnNames = Object.keys(tables.members.columns)\n .map((name) => `'${name}', a.${name}`)\n .join(', ');\n const userColumnNames = Object.keys(tables.users.columns)\n .map((name) => `'${name}', b.${name}`)\n .join(', ');\n\n const result = QuickSqliteClient.executeSql(\n `SELECT\n json_object(\n 'user', json_object(\n ${userColumnNames}\n ),\n ${membersColumnNames}\n ) as value\n FROM members a\n LEFT JOIN\n users b\n ON b.id = a.userId \n WHERE cid in (${questionMarks}) ORDER BY datetime(a.createdAt) DESC`,\n cids,\n );\n\n return result.map((r) => JSON.parse(r.value));\n};\n"]}
1
+ {"version":3,"sources":["selectMembersForChannels.ts"],"names":["selectMembersForChannels","cids","questionMarks","Array","length","fill","join","membersColumnNames","Object","keys","tables","members","columns","map","name","userColumnNames","users","result","QuickSqliteClient","executeSql","r","JSON","parse","value"],"mappings":";;;;;AAEA;;AACA;;AAEO,IAAMA,wBAAwB,GAAG,SAA3BA,wBAA2B,CAACC,IAAD,EAAqD;AAC3F,MAAMC,aAAa,GAAGC,KAAK,CAACF,IAAI,CAACG,MAAN,CAAL,CAAmBC,IAAnB,CAAwB,GAAxB,EAA6BC,IAA7B,CAAkC,GAAlC,CAAtB;AACA,MAAMC,kBAAkB,GAAGC,MAAM,CAACC,IAAP,CAAYC,eAAOC,OAAP,CAAeC,OAA3B,EACxBC,GADwB,CACpB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADoB,EAExBR,IAFwB,CAEnB,IAFmB,CAA3B;AAGA,MAAMS,eAAe,GAAGP,MAAM,CAACC,IAAP,CAAYC,eAAOM,KAAP,CAAaJ,OAAzB,EACrBC,GADqB,CACjB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADiB,EAErBR,IAFqB,CAEhB,IAFgB,CAAxB;;AAIA,MAAMW,MAAM,GAAGC,qCAAkBC,UAAlB,0EAILJ,eAJK,8BAMPR,kBANO,yHAYGL,aAZH,4CAabD,IAba,CAAf;;AAgBA,SAAOgB,MAAM,CAACJ,GAAP,CAAW,UAACO,CAAD;AAAA,WAA0BC,IAAI,CAACC,KAAL,CAAWF,CAAC,CAACG,KAAb,CAA1B;AAAA,GAAX,CAAP;AACD,CA1BM","sourcesContent":["import type { TableRowJoinedUser } from 'src/store/types';\n\nimport { QuickSqliteClient } from '../../QuickSqliteClient';\nimport { tables } from '../../schema';\n\nexport const selectMembersForChannels = (cids: string[]): TableRowJoinedUser<'members'>[] => {\n const questionMarks = Array(cids.length).fill('?').join(',');\n const membersColumnNames = Object.keys(tables.members.columns)\n .map((name) => `'${name}', a.${name}`)\n .join(', ');\n const userColumnNames = Object.keys(tables.users.columns)\n .map((name) => `'${name}', b.${name}`)\n .join(', ');\n\n const result = QuickSqliteClient.executeSql(\n `SELECT\n json_object(\n 'user', json_object(\n ${userColumnNames}\n ),\n ${membersColumnNames}\n ) as value\n FROM members a\n LEFT JOIN\n users b\n ON b.id = a.userId \n WHERE cid in (${questionMarks}) ORDER BY datetime(a.createdAt) DESC`,\n cids,\n );\n\n return result.map((r: { value: string }) => JSON.parse(r.value));\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["selectMessagesForChannels.ts"],"names":["selectMessagesForChannels","cids","questionMarks","Array","length","fill","join","messagesColumnNames","Object","keys","tables","messages","columns","map","name","userColumnNames","users","result","QuickSqliteClient","executeSql","r","JSON","parse","value"],"mappings":";;;;;AAAA;;AACA;;AAGO,IAAMA,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACC,IAAD,EAAsD;AAC7F,MAAMC,aAAa,GAAGC,KAAK,CAACF,IAAI,CAACG,MAAN,CAAL,CAAmBC,IAAnB,CAAwB,GAAxB,EAA6BC,IAA7B,CAAkC,GAAlC,CAAtB;AACA,MAAMC,mBAAmB,GAAGC,MAAM,CAACC,IAAP,CAAYC,eAAOC,QAAP,CAAgBC,OAA5B,EACzBC,GADyB,CACrB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADqB,EAEzBR,IAFyB,CAEpB,IAFoB,CAA5B;AAGA,MAAMS,eAAe,GAAGP,MAAM,CAACC,IAAP,CAAYC,eAAOM,KAAP,CAAaJ,OAAzB,EACrBC,GADqB,CACjB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADiB,EAErBR,IAFqB,CAEhB,IAFgB,CAAxB;;AAIA,MAAMW,MAAM,GAAGC,qCAAkBC,UAAlB,0EAILJ,eAJK,8BAMPR,mBANO,mOAgBKL,aAhBL,gGAsBbD,IAtBa,CAAf;;AAyBA,SAAOgB,MAAM,CAACJ,GAAP,CAAW,UAACO,CAAD;AAAA,WAAOC,IAAI,CAACC,KAAL,CAAWF,CAAC,CAACG,KAAb,CAAP;AAAA,GAAX,CAAP;AACD,CAnCM","sourcesContent":["import { QuickSqliteClient } from '../../QuickSqliteClient';\nimport { tables } from '../../schema';\nimport type { TableRowJoinedUser } from '../../types';\n\nexport const selectMessagesForChannels = (cids: string[]): TableRowJoinedUser<'messages'>[] => {\n const questionMarks = Array(cids.length).fill('?').join(',');\n const messagesColumnNames = Object.keys(tables.messages.columns)\n .map((name) => `'${name}', a.${name}`)\n .join(', ');\n const userColumnNames = Object.keys(tables.users.columns)\n .map((name) => `'${name}', b.${name}`)\n .join(', ');\n\n const result = QuickSqliteClient.executeSql(\n `SELECT\n json_object(\n 'user', json_object(\n ${userColumnNames}\n ),\n ${messagesColumnNames}\n ) as value\n FROM (\n SELECT\n *,\n ROW_NUMBER() OVER (\n PARTITION BY cid\n ORDER BY datetime(createdAt) DESC\n ) RowNum\n FROM messages\n WHERE cid in (${questionMarks})\n ) a\n LEFT JOIN\n users b\n ON b.id = a.userId \n WHERE RowNum < 200`,\n cids,\n );\n\n return result.map((r) => JSON.parse(r.value));\n};\n"]}
1
+ {"version":3,"sources":["selectMessagesForChannels.ts"],"names":["selectMessagesForChannels","cids","questionMarks","Array","length","fill","join","messagesColumnNames","Object","keys","tables","messages","columns","map","name","userColumnNames","users","result","QuickSqliteClient","executeSql","r","JSON","parse","value"],"mappings":";;;;;AAAA;;AACA;;AAGO,IAAMA,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACC,IAAD,EAAsD;AAC7F,MAAMC,aAAa,GAAGC,KAAK,CAACF,IAAI,CAACG,MAAN,CAAL,CAAmBC,IAAnB,CAAwB,GAAxB,EAA6BC,IAA7B,CAAkC,GAAlC,CAAtB;AACA,MAAMC,mBAAmB,GAAGC,MAAM,CAACC,IAAP,CAAYC,eAAOC,QAAP,CAAgBC,OAA5B,EACzBC,GADyB,CACrB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADqB,EAEzBR,IAFyB,CAEpB,IAFoB,CAA5B;AAGA,MAAMS,eAAe,GAAGP,MAAM,CAACC,IAAP,CAAYC,eAAOM,KAAP,CAAaJ,OAAzB,EACrBC,GADqB,CACjB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADiB,EAErBR,IAFqB,CAEhB,IAFgB,CAAxB;;AAIA,MAAMW,MAAM,GAAGC,qCAAkBC,UAAlB,0EAILJ,eAJK,8BAMPR,mBANO,mOAgBKL,aAhBL,gGAsBbD,IAtBa,CAAf;;AAyBA,SAAOgB,MAAM,CAACJ,GAAP,CAAW,UAACO,CAAD;AAAA,WAA0BC,IAAI,CAACC,KAAL,CAAWF,CAAC,CAACG,KAAb,CAA1B;AAAA,GAAX,CAAP;AACD,CAnCM","sourcesContent":["import { QuickSqliteClient } from '../../QuickSqliteClient';\nimport { tables } from '../../schema';\nimport type { TableRowJoinedUser } from '../../types';\n\nexport const selectMessagesForChannels = (cids: string[]): TableRowJoinedUser<'messages'>[] => {\n const questionMarks = Array(cids.length).fill('?').join(',');\n const messagesColumnNames = Object.keys(tables.messages.columns)\n .map((name) => `'${name}', a.${name}`)\n .join(', ');\n const userColumnNames = Object.keys(tables.users.columns)\n .map((name) => `'${name}', b.${name}`)\n .join(', ');\n\n const result = QuickSqliteClient.executeSql(\n `SELECT\n json_object(\n 'user', json_object(\n ${userColumnNames}\n ),\n ${messagesColumnNames}\n ) as value\n FROM (\n SELECT\n *,\n ROW_NUMBER() OVER (\n PARTITION BY cid\n ORDER BY datetime(createdAt) DESC\n ) RowNum\n FROM messages\n WHERE cid in (${questionMarks})\n ) a\n LEFT JOIN\n users b\n ON b.id = a.userId \n WHERE RowNum < 200`,\n cids,\n );\n\n return result.map((r: { value: string }) => JSON.parse(r.value));\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["selectReactionsForMessages.ts"],"names":["selectReactionsForMessages","messageIds","questionMarks","Array","length","fill","join","reactionsColumnNames","Object","keys","tables","reactions","columns","map","name","userColumnNames","users","result","QuickSqliteClient","executeSql","r","JSON","parse","value"],"mappings":";;;;;AAAA;;AACA;;AAGO,IAAMA,0BAA0B,GAAG,SAA7BA,0BAA6B,CACxCC,UADwC,EAEF;AACtC,MAAMC,aAAa,GAAGC,KAAK,CAACF,UAAU,CAACG,MAAZ,CAAL,CAAyBC,IAAzB,CAA8B,GAA9B,EAAmCC,IAAnC,CAAwC,GAAxC,CAAtB;AACA,MAAMC,oBAAoB,GAAGC,MAAM,CAACC,IAAP,CAAYC,eAAOC,SAAP,CAAiBC,OAA7B,EAC1BC,GAD0B,CACtB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADsB,EAE1BR,IAF0B,CAErB,IAFqB,CAA7B;AAGA,MAAMS,eAAe,GAAGP,MAAM,CAACC,IAAP,CAAYC,eAAOM,KAAP,CAAaJ,OAAzB,EACrBC,GADqB,CACjB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADiB,EAErBR,IAFqB,CAEhB,IAFgB,CAAxB;;AAIA,MAAMW,MAAM,GAAGC,qCAAkBC,UAAlB,0EAILJ,eAJK,8BAMPR,oBANO,mIAYWL,aAZX,QAabD,UAba,CAAf;;AAgBA,SAAOgB,MAAM,CAACJ,GAAP,CAAW,UAACO,CAAD;AAAA,WAAOC,IAAI,CAACC,KAAL,CAAWF,CAAC,CAACG,KAAb,CAAP;AAAA,GAAX,CAAP;AACD,CA5BM","sourcesContent":["import { QuickSqliteClient } from '../../QuickSqliteClient';\nimport { tables } from '../../schema';\nimport type { TableRowJoinedUser } from '../../types';\n\nexport const selectReactionsForMessages = (\n messageIds: string[],\n): TableRowJoinedUser<'reactions'>[] => {\n const questionMarks = Array(messageIds.length).fill('?').join(',');\n const reactionsColumnNames = Object.keys(tables.reactions.columns)\n .map((name) => `'${name}', a.${name}`)\n .join(', ');\n const userColumnNames = Object.keys(tables.users.columns)\n .map((name) => `'${name}', b.${name}`)\n .join(', ');\n\n const result = QuickSqliteClient.executeSql(\n `SELECT\n json_object(\n 'user', json_object(\n ${userColumnNames}\n ),\n ${reactionsColumnNames}\n ) as value\n FROM reactions a\n LEFT JOIN\n users b\n ON b.id = a.userId \n WHERE a.messageId in (${questionMarks})`,\n messageIds,\n );\n\n return result.map((r) => JSON.parse(r.value));\n};\n"]}
1
+ {"version":3,"sources":["selectReactionsForMessages.ts"],"names":["selectReactionsForMessages","messageIds","questionMarks","Array","length","fill","join","reactionsColumnNames","Object","keys","tables","reactions","columns","map","name","userColumnNames","users","result","QuickSqliteClient","executeSql","r","JSON","parse","value"],"mappings":";;;;;AAAA;;AACA;;AAGO,IAAMA,0BAA0B,GAAG,SAA7BA,0BAA6B,CACxCC,UADwC,EAEF;AACtC,MAAMC,aAAa,GAAGC,KAAK,CAACF,UAAU,CAACG,MAAZ,CAAL,CAAyBC,IAAzB,CAA8B,GAA9B,EAAmCC,IAAnC,CAAwC,GAAxC,CAAtB;AACA,MAAMC,oBAAoB,GAAGC,MAAM,CAACC,IAAP,CAAYC,eAAOC,SAAP,CAAiBC,OAA7B,EAC1BC,GAD0B,CACtB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADsB,EAE1BR,IAF0B,CAErB,IAFqB,CAA7B;AAGA,MAAMS,eAAe,GAAGP,MAAM,CAACC,IAAP,CAAYC,eAAOM,KAAP,CAAaJ,OAAzB,EACrBC,GADqB,CACjB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADiB,EAErBR,IAFqB,CAEhB,IAFgB,CAAxB;;AAIA,MAAMW,MAAM,GAAGC,qCAAkBC,UAAlB,0EAILJ,eAJK,8BAMPR,oBANO,mIAYWL,aAZX,QAabD,UAba,CAAf;;AAgBA,SAAOgB,MAAM,CAACJ,GAAP,CAAW,UAACO,CAAD;AAAA,WAA0BC,IAAI,CAACC,KAAL,CAAWF,CAAC,CAACG,KAAb,CAA1B;AAAA,GAAX,CAAP;AACD,CA5BM","sourcesContent":["import { QuickSqliteClient } from '../../QuickSqliteClient';\nimport { tables } from '../../schema';\nimport type { TableRowJoinedUser } from '../../types';\n\nexport const selectReactionsForMessages = (\n messageIds: string[],\n): TableRowJoinedUser<'reactions'>[] => {\n const questionMarks = Array(messageIds.length).fill('?').join(',');\n const reactionsColumnNames = Object.keys(tables.reactions.columns)\n .map((name) => `'${name}', a.${name}`)\n .join(', ');\n const userColumnNames = Object.keys(tables.users.columns)\n .map((name) => `'${name}', b.${name}`)\n .join(', ');\n\n const result = QuickSqliteClient.executeSql(\n `SELECT\n json_object(\n 'user', json_object(\n ${userColumnNames}\n ),\n ${reactionsColumnNames}\n ) as value\n FROM reactions a\n LEFT JOIN\n users b\n ON b.id = a.userId \n WHERE a.messageId in (${questionMarks})`,\n messageIds,\n );\n\n return result.map((r: { value: string }) => JSON.parse(r.value));\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["selectReadsForChannels.ts"],"names":["selectReadsForChannels","cids","questionMarks","Array","length","fill","join","readsColumnNames","Object","keys","tables","reads","columns","map","name","userColumnNames","users","result","QuickSqliteClient","executeSql","r","JSON","parse","value"],"mappings":";;;;;AAAA;;AACA;;AAGO,IAAMA,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACC,IAAD,EAAmD;AACvF,MAAMC,aAAa,GAAGC,KAAK,CAACF,IAAI,CAACG,MAAN,CAAL,CAAmBC,IAAnB,CAAwB,GAAxB,EAA6BC,IAA7B,CAAkC,GAAlC,CAAtB;AACA,MAAMC,gBAAgB,GAAGC,MAAM,CAACC,IAAP,CAAYC,eAAOC,KAAP,CAAaC,OAAzB,EACtBC,GADsB,CAClB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADkB,EAEtBR,IAFsB,CAEjB,IAFiB,CAAzB;AAGA,MAAMS,eAAe,GAAGP,MAAM,CAACC,IAAP,CAAYC,eAAOM,KAAP,CAAaJ,OAAzB,EACrBC,GADqB,CACjB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADiB,EAErBR,IAFqB,CAEhB,IAFgB,CAAxB;;AAGA,MAAMW,MAAM,GAAGC,qCAAkBC,UAAlB,0EAILJ,eAJK,8BAMPR,gBANO,yHAYKL,aAZL,QAabD,IAba,CAAf;;AAgBA,SAAOgB,MAAM,CAACJ,GAAP,CAAW,UAACO,CAAD;AAAA,WAAOC,IAAI,CAACC,KAAL,CAAWF,CAAC,CAACG,KAAb,CAAP;AAAA,GAAX,CAAP;AACD,CAzBM","sourcesContent":["import { QuickSqliteClient } from '../../QuickSqliteClient';\nimport { tables } from '../../schema';\nimport type { TableRowJoinedUser } from '../../types';\n\nexport const selectReadsForChannels = (cids: string[]): TableRowJoinedUser<'reads'>[] => {\n const questionMarks = Array(cids.length).fill('?').join(',');\n const readsColumnNames = Object.keys(tables.reads.columns)\n .map((name) => `'${name}', a.${name}`)\n .join(', ');\n const userColumnNames = Object.keys(tables.users.columns)\n .map((name) => `'${name}', b.${name}`)\n .join(', ');\n const result = QuickSqliteClient.executeSql(\n `SELECT\n json_object(\n 'user', json_object(\n ${userColumnNames}\n ),\n ${readsColumnNames}\n ) as value\n FROM reads a\n LEFT JOIN\n users b\n ON b.id = a.userId \n WHERE a.cid in (${questionMarks})`,\n cids,\n );\n\n return result.map((r) => JSON.parse(r.value));\n};\n"]}
1
+ {"version":3,"sources":["selectReadsForChannels.ts"],"names":["selectReadsForChannels","cids","questionMarks","Array","length","fill","join","readsColumnNames","Object","keys","tables","reads","columns","map","name","userColumnNames","users","result","QuickSqliteClient","executeSql","r","JSON","parse","value"],"mappings":";;;;;AAAA;;AACA;;AAGO,IAAMA,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACC,IAAD,EAAmD;AACvF,MAAMC,aAAa,GAAGC,KAAK,CAACF,IAAI,CAACG,MAAN,CAAL,CAAmBC,IAAnB,CAAwB,GAAxB,EAA6BC,IAA7B,CAAkC,GAAlC,CAAtB;AACA,MAAMC,gBAAgB,GAAGC,MAAM,CAACC,IAAP,CAAYC,eAAOC,KAAP,CAAaC,OAAzB,EACtBC,GADsB,CAClB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADkB,EAEtBR,IAFsB,CAEjB,IAFiB,CAAzB;AAGA,MAAMS,eAAe,GAAGP,MAAM,CAACC,IAAP,CAAYC,eAAOM,KAAP,CAAaJ,OAAzB,EACrBC,GADqB,CACjB,UAACC,IAAD;AAAA,iBAAcA,IAAd,aAA0BA,IAA1B;AAAA,GADiB,EAErBR,IAFqB,CAEhB,IAFgB,CAAxB;;AAGA,MAAMW,MAAM,GAAGC,qCAAkBC,UAAlB,0EAILJ,eAJK,8BAMPR,gBANO,yHAYKL,aAZL,QAabD,IAba,CAAf;;AAgBA,SAAOgB,MAAM,CAACJ,GAAP,CAAW,UAACO,CAAD;AAAA,WAA0BC,IAAI,CAACC,KAAL,CAAWF,CAAC,CAACG,KAAb,CAA1B;AAAA,GAAX,CAAP;AACD,CAzBM","sourcesContent":["import { QuickSqliteClient } from '../../QuickSqliteClient';\nimport { tables } from '../../schema';\nimport type { TableRowJoinedUser } from '../../types';\n\nexport const selectReadsForChannels = (cids: string[]): TableRowJoinedUser<'reads'>[] => {\n const questionMarks = Array(cids.length).fill('?').join(',');\n const readsColumnNames = Object.keys(tables.reads.columns)\n .map((name) => `'${name}', a.${name}`)\n .join(', ');\n const userColumnNames = Object.keys(tables.users.columns)\n .map((name) => `'${name}', b.${name}`)\n .join(', ');\n const result = QuickSqliteClient.executeSql(\n `SELECT\n json_object(\n 'user', json_object(\n ${userColumnNames}\n ),\n ${readsColumnNames}\n ) as value\n FROM reads a\n LEFT JOIN\n users b\n ON b.id = a.userId \n WHERE a.cid in (${questionMarks})`,\n cids,\n );\n\n return result.map((r: { value: string }) => JSON.parse(r.value));\n};\n"]}
@@ -0,0 +1,26 @@
1
+ Object.defineProperty(exports, "__esModule", {
2
+ value: true
3
+ });
4
+ exports.upsertAppSettings = void 0;
5
+
6
+ var _QuickSqliteClient = require("../QuickSqliteClient");
7
+
8
+ var _createUpsertQuery = require("../sqlite-utils/createUpsertQuery");
9
+
10
+ var upsertAppSettings = function upsertAppSettings(_ref) {
11
+ var appSettings = _ref.appSettings,
12
+ currentUserId = _ref.currentUserId,
13
+ _ref$flush = _ref.flush,
14
+ flush = _ref$flush === void 0 ? true : _ref$flush;
15
+ var query = (0, _createUpsertQuery.createUpsertQuery)('userSyncStatus', {
16
+ appSettings: JSON.stringify(appSettings),
17
+ userId: currentUserId
18
+ });
19
+
20
+ if (flush) {
21
+ _QuickSqliteClient.QuickSqliteClient.executeSql.apply(null, query);
22
+ }
23
+ };
24
+
25
+ exports.upsertAppSettings = upsertAppSettings;
26
+ //# sourceMappingURL=upsertAppSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["upsertAppSettings.ts"],"names":["upsertAppSettings","appSettings","currentUserId","flush","query","JSON","stringify","userId","QuickSqliteClient","executeSql","apply"],"mappings":";;;;;AAEA;;AACA;;AAEO,IAAMA,iBAAiB,GAAG,SAApBA,iBAAoB,OAQ3B;AAAA,MAPJC,WAOI,QAPJA,WAOI;AAAA,MANJC,aAMI,QANJA,aAMI;AAAA,wBALJC,KAKI;AAAA,MALJA,KAKI,2BALI,IAKJ;AACJ,MAAMC,KAAK,GAAG,0CAAkB,gBAAlB,EAAoC;AAChDH,IAAAA,WAAW,EAAEI,IAAI,CAACC,SAAL,CAAeL,WAAf,CADmC;AAEhDM,IAAAA,MAAM,EAAEL;AAFwC,GAApC,CAAd;;AAKA,MAAIC,KAAJ,EAAW;AACTK,yCAAkBC,UAAlB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCN,KAAzC;AACD;AACF,CAjBM","sourcesContent":["import type { AppSettingsAPIResponse } from 'stream-chat';\n\nimport { QuickSqliteClient } from '../QuickSqliteClient';\nimport { createUpsertQuery } from '../sqlite-utils/createUpsertQuery';\n\nexport const upsertAppSettings = ({\n appSettings,\n currentUserId,\n flush = true,\n}: {\n appSettings: AppSettingsAPIResponse;\n currentUserId: string;\n flush?: boolean;\n}) => {\n const query = createUpsertQuery('userSyncStatus', {\n appSettings: JSON.stringify(appSettings),\n userId: currentUserId,\n });\n\n if (flush) {\n QuickSqliteClient.executeSql.apply(null, query);\n }\n};\n"]}
@@ -162,6 +162,7 @@ var tables = {
162
162
  },
163
163
  userSyncStatus: {
164
164
  columns: {
165
+ appSettings: 'TEXT',
165
166
  lastSyncedAt: 'TEXT',
166
167
  userId: 'TEXT'
167
168
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["schema.ts"],"names":["tables","channelQueries","columns","cids","id","primaryKey","channels","autoTranslationEnabled","autoTranslationLanguage","cid","config","cooldown","createdAt","createdById","deletedAt","disabled","extraData","frozen","hidden","invites","lastMessageAt","memberCount","muted","ownCapabilities","team","truncatedAt","truncatedBy","truncatedById","type","updatedAt","members","banned","channelRole","inviteAcceptedAt","invited","inviteRejectedAt","isModerator","role","shadowBanned","userId","foreignKeys","column","onDeleteAction","referenceTable","referenceTableColumn","indexes","name","unique","messages","attachments","reactionCounts","text","pendingTasks","channelId","channelType","messageId","payload","reactions","score","reads","lastRead","unreadMessages","users","lastActive","online","userSyncStatus","lastSyncedAt"],"mappings":"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","sourcesContent":["import type { MessageLabel, Role } from 'stream-chat';\n\nimport type { PendingTaskTypes } from './types';\n\nimport type { ValueOf } from '../types/types';\n\ntype Tables = {\n [P in keyof Schema]: {\n columns: {\n [K in keyof Schema[P]]: string;\n };\n foreignKeys?: Array<{\n column: `${Exclude<keyof Schema[P], symbol>}`;\n referenceTable: `${keyof Schema}`;\n referenceTableColumn: string;\n // https://www.sqlite.org/foreignkeys.html#fk_actions\n onDeleteAction?: 'NO ACTION' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT' | 'CASCADE';\n }>;\n indexes?: Array<{\n columns: Array<keyof Schema[P]>;\n name: string;\n unique: boolean;\n }>;\n primaryKey?: Array<keyof Schema[P]>;\n };\n};\n\nexport const tables: Tables = {\n channelQueries: {\n columns: {\n cids: 'TEXT',\n id: 'TEXT',\n },\n primaryKey: ['id'],\n },\n channels: {\n columns: {\n autoTranslationEnabled: 'BOOLEAN',\n autoTranslationLanguage: 'TEXT',\n cid: 'TEXT',\n config: 'TEXT',\n cooldown: 'BOOLEAN',\n createdAt: 'TEXT',\n createdById: 'TEXT',\n deletedAt: 'TEXT',\n disabled: 'BOOLEAN DEFAULT FALSE',\n extraData: 'TEXT',\n frozen: 'BOOLEAN',\n hidden: 'BOOLEAN',\n id: 'TEXT',\n invites: 'TEXT',\n lastMessageAt: 'TEXT',\n memberCount: 'INTEGER',\n muted: 'BOOLEAN DEFAULT FALSE',\n ownCapabilities: 'TEXT',\n team: 'TEXT',\n truncatedAt: 'TEXT',\n truncatedBy: 'TEXT',\n truncatedById: 'TEXT',\n type: 'TEXT',\n updatedAt: 'TEXT',\n },\n primaryKey: ['cid'],\n },\n members: {\n columns: {\n banned: 'BOOLEAN DEFAULT FALSE',\n channelRole: 'TEXT',\n cid: 'TEXT NOT NULL',\n createdAt: 'TEXT',\n inviteAcceptedAt: 'TEXT',\n invited: 'BOOLEAN',\n inviteRejectedAt: 'TEXT',\n isModerator: 'BOOLEAN',\n role: 'TEXT',\n shadowBanned: 'BOOLEAN DEFAULT FALSE',\n updatedAt: 'TEXT',\n userId: 'TEXT',\n },\n foreignKeys: [\n {\n column: 'cid',\n onDeleteAction: 'CASCADE',\n referenceTable: 'channels',\n referenceTableColumn: 'cid',\n },\n ],\n indexes: [\n {\n columns: ['cid', 'userId'],\n name: 'index_members',\n unique: false,\n },\n ],\n primaryKey: ['cid', 'userId'],\n },\n messages: {\n columns: {\n attachments: 'TEXT',\n cid: 'TEXT NOT NULL',\n createdAt: 'TEXT',\n deletedAt: 'TEXT',\n extraData: 'TEXT',\n id: 'TEXT',\n reactionCounts: 'TEXT',\n text: \"TEXT DEFAULT ''\",\n type: 'TEXT',\n updatedAt: 'TEXT',\n userId: 'TEXT',\n },\n foreignKeys: [\n {\n column: 'cid',\n onDeleteAction: 'CASCADE',\n referenceTable: 'channels',\n referenceTableColumn: 'cid',\n },\n ],\n indexes: [\n {\n columns: ['cid', 'userId'],\n name: 'index_messages',\n unique: false,\n },\n ],\n primaryKey: ['id'],\n },\n pendingTasks: {\n columns: {\n channelId: 'TEXT',\n channelType: 'TEXT',\n createdAt: 'TEXT',\n id: 'INTEGER PRIMARY KEY AUTOINCREMENT',\n messageId: 'TEXT',\n payload: 'TEXT',\n type: 'TEXT',\n },\n },\n reactions: {\n columns: {\n createdAt: 'TEXT',\n extraData: 'TEXT',\n messageId: 'TEXT',\n score: 'INTEGER DEFAULT 0',\n type: 'TEXT',\n updatedAt: 'TEXT',\n userId: 'TEXT',\n },\n foreignKeys: [\n {\n column: 'messageId',\n onDeleteAction: 'CASCADE',\n referenceTable: 'messages',\n referenceTableColumn: 'id',\n },\n ],\n indexes: [\n {\n columns: ['messageId', 'userId'],\n name: 'index_reaction',\n unique: false,\n },\n ],\n primaryKey: ['messageId', 'userId', 'type'],\n },\n reads: {\n columns: {\n cid: 'TEXT NOT NULL',\n lastRead: 'TEXT NOT NULL',\n unreadMessages: 'INTEGER DEFAULT 0',\n userId: 'TEXT',\n },\n indexes: [\n {\n columns: ['cid', 'userId'],\n name: 'index_reads_cid',\n unique: false,\n },\n ],\n primaryKey: ['userId', 'cid'],\n },\n users: {\n columns: {\n banned: 'BOOLEAN DEFAULT FALSE',\n createdAt: 'TEXT',\n extraData: 'TEXT',\n id: 'TEXT',\n lastActive: 'TEXT',\n online: 'INTEGER',\n role: 'TEXT',\n updatedAt: 'TEXT',\n },\n indexes: [\n {\n columns: ['id'],\n name: 'index_users_id',\n unique: true,\n },\n ],\n primaryKey: ['id'],\n },\n userSyncStatus: {\n columns: {\n lastSyncedAt: 'TEXT',\n userId: 'TEXT',\n },\n primaryKey: ['userId'],\n },\n};\n\n// TODO: Checking the optionality of columns\nexport type Schema = {\n channelQueries: {\n cids: string;\n id: string;\n };\n channels: {\n cid: string;\n extraData: string;\n id: string;\n type: string;\n autoTranslationEnabled?: boolean;\n autoTranslationLanguage?: string;\n config?: string;\n cooldown?: number;\n createdAt?: string;\n createdById?: string;\n deletedAt?: string;\n disabled?: boolean;\n frozen?: boolean;\n hidden?: boolean;\n invites?: string;\n lastMessageAt?: string;\n memberCount?: number;\n muted?: boolean;\n ownCapabilities?: string;\n team?: string;\n truncatedAt?: string;\n truncatedBy?: string;\n truncatedById?: string;\n updatedAt?: string;\n };\n members: {\n cid: string;\n banned?: boolean;\n channelRole?: Role;\n createdAt?: string;\n inviteAcceptedAt?: string;\n invited?: boolean;\n inviteRejectedAt?: string;\n isModerator?: boolean;\n role?: string;\n shadowBanned?: boolean;\n updatedAt?: string;\n userId?: string;\n };\n messages: {\n attachments: string;\n cid: string;\n createdAt: string;\n deletedAt: string;\n extraData: string;\n id: string;\n reactionCounts: string;\n type: MessageLabel;\n updatedAt: string;\n text?: string;\n userId?: string;\n };\n pendingTasks: {\n channelId: string;\n channelType: string;\n createdAt: string;\n id: number;\n messageId: string;\n payload: string;\n type: ValueOf<PendingTaskTypes>;\n };\n reactions: {\n createdAt: string;\n messageId: string;\n type: string;\n updatedAt: string;\n extraData?: string;\n score?: number;\n userId?: string;\n };\n reads: {\n cid: string;\n lastRead: string;\n unreadMessages?: number;\n userId?: string;\n };\n users: {\n id: string;\n banned?: boolean;\n createdAt?: string;\n extraData?: string;\n lastActive?: string;\n online?: boolean;\n role?: string;\n updatedAt?: string;\n };\n userSyncStatus: {\n lastSyncedAt: string;\n userId: string;\n };\n};\n"]}
1
+ {"version":3,"sources":["schema.ts"],"names":["tables","channelQueries","columns","cids","id","primaryKey","channels","autoTranslationEnabled","autoTranslationLanguage","cid","config","cooldown","createdAt","createdById","deletedAt","disabled","extraData","frozen","hidden","invites","lastMessageAt","memberCount","muted","ownCapabilities","team","truncatedAt","truncatedBy","truncatedById","type","updatedAt","members","banned","channelRole","inviteAcceptedAt","invited","inviteRejectedAt","isModerator","role","shadowBanned","userId","foreignKeys","column","onDeleteAction","referenceTable","referenceTableColumn","indexes","name","unique","messages","attachments","reactionCounts","text","pendingTasks","channelId","channelType","messageId","payload","reactions","score","reads","lastRead","unreadMessages","users","lastActive","online","userSyncStatus","appSettings","lastSyncedAt"],"mappings":"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","sourcesContent":["import type { MessageLabel, Role } from 'stream-chat';\n\nimport type { PendingTaskTypes } from './types';\n\nimport type { ValueOf } from '../types/types';\n\ntype Tables = {\n [P in keyof Schema]: {\n columns: {\n [K in keyof Schema[P]]: string;\n };\n foreignKeys?: Array<{\n column: `${Exclude<keyof Schema[P], symbol>}`;\n referenceTable: `${keyof Schema}`;\n referenceTableColumn: string;\n // https://www.sqlite.org/foreignkeys.html#fk_actions\n onDeleteAction?: 'NO ACTION' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT' | 'CASCADE';\n }>;\n indexes?: Array<{\n columns: Array<keyof Schema[P]>;\n name: string;\n unique: boolean;\n }>;\n primaryKey?: Array<keyof Schema[P]>;\n };\n};\n\nexport const tables: Tables = {\n channelQueries: {\n columns: {\n cids: 'TEXT',\n id: 'TEXT',\n },\n primaryKey: ['id'],\n },\n channels: {\n columns: {\n autoTranslationEnabled: 'BOOLEAN',\n autoTranslationLanguage: 'TEXT',\n cid: 'TEXT',\n config: 'TEXT',\n cooldown: 'BOOLEAN',\n createdAt: 'TEXT',\n createdById: 'TEXT',\n deletedAt: 'TEXT',\n disabled: 'BOOLEAN DEFAULT FALSE',\n extraData: 'TEXT',\n frozen: 'BOOLEAN',\n hidden: 'BOOLEAN',\n id: 'TEXT',\n invites: 'TEXT',\n lastMessageAt: 'TEXT',\n memberCount: 'INTEGER',\n muted: 'BOOLEAN DEFAULT FALSE',\n ownCapabilities: 'TEXT',\n team: 'TEXT',\n truncatedAt: 'TEXT',\n truncatedBy: 'TEXT',\n truncatedById: 'TEXT',\n type: 'TEXT',\n updatedAt: 'TEXT',\n },\n primaryKey: ['cid'],\n },\n members: {\n columns: {\n banned: 'BOOLEAN DEFAULT FALSE',\n channelRole: 'TEXT',\n cid: 'TEXT NOT NULL',\n createdAt: 'TEXT',\n inviteAcceptedAt: 'TEXT',\n invited: 'BOOLEAN',\n inviteRejectedAt: 'TEXT',\n isModerator: 'BOOLEAN',\n role: 'TEXT',\n shadowBanned: 'BOOLEAN DEFAULT FALSE',\n updatedAt: 'TEXT',\n userId: 'TEXT',\n },\n foreignKeys: [\n {\n column: 'cid',\n onDeleteAction: 'CASCADE',\n referenceTable: 'channels',\n referenceTableColumn: 'cid',\n },\n ],\n indexes: [\n {\n columns: ['cid', 'userId'],\n name: 'index_members',\n unique: false,\n },\n ],\n primaryKey: ['cid', 'userId'],\n },\n messages: {\n columns: {\n attachments: 'TEXT',\n cid: 'TEXT NOT NULL',\n createdAt: 'TEXT',\n deletedAt: 'TEXT',\n extraData: 'TEXT',\n id: 'TEXT',\n reactionCounts: 'TEXT',\n text: \"TEXT DEFAULT ''\",\n type: 'TEXT',\n updatedAt: 'TEXT',\n userId: 'TEXT',\n },\n foreignKeys: [\n {\n column: 'cid',\n onDeleteAction: 'CASCADE',\n referenceTable: 'channels',\n referenceTableColumn: 'cid',\n },\n ],\n indexes: [\n {\n columns: ['cid', 'userId'],\n name: 'index_messages',\n unique: false,\n },\n ],\n primaryKey: ['id'],\n },\n pendingTasks: {\n columns: {\n channelId: 'TEXT',\n channelType: 'TEXT',\n createdAt: 'TEXT',\n id: 'INTEGER PRIMARY KEY AUTOINCREMENT',\n messageId: 'TEXT',\n payload: 'TEXT',\n type: 'TEXT',\n },\n },\n reactions: {\n columns: {\n createdAt: 'TEXT',\n extraData: 'TEXT',\n messageId: 'TEXT',\n score: 'INTEGER DEFAULT 0',\n type: 'TEXT',\n updatedAt: 'TEXT',\n userId: 'TEXT',\n },\n foreignKeys: [\n {\n column: 'messageId',\n onDeleteAction: 'CASCADE',\n referenceTable: 'messages',\n referenceTableColumn: 'id',\n },\n ],\n indexes: [\n {\n columns: ['messageId', 'userId'],\n name: 'index_reaction',\n unique: false,\n },\n ],\n primaryKey: ['messageId', 'userId', 'type'],\n },\n reads: {\n columns: {\n cid: 'TEXT NOT NULL',\n lastRead: 'TEXT NOT NULL',\n unreadMessages: 'INTEGER DEFAULT 0',\n userId: 'TEXT',\n },\n indexes: [\n {\n columns: ['cid', 'userId'],\n name: 'index_reads_cid',\n unique: false,\n },\n ],\n primaryKey: ['userId', 'cid'],\n },\n users: {\n columns: {\n banned: 'BOOLEAN DEFAULT FALSE',\n createdAt: 'TEXT',\n extraData: 'TEXT',\n id: 'TEXT',\n lastActive: 'TEXT',\n online: 'INTEGER',\n role: 'TEXT',\n updatedAt: 'TEXT',\n },\n indexes: [\n {\n columns: ['id'],\n name: 'index_users_id',\n unique: true,\n },\n ],\n primaryKey: ['id'],\n },\n userSyncStatus: {\n columns: {\n appSettings: 'TEXT',\n lastSyncedAt: 'TEXT',\n userId: 'TEXT',\n },\n primaryKey: ['userId'],\n },\n};\n\n// TODO: Checking the optionality of columns\nexport type Schema = {\n channelQueries: {\n cids: string;\n id: string;\n };\n channels: {\n cid: string;\n extraData: string;\n id: string;\n type: string;\n autoTranslationEnabled?: boolean;\n autoTranslationLanguage?: string;\n config?: string;\n cooldown?: number;\n createdAt?: string;\n createdById?: string;\n deletedAt?: string;\n disabled?: boolean;\n frozen?: boolean;\n hidden?: boolean;\n invites?: string;\n lastMessageAt?: string;\n memberCount?: number;\n muted?: boolean;\n ownCapabilities?: string;\n team?: string;\n truncatedAt?: string;\n truncatedBy?: string;\n truncatedById?: string;\n updatedAt?: string;\n };\n members: {\n cid: string;\n banned?: boolean;\n channelRole?: Role;\n createdAt?: string;\n inviteAcceptedAt?: string;\n invited?: boolean;\n inviteRejectedAt?: string;\n isModerator?: boolean;\n role?: string;\n shadowBanned?: boolean;\n updatedAt?: string;\n userId?: string;\n };\n messages: {\n attachments: string;\n cid: string;\n createdAt: string;\n deletedAt: string;\n extraData: string;\n id: string;\n reactionCounts: string;\n type: MessageLabel;\n updatedAt: string;\n text?: string;\n userId?: string;\n };\n pendingTasks: {\n channelId: string;\n channelType: string;\n createdAt: string;\n id: number;\n messageId: string;\n payload: string;\n type: ValueOf<PendingTaskTypes>;\n };\n reactions: {\n createdAt: string;\n messageId: string;\n type: string;\n updatedAt: string;\n extraData?: string;\n score?: number;\n userId?: string;\n };\n reads: {\n cid: string;\n lastRead: string;\n unreadMessages?: number;\n userId?: string;\n };\n users: {\n id: string;\n banned?: boolean;\n createdAt?: string;\n extraData?: string;\n lastActive?: string;\n online?: boolean;\n role?: string;\n updatedAt?: string;\n };\n userSyncStatus: {\n appSettings: string;\n lastSyncedAt: string;\n userId: string;\n };\n};\n"]}
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "5.6.0-beta.1"
2
+ "version": "5.6.0-beta.2"
3
3
  }
@@ -1,3 +1,3 @@
1
1
  import type { AppSettingsAPIResponse, StreamChat } from 'stream-chat';
2
- import type { DefaultStreamChatGenerics } from 'stream-chat-react-native';
3
- export declare const useAppSettings: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(client: StreamChat<StreamChatGenerics>, isOnline: boolean) => AppSettingsAPIResponse | null;
2
+ import type { DefaultStreamChatGenerics } from '../../../types/types';
3
+ export declare const useAppSettings: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(client: StreamChat<StreamChatGenerics>, isOnline: boolean | null, enableOfflineSupport: boolean) => AppSettingsAPIResponse | null;
@@ -8,5 +8,5 @@ import type { DefaultStreamChatGenerics } from '../../../types/types';
8
8
  */
9
9
  export declare const useIsOnline: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(client: StreamChat<StreamChatGenerics>, closeConnectionOnBackground?: boolean) => {
10
10
  connectionRecovering: boolean;
11
- isOnline: boolean;
11
+ isOnline: boolean | null;
12
12
  };
@@ -27,7 +27,7 @@ export declare type ChatContextValue<StreamChatGenerics extends DefaultStreamCha
27
27
  connectionRecovering: boolean;
28
28
  enableOfflineSupport: boolean;
29
29
  ImageComponent: React.ComponentType<ImageProps>;
30
- isOnline: boolean;
30
+ isOnline: boolean | null;
31
31
  mutedUsers: Mute<StreamChatGenerics>[];
32
32
  /**
33
33
  * @param newChannel Channel to set as active.
@@ -2,6 +2,8 @@ import type { PreparedQueries } from './types';
2
2
  /**
3
3
  * QuickSqliteClient takes care of any direct interaction with sqlite.
4
4
  * This way usage react-native-quick-sqlite package is scoped to a single class/file.
5
+ *
6
+ * TODO: Drop the support for v4 of react-native-quick-sqlite in the next major release.
5
7
  */
6
8
  export declare class QuickSqliteClient {
7
9
  static dbVersion: number;
@@ -9,10 +11,11 @@ export declare class QuickSqliteClient {
9
11
  static dbLocation: string;
10
12
  static getDbVersion: () => number;
11
13
  static setDbVersion: (version: number) => number;
14
+ static isQuickSqliteV4: boolean;
12
15
  static openDB: () => void;
13
16
  static closeDB: () => void;
14
17
  static executeSqlBatch: (queries: PreparedQueries[]) => void;
15
- static executeSql: (query: string, params?: string[] | undefined) => any[];
18
+ static executeSql: (query: string, params?: string[] | undefined) => any;
16
19
  static dropTables: () => void;
17
20
  static deleteDatabase: () => boolean;
18
21
  static initializeDatabase: () => void;
@@ -0,0 +1,12 @@
1
+ import type { PreparedQueries } from './types';
2
+ export declare class QuickSqliteClient_v4 {
3
+ static dbName: string;
4
+ static dbLocation: string;
5
+ static openDB: () => void;
6
+ static closeDB: () => void;
7
+ static executeSqlBatch: (queries: PreparedQueries[]) => void;
8
+ static executeSql: (query: string, params?: string[] | undefined) => any;
9
+ static deleteDatabase: () => boolean;
10
+ static updateUserPragmaVersion: (version: number) => void;
11
+ static getUserPragmaVersion: () => number;
12
+ }
@@ -0,0 +1,4 @@
1
+ import type { AppSettingsAPIResponse } from 'stream-chat';
2
+ export declare const getAppSettings: ({ currentUserId, }: {
3
+ currentUserId: string;
4
+ }) => AppSettingsAPIResponse;
@@ -1,3 +1,3 @@
1
1
  export declare const getPendingTasks: (conditions?: {
2
2
  messageId?: string;
3
- }) => import("../types").PendingTask[];
3
+ }) => any;
@@ -4,6 +4,7 @@ export * from './deleteMessage';
4
4
  export * from './deleteMessagesForChannel';
5
5
  export * from './deleteReactions';
6
6
  export * from './getAllChannelIds';
7
+ export * from './getAppSettings';
7
8
  export * from './getChannelMessages';
8
9
  export * from './getChannels';
9
10
  export * from './getChannelsForFilterSort';
@@ -12,6 +13,7 @@ export * from './getMembers';
12
13
  export * from './getReads';
13
14
  export * from './updateMessage';
14
15
  export * from './updateReaction';
16
+ export * from './upsertAppSettings';
15
17
  export * from './upsertChannelData';
16
18
  export * from './upsertChannels';
17
19
  export * from './upsertCidsForQuery';
@@ -0,0 +1,6 @@
1
+ import type { AppSettingsAPIResponse } from 'stream-chat';
2
+ export declare const upsertAppSettings: ({ appSettings, currentUserId, flush, }: {
3
+ appSettings: AppSettingsAPIResponse;
4
+ currentUserId: string;
5
+ flush?: boolean | undefined;
6
+ }) => void;
@@ -114,6 +114,7 @@ export declare type Schema = {
114
114
  updatedAt?: string;
115
115
  };
116
116
  userSyncStatus: {
117
+ appSettings: string;
117
118
  lastSyncedAt: string;
118
119
  userId: string;
119
120
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "stream-chat-react-native-core",
3
3
  "description": "The official React Native and Expo components for Stream Chat, a service for building chat applications",
4
- "version": "5.6.0-beta.1",
4
+ "version": "5.6.0-beta.2",
5
5
  "author": {
6
6
  "company": "Stream.io Inc",
7
7
  "name": "Stream.io Inc"
@@ -265,7 +265,10 @@ describe('Gallery', () => {
265
265
  });
266
266
 
267
267
  const component = await getComponent([image1]);
268
- const { getByA11yLabel, getByAccessibilityHint } = render(component);
268
+ const { getByA11yLabel, getByAccessibilityHint, queryAllByTestId } = render(component);
269
+ await waitFor(() => {
270
+ expect(queryAllByTestId('gallery-container').length).toBe(1);
271
+ });
269
272
 
270
273
  fireEvent(getByA11yLabel('Gallery Image'), 'error');
271
274
  expect(getByAccessibilityHint('image-loading-error')).toBeTruthy();
@@ -278,7 +281,11 @@ describe('Gallery', () => {
278
281
  });
279
282
 
280
283
  const component = await getComponent([image1]);
281
- const { getByA11yLabel, getByAccessibilityHint } = render(component);
284
+ const { getByA11yLabel, getByAccessibilityHint, queryAllByTestId } = render(component);
285
+
286
+ await waitFor(() => {
287
+ expect(queryAllByTestId('gallery-container').length).toBe(1);
288
+ });
282
289
 
283
290
  fireEvent(getByA11yLabel('Gallery Image'), 'onLoadStart');
284
291
  expect(getByAccessibilityHint('image-loading')).toBeTruthy();
@@ -274,8 +274,8 @@ describe('Giphy', () => {
274
274
  });
275
275
  });
276
276
 
277
- it('should render a error indicator in giphy image', () => {
278
- const { getByA11yLabel, getByAccessibilityHint } = render(
277
+ it('should render a error indicator in giphy image', async () => {
278
+ const { getByA11yLabel, getByAccessibilityHint, queryByTestId } = render(
279
279
  <OverlayProvider>
280
280
  <Chat client={chatClient}>
281
281
  <Channel channel={channel}>
@@ -284,12 +284,15 @@ describe('Giphy', () => {
284
284
  </Chat>
285
285
  </OverlayProvider>,
286
286
  );
287
+ await waitFor(() => {
288
+ expect(queryByTestId('giphy-attachment')).toBeTruthy();
289
+ });
287
290
 
288
291
  fireEvent(getByA11yLabel('Giphy Attachment Image'), 'error');
289
292
  expect(getByAccessibilityHint('image-loading-error')).toBeTruthy();
290
293
  });
291
294
 
292
- it('should render a loading indicator in giphy image and when successful render the image', () => {
295
+ it('should render a loading indicator in giphy image and when successful render the image', async () => {
293
296
  const { getByA11yLabel, getByAccessibilityHint } = render(
294
297
  <OverlayProvider>
295
298
  <Chat client={chatClient}>
@@ -299,8 +302,9 @@ describe('Giphy', () => {
299
302
  </Chat>
300
303
  </OverlayProvider>,
301
304
  );
302
-
303
- expect(getByAccessibilityHint('image-loading')).toBeTruthy();
305
+ await waitFor(() => {
306
+ expect(getByAccessibilityHint('image-loading')).toBeTruthy();
307
+ });
304
308
 
305
309
  fireEvent(getByA11yLabel('Giphy Attachment Image'), 'onLoadStart');
306
310
 
@@ -1192,6 +1192,13 @@ const ChannelWithContext = <
1192
1192
  text,
1193
1193
  ...extraFields
1194
1194
  }: Partial<StreamMessage<StreamChatGenerics>>) => {
1195
+ // Exclude following properties from message.user within message preview,
1196
+ // since they could be long arrays and have no meaning as sender of message.
1197
+ // Storing such large value within user's table may cause sqlite queries to crash.
1198
+ // @ts-ignore
1199
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1200
+ const { channel_mutes, devices, mutes, ...messageUser } = client.user;
1201
+
1195
1202
  const preview = {
1196
1203
  __html: text,
1197
1204
  attachments,
@@ -1209,7 +1216,7 @@ const ChannelWithContext = <
1209
1216
  type: 'regular',
1210
1217
  user: {
1211
1218
  id: client.userID,
1212
- ...client.user,
1219
+ ...messageUser,
1213
1220
  },
1214
1221
  ...extraFields,
1215
1222
  } as unknown as MessageResponse<StreamChatGenerics>;
@@ -196,7 +196,7 @@ const ChatWithContext = <
196
196
 
197
197
  const setActiveChannel = (newChannel?: Channel<StreamChatGenerics>) => setChannel(newChannel);
198
198
 
199
- const appSettings = useAppSettings(client, isOnline);
199
+ const appSettings = useAppSettings(client, isOnline, enableOfflineSupport);
200
200
 
201
201
  const chatContext = useCreateChatContext({
202
202
  appSettings,
@@ -21,6 +21,7 @@ describe('useAppSettings', () => {
21
21
  userID: 'some-user-id',
22
22
  } as unknown as StreamChat,
23
23
  isOnline,
24
+ false,
24
25
  );
25
26
 
26
27
  return <Text>{JSON.stringify(appSettings)}</Text>;
@@ -1,23 +1,38 @@
1
1
  import { useEffect, useRef, useState } from 'react';
2
2
 
3
3
  import type { AppSettingsAPIResponse, StreamChat } from 'stream-chat';
4
- import type { DefaultStreamChatGenerics } from 'stream-chat-react-native';
5
4
 
5
+ import * as dbApi from '../../../store/apis';
6
+ import type { DefaultStreamChatGenerics } from '../../../types/types';
6
7
  export const useAppSettings = <
7
8
  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
8
9
  >(
9
10
  client: StreamChat<StreamChatGenerics>,
10
- isOnline: boolean,
11
+ isOnline: boolean | null,
12
+ enableOfflineSupport: boolean,
11
13
  ): AppSettingsAPIResponse | null => {
12
14
  const [appSettings, setAppSettings] = useState<AppSettingsAPIResponse | null>(null);
13
15
  const isMounted = useRef(true);
14
16
 
15
17
  useEffect(() => {
16
- async function getAppSettings() {
18
+ async function enforeAppSettings() {
19
+ if (!client.userID) return;
20
+
21
+ if (!isOnline && enableOfflineSupport) {
22
+ const appSettings = dbApi.getAppSettings({ currentUserId: client.userID });
23
+ setAppSettings(appSettings);
24
+ return;
25
+ }
26
+
17
27
  try {
18
28
  const appSettings = await client.getAppSettings();
19
29
  if (isMounted.current) {
20
30
  setAppSettings(appSettings);
31
+ enableOfflineSupport &&
32
+ dbApi.upsertAppSettings({
33
+ appSettings,
34
+ currentUserId: client.userID as string,
35
+ });
21
36
  }
22
37
  } catch (error: unknown) {
23
38
  if (error instanceof Error) {
@@ -26,9 +41,7 @@ export const useAppSettings = <
26
41
  }
27
42
  }
28
43
 
29
- if (isOnline && client.userID) {
30
- getAppSettings();
31
- }
44
+ enforeAppSettings();
32
45
 
33
46
  return () => {
34
47
  isMounted.current = false;
@@ -22,7 +22,7 @@ export const useIsOnline = <
22
22
  client: StreamChat<StreamChatGenerics>,
23
23
  closeConnectionOnBackground = true,
24
24
  ) => {
25
- const [isOnline, setIsOnline] = useState(true);
25
+ const [isOnline, setIsOnline] = useState<boolean | null>(null);
26
26
  const [connectionRecovering, setConnectionRecovering] = useState(false);
27
27
  const isMounted = useIsMountedRef();
28
28
  const clientExists = !!client;