stream-chat-react-native-core 5.0.0-offline-support.10 → 5.0.0-offline-support.11

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 (107) hide show
  1. package/lib/commonjs/components/ChannelList/ChannelList.js +21 -20
  2. package/lib/commonjs/components/ChannelList/ChannelList.js.map +1 -1
  3. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +7 -3
  4. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  5. package/lib/commonjs/components/Chat/Chat.js +31 -6
  6. package/lib/commonjs/components/Chat/Chat.js.map +1 -1
  7. package/lib/commonjs/components/{ChannelList/hooks/listeners → Chat/hooks}/handleEventToSyncDB.js +9 -9
  8. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js.map +1 -0
  9. package/lib/commonjs/components/{ChannelList/hooks/listeners → Chat/hooks}/useConnectionRecovered.js +43 -27
  10. package/lib/commonjs/components/Chat/hooks/useConnectionRecovered.js.map +1 -0
  11. package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js +4 -2
  12. package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js.map +1 -1
  13. package/lib/commonjs/components/{ChannelList/hooks/listeners → Chat/hooks}/useSyncDatabase.js +2 -7
  14. package/lib/commonjs/components/Chat/hooks/useSyncDatabase.js.map +1 -0
  15. package/lib/commonjs/components/index.js +26 -13
  16. package/lib/commonjs/components/index.js.map +1 -1
  17. package/lib/commonjs/contexts/chatContext/ChatContext.js +2 -2
  18. package/lib/commonjs/contexts/chatContext/ChatContext.js.map +1 -1
  19. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +12 -21
  20. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
  21. package/lib/commonjs/hooks/useLoadingImage.js +1 -1
  22. package/lib/commonjs/hooks/useLoadingImage.js.map +1 -1
  23. package/lib/commonjs/store/apis/getLastSyncedAt.js.map +1 -1
  24. package/lib/commonjs/store/mappers/mapChannelDataToStorable.js.map +1 -1
  25. package/lib/commonjs/store/sqlite-utils/appendWhereCluase.js.map +1 -1
  26. package/lib/commonjs/store/sqlite-utils/createDeleteQuery.js.map +1 -1
  27. package/lib/commonjs/store/sqlite-utils/createSelectQuery.js +1 -1
  28. package/lib/commonjs/store/sqlite-utils/createSelectQuery.js.map +1 -1
  29. package/lib/commonjs/store/sqlite-utils/createUpdateQuery.js +1 -1
  30. package/lib/commonjs/store/sqlite-utils/createUpdateQuery.js.map +1 -1
  31. package/lib/commonjs/store/sqlite-utils/createUpsertQuery.js.map +1 -1
  32. package/lib/commonjs/store/sqlite-utils/printRow.js +2 -12
  33. package/lib/commonjs/store/sqlite-utils/printRow.js.map +1 -1
  34. package/lib/commonjs/version.json +1 -1
  35. package/lib/module/components/ChannelList/ChannelList.js +21 -20
  36. package/lib/module/components/ChannelList/ChannelList.js.map +1 -1
  37. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +7 -3
  38. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  39. package/lib/module/components/Chat/Chat.js +31 -6
  40. package/lib/module/components/Chat/Chat.js.map +1 -1
  41. package/lib/module/components/{ChannelList/hooks/listeners → Chat/hooks}/handleEventToSyncDB.js +9 -9
  42. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js.map +1 -0
  43. package/lib/module/components/{ChannelList/hooks/listeners → Chat/hooks}/useConnectionRecovered.js +43 -27
  44. package/lib/module/components/Chat/hooks/useConnectionRecovered.js.map +1 -0
  45. package/lib/module/components/Chat/hooks/useCreateChatContext.js +4 -2
  46. package/lib/module/components/Chat/hooks/useCreateChatContext.js.map +1 -1
  47. package/lib/module/components/{ChannelList/hooks/listeners → Chat/hooks}/useSyncDatabase.js +2 -7
  48. package/lib/module/components/Chat/hooks/useSyncDatabase.js.map +1 -0
  49. package/lib/module/components/index.js +26 -13
  50. package/lib/module/components/index.js.map +1 -1
  51. package/lib/module/contexts/chatContext/ChatContext.js +2 -2
  52. package/lib/module/contexts/chatContext/ChatContext.js.map +1 -1
  53. package/lib/module/contexts/overlayContext/OverlayProvider.js +12 -21
  54. package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
  55. package/lib/module/hooks/useLoadingImage.js +1 -1
  56. package/lib/module/hooks/useLoadingImage.js.map +1 -1
  57. package/lib/module/store/apis/getLastSyncedAt.js.map +1 -1
  58. package/lib/module/store/mappers/mapChannelDataToStorable.js.map +1 -1
  59. package/lib/module/store/sqlite-utils/appendWhereCluase.js.map +1 -1
  60. package/lib/module/store/sqlite-utils/createDeleteQuery.js.map +1 -1
  61. package/lib/module/store/sqlite-utils/createSelectQuery.js +1 -1
  62. package/lib/module/store/sqlite-utils/createSelectQuery.js.map +1 -1
  63. package/lib/module/store/sqlite-utils/createUpdateQuery.js +1 -1
  64. package/lib/module/store/sqlite-utils/createUpdateQuery.js.map +1 -1
  65. package/lib/module/store/sqlite-utils/createUpsertQuery.js.map +1 -1
  66. package/lib/module/store/sqlite-utils/printRow.js +2 -12
  67. package/lib/module/store/sqlite-utils/printRow.js.map +1 -1
  68. package/lib/module/version.json +1 -1
  69. package/lib/typescript/components/{ChannelList/hooks/listeners → Chat/hooks}/handleEventToSyncDB.d.ts +1 -1
  70. package/lib/typescript/components/Chat/hooks/useConnectionRecovered.d.ts +10 -0
  71. package/lib/typescript/components/Chat/hooks/useCreateChatContext.d.ts +1 -1
  72. package/lib/typescript/components/Chat/hooks/useSyncDatabase.d.ts +8 -0
  73. package/lib/typescript/components/index.d.ts +2 -1
  74. package/lib/typescript/contexts/chatContext/ChatContext.d.ts +2 -1
  75. package/lib/typescript/store/apis/getLastSyncedAt.d.ts +2 -2
  76. package/lib/typescript/store/sqlite-utils/appendWhereCluase.d.ts +2 -1
  77. package/package.json +1 -1
  78. package/src/components/ChannelList/ChannelList.tsx +12 -15
  79. package/src/components/ChannelList/hooks/listeners/__tests__/useChannelUpdated.test.tsx +1 -0
  80. package/src/components/ChannelList/hooks/usePaginatedChannels.ts +5 -2
  81. package/src/components/Chat/Chat.tsx +17 -1
  82. package/src/components/{ChannelList/hooks/listeners → Chat/hooks}/handleEventToSyncDB.ts +9 -9
  83. package/src/components/Chat/hooks/useConnectionRecovered.ts +92 -0
  84. package/src/components/Chat/hooks/useCreateChatContext.ts +2 -0
  85. package/src/components/{ChannelList/hooks/listeners → Chat/hooks}/useSyncDatabase.ts +6 -6
  86. package/src/components/index.ts +2 -1
  87. package/src/contexts/chatContext/ChatContext.tsx +2 -1
  88. package/src/contexts/overlayContext/OverlayProvider.tsx +1 -2
  89. package/src/hooks/useLoadingImage.tsx +1 -1
  90. package/src/store/apis/getLastSyncedAt.ts +5 -1
  91. package/src/store/mappers/mapChannelDataToStorable.ts +1 -1
  92. package/src/store/sqlite-utils/appendWhereCluase.ts +3 -3
  93. package/src/store/sqlite-utils/createDeleteQuery.ts +2 -2
  94. package/src/store/sqlite-utils/createSelectQuery.ts +2 -2
  95. package/src/store/sqlite-utils/createUpdateQuery.ts +2 -2
  96. package/src/store/sqlite-utils/createUpsertQuery.ts +2 -2
  97. package/src/store/sqlite-utils/printRow.ts +3 -14
  98. package/src/version.json +1 -1
  99. package/lib/commonjs/components/ChannelList/hooks/listeners/handleEventToSyncDB.js.map +0 -1
  100. package/lib/commonjs/components/ChannelList/hooks/listeners/useConnectionRecovered.js.map +0 -1
  101. package/lib/commonjs/components/ChannelList/hooks/listeners/useSyncDatabase.js.map +0 -1
  102. package/lib/module/components/ChannelList/hooks/listeners/handleEventToSyncDB.js.map +0 -1
  103. package/lib/module/components/ChannelList/hooks/listeners/useConnectionRecovered.js.map +0 -1
  104. package/lib/module/components/ChannelList/hooks/listeners/useSyncDatabase.js.map +0 -1
  105. package/lib/typescript/components/ChannelList/hooks/listeners/useConnectionRecovered.d.ts +0 -9
  106. package/lib/typescript/components/ChannelList/hooks/listeners/useSyncDatabase.d.ts +0 -6
  107. package/src/components/ChannelList/hooks/listeners/useConnectionRecovered.ts +0 -86
@@ -33,16 +33,12 @@ var _useChannelUpdated = require("./hooks/listeners/useChannelUpdated");
33
33
 
34
34
  var _useChannelVisible = require("./hooks/listeners/useChannelVisible");
35
35
 
36
- var _useConnectionRecovered = require("./hooks/listeners/useConnectionRecovered");
37
-
38
36
  var _useNewMessage = require("./hooks/listeners/useNewMessage");
39
37
 
40
38
  var _useNewMessageNotification = require("./hooks/listeners/useNewMessageNotification");
41
39
 
42
40
  var _useRemovedFromChannelNotification = require("./hooks/listeners/useRemovedFromChannelNotification");
43
41
 
44
- var _useSyncDatabase = require("./hooks/listeners/useSyncDatabase");
45
-
46
42
  var _useUserPresence = require("./hooks/listeners/useUserPresence");
47
43
 
48
44
  var _useCreateChannelsContext = require("./hooks/useCreateChannelsContext");
@@ -132,7 +128,8 @@ var ChannelList = function ChannelList(props) {
132
128
  setForceUpdate = _useState2[1];
133
129
 
134
130
  var _useChatContext = (0, _ChatContext.useChatContext)(),
135
- enableOfflineSupport = _useChatContext.enableOfflineSupport;
131
+ enableOfflineSupport = _useChatContext.enableOfflineSupport,
132
+ subscribeConnectionRecoveredCallback = _useChatContext.subscribeConnectionRecoveredCallback;
136
133
 
137
134
  var _usePaginatedChannels = (0, _usePaginatedChannels2.usePaginatedChannels)({
138
135
  enableOfflineSupport: enableOfflineSupport,
@@ -178,11 +175,6 @@ var ChannelList = function ChannelList(props) {
178
175
  onChannelVisible: onChannelVisible,
179
176
  setChannels: setChannels
180
177
  });
181
- (0, _useConnectionRecovered.useConnectionRecovered)({
182
- enableOfflineSupport: enableOfflineSupport,
183
- refreshList: refreshList,
184
- setForceUpdate: setForceUpdate
185
- });
186
178
  (0, _useNewMessage.useNewMessage)({
187
179
  lockChannelOrder: lockChannelOrder,
188
180
  setChannels: setChannels
@@ -198,24 +190,33 @@ var ChannelList = function ChannelList(props) {
198
190
  (0, _useUserPresence.useUserPresence)({
199
191
  setChannels: setChannels
200
192
  });
201
- (0, _useSyncDatabase.useSyncDatabase)({
202
- enableOfflineSupport: enableOfflineSupport
203
- });
204
- var channelIds = channels.map(function (c) {
205
- return c.cid;
206
- });
207
- var channelIdsStr = channelIds.join('');
193
+ var channelIdsStr = channels.reduce(function (acc, channel) {
194
+ return "" + acc + channel.cid;
195
+ }, '');
208
196
  (0, _react.useEffect)(function () {
209
197
  if (staticChannelsActive || !enableOfflineSupport) {
210
198
  return;
211
199
  }
212
200
 
213
201
  (0, _upsertCidsForQuery.upsertCidsForQuery)({
214
- cids: channelIds,
202
+ cids: channels.map(function (c) {
203
+ return c.cid;
204
+ }),
215
205
  filters: filters,
216
206
  sort: sort
217
207
  });
218
208
  }, [channelIdsStr, staticChannelsActive]);
209
+ (0, _react.useEffect)(function () {
210
+ var unsubscribe = subscribeConnectionRecoveredCallback(function () {
211
+ refreshList();
212
+ setForceUpdate(function (count) {
213
+ return count + 1;
214
+ });
215
+ });
216
+ return function () {
217
+ return unsubscribe();
218
+ };
219
+ });
219
220
  var channelsContext = (0, _useCreateChannelsContext.useCreateChannelsContext)({
220
221
  additionalFlatListProps: additionalFlatListProps,
221
222
  channels: channels,
@@ -257,14 +258,14 @@ var ChannelList = function ChannelList(props) {
257
258
  __self: _this,
258
259
  __source: {
259
260
  fileName: _jsxFileName,
260
- lineNumber: 380,
261
+ lineNumber: 377,
261
262
  columnNumber: 5
262
263
  }
263
264
  }, _react["default"].createElement(List, {
264
265
  __self: _this,
265
266
  __source: {
266
267
  fileName: _jsxFileName,
267
- lineNumber: 381,
268
+ lineNumber: 378,
268
269
  columnNumber: 7
269
270
  }
270
271
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["ChannelList.tsx"],"names":["DEFAULT_FILTERS","DEFAULT_OPTIONS","DEFAULT_SORT","ChannelList","props","additionalFlatListProps","EmptyStateIndicator","EmptyStateIndicatorDefault","FooterLoadingIndicator","ChannelListFooterLoadingIndicator","filters","HeaderErrorIndicator","ChannelListHeaderErrorIndicator","HeaderNetworkDownIndicator","ChannelListHeaderNetworkDownIndicator","List","ChannelListMessenger","ListHeaderComponent","LoadingErrorIndicator","LoadingErrorIndicatorDefault","LoadingIndicator","ChannelListLoadingIndicator","loadMoreThreshold","lockChannelOrder","maxUnreadCount","numberOfSkeletons","onAddedToChannel","onChannelDeleted","onChannelHidden","onChannelVisible","onChannelTruncated","onChannelUpdated","onMessageNew","onRemovedFromChannel","onSelect","options","Preview","ChannelPreviewMessenger","PreviewAvatar","PreviewMessage","PreviewStatus","PreviewTitle","PreviewUnreadCount","setFlatListRef","Skeleton","SkeletonDefault","sort","forceUpdate","setForceUpdate","enableOfflineSupport","channels","error","hasNextPage","loadingChannels","loadingNextPage","loadNextPage","refreshing","refreshList","reloadList","setChannels","staticChannelsActive","channelIds","map","c","cid","channelIdsStr","join","cids","channelsContext","ref"],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\n\nimport type { FlatList } from 'react-native-gesture-handler';\n\nimport type { Channel, ChannelFilters, ChannelOptions, ChannelSort, Event } from 'stream-chat';\n\nimport { ChannelListFooterLoadingIndicator } from './ChannelListFooterLoadingIndicator';\nimport { ChannelListHeaderErrorIndicator } from './ChannelListHeaderErrorIndicator';\nimport { ChannelListHeaderNetworkDownIndicator } from './ChannelListHeaderNetworkDownIndicator';\nimport { ChannelListLoadingIndicator } from './ChannelListLoadingIndicator';\nimport { ChannelListMessenger, ChannelListMessengerProps } from './ChannelListMessenger';\nimport { useAddedToChannelNotification } from './hooks/listeners/useAddedToChannelNotification';\nimport { useChannelDeleted } from './hooks/listeners/useChannelDeleted';\nimport { useChannelHidden } from './hooks/listeners/useChannelHidden';\nimport { useChannelTruncated } from './hooks/listeners/useChannelTruncated';\nimport { useChannelUpdated } from './hooks/listeners/useChannelUpdated';\nimport { useChannelVisible } from './hooks/listeners/useChannelVisible';\nimport { useConnectionRecovered } from './hooks/listeners/useConnectionRecovered';\nimport { useNewMessage } from './hooks/listeners/useNewMessage';\nimport { useNewMessageNotification } from './hooks/listeners/useNewMessageNotification';\nimport { useRemovedFromChannelNotification } from './hooks/listeners/useRemovedFromChannelNotification';\nimport { useSyncDatabase } from './hooks/listeners/useSyncDatabase';\nimport { useUserPresence } from './hooks/listeners/useUserPresence';\nimport { useCreateChannelsContext } from './hooks/useCreateChannelsContext';\nimport { usePaginatedChannels } from './hooks/usePaginatedChannels';\nimport { Skeleton as SkeletonDefault } from './Skeleton';\n\nimport {\n ChannelsContextValue,\n ChannelsProvider,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { useChatContext } from '../../contexts/chatContext/ChatContext';\nimport { upsertCidsForQuery } from '../../store/apis/upsertCidsForQuery';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { ChannelPreviewMessenger } from '../ChannelPreview/ChannelPreviewMessenger';\nimport { EmptyStateIndicator as EmptyStateIndicatorDefault } from '../Indicators/EmptyStateIndicator';\nimport { LoadingErrorIndicator as LoadingErrorIndicatorDefault } from '../Indicators/LoadingErrorIndicator';\n\nexport type ChannelListProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<\n Pick<\n ChannelsContextValue<StreamChatGenerics>,\n | 'additionalFlatListProps'\n | 'EmptyStateIndicator'\n | 'FooterLoadingIndicator'\n | 'HeaderErrorIndicator'\n | 'HeaderNetworkDownIndicator'\n | 'LoadingErrorIndicator'\n | 'LoadingIndicator'\n | 'Preview'\n | 'setFlatListRef'\n | 'ListHeaderComponent'\n | 'onSelect'\n | 'PreviewAvatar'\n | 'PreviewMessage'\n | 'PreviewStatus'\n | 'PreviewTitle'\n | 'PreviewUnreadCount'\n | 'loadMoreThreshold'\n | 'Skeleton'\n | 'maxUnreadCount'\n | 'numberOfSkeletons'\n >\n> & {\n /**\n * Object containing channel query filters\n *\n * @see See [Channel query documentation](https://getstream.io/chat/docs/query_channels) for a list of available filter fields\n *\n * @overrideType object\n * */\n filters?: ChannelFilters<StreamChatGenerics>;\n /**\n * Custom UI component to display the list of channels\n *\n * Default: [ChannelListMessenger](https://getstream.io/chat/docs/sdk/reactnative/ui-components/channel-list-messenger/)\n */\n List?: React.ComponentType<ChannelListMessengerProps<StreamChatGenerics>>;\n /**\n * If set to true, channels won't dynamically sort by most recent message, defaults to false\n */\n lockChannelOrder?: boolean;\n /**\n * Function that overrides default behavior when a user gets added to a channel\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event Object](https://getstream.io/chat/docs/event_object) corresponding to `notification.added_to_channel` event\n *\n * @overrideType Function\n * */\n onAddedToChannel?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Function that overrides default behavior when a channel gets deleted. In absence of this prop, the channel will be removed from the list.\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event object](https://getstream.io/chat/docs/event_object) corresponding to `channel.deleted` event\n *\n * @overrideType Function\n * */\n onChannelDeleted?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Function that overrides default behavior when a channel gets hidden. In absence of this prop, the channel will be removed from the list.\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event object](https://getstream.io/chat/docs/event_object) corresponding to `channel.hidden` event\n *\n * @overrideType Function\n * */\n onChannelHidden?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Function to customize behavior when a channel gets truncated\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event [Event object](https://getstream.io/chat/docs/event_object) corresponding to `channel.truncated` event\n *\n * @overrideType Function\n * */\n onChannelTruncated?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Function that overrides default behavior when a channel gets updated\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event object](https://getstream.io/chat/docs/event_object) corresponding to `channel.updated` event\n *\n * @overrideType Function\n * */\n onChannelUpdated?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Function that overrides default behavior when a channel gets visible. In absence of this prop, the channel will be added to the list.\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event object](https://getstream.io/chat/docs/event_object) corresponding to `channel.visible` event\n *\n * @overrideType Function\n * */\n onChannelVisible?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Override the default listener/handler for event `notification.message_new`\n * This event is received on channel, which is not being watched.\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event object](https://getstream.io/chat/docs/event_object) corresponding to `notification.message_new` event\n *\n * @overrideType Function\n * */\n onMessageNew?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Function that overrides default behavior when a user gets removed from a channel\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event object](https://getstream.io/chat/docs/event_object) corresponding to `notification.removed_from_channel` event\n *\n * @overrideType Function\n * */\n onRemovedFromChannel?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Object containing channel query options\n * @see See [Channel query documentation](https://getstream.io/chat/docs/query_channels) for a list of available option fields\n * */\n options?: ChannelOptions;\n /**\n * Object containing channel sort parameters\n * @see See [Channel query documentation](https://getstream.io/chat/docs/query_channels) for a list of available sorting fields\n * */\n sort?: ChannelSort<StreamChatGenerics>;\n};\n\nconst DEFAULT_FILTERS = {};\nconst DEFAULT_OPTIONS = {};\nconst DEFAULT_SORT = {};\n\n/**\n * This component fetches a list of channels, allowing you to select the channel you want to open.\n * The ChannelList doesn't provide any UI for the underlying React Native FlatList. UI is determined by the `List` component which is\n * provided to the ChannelList component as a prop. By default, the ChannelListMessenger component is used as the list UI.\n *\n * @example ./ChannelList.md\n */\nexport const ChannelList = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelListProps<StreamChatGenerics>,\n) => {\n const {\n additionalFlatListProps = {},\n EmptyStateIndicator = EmptyStateIndicatorDefault,\n FooterLoadingIndicator = ChannelListFooterLoadingIndicator,\n filters = DEFAULT_FILTERS,\n HeaderErrorIndicator = ChannelListHeaderErrorIndicator,\n HeaderNetworkDownIndicator = ChannelListHeaderNetworkDownIndicator,\n List = ChannelListMessenger,\n ListHeaderComponent,\n LoadingErrorIndicator = LoadingErrorIndicatorDefault,\n LoadingIndicator = ChannelListLoadingIndicator,\n // https://github.com/facebook/react-native/blob/a7a7970e543959e9db5281914d5f132beb01db8d/Libraries/Lists/VirtualizedList.js#L466\n loadMoreThreshold = 2,\n lockChannelOrder = false,\n maxUnreadCount = 255,\n numberOfSkeletons = 6,\n onAddedToChannel,\n onChannelDeleted,\n onChannelHidden,\n onChannelVisible,\n onChannelTruncated,\n onChannelUpdated,\n onMessageNew,\n onRemovedFromChannel,\n onSelect,\n options = DEFAULT_OPTIONS,\n Preview = ChannelPreviewMessenger,\n PreviewAvatar,\n PreviewMessage,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n setFlatListRef,\n Skeleton = SkeletonDefault,\n sort = DEFAULT_SORT,\n } = props;\n\n const [forceUpdate, setForceUpdate] = useState(0);\n const { enableOfflineSupport } = useChatContext();\n const {\n channels,\n error,\n hasNextPage,\n loadingChannels,\n loadingNextPage,\n loadNextPage,\n refreshing,\n refreshList,\n reloadList,\n setChannels,\n staticChannelsActive,\n } = usePaginatedChannels<StreamChatGenerics>({\n enableOfflineSupport,\n filters,\n options,\n sort,\n });\n\n // Setup event listeners\n useAddedToChannelNotification({\n onAddedToChannel,\n setChannels,\n });\n\n useChannelDeleted({\n onChannelDeleted,\n setChannels,\n });\n\n useChannelHidden({\n onChannelHidden,\n setChannels,\n });\n\n useChannelTruncated({\n onChannelTruncated,\n refreshList,\n setChannels,\n setForceUpdate,\n });\n\n useChannelUpdated({\n onChannelUpdated,\n setChannels,\n });\n\n useChannelVisible({\n onChannelVisible,\n setChannels,\n });\n\n useConnectionRecovered<StreamChatGenerics>({\n enableOfflineSupport,\n refreshList,\n setForceUpdate,\n });\n\n useNewMessage({\n lockChannelOrder,\n setChannels,\n });\n\n useNewMessageNotification({\n onMessageNew,\n setChannels,\n });\n\n useRemovedFromChannelNotification({\n onRemovedFromChannel,\n setChannels,\n });\n\n useUserPresence({\n setChannels,\n });\n\n useSyncDatabase({\n enableOfflineSupport,\n });\n const channelIds = channels.map((c) => c.cid);\n const channelIdsStr = channelIds.join('');\n\n useEffect(() => {\n if (staticChannelsActive || !enableOfflineSupport) {\n return;\n }\n upsertCidsForQuery({\n cids: channelIds,\n filters,\n sort,\n });\n }, [channelIdsStr, staticChannelsActive]);\n\n const channelsContext = useCreateChannelsContext({\n additionalFlatListProps,\n channels,\n EmptyStateIndicator,\n error,\n FooterLoadingIndicator,\n forceUpdate,\n hasNextPage,\n HeaderErrorIndicator,\n HeaderNetworkDownIndicator,\n ListHeaderComponent,\n loadingChannels,\n LoadingErrorIndicator,\n LoadingIndicator,\n loadingNextPage,\n loadMoreThreshold,\n loadNextPage,\n maxUnreadCount,\n numberOfSkeletons,\n onSelect,\n Preview,\n PreviewAvatar,\n PreviewMessage,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n refreshing,\n refreshList,\n reloadList,\n setFlatListRef: (ref: FlatList<Channel<StreamChatGenerics>> | null) => {\n if (setFlatListRef) {\n setFlatListRef(ref);\n }\n },\n Skeleton,\n });\n\n return (\n <ChannelsProvider value={channelsContext}>\n <List<StreamChatGenerics> />\n </ChannelsProvider>\n );\n};\n"]}
1
+ {"version":3,"sources":["ChannelList.tsx"],"names":["DEFAULT_FILTERS","DEFAULT_OPTIONS","DEFAULT_SORT","ChannelList","props","additionalFlatListProps","EmptyStateIndicator","EmptyStateIndicatorDefault","FooterLoadingIndicator","ChannelListFooterLoadingIndicator","filters","HeaderErrorIndicator","ChannelListHeaderErrorIndicator","HeaderNetworkDownIndicator","ChannelListHeaderNetworkDownIndicator","List","ChannelListMessenger","ListHeaderComponent","LoadingErrorIndicator","LoadingErrorIndicatorDefault","LoadingIndicator","ChannelListLoadingIndicator","loadMoreThreshold","lockChannelOrder","maxUnreadCount","numberOfSkeletons","onAddedToChannel","onChannelDeleted","onChannelHidden","onChannelVisible","onChannelTruncated","onChannelUpdated","onMessageNew","onRemovedFromChannel","onSelect","options","Preview","ChannelPreviewMessenger","PreviewAvatar","PreviewMessage","PreviewStatus","PreviewTitle","PreviewUnreadCount","setFlatListRef","Skeleton","SkeletonDefault","sort","forceUpdate","setForceUpdate","enableOfflineSupport","subscribeConnectionRecoveredCallback","channels","error","hasNextPage","loadingChannels","loadingNextPage","loadNextPage","refreshing","refreshList","reloadList","setChannels","staticChannelsActive","channelIdsStr","reduce","acc","channel","cid","cids","map","c","unsubscribe","count","channelsContext","ref"],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\n\nimport type { FlatList } from 'react-native-gesture-handler';\n\nimport type { Channel, ChannelFilters, ChannelOptions, ChannelSort, Event } from 'stream-chat';\n\nimport { ChannelListFooterLoadingIndicator } from './ChannelListFooterLoadingIndicator';\nimport { ChannelListHeaderErrorIndicator } from './ChannelListHeaderErrorIndicator';\nimport { ChannelListHeaderNetworkDownIndicator } from './ChannelListHeaderNetworkDownIndicator';\nimport { ChannelListLoadingIndicator } from './ChannelListLoadingIndicator';\nimport { ChannelListMessenger, ChannelListMessengerProps } from './ChannelListMessenger';\nimport { useAddedToChannelNotification } from './hooks/listeners/useAddedToChannelNotification';\nimport { useChannelDeleted } from './hooks/listeners/useChannelDeleted';\nimport { useChannelHidden } from './hooks/listeners/useChannelHidden';\nimport { useChannelTruncated } from './hooks/listeners/useChannelTruncated';\nimport { useChannelUpdated } from './hooks/listeners/useChannelUpdated';\nimport { useChannelVisible } from './hooks/listeners/useChannelVisible';\nimport { useNewMessage } from './hooks/listeners/useNewMessage';\nimport { useNewMessageNotification } from './hooks/listeners/useNewMessageNotification';\nimport { useRemovedFromChannelNotification } from './hooks/listeners/useRemovedFromChannelNotification';\nimport { useUserPresence } from './hooks/listeners/useUserPresence';\nimport { useCreateChannelsContext } from './hooks/useCreateChannelsContext';\nimport { usePaginatedChannels } from './hooks/usePaginatedChannels';\nimport { Skeleton as SkeletonDefault } from './Skeleton';\n\nimport {\n ChannelsContextValue,\n ChannelsProvider,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { useChatContext } from '../../contexts/chatContext/ChatContext';\nimport { upsertCidsForQuery } from '../../store/apis/upsertCidsForQuery';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { ChannelPreviewMessenger } from '../ChannelPreview/ChannelPreviewMessenger';\nimport { EmptyStateIndicator as EmptyStateIndicatorDefault } from '../Indicators/EmptyStateIndicator';\nimport { LoadingErrorIndicator as LoadingErrorIndicatorDefault } from '../Indicators/LoadingErrorIndicator';\n\nexport type ChannelListProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<\n Pick<\n ChannelsContextValue<StreamChatGenerics>,\n | 'additionalFlatListProps'\n | 'EmptyStateIndicator'\n | 'FooterLoadingIndicator'\n | 'HeaderErrorIndicator'\n | 'HeaderNetworkDownIndicator'\n | 'LoadingErrorIndicator'\n | 'LoadingIndicator'\n | 'Preview'\n | 'setFlatListRef'\n | 'ListHeaderComponent'\n | 'onSelect'\n | 'PreviewAvatar'\n | 'PreviewMessage'\n | 'PreviewStatus'\n | 'PreviewTitle'\n | 'PreviewUnreadCount'\n | 'loadMoreThreshold'\n | 'Skeleton'\n | 'maxUnreadCount'\n | 'numberOfSkeletons'\n >\n> & {\n /**\n * Object containing channel query filters\n *\n * @see See [Channel query documentation](https://getstream.io/chat/docs/query_channels) for a list of available filter fields\n *\n * @overrideType object\n * */\n filters?: ChannelFilters<StreamChatGenerics>;\n /**\n * Custom UI component to display the list of channels\n *\n * Default: [ChannelListMessenger](https://getstream.io/chat/docs/sdk/reactnative/ui-components/channel-list-messenger/)\n */\n List?: React.ComponentType<ChannelListMessengerProps<StreamChatGenerics>>;\n /**\n * If set to true, channels won't dynamically sort by most recent message, defaults to false\n */\n lockChannelOrder?: boolean;\n /**\n * Function that overrides default behavior when a user gets added to a channel\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event Object](https://getstream.io/chat/docs/event_object) corresponding to `notification.added_to_channel` event\n *\n * @overrideType Function\n * */\n onAddedToChannel?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Function that overrides default behavior when a channel gets deleted. In absence of this prop, the channel will be removed from the list.\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event object](https://getstream.io/chat/docs/event_object) corresponding to `channel.deleted` event\n *\n * @overrideType Function\n * */\n onChannelDeleted?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Function that overrides default behavior when a channel gets hidden. In absence of this prop, the channel will be removed from the list.\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event object](https://getstream.io/chat/docs/event_object) corresponding to `channel.hidden` event\n *\n * @overrideType Function\n * */\n onChannelHidden?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Function to customize behavior when a channel gets truncated\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event [Event object](https://getstream.io/chat/docs/event_object) corresponding to `channel.truncated` event\n *\n * @overrideType Function\n * */\n onChannelTruncated?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Function that overrides default behavior when a channel gets updated\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event object](https://getstream.io/chat/docs/event_object) corresponding to `channel.updated` event\n *\n * @overrideType Function\n * */\n onChannelUpdated?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Function that overrides default behavior when a channel gets visible. In absence of this prop, the channel will be added to the list.\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event object](https://getstream.io/chat/docs/event_object) corresponding to `channel.visible` event\n *\n * @overrideType Function\n * */\n onChannelVisible?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Override the default listener/handler for event `notification.message_new`\n * This event is received on channel, which is not being watched.\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event object](https://getstream.io/chat/docs/event_object) corresponding to `notification.message_new` event\n *\n * @overrideType Function\n * */\n onMessageNew?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Function that overrides default behavior when a user gets removed from a channel\n *\n * @param setChannels Setter for internal state property - `channels`. It's created from useState() hook.\n * @param event An [Event object](https://getstream.io/chat/docs/event_object) corresponding to `notification.removed_from_channel` event\n *\n * @overrideType Function\n * */\n onRemovedFromChannel?: (\n setChannels: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>,\n event: Event<StreamChatGenerics>,\n ) => void;\n /**\n * Object containing channel query options\n * @see See [Channel query documentation](https://getstream.io/chat/docs/query_channels) for a list of available option fields\n * */\n options?: ChannelOptions;\n /**\n * Object containing channel sort parameters\n * @see See [Channel query documentation](https://getstream.io/chat/docs/query_channels) for a list of available sorting fields\n * */\n sort?: ChannelSort<StreamChatGenerics>;\n};\n\nconst DEFAULT_FILTERS = {};\nconst DEFAULT_OPTIONS = {};\nconst DEFAULT_SORT = {};\n\n/**\n * This component fetches a list of channels, allowing you to select the channel you want to open.\n * The ChannelList doesn't provide any UI for the underlying React Native FlatList. UI is determined by the `List` component which is\n * provided to the ChannelList component as a prop. By default, the ChannelListMessenger component is used as the list UI.\n *\n * @example ./ChannelList.md\n */\nexport const ChannelList = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelListProps<StreamChatGenerics>,\n) => {\n const {\n additionalFlatListProps = {},\n EmptyStateIndicator = EmptyStateIndicatorDefault,\n FooterLoadingIndicator = ChannelListFooterLoadingIndicator,\n filters = DEFAULT_FILTERS,\n HeaderErrorIndicator = ChannelListHeaderErrorIndicator,\n HeaderNetworkDownIndicator = ChannelListHeaderNetworkDownIndicator,\n List = ChannelListMessenger,\n ListHeaderComponent,\n LoadingErrorIndicator = LoadingErrorIndicatorDefault,\n LoadingIndicator = ChannelListLoadingIndicator,\n // https://github.com/facebook/react-native/blob/a7a7970e543959e9db5281914d5f132beb01db8d/Libraries/Lists/VirtualizedList.js#L466\n loadMoreThreshold = 2,\n lockChannelOrder = false,\n maxUnreadCount = 255,\n numberOfSkeletons = 6,\n onAddedToChannel,\n onChannelDeleted,\n onChannelHidden,\n onChannelVisible,\n onChannelTruncated,\n onChannelUpdated,\n onMessageNew,\n onRemovedFromChannel,\n onSelect,\n options = DEFAULT_OPTIONS,\n Preview = ChannelPreviewMessenger,\n PreviewAvatar,\n PreviewMessage,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n setFlatListRef,\n Skeleton = SkeletonDefault,\n sort = DEFAULT_SORT,\n } = props;\n\n const [forceUpdate, setForceUpdate] = useState(0);\n const { enableOfflineSupport, subscribeConnectionRecoveredCallback } = useChatContext();\n const {\n channels,\n error,\n hasNextPage,\n loadingChannels,\n loadingNextPage,\n loadNextPage,\n refreshing,\n refreshList,\n reloadList,\n setChannels,\n staticChannelsActive,\n } = usePaginatedChannels<StreamChatGenerics>({\n enableOfflineSupport,\n filters,\n options,\n sort,\n });\n\n // Setup event listeners\n useAddedToChannelNotification({\n onAddedToChannel,\n setChannels,\n });\n\n useChannelDeleted({\n onChannelDeleted,\n setChannels,\n });\n\n useChannelHidden({\n onChannelHidden,\n setChannels,\n });\n\n useChannelTruncated({\n onChannelTruncated,\n refreshList,\n setChannels,\n setForceUpdate,\n });\n\n useChannelUpdated({\n onChannelUpdated,\n setChannels,\n });\n\n useChannelVisible({\n onChannelVisible,\n setChannels,\n });\n\n useNewMessage({\n lockChannelOrder,\n setChannels,\n });\n\n useNewMessageNotification({\n onMessageNew,\n setChannels,\n });\n\n useRemovedFromChannelNotification({\n onRemovedFromChannel,\n setChannels,\n });\n\n useUserPresence({\n setChannels,\n });\n\n const channelIdsStr = channels.reduce((acc, channel) => `${acc}${channel.cid}`, '');\n\n useEffect(() => {\n if (staticChannelsActive || !enableOfflineSupport) {\n return;\n }\n upsertCidsForQuery({\n cids: channels.map((c) => c.cid),\n filters,\n sort,\n });\n }, [channelIdsStr, staticChannelsActive]);\n\n useEffect(() => {\n const unsubscribe = subscribeConnectionRecoveredCallback(() => {\n refreshList();\n setForceUpdate((count) => count + 1);\n });\n\n return () => unsubscribe();\n });\n\n const channelsContext = useCreateChannelsContext({\n additionalFlatListProps,\n channels,\n EmptyStateIndicator,\n error,\n FooterLoadingIndicator,\n forceUpdate,\n hasNextPage,\n HeaderErrorIndicator,\n HeaderNetworkDownIndicator,\n ListHeaderComponent,\n loadingChannels,\n LoadingErrorIndicator,\n LoadingIndicator,\n loadingNextPage,\n loadMoreThreshold,\n loadNextPage,\n maxUnreadCount,\n numberOfSkeletons,\n onSelect,\n Preview,\n PreviewAvatar,\n PreviewMessage,\n PreviewStatus,\n PreviewTitle,\n PreviewUnreadCount,\n refreshing,\n refreshList,\n reloadList,\n setFlatListRef: (ref: FlatList<Channel<StreamChatGenerics>> | null) => {\n if (setFlatListRef) {\n setFlatListRef(ref);\n }\n },\n Skeleton,\n });\n\n return (\n <ChannelsProvider value={channelsContext}>\n <List<StreamChatGenerics> />\n </ChannelsProvider>\n );\n};\n"]}
@@ -241,9 +241,11 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
241
241
  return JSON.stringify(sort);
242
242
  }, [sort]);
243
243
  (0, _react.useEffect)(function () {
244
- var _client$user;
244
+ var loadChannels = function loadChannels() {
245
+ var _client$user;
246
+
247
+ if (!(client != null && (_client$user = client.user) != null && _client$user.id)) return;
245
248
 
246
- if (client != null && (_client$user = client.user) != null && _client$user.id) {
247
249
  if (enableOfflineSupport) {
248
250
  try {
249
251
  var channelsFromDB = (0, _getChannels.getChannels)({
@@ -260,7 +262,9 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
260
262
  }
261
263
 
262
264
  reloadList();
263
- }
265
+ };
266
+
267
+ loadChannels();
264
268
  }, [filterStr, sortStr]);
265
269
  return {
266
270
  channels: channels,
@@ -1 +1 @@
1
- {"version":3,"sources":["usePaginatedChannels.ts"],"names":["waitSeconds","seconds","Promise","resolve","setTimeout","ONE_SECOND_IN_MS","DEFAULT_OPTIONS","message_limit","MAX_NUMBER_OF_RETRIES","RETRY_INTERVAL_IN_MS","usePaginatedChannels","enableOfflineSupport","filters","options","sort","client","channels","setChannels","staticChannelsActive","setStaticChannelsActive","activeChannels","error","setError","hasNextPage","setHasNextPage","lastRefresh","Date","now","isQueryingRef","activeQueryType","setActiveQueryType","isMountedRef","filtersRef","sortRef","activeRequestId","queryChannels","queryType","retryCount","current","hasUpdatedData","JSON","stringify","some","Boolean","isQueryStale","currentRequestId","undefined","newOptions","limit","MAX_QUERY_CHANNELS_LIMIT","offset","length","skipInitialization","channelQueryResponse","newChannels","console","warn","Error","loadNextPage","refreshList","reloadList","filterStr","sortStr","user","id","channelsFromDB","currentUserId","hydrateActiveChannels","staticState","e","loadingChannels","loadingNextPage","refreshing"],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { Channel, ChannelFilters, ChannelOptions, ChannelSort } from 'stream-chat';\n\nimport { useActiveChannelsRefContext } from '../../../contexts/activeChannelsRefContext/ActiveChannelsRefContext';\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport { useIsMountedRef } from '../../../hooks/useIsMountedRef';\n\nimport { getChannels } from '../../../store/apis/getChannels';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { ONE_SECOND_IN_MS } from '../../../utils/date';\nimport { MAX_QUERY_CHANNELS_LIMIT } from '../utils';\n\nconst waitSeconds = (seconds: number) =>\n new Promise((resolve) => {\n setTimeout(resolve, seconds * ONE_SECOND_IN_MS);\n });\n\ntype Parameters<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n {\n enableOfflineSupport: boolean;\n filters: ChannelFilters<StreamChatGenerics>;\n options: ChannelOptions;\n sort: ChannelSort<StreamChatGenerics>;\n };\n\nconst DEFAULT_OPTIONS = {\n message_limit: 10,\n};\n\nconst MAX_NUMBER_OF_RETRIES = 3;\nconst RETRY_INTERVAL_IN_MS = 5000;\n\ntype QueryType = 'queryLocalDB' | 'reload' | 'refresh' | 'loadChannels';\n\nexport type QueryChannels = (queryType?: QueryType, retryCount?: number) => Promise<void>;\n\nexport const usePaginatedChannels = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n enableOfflineSupport,\n filters = {},\n options = DEFAULT_OPTIONS,\n sort = {},\n}: Parameters<StreamChatGenerics>) => {\n const { client } = useChatContext<StreamChatGenerics>();\n\n const [channels, setChannels] = useState<Channel<StreamChatGenerics>[]>([]);\n const [staticChannelsActive, setStaticChannelsActive] = useState<boolean>(true);\n const activeChannels = useActiveChannelsRefContext();\n\n const [error, setError] = useState<Error>();\n const [hasNextPage, setHasNextPage] = useState(true);\n const lastRefresh = useRef(Date.now());\n const isQueryingRef = useRef(false);\n const [activeQueryType, setActiveQueryType] = useState<QueryType | null>('queryLocalDB');\n const isMountedRef = useIsMountedRef();\n const filtersRef = useRef<typeof filters | null>(null);\n const sortRef = useRef<typeof sort | null>(null);\n const activeRequestId = useRef<number>(0);\n\n const queryChannels: QueryChannels = async (\n queryType: QueryType = 'loadChannels',\n retryCount = 0,\n ): Promise<void> => {\n if (!client || !isMountedRef.current) return;\n\n const hasUpdatedData =\n queryType === 'loadChannels' ||\n queryType === 'refresh' ||\n [\n JSON.stringify(filtersRef.current) !== JSON.stringify(filters),\n JSON.stringify(sortRef.current) !== JSON.stringify(sort),\n ].some(Boolean);\n\n const isQueryStale = () => !isMountedRef || activeRequestId.current !== currentRequestId;\n\n /**\n * We don't need to make another call to query channels if we don't\n * have new data for the query to include\n * */\n if (!hasUpdatedData) {\n if (activeQueryType === null) return;\n }\n\n filtersRef.current = filters;\n sortRef.current = sort;\n isQueryingRef.current = true;\n setError(undefined);\n activeRequestId.current++;\n const currentRequestId = activeRequestId.current;\n setActiveQueryType(queryType);\n\n const newOptions = {\n limit: options?.limit ?? MAX_QUERY_CHANNELS_LIMIT,\n offset: queryType === 'loadChannels' && !staticChannelsActive ? channels.length : 0,\n ...options,\n };\n\n try {\n const channelQueryResponse = await client.queryChannels(filters, sort, newOptions, {\n skipInitialization: activeChannels.current,\n });\n\n if (isQueryStale() || !isMountedRef.current) {\n return;\n }\n const newChannels =\n queryType === 'loadChannels' && !staticChannelsActive\n ? [...channels, ...channelQueryResponse]\n : channelQueryResponse;\n\n setChannels(newChannels);\n setStaticChannelsActive(false);\n setHasNextPage(channelQueryResponse.length >= newOptions.limit);\n setError(undefined);\n isQueryingRef.current = false;\n } catch (err: unknown) {\n isQueryingRef.current = false;\n await waitSeconds(2);\n\n if (isQueryStale()) {\n return;\n }\n\n // querying.current check is needed in order to make sure the next query call doesnt flick an error\n // state and then succeed (reconnect case)\n if (retryCount === MAX_NUMBER_OF_RETRIES && !isQueryingRef.current) {\n setActiveQueryType(null);\n console.warn(err);\n\n setError(\n new Error(\n `Maximum number of retries reached in queryChannels. Last error message is: ${err}`,\n ),\n );\n return;\n }\n\n return queryChannels(queryType, retryCount + 1);\n }\n\n setActiveQueryType(null);\n };\n\n const loadNextPage = hasNextPage ? queryChannels : undefined;\n\n const refreshList = () => {\n const now = Date.now();\n // Only allow pull-to-refresh 5 seconds after last successful refresh.\n if (now - lastRefresh.current < RETRY_INTERVAL_IN_MS && error === undefined) {\n return;\n }\n\n lastRefresh.current = Date.now();\n return queryChannels('refresh');\n };\n\n const reloadList = () => queryChannels('reload');\n\n /**\n * Equality check using stringified filters/sort ensure that we don't make un-necessary queryChannels api calls\n * for the scenario:\n *\n * <ChannelList\n * filters={{\n * members: { $in: ['vishal'] }\n * }}\n * ...\n * />\n *\n * Here we have passed filters as inline object, which means on every re-render of\n * parent component, ChannelList will receive new object reference (even though value is same), which\n * in return will trigger useEffect. To avoid this, we can add a value check.\n */\n const filterStr = useMemo(() => JSON.stringify(filters), [filters]);\n const sortStr = useMemo(() => JSON.stringify(sort), [sort]);\n\n useEffect(() => {\n if (client?.user?.id) {\n if (enableOfflineSupport) {\n try {\n const channelsFromDB = getChannels({ currentUserId: client.user.id, filters, sort });\n setChannels(\n client.hydrateActiveChannels(channelsFromDB, {\n staticState: true,\n }),\n );\n } catch (e) {\n console.warn('Failed to get channels from database: ', e);\n }\n }\n\n reloadList();\n }\n }, [filterStr, sortStr]);\n\n return {\n channels,\n error,\n hasNextPage,\n loadingChannels:\n activeQueryType === 'queryLocalDB'\n ? true\n : activeQueryType === 'reload' && channels.length === 0,\n loadingNextPage: activeQueryType === 'loadChannels',\n loadNextPage,\n refreshing: activeQueryType === 'refresh',\n refreshList,\n reloadList,\n setChannels,\n staticChannelsActive,\n };\n};\n"]}
1
+ {"version":3,"sources":["usePaginatedChannels.ts"],"names":["waitSeconds","seconds","Promise","resolve","setTimeout","ONE_SECOND_IN_MS","DEFAULT_OPTIONS","message_limit","MAX_NUMBER_OF_RETRIES","RETRY_INTERVAL_IN_MS","usePaginatedChannels","enableOfflineSupport","filters","options","sort","client","channels","setChannels","staticChannelsActive","setStaticChannelsActive","activeChannels","error","setError","hasNextPage","setHasNextPage","lastRefresh","Date","now","isQueryingRef","activeQueryType","setActiveQueryType","isMountedRef","filtersRef","sortRef","activeRequestId","queryChannels","queryType","retryCount","current","hasUpdatedData","JSON","stringify","some","Boolean","isQueryStale","currentRequestId","undefined","newOptions","limit","MAX_QUERY_CHANNELS_LIMIT","offset","length","skipInitialization","channelQueryResponse","newChannels","console","warn","Error","loadNextPage","refreshList","reloadList","filterStr","sortStr","loadChannels","user","id","channelsFromDB","currentUserId","hydrateActiveChannels","staticState","e","loadingChannels","loadingNextPage","refreshing"],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { Channel, ChannelFilters, ChannelOptions, ChannelSort } from 'stream-chat';\n\nimport { useActiveChannelsRefContext } from '../../../contexts/activeChannelsRefContext/ActiveChannelsRefContext';\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport { useIsMountedRef } from '../../../hooks/useIsMountedRef';\n\nimport { getChannels } from '../../../store/apis/getChannels';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { ONE_SECOND_IN_MS } from '../../../utils/date';\nimport { MAX_QUERY_CHANNELS_LIMIT } from '../utils';\n\nconst waitSeconds = (seconds: number) =>\n new Promise((resolve) => {\n setTimeout(resolve, seconds * ONE_SECOND_IN_MS);\n });\n\ntype Parameters<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n {\n enableOfflineSupport: boolean;\n filters: ChannelFilters<StreamChatGenerics>;\n options: ChannelOptions;\n sort: ChannelSort<StreamChatGenerics>;\n };\n\nconst DEFAULT_OPTIONS = {\n message_limit: 10,\n};\n\nconst MAX_NUMBER_OF_RETRIES = 3;\nconst RETRY_INTERVAL_IN_MS = 5000;\n\ntype QueryType = 'queryLocalDB' | 'reload' | 'refresh' | 'loadChannels';\n\nexport type QueryChannels = (queryType?: QueryType, retryCount?: number) => Promise<void>;\n\nexport const usePaginatedChannels = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n enableOfflineSupport,\n filters = {},\n options = DEFAULT_OPTIONS,\n sort = {},\n}: Parameters<StreamChatGenerics>) => {\n const { client } = useChatContext<StreamChatGenerics>();\n\n const [channels, setChannels] = useState<Channel<StreamChatGenerics>[]>([]);\n const [staticChannelsActive, setStaticChannelsActive] = useState<boolean>(true);\n const activeChannels = useActiveChannelsRefContext();\n\n const [error, setError] = useState<Error>();\n const [hasNextPage, setHasNextPage] = useState(true);\n const lastRefresh = useRef(Date.now());\n const isQueryingRef = useRef(false);\n const [activeQueryType, setActiveQueryType] = useState<QueryType | null>('queryLocalDB');\n const isMountedRef = useIsMountedRef();\n const filtersRef = useRef<typeof filters | null>(null);\n const sortRef = useRef<typeof sort | null>(null);\n const activeRequestId = useRef<number>(0);\n\n const queryChannels: QueryChannels = async (\n queryType: QueryType = 'loadChannels',\n retryCount = 0,\n ): Promise<void> => {\n if (!client || !isMountedRef.current) return;\n\n const hasUpdatedData =\n queryType === 'loadChannels' ||\n queryType === 'refresh' ||\n [\n JSON.stringify(filtersRef.current) !== JSON.stringify(filters),\n JSON.stringify(sortRef.current) !== JSON.stringify(sort),\n ].some(Boolean);\n\n const isQueryStale = () => !isMountedRef || activeRequestId.current !== currentRequestId;\n\n /**\n * We don't need to make another call to query channels if we don't\n * have new data for the query to include\n * */\n if (!hasUpdatedData) {\n if (activeQueryType === null) return;\n }\n\n filtersRef.current = filters;\n sortRef.current = sort;\n isQueryingRef.current = true;\n setError(undefined);\n activeRequestId.current++;\n const currentRequestId = activeRequestId.current;\n setActiveQueryType(queryType);\n\n const newOptions = {\n limit: options?.limit ?? MAX_QUERY_CHANNELS_LIMIT,\n offset: queryType === 'loadChannels' && !staticChannelsActive ? channels.length : 0,\n ...options,\n };\n\n try {\n const channelQueryResponse = await client.queryChannels(filters, sort, newOptions, {\n skipInitialization: activeChannels.current,\n });\n\n if (isQueryStale() || !isMountedRef.current) {\n return;\n }\n const newChannels =\n queryType === 'loadChannels' && !staticChannelsActive\n ? [...channels, ...channelQueryResponse]\n : channelQueryResponse;\n\n setChannels(newChannels);\n setStaticChannelsActive(false);\n setHasNextPage(channelQueryResponse.length >= newOptions.limit);\n setError(undefined);\n isQueryingRef.current = false;\n } catch (err: unknown) {\n isQueryingRef.current = false;\n await waitSeconds(2);\n\n if (isQueryStale()) {\n return;\n }\n\n // querying.current check is needed in order to make sure the next query call doesnt flick an error\n // state and then succeed (reconnect case)\n if (retryCount === MAX_NUMBER_OF_RETRIES && !isQueryingRef.current) {\n setActiveQueryType(null);\n console.warn(err);\n\n setError(\n new Error(\n `Maximum number of retries reached in queryChannels. Last error message is: ${err}`,\n ),\n );\n return;\n }\n\n return queryChannels(queryType, retryCount + 1);\n }\n\n setActiveQueryType(null);\n };\n\n const loadNextPage = hasNextPage ? queryChannels : undefined;\n\n const refreshList = () => {\n const now = Date.now();\n // Only allow pull-to-refresh 5 seconds after last successful refresh.\n if (now - lastRefresh.current < RETRY_INTERVAL_IN_MS && error === undefined) {\n return;\n }\n\n lastRefresh.current = Date.now();\n return queryChannels('refresh');\n };\n\n const reloadList = () => queryChannels('reload');\n\n /**\n * Equality check using stringified filters/sort ensure that we don't make un-necessary queryChannels api calls\n * for the scenario:\n *\n * <ChannelList\n * filters={{\n * members: { $in: ['vishal'] }\n * }}\n * ...\n * />\n *\n * Here we have passed filters as inline object, which means on every re-render of\n * parent component, ChannelList will receive new object reference (even though value is same), which\n * in return will trigger useEffect. To avoid this, we can add a value check.\n */\n const filterStr = useMemo(() => JSON.stringify(filters), [filters]);\n const sortStr = useMemo(() => JSON.stringify(sort), [sort]);\n\n useEffect(() => {\n const loadChannels = () => {\n if (!client?.user?.id) return;\n if (enableOfflineSupport) {\n try {\n const channelsFromDB = getChannels({ currentUserId: client.user.id, filters, sort });\n setChannels(\n client.hydrateActiveChannels(channelsFromDB, {\n staticState: true,\n }),\n );\n } catch (e) {\n console.warn('Failed to get channels from database: ', e);\n }\n }\n\n reloadList();\n };\n\n loadChannels();\n }, [filterStr, sortStr]);\n\n return {\n channels,\n error,\n hasNextPage,\n loadingChannels:\n activeQueryType === 'queryLocalDB'\n ? true\n : activeQueryType === 'reload' && channels.length === 0,\n loadingNextPage: activeQueryType === 'loadChannels',\n loadNextPage,\n refreshing: activeQueryType === 'refresh',\n refreshList,\n reloadList,\n setChannels,\n staticChannelsActive,\n };\n};\n"]}
@@ -19,12 +19,18 @@ var _dayjs = _interopRequireDefault(require("dayjs"));
19
19
 
20
20
  var _useAppSettings = require("./hooks/useAppSettings");
21
21
 
22
+ var _useConnectionRecovered = require("./hooks/useConnectionRecovered");
23
+
22
24
  var _useCreateChatContext = require("./hooks/useCreateChatContext");
23
25
 
24
26
  var _useIsOnline2 = require("./hooks/useIsOnline");
25
27
 
26
28
  var _useMutedUsers = require("./hooks/useMutedUsers");
27
29
 
30
+ var _useSyncDatabase = require("./hooks/useSyncDatabase");
31
+
32
+ var _ChannelsStateContext = require("../../contexts/channelsStateContext/ChannelsStateContext");
33
+
28
34
  var _ChatContext = require("../../contexts/chatContext/ChatContext");
29
35
 
30
36
  var _OverlayContext = require("../../contexts/overlayContext/OverlayContext");
@@ -104,6 +110,13 @@ var ChatWithContext = function ChatWithContext(props) {
104
110
  };
105
111
 
106
112
  var appSettings = (0, _useAppSettings.useAppSettings)(client, isOnline);
113
+
114
+ var _useConnectionRecover = (0, _useConnectionRecovered.useConnectionRecovered)({
115
+ client: client,
116
+ enableOfflineSupport: enableOfflineSupport
117
+ }),
118
+ subscribeConnectionRecoveredCallback = _useConnectionRecover.subscribeConnectionRecoveredCallback;
119
+
107
120
  var chatContext = (0, _useCreateChatContext.useCreateChatContext)({
108
121
  appSettings: appSettings,
109
122
  channel: channel,
@@ -112,20 +125,25 @@ var ChatWithContext = function ChatWithContext(props) {
112
125
  enableOfflineSupport: enableOfflineSupport,
113
126
  isOnline: isOnline,
114
127
  mutedUsers: mutedUsers,
115
- setActiveChannel: setActiveChannel
128
+ setActiveChannel: setActiveChannel,
129
+ subscribeConnectionRecoveredCallback: subscribeConnectionRecoveredCallback
116
130
  });
117
131
  (0, _react.useEffect)(function () {
118
132
  if (enableOfflineSupport) {
119
133
  _QuickSqliteClient.QuickSqliteClient.initializeDatabase();
120
134
  }
121
135
  }, []);
136
+ (0, _useSyncDatabase.useSyncDatabase)({
137
+ client: client,
138
+ enableOfflineSupport: enableOfflineSupport
139
+ });
122
140
  if (loadingTranslators) return null;
123
141
  return _react["default"].createElement(_ChatContext.ChatProvider, {
124
142
  value: chatContext,
125
143
  __self: _this,
126
144
  __source: {
127
145
  fileName: _jsxFileName,
128
- lineNumber: 202,
146
+ lineNumber: 216,
129
147
  columnNumber: 5
130
148
  }
131
149
  }, _react["default"].createElement(_TranslationContext.TranslationProvider, {
@@ -135,7 +153,7 @@ var ChatWithContext = function ChatWithContext(props) {
135
153
  __self: _this,
136
154
  __source: {
137
155
  fileName: _jsxFileName,
138
- lineNumber: 203,
156
+ lineNumber: 217,
139
157
  columnNumber: 7
140
158
  }
141
159
  }, _react["default"].createElement(_ThemeContext.ThemeProvider, {
@@ -143,10 +161,17 @@ var ChatWithContext = function ChatWithContext(props) {
143
161
  __self: _this,
144
162
  __source: {
145
163
  fileName: _jsxFileName,
146
- lineNumber: 206,
164
+ lineNumber: 220,
147
165
  columnNumber: 9
148
166
  }
149
- }, children)));
167
+ }, _react["default"].createElement(_ChannelsStateContext.ChannelsStateProvider, {
168
+ __self: _this,
169
+ __source: {
170
+ fileName: _jsxFileName,
171
+ lineNumber: 221,
172
+ columnNumber: 11
173
+ }
174
+ }, children))));
150
175
  };
151
176
 
152
177
  var Chat = function Chat(props) {
@@ -159,7 +184,7 @@ var Chat = function Chat(props) {
159
184
  __self: _this,
160
185
  __source: {
161
186
  fileName: _jsxFileName,
162
- lineNumber: 240,
187
+ lineNumber: 256,
163
188
  columnNumber: 10
164
189
  }
165
190
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["Chat.tsx"],"names":["ChatWithContext","props","children","client","closeConnectionOnBackground","enableOfflineSupport","i18nInstance","style","channel","setChannel","t","key","tDateTimeParser","input","translators","setTranslators","loadingTranslators","connectionRecovering","isOnline","mutedUsers","setUserAgent","SDK","Platform","OS","version","recoverStateOnReconnect","persistUserOnConnectionFailure","setActiveChannel","newChannel","appSettings","chatContext","QuickSqliteClient","initializeDatabase","userLanguage","user","language","DEFAULT_USER_LANGUAGE","Chat"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useEffect, useState } from 'react';\nimport { Platform } from 'react-native';\n\nimport Dayjs from 'dayjs';\n\nimport type { Channel } from 'stream-chat';\n\nimport { useAppSettings } from './hooks/useAppSettings';\nimport { useCreateChatContext } from './hooks/useCreateChatContext';\nimport { useIsOnline } from './hooks/useIsOnline';\nimport { useMutedUsers } from './hooks/useMutedUsers';\n\nimport { ChatContextValue, ChatProvider } from '../../contexts/chatContext/ChatContext';\nimport { useOverlayContext } from '../../contexts/overlayContext/OverlayContext';\nimport { DeepPartial, ThemeProvider } from '../../contexts/themeContext/ThemeContext';\nimport type { Theme } from '../../contexts/themeContext/utils/theme';\nimport {\n DEFAULT_USER_LANGUAGE,\n TranslationProvider,\n TranslatorFunctions,\n} from '../../contexts/translationContext/TranslationContext';\nimport { useStreami18n } from '../../hooks/useStreami18n';\nimport init from '../../init';\n\nimport { SDK } from '../../native';\nimport { QuickSqliteClient } from '../../store/QuickSqliteClient';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { Streami18n } from '../../utils/Streami18n';\nimport { version } from '../../version.json';\n\ninit();\n\nexport type ChatProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> & {\n /**\n * When false, ws connection won't be disconnection upon backgrounding the app.\n * To receive push notifications, its necessary that user doesn't have active\n * websocket connection. So by default, we disconnect websocket connection when\n * app goes to background, and reconnect when app comes to foreground.\n */\n closeConnectionOnBackground?: boolean;\n /**\n * Enables offline storage and loading for chat data.\n */\n enableOfflineSupport?: boolean;\n /**\n * Instance of Streami18n class should be provided to Chat component to enable internationalization.\n *\n * Stream provides following list of in-built translations:\n * 1. English (en)\n * 2. Dutch (nl)\n * 3. ...\n * 4. ...\n *\n * Simplest way to start using chat components in one of the in-built languages would be following:\n *\n * ```\n * const i18n = new Streami18n('nl');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * If you would like to override certain keys in in-built translation.\n * UI will be automatically updated in this case.\n *\n * ```\n * const i18n = new Streami18n('nl');\n *\n * i18n.registerTranslation('nl', {\n * 'Nothing yet...': 'Nog Niet ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} en {{ secondUser }} zijn aan het typen...',\n * });\n *\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * You can use the same function to add whole new language.\n *\n * ```\n * const i18n = new Streami18n('it');\n *\n * i18n.registerTranslation('it', {\n * 'Nothing yet...': 'Non ancora ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} a {{ secondUser }} stanno scrivendo...',\n * });\n *\n * // Make sure to call setLanguage to reflect new language in UI.\n * i18n.setLanguage('it');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n */\n i18nInstance?: Streami18n;\n /**\n * You can pass the theme object to customize the styles of Chat components. You can check the default theme in [theme.ts](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/contexts/themeContext/utils/theme.ts)\n *\n * Please check section about [themes in cookbook](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#theme) for details.\n *\n * ```\n * import type { DeepPartial, Theme } from 'stream-chat-react-native';\n *\n * const theme: DeepPartial<Theme> = {\n * messageSimple: {\n * file: {\n * container: {\n * backgroundColor: 'red',\n * },\n * icon: {\n * height: 16,\n * width: 16,\n * },\n * },\n * },\n * };\n *\n * <Chat style={theme}>\n * </Chat>\n * ```\n *\n * @overrideType object\n */\n style?: DeepPartial<Theme>;\n};\n\nconst ChatWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const {\n children,\n client,\n closeConnectionOnBackground = true,\n enableOfflineSupport = false,\n i18nInstance,\n style,\n } = props;\n\n const [channel, setChannel] = useState<Channel<StreamChatGenerics>>();\n const [translators, setTranslators] = useState<TranslatorFunctions>({\n t: (key: string) => key,\n tDateTimeParser: (input?: string | number | Date) => Dayjs(input),\n });\n\n /**\n * Setup translators\n */\n const loadingTranslators = useStreami18n({ i18nInstance, setTranslators });\n\n /**\n * Setup connection event listeners\n */\n const { connectionRecovering, isOnline } = useIsOnline<StreamChatGenerics>(\n client,\n closeConnectionOnBackground,\n );\n\n /**\n * Setup muted user listener\n * TODO: reimplement\n */\n const mutedUsers = useMutedUsers<StreamChatGenerics>(client);\n\n useEffect(() => {\n if (client) {\n client.setUserAgent(`${SDK}-${Platform.OS}-${version}`);\n // This is to disable recovery related logic in js client, since we handle it in this SDK\n client.recoverStateOnReconnect = false;\n client.persistUserOnConnectionFailure = enableOfflineSupport;\n }\n }, [client]);\n\n const setActiveChannel = (newChannel?: Channel<StreamChatGenerics>) => setChannel(newChannel);\n\n const appSettings = useAppSettings(client, isOnline);\n\n const chatContext = useCreateChatContext({\n appSettings,\n channel,\n client,\n connectionRecovering,\n enableOfflineSupport,\n isOnline,\n mutedUsers,\n setActiveChannel,\n });\n\n useEffect(() => {\n if (enableOfflineSupport) {\n QuickSqliteClient.initializeDatabase();\n }\n }, []);\n\n if (loadingTranslators) return null;\n\n return (\n <ChatProvider<StreamChatGenerics> value={chatContext}>\n <TranslationProvider\n value={{ ...translators, userLanguage: client.user?.language || DEFAULT_USER_LANGUAGE }}\n >\n <ThemeProvider style={style}>{children}</ThemeProvider>\n </TranslationProvider>\n </ChatProvider>\n );\n};\n\n/**\n * Chat - Wrapper component for Chat. The needs to be placed around any other chat components.\n * This Chat component provides the ChatContext to all other components.\n *\n * The ChatContext provides the following props:\n *\n * - channel - currently active channel\n * - client - client connection\n * - connectionRecovering - whether or not websocket is reconnecting\n * - isOnline - whether or not set user is active\n * - setActiveChannel - function to set the currently active channel\n *\n * The Chat Component takes the following generics in order:\n * - At (AttachmentType) - custom Attachment object extension\n * - Ct (ChannelType) - custom Channel object extension\n * - Co (CommandType) - custom Command string union extension\n * - Ev (EventType) - custom Event object extension\n * - Me (MessageType) - custom Message object extension\n * - Re (ReactionType) - custom Reaction object extension\n * - Us (UserType) - custom User object extension\n */\nexport const Chat = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const { style } = useOverlayContext();\n\n return <ChatWithContext {...{ style }} {...props} />;\n};\n"]}
1
+ {"version":3,"sources":["Chat.tsx"],"names":["ChatWithContext","props","children","client","closeConnectionOnBackground","enableOfflineSupport","i18nInstance","style","channel","setChannel","t","key","tDateTimeParser","input","translators","setTranslators","loadingTranslators","connectionRecovering","isOnline","mutedUsers","setUserAgent","SDK","Platform","OS","version","recoverStateOnReconnect","persistUserOnConnectionFailure","setActiveChannel","newChannel","appSettings","subscribeConnectionRecoveredCallback","chatContext","QuickSqliteClient","initializeDatabase","userLanguage","user","language","DEFAULT_USER_LANGUAGE","Chat"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useEffect, useState } from 'react';\nimport { Platform } from 'react-native';\n\nimport Dayjs from 'dayjs';\n\nimport type { Channel } from 'stream-chat';\n\nimport { useAppSettings } from './hooks/useAppSettings';\nimport { useConnectionRecovered } from './hooks/useConnectionRecovered';\nimport { useCreateChatContext } from './hooks/useCreateChatContext';\nimport { useIsOnline } from './hooks/useIsOnline';\nimport { useMutedUsers } from './hooks/useMutedUsers';\n\nimport { useSyncDatabase } from './hooks/useSyncDatabase';\n\nimport { ChannelsStateProvider } from '../../contexts/channelsStateContext/ChannelsStateContext';\nimport { ChatContextValue, ChatProvider } from '../../contexts/chatContext/ChatContext';\nimport { useOverlayContext } from '../../contexts/overlayContext/OverlayContext';\nimport { DeepPartial, ThemeProvider } from '../../contexts/themeContext/ThemeContext';\nimport type { Theme } from '../../contexts/themeContext/utils/theme';\nimport {\n DEFAULT_USER_LANGUAGE,\n TranslationProvider,\n TranslatorFunctions,\n} from '../../contexts/translationContext/TranslationContext';\nimport { useStreami18n } from '../../hooks/useStreami18n';\nimport init from '../../init';\n\nimport { SDK } from '../../native';\nimport { QuickSqliteClient } from '../../store/QuickSqliteClient';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { Streami18n } from '../../utils/Streami18n';\nimport { version } from '../../version.json';\n\ninit();\n\nexport type ChatProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> & {\n /**\n * When false, ws connection won't be disconnection upon backgrounding the app.\n * To receive push notifications, its necessary that user doesn't have active\n * websocket connection. So by default, we disconnect websocket connection when\n * app goes to background, and reconnect when app comes to foreground.\n */\n closeConnectionOnBackground?: boolean;\n /**\n * Enables offline storage and loading for chat data.\n */\n enableOfflineSupport?: boolean;\n /**\n * Instance of Streami18n class should be provided to Chat component to enable internationalization.\n *\n * Stream provides following list of in-built translations:\n * 1. English (en)\n * 2. Dutch (nl)\n * 3. ...\n * 4. ...\n *\n * Simplest way to start using chat components in one of the in-built languages would be following:\n *\n * ```\n * const i18n = new Streami18n('nl');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * If you would like to override certain keys in in-built translation.\n * UI will be automatically updated in this case.\n *\n * ```\n * const i18n = new Streami18n('nl');\n *\n * i18n.registerTranslation('nl', {\n * 'Nothing yet...': 'Nog Niet ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} en {{ secondUser }} zijn aan het typen...',\n * });\n *\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * You can use the same function to add whole new language.\n *\n * ```\n * const i18n = new Streami18n('it');\n *\n * i18n.registerTranslation('it', {\n * 'Nothing yet...': 'Non ancora ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} a {{ secondUser }} stanno scrivendo...',\n * });\n *\n * // Make sure to call setLanguage to reflect new language in UI.\n * i18n.setLanguage('it');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n */\n i18nInstance?: Streami18n;\n /**\n * You can pass the theme object to customize the styles of Chat components. You can check the default theme in [theme.ts](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/contexts/themeContext/utils/theme.ts)\n *\n * Please check section about [themes in cookbook](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#theme) for details.\n *\n * ```\n * import type { DeepPartial, Theme } from 'stream-chat-react-native';\n *\n * const theme: DeepPartial<Theme> = {\n * messageSimple: {\n * file: {\n * container: {\n * backgroundColor: 'red',\n * },\n * icon: {\n * height: 16,\n * width: 16,\n * },\n * },\n * },\n * };\n *\n * <Chat style={theme}>\n * </Chat>\n * ```\n *\n * @overrideType object\n */\n style?: DeepPartial<Theme>;\n};\n\nconst ChatWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const {\n children,\n client,\n closeConnectionOnBackground = true,\n enableOfflineSupport = false,\n i18nInstance,\n style,\n } = props;\n\n const [channel, setChannel] = useState<Channel<StreamChatGenerics>>();\n const [translators, setTranslators] = useState<TranslatorFunctions>({\n t: (key: string) => key,\n tDateTimeParser: (input?: string | number | Date) => Dayjs(input),\n });\n\n /**\n * Setup translators\n */\n const loadingTranslators = useStreami18n({ i18nInstance, setTranslators });\n\n /**\n * Setup connection event listeners\n */\n const { connectionRecovering, isOnline } = useIsOnline<StreamChatGenerics>(\n client,\n closeConnectionOnBackground,\n );\n\n /**\n * Setup muted user listener\n * TODO: reimplement\n */\n const mutedUsers = useMutedUsers<StreamChatGenerics>(client);\n\n useEffect(() => {\n if (client) {\n client.setUserAgent(`${SDK}-${Platform.OS}-${version}`);\n // This is to disable recovery related logic in js client, since we handle it in this SDK\n client.recoverStateOnReconnect = false;\n client.persistUserOnConnectionFailure = enableOfflineSupport;\n }\n }, [client]);\n\n const setActiveChannel = (newChannel?: Channel<StreamChatGenerics>) => setChannel(newChannel);\n\n const appSettings = useAppSettings(client, isOnline);\n const { subscribeConnectionRecoveredCallback } = useConnectionRecovered<StreamChatGenerics>({\n client,\n enableOfflineSupport,\n });\n\n const chatContext = useCreateChatContext({\n appSettings,\n channel,\n client,\n connectionRecovering,\n enableOfflineSupport,\n isOnline,\n mutedUsers,\n setActiveChannel,\n subscribeConnectionRecoveredCallback,\n });\n\n useEffect(() => {\n if (enableOfflineSupport) {\n QuickSqliteClient.initializeDatabase();\n }\n }, []);\n\n useSyncDatabase({\n client,\n enableOfflineSupport,\n });\n\n if (loadingTranslators) return null;\n\n return (\n <ChatProvider<StreamChatGenerics> value={chatContext}>\n <TranslationProvider\n value={{ ...translators, userLanguage: client.user?.language || DEFAULT_USER_LANGUAGE }}\n >\n <ThemeProvider style={style}>\n <ChannelsStateProvider<StreamChatGenerics>>{children}</ChannelsStateProvider>\n </ThemeProvider>\n </TranslationProvider>\n </ChatProvider>\n );\n};\n\n/**\n * Chat - Wrapper component for Chat. The needs to be placed around any other chat components.\n * This Chat component provides the ChatContext to all other components.\n *\n * The ChatContext provides the following props:\n *\n * - channel - currently active channel\n * - client - client connection\n * - connectionRecovering - whether or not websocket is reconnecting\n * - isOnline - whether or not set user is active\n * - setActiveChannel - function to set the currently active channel\n *\n * The Chat Component takes the following generics in order:\n * - At (AttachmentType) - custom Attachment object extension\n * - Ct (ChannelType) - custom Channel object extension\n * - Co (CommandType) - custom Command string union extension\n * - Ev (EventType) - custom Event object extension\n * - Me (MessageType) - custom Message object extension\n * - Re (ReactionType) - custom Reaction object extension\n * - Us (UserType) - custom User object extension\n */\nexport const Chat = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const { style } = useOverlayContext();\n\n return <ChatWithContext {...{ style }} {...props} />;\n};\n"]}
@@ -3,23 +3,23 @@ Object.defineProperty(exports, "__esModule", {
3
3
  });
4
4
  exports.handleEventToSyncDB = void 0;
5
5
 
6
- var _deleteChannel = require("../../../../store/apis/deleteChannel");
6
+ var _deleteChannel = require("../../../store/apis/deleteChannel");
7
7
 
8
- var _deleteMember = require("../../../../store/apis/deleteMember");
8
+ var _deleteMember = require("../../../store/apis/deleteMember");
9
9
 
10
- var _deleteMessagesForChannel = require("../../../../store/apis/deleteMessagesForChannel");
10
+ var _deleteMessagesForChannel = require("../../../store/apis/deleteMessagesForChannel");
11
11
 
12
- var _updateMessage = require("../../../../store/apis/updateMessage");
12
+ var _updateMessage = require("../../../store/apis/updateMessage");
13
13
 
14
- var _upsertChannelData = require("../../../../store/apis/upsertChannelData");
14
+ var _upsertChannelData = require("../../../store/apis/upsertChannelData");
15
15
 
16
- var _upsertChannels = require("../../../../store/apis/upsertChannels");
16
+ var _upsertChannels = require("../../../store/apis/upsertChannels");
17
17
 
18
- var _upsertMembers = require("../../../../store/apis/upsertMembers");
18
+ var _upsertMembers = require("../../../store/apis/upsertMembers");
19
19
 
20
- var _upsertMessages = require("../../../../store/apis/upsertMessages");
20
+ var _upsertMessages = require("../../../store/apis/upsertMessages");
21
21
 
22
- var _upsertReads = require("../../../../store/apis/upsertReads");
22
+ var _upsertReads = require("../../../store/apis/upsertReads");
23
23
 
24
24
  var handleEventToSyncDB = function handleEventToSyncDB(event, flush) {
25
25
  var type = event.type;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["handleEventToSyncDB.ts"],"names":["handleEventToSyncDB","event","flush","type","user","id","cid","reads","last_read","received_at","unread_messages","message","parent_id","show_in_channel","messages","reaction","channel","queriedChannels","channels","length","isLatestMessagesSet","isLatestMessageSet","member","members"],"mappings":"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","sourcesContent":["import type { Event } from 'stream-chat';\n\nimport { deleteChannel } from '../../../store/apis/deleteChannel';\nimport { deleteMember } from '../../../store/apis/deleteMember';\nimport { deleteMessagesForChannel } from '../../../store/apis/deleteMessagesForChannel';\nimport { updateMessage } from '../../../store/apis/updateMessage';\nimport { upsertChannelData } from '../../../store/apis/upsertChannelData';\nimport { upsertChannels } from '../../../store/apis/upsertChannels';\nimport { upsertMembers } from '../../../store/apis/upsertMembers';\nimport { upsertMessages } from '../../../store/apis/upsertMessages';\nimport { upsertReads } from '../../../store/apis/upsertReads';\n\nexport const handleEventToSyncDB = (event: Event, flush?: boolean) => {\n const { type } = event;\n\n if (type === 'message.read') {\n if (event.user?.id && event.cid) {\n return upsertReads({\n cid: event.cid,\n flush,\n reads: [\n {\n last_read: event.received_at as string,\n unread_messages: 0,\n user: event.user,\n },\n ],\n });\n }\n }\n\n if (type === 'message.new') {\n if (event.message && (!event.message.parent_id || event.message.show_in_channel)) {\n return upsertMessages({\n flush,\n messages: [event.message],\n });\n }\n }\n\n if (type === 'message.updated' || type === 'message.deleted') {\n if (event.message && !event.message.parent_id) {\n // Update only if it exists, otherwise event could be related\n // to a message which is not in database.\n return updateMessage({\n flush,\n message: event.message,\n });\n }\n }\n\n if (type === 'reaction.updated') {\n if (event.message && event.reaction) {\n // We update the entire message to make sure we also update\n // reaction_counts.\n return updateMessage({\n flush,\n message: event.message,\n });\n }\n }\n\n if (type === 'reaction.new' || type === 'reaction.deleted') {\n if (event.message && !event.message.parent_id) {\n // Here we are relying on the fact message.latest_reactions always includes\n // the new reaction. So we first delete all the existing reactions and populate\n // the reactions table with message.latest_reactions\n return updateMessage({\n flush,\n message: event.message,\n });\n }\n }\n\n if (\n type === 'channel.updated' ||\n type === 'channel.visible' ||\n type === 'notification.added_to_channel' ||\n type === 'notification.message_new'\n ) {\n if (event.channel) {\n return upsertChannelData({\n channel: event.channel,\n flush,\n });\n }\n }\n\n if (\n type === 'channel.hidden' ||\n type === 'channel.deleted' ||\n type === 'notification.removed_from_channel'\n ) {\n if (event.channel) {\n return deleteChannel({\n cid: event.channel.cid,\n flush,\n });\n }\n }\n\n if (type === 'channel.truncated') {\n if (event.channel) {\n return deleteMessagesForChannel({\n cid: event.channel.cid,\n flush,\n });\n }\n }\n\n if (type === 'channels.queried') {\n if (event.queriedChannels?.channels?.length) {\n return upsertChannels({\n channels: event.queriedChannels?.channels,\n flush,\n isLatestMessagesSet: event.queriedChannels?.isLatestMessageSet,\n });\n }\n }\n\n if (type === 'member.added' || type === 'member.updated') {\n if (event.member && event.cid) {\n return upsertMembers({\n cid: event.cid,\n flush,\n members: [event.member],\n });\n }\n }\n\n if (type === 'member.removed') {\n if (event.member && event.cid) {\n return deleteMember({\n cid: event.cid,\n flush,\n member: event.member,\n });\n }\n }\n\n return [];\n};\n"]}