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.
- package/lib/commonjs/components/ChannelList/ChannelList.js +21 -20
- package/lib/commonjs/components/ChannelList/ChannelList.js.map +1 -1
- package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +7 -3
- package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
- package/lib/commonjs/components/Chat/Chat.js +31 -6
- package/lib/commonjs/components/Chat/Chat.js.map +1 -1
- package/lib/commonjs/components/{ChannelList/hooks/listeners → Chat/hooks}/handleEventToSyncDB.js +9 -9
- package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js.map +1 -0
- package/lib/commonjs/components/{ChannelList/hooks/listeners → Chat/hooks}/useConnectionRecovered.js +43 -27
- package/lib/commonjs/components/Chat/hooks/useConnectionRecovered.js.map +1 -0
- package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js +4 -2
- package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js.map +1 -1
- package/lib/commonjs/components/{ChannelList/hooks/listeners → Chat/hooks}/useSyncDatabase.js +2 -7
- package/lib/commonjs/components/Chat/hooks/useSyncDatabase.js.map +1 -0
- package/lib/commonjs/components/index.js +26 -13
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/contexts/chatContext/ChatContext.js +2 -2
- package/lib/commonjs/contexts/chatContext/ChatContext.js.map +1 -1
- package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +12 -21
- package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
- package/lib/commonjs/hooks/useLoadingImage.js +1 -1
- package/lib/commonjs/hooks/useLoadingImage.js.map +1 -1
- package/lib/commonjs/store/apis/getLastSyncedAt.js.map +1 -1
- package/lib/commonjs/store/mappers/mapChannelDataToStorable.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/appendWhereCluase.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/createDeleteQuery.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/createSelectQuery.js +1 -1
- package/lib/commonjs/store/sqlite-utils/createSelectQuery.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/createUpdateQuery.js +1 -1
- package/lib/commonjs/store/sqlite-utils/createUpdateQuery.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/createUpsertQuery.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/printRow.js +2 -12
- package/lib/commonjs/store/sqlite-utils/printRow.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/ChannelList/ChannelList.js +21 -20
- package/lib/module/components/ChannelList/ChannelList.js.map +1 -1
- package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +7 -3
- package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
- package/lib/module/components/Chat/Chat.js +31 -6
- package/lib/module/components/Chat/Chat.js.map +1 -1
- package/lib/module/components/{ChannelList/hooks/listeners → Chat/hooks}/handleEventToSyncDB.js +9 -9
- package/lib/module/components/Chat/hooks/handleEventToSyncDB.js.map +1 -0
- package/lib/module/components/{ChannelList/hooks/listeners → Chat/hooks}/useConnectionRecovered.js +43 -27
- package/lib/module/components/Chat/hooks/useConnectionRecovered.js.map +1 -0
- package/lib/module/components/Chat/hooks/useCreateChatContext.js +4 -2
- package/lib/module/components/Chat/hooks/useCreateChatContext.js.map +1 -1
- package/lib/module/components/{ChannelList/hooks/listeners → Chat/hooks}/useSyncDatabase.js +2 -7
- package/lib/module/components/Chat/hooks/useSyncDatabase.js.map +1 -0
- package/lib/module/components/index.js +26 -13
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/contexts/chatContext/ChatContext.js +2 -2
- package/lib/module/contexts/chatContext/ChatContext.js.map +1 -1
- package/lib/module/contexts/overlayContext/OverlayProvider.js +12 -21
- package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
- package/lib/module/hooks/useLoadingImage.js +1 -1
- package/lib/module/hooks/useLoadingImage.js.map +1 -1
- package/lib/module/store/apis/getLastSyncedAt.js.map +1 -1
- package/lib/module/store/mappers/mapChannelDataToStorable.js.map +1 -1
- package/lib/module/store/sqlite-utils/appendWhereCluase.js.map +1 -1
- package/lib/module/store/sqlite-utils/createDeleteQuery.js.map +1 -1
- package/lib/module/store/sqlite-utils/createSelectQuery.js +1 -1
- package/lib/module/store/sqlite-utils/createSelectQuery.js.map +1 -1
- package/lib/module/store/sqlite-utils/createUpdateQuery.js +1 -1
- package/lib/module/store/sqlite-utils/createUpdateQuery.js.map +1 -1
- package/lib/module/store/sqlite-utils/createUpsertQuery.js.map +1 -1
- package/lib/module/store/sqlite-utils/printRow.js +2 -12
- package/lib/module/store/sqlite-utils/printRow.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/{ChannelList/hooks/listeners → Chat/hooks}/handleEventToSyncDB.d.ts +1 -1
- package/lib/typescript/components/Chat/hooks/useConnectionRecovered.d.ts +10 -0
- package/lib/typescript/components/Chat/hooks/useCreateChatContext.d.ts +1 -1
- package/lib/typescript/components/Chat/hooks/useSyncDatabase.d.ts +8 -0
- package/lib/typescript/components/index.d.ts +2 -1
- package/lib/typescript/contexts/chatContext/ChatContext.d.ts +2 -1
- package/lib/typescript/store/apis/getLastSyncedAt.d.ts +2 -2
- package/lib/typescript/store/sqlite-utils/appendWhereCluase.d.ts +2 -1
- package/package.json +1 -1
- package/src/components/ChannelList/ChannelList.tsx +12 -15
- package/src/components/ChannelList/hooks/listeners/__tests__/useChannelUpdated.test.tsx +1 -0
- package/src/components/ChannelList/hooks/usePaginatedChannels.ts +5 -2
- package/src/components/Chat/Chat.tsx +17 -1
- package/src/components/{ChannelList/hooks/listeners → Chat/hooks}/handleEventToSyncDB.ts +9 -9
- package/src/components/Chat/hooks/useConnectionRecovered.ts +92 -0
- package/src/components/Chat/hooks/useCreateChatContext.ts +2 -0
- package/src/components/{ChannelList/hooks/listeners → Chat/hooks}/useSyncDatabase.ts +6 -6
- package/src/components/index.ts +2 -1
- package/src/contexts/chatContext/ChatContext.tsx +2 -1
- package/src/contexts/overlayContext/OverlayProvider.tsx +1 -2
- package/src/hooks/useLoadingImage.tsx +1 -1
- package/src/store/apis/getLastSyncedAt.ts +5 -1
- package/src/store/mappers/mapChannelDataToStorable.ts +1 -1
- package/src/store/sqlite-utils/appendWhereCluase.ts +3 -3
- package/src/store/sqlite-utils/createDeleteQuery.ts +2 -2
- package/src/store/sqlite-utils/createSelectQuery.ts +2 -2
- package/src/store/sqlite-utils/createUpdateQuery.ts +2 -2
- package/src/store/sqlite-utils/createUpsertQuery.ts +2 -2
- package/src/store/sqlite-utils/printRow.ts +3 -14
- package/src/version.json +1 -1
- package/lib/commonjs/components/ChannelList/hooks/listeners/handleEventToSyncDB.js.map +0 -1
- package/lib/commonjs/components/ChannelList/hooks/listeners/useConnectionRecovered.js.map +0 -1
- package/lib/commonjs/components/ChannelList/hooks/listeners/useSyncDatabase.js.map +0 -1
- package/lib/module/components/ChannelList/hooks/listeners/handleEventToSyncDB.js.map +0 -1
- package/lib/module/components/ChannelList/hooks/listeners/useConnectionRecovered.js.map +0 -1
- package/lib/module/components/ChannelList/hooks/listeners/useSyncDatabase.js.map +0 -1
- package/lib/typescript/components/ChannelList/hooks/listeners/useConnectionRecovered.d.ts +0 -9
- package/lib/typescript/components/ChannelList/hooks/listeners/useSyncDatabase.d.ts +0 -6
- 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
|
-
(
|
|
202
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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":";;;;;;;;;;;AAAA;;AAMA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AAIA;;AACA;;AAEA;;AACA;;AACA;;;;;;;;;AA4JA,IAAMA,eAAe,GAAG,EAAxB;AACA,IAAMC,eAAe,GAAG,EAAxB;AACA,IAAMC,YAAY,GAAG,EAArB;;AASO,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAGzBC,KAHyB,EAItB;AACH,8BAmCIA,KAnCJ,CACEC,uBADF;AAAA,MACEA,uBADF,sCAC4B,EAD5B;AAAA,8BAmCID,KAnCJ,CAEEE,mBAFF;AAAA,MAEEA,mBAFF,sCAEwBC,wCAFxB;AAAA,8BAmCIH,KAnCJ,CAGEI,sBAHF;AAAA,MAGEA,sBAHF,sCAG2BC,oEAH3B;AAAA,uBAmCIL,KAnCJ,CAIEM,OAJF;AAAA,MAIEA,OAJF,+BAIYV,eAJZ;AAAA,8BAmCII,KAnCJ,CAKEO,oBALF;AAAA,MAKEA,oBALF,sCAKyBC,gEALzB;AAAA,8BAmCIR,KAnCJ,CAMES,0BANF;AAAA,MAMEA,0BANF,sCAM+BC,4EAN/B;AAAA,oBAmCIV,KAnCJ,CAOEW,IAPF;AAAA,MAOEA,IAPF,4BAOSC,0CAPT;AAAA,MAQEC,mBARF,GAmCIb,KAnCJ,CAQEa,mBARF;AAAA,8BAmCIb,KAnCJ,CASEc,qBATF;AAAA,MASEA,qBATF,sCAS0BC,4CAT1B;AAAA,8BAmCIf,KAnCJ,CAUEgB,gBAVF;AAAA,MAUEA,gBAVF,sCAUqBC,wDAVrB;AAAA,8BAmCIjB,KAnCJ,CAYEkB,iBAZF;AAAA,MAYEA,iBAZF,sCAYsB,CAZtB;AAAA,8BAmCIlB,KAnCJ,CAaEmB,gBAbF;AAAA,MAaEA,gBAbF,sCAaqB,KAbrB;AAAA,8BAmCInB,KAnCJ,CAcEoB,cAdF;AAAA,MAcEA,cAdF,sCAcmB,GAdnB;AAAA,8BAmCIpB,KAnCJ,CAeEqB,iBAfF;AAAA,MAeEA,iBAfF,sCAesB,CAftB;AAAA,MAgBEC,gBAhBF,GAmCItB,KAnCJ,CAgBEsB,gBAhBF;AAAA,MAiBEC,gBAjBF,GAmCIvB,KAnCJ,CAiBEuB,gBAjBF;AAAA,MAkBEC,eAlBF,GAmCIxB,KAnCJ,CAkBEwB,eAlBF;AAAA,MAmBEC,gBAnBF,GAmCIzB,KAnCJ,CAmBEyB,gBAnBF;AAAA,MAoBEC,kBApBF,GAmCI1B,KAnCJ,CAoBE0B,kBApBF;AAAA,MAqBEC,gBArBF,GAmCI3B,KAnCJ,CAqBE2B,gBArBF;AAAA,MAsBEC,YAtBF,GAmCI5B,KAnCJ,CAsBE4B,YAtBF;AAAA,MAuBEC,oBAvBF,GAmCI7B,KAnCJ,CAuBE6B,oBAvBF;AAAA,MAwBEC,QAxBF,GAmCI9B,KAnCJ,CAwBE8B,QAxBF;AAAA,uBAmCI9B,KAnCJ,CAyBE+B,OAzBF;AAAA,MAyBEA,OAzBF,+BAyBYlC,eAzBZ;AAAA,uBAmCIG,KAnCJ,CA0BEgC,OA1BF;AAAA,MA0BEA,OA1BF,+BA0BYC,gDA1BZ;AAAA,MA2BEC,aA3BF,GAmCIlC,KAnCJ,CA2BEkC,aA3BF;AAAA,MA4BEC,cA5BF,GAmCInC,KAnCJ,CA4BEmC,cA5BF;AAAA,MA6BEC,aA7BF,GAmCIpC,KAnCJ,CA6BEoC,aA7BF;AAAA,MA8BEC,YA9BF,GAmCIrC,KAnCJ,CA8BEqC,YA9BF;AAAA,MA+BEC,kBA/BF,GAmCItC,KAnCJ,CA+BEsC,kBA/BF;AAAA,MAgCEC,eAhCF,GAmCIvC,KAnCJ,CAgCEuC,cAhCF;AAAA,wBAmCIvC,KAnCJ,CAiCEwC,QAjCF;AAAA,MAiCEA,QAjCF,gCAiCaC,kBAjCb;AAAA,oBAmCIzC,KAnCJ,CAkCE0C,IAlCF;AAAA,MAkCEA,IAlCF,4BAkCS5C,YAlCT;;AAqCA,kBAAsC,qBAAS,CAAT,CAAtC;AAAA;AAAA,MAAO6C,WAAP;AAAA,MAAoBC,cAApB;;AACA,wBAAuE,kCAAvE;AAAA,MAAQC,oBAAR,mBAAQA,oBAAR;AAAA,MAA8BC,oCAA9B,mBAA8BA,oCAA9B;;AACA,8BAYI,iDAAyC;AAC3CD,IAAAA,oBAAoB,EAApBA,oBAD2C;AAE3CvC,IAAAA,OAAO,EAAPA,OAF2C;AAG3CyB,IAAAA,OAAO,EAAPA,OAH2C;AAI3CW,IAAAA,IAAI,EAAJA;AAJ2C,GAAzC,CAZJ;AAAA,MACEK,QADF,yBACEA,QADF;AAAA,MAEEC,KAFF,yBAEEA,KAFF;AAAA,MAGEC,WAHF,yBAGEA,WAHF;AAAA,MAIEC,eAJF,yBAIEA,eAJF;AAAA,MAKEC,eALF,yBAKEA,eALF;AAAA,MAMEC,YANF,yBAMEA,YANF;AAAA,MAOEC,UAPF,yBAOEA,UAPF;AAAA,MAQEC,WARF,yBAQEA,WARF;AAAA,MASEC,UATF,yBASEA,UATF;AAAA,MAUEC,WAVF,yBAUEA,WAVF;AAAA,MAWEC,oBAXF,yBAWEA,oBAXF;;AAoBA,oEAA8B;AAC5BnC,IAAAA,gBAAgB,EAAhBA,gBAD4B;AAE5BkC,IAAAA,WAAW,EAAXA;AAF4B,GAA9B;AAKA,4CAAkB;AAChBjC,IAAAA,gBAAgB,EAAhBA,gBADgB;AAEhBiC,IAAAA,WAAW,EAAXA;AAFgB,GAAlB;AAKA,0CAAiB;AACfhC,IAAAA,eAAe,EAAfA,eADe;AAEfgC,IAAAA,WAAW,EAAXA;AAFe,GAAjB;AAKA,gDAAoB;AAClB9B,IAAAA,kBAAkB,EAAlBA,kBADkB;AAElB4B,IAAAA,WAAW,EAAXA,WAFkB;AAGlBE,IAAAA,WAAW,EAAXA,WAHkB;AAIlBZ,IAAAA,cAAc,EAAdA;AAJkB,GAApB;AAOA,4CAAkB;AAChBjB,IAAAA,gBAAgB,EAAhBA,gBADgB;AAEhB6B,IAAAA,WAAW,EAAXA;AAFgB,GAAlB;AAKA,4CAAkB;AAChB/B,IAAAA,gBAAgB,EAAhBA,gBADgB;AAEhB+B,IAAAA,WAAW,EAAXA;AAFgB,GAAlB;AAKA,oCAAc;AACZrC,IAAAA,gBAAgB,EAAhBA,gBADY;AAEZqC,IAAAA,WAAW,EAAXA;AAFY,GAAd;AAKA,4DAA0B;AACxB5B,IAAAA,YAAY,EAAZA,YADwB;AAExB4B,IAAAA,WAAW,EAAXA;AAFwB,GAA1B;AAKA,4EAAkC;AAChC3B,IAAAA,oBAAoB,EAApBA,oBADgC;AAEhC2B,IAAAA,WAAW,EAAXA;AAFgC,GAAlC;AAKA,wCAAgB;AACdA,IAAAA,WAAW,EAAXA;AADc,GAAhB;AAIA,MAAME,aAAa,GAAGX,QAAQ,CAACY,MAAT,CAAgB,UAACC,GAAD,EAAMC,OAAN;AAAA,gBAAqBD,GAArB,GAA2BC,OAAO,CAACC,GAAnC;AAAA,GAAhB,EAA0D,EAA1D,CAAtB;AAEA,wBAAU,YAAM;AACd,QAAIL,oBAAoB,IAAI,CAACZ,oBAA7B,EAAmD;AACjD;AACD;;AACD,gDAAmB;AACjBkB,MAAAA,IAAI,EAAEhB,QAAQ,CAACiB,GAAT,CAAa,UAACC,CAAD;AAAA,eAAOA,CAAC,CAACH,GAAT;AAAA,OAAb,CADW;AAEjBxD,MAAAA,OAAO,EAAPA,OAFiB;AAGjBoC,MAAAA,IAAI,EAAJA;AAHiB,KAAnB;AAKD,GATD,EASG,CAACgB,aAAD,EAAgBD,oBAAhB,CATH;AAWA,wBAAU,YAAM;AACd,QAAMS,WAAW,GAAGpB,oCAAoC,CAAC,YAAM;AAC7DQ,MAAAA,WAAW;AACXV,MAAAA,cAAc,CAAC,UAACuB,KAAD;AAAA,eAAWA,KAAK,GAAG,CAAnB;AAAA,OAAD,CAAd;AACD,KAHuD,CAAxD;AAKA,WAAO;AAAA,aAAMD,WAAW,EAAjB;AAAA,KAAP;AACD,GAPD;AASA,MAAME,eAAe,GAAG,wDAAyB;AAC/CnE,IAAAA,uBAAuB,EAAvBA,uBAD+C;AAE/C8C,IAAAA,QAAQ,EAARA,QAF+C;AAG/C7C,IAAAA,mBAAmB,EAAnBA,mBAH+C;AAI/C8C,IAAAA,KAAK,EAALA,KAJ+C;AAK/C5C,IAAAA,sBAAsB,EAAtBA,sBAL+C;AAM/CuC,IAAAA,WAAW,EAAXA,WAN+C;AAO/CM,IAAAA,WAAW,EAAXA,WAP+C;AAQ/C1C,IAAAA,oBAAoB,EAApBA,oBAR+C;AAS/CE,IAAAA,0BAA0B,EAA1BA,0BAT+C;AAU/CI,IAAAA,mBAAmB,EAAnBA,mBAV+C;AAW/CqC,IAAAA,eAAe,EAAfA,eAX+C;AAY/CpC,IAAAA,qBAAqB,EAArBA,qBAZ+C;AAa/CE,IAAAA,gBAAgB,EAAhBA,gBAb+C;AAc/CmC,IAAAA,eAAe,EAAfA,eAd+C;AAe/CjC,IAAAA,iBAAiB,EAAjBA,iBAf+C;AAgB/CkC,IAAAA,YAAY,EAAZA,YAhB+C;AAiB/ChC,IAAAA,cAAc,EAAdA,cAjB+C;AAkB/CC,IAAAA,iBAAiB,EAAjBA,iBAlB+C;AAmB/CS,IAAAA,QAAQ,EAARA,QAnB+C;AAoB/CE,IAAAA,OAAO,EAAPA,OApB+C;AAqB/CE,IAAAA,aAAa,EAAbA,aArB+C;AAsB/CC,IAAAA,cAAc,EAAdA,cAtB+C;AAuB/CC,IAAAA,aAAa,EAAbA,aAvB+C;AAwB/CC,IAAAA,YAAY,EAAZA,YAxB+C;AAyB/CC,IAAAA,kBAAkB,EAAlBA,kBAzB+C;AA0B/Ce,IAAAA,UAAU,EAAVA,UA1B+C;AA2B/CC,IAAAA,WAAW,EAAXA,WA3B+C;AA4B/CC,IAAAA,UAAU,EAAVA,UA5B+C;AA6B/ChB,IAAAA,cAAc,EAAE,wBAAC8B,GAAD,EAAuD;AACrE,UAAI9B,eAAJ,EAAoB;AAClBA,QAAAA,eAAc,CAAC8B,GAAD,CAAd;AACD;AACF,KAjC8C;AAkC/C7B,IAAAA,QAAQ,EAARA;AAlC+C,GAAzB,CAAxB;AAqCA,SACE,gCAAC,iCAAD;AAAkB,IAAA,KAAK,EAAE4B,eAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,IAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADF,CADF;AAKD,CAnLM","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
|
|
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":";;;;;;;;;;;;;;;;;AAAA;;AAIA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AAEA,IAAMA,WAAW,GAAG,SAAdA,WAAc,CAACC,OAAD;AAAA,SAClB,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAa;AACvBC,IAAAA,UAAU,CAACD,OAAD,EAAUF,OAAO,GAAGI,sBAApB,CAAV;AACD,GAFD,CADkB;AAAA,CAApB;;AAaA,IAAMC,eAAe,GAAG;AACtBC,EAAAA,aAAa,EAAE;AADO,CAAxB;AAIA,IAAMC,qBAAqB,GAAG,CAA9B;AACA,IAAMC,oBAAoB,GAAG,IAA7B;;AAMO,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,OAOE;AAAA,MAJpCC,oBAIoC,QAJpCA,oBAIoC;AAAA,0BAHpCC,OAGoC;AAAA,MAHpCA,OAGoC,6BAH1B,EAG0B;AAAA,0BAFpCC,OAEoC;AAAA,MAFpCA,OAEoC,6BAF1BP,eAE0B;AAAA,uBADpCQ,IACoC;AAAA,MADpCA,IACoC,0BAD7B,EAC6B;;AACpC,wBAAmB,kCAAnB;AAAA,MAAQC,MAAR,mBAAQA,MAAR;;AAEA,kBAAgC,qBAAwC,EAAxC,CAAhC;AAAA;AAAA,MAAOC,QAAP;AAAA,MAAiBC,WAAjB;;AACA,mBAAwD,qBAAkB,IAAlB,CAAxD;AAAA;AAAA,MAAOC,oBAAP;AAAA,MAA6BC,uBAA7B;;AACA,MAAMC,cAAc,GAAG,4DAAvB;;AAEA,mBAA0B,sBAA1B;AAAA;AAAA,MAAOC,KAAP;AAAA,MAAcC,QAAd;;AACA,mBAAsC,qBAAS,IAAT,CAAtC;AAAA;AAAA,MAAOC,WAAP;AAAA,MAAoBC,cAApB;;AACA,MAAMC,WAAW,GAAG,mBAAOC,IAAI,CAACC,GAAL,EAAP,CAApB;AACA,MAAMC,aAAa,GAAG,mBAAO,KAAP,CAAtB;;AACA,mBAA8C,qBAA2B,cAA3B,CAA9C;AAAA;AAAA,MAAOC,eAAP;AAAA,MAAwBC,kBAAxB;;AACA,MAAMC,YAAY,GAAG,uCAArB;AACA,MAAMC,UAAU,GAAG,mBAA8B,IAA9B,CAAnB;AACA,MAAMC,OAAO,GAAG,mBAA2B,IAA3B,CAAhB;AACA,MAAMC,eAAe,GAAG,mBAAe,CAAf,CAAxB;;AAEA,MAAMC,aAA4B;AAAA,gFAAG;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACnCC,cAAAA,SADmC,2DACZ,cADY;AAEnCC,cAAAA,UAFmC,2DAEtB,CAFsB;;AAAA,oBAI/B,CAACtB,MAAD,IAAW,CAACgB,YAAY,CAACO,OAJM;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAM7BC,cAAAA,cAN6B,GAOjCH,SAAS,KAAK,cAAd,IACAA,SAAS,KAAK,SADd,IAEA,CACEI,IAAI,CAACC,SAAL,CAAeT,UAAU,CAACM,OAA1B,MAAuCE,IAAI,CAACC,SAAL,CAAe7B,OAAf,CADzC,EAEE4B,IAAI,CAACC,SAAL,CAAeR,OAAO,CAACK,OAAvB,MAAoCE,IAAI,CAACC,SAAL,CAAe3B,IAAf,CAFtC,EAGE4B,IAHF,CAGOC,OAHP,CATiC;;AAc7BC,cAAAA,YAd6B,GAcd,SAAfA,YAAe;AAAA,uBAAM,CAACb,YAAD,IAAiBG,eAAe,CAACI,OAAhB,KAA4BO,gBAAnD;AAAA,eAdc;;AAAA,kBAoB9BN,cApB8B;AAAA;AAAA;AAAA;;AAAA,oBAqB7BV,eAAe,KAAK,IArBS;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAwBnCG,cAAAA,UAAU,CAACM,OAAX,GAAqB1B,OAArB;AACAqB,cAAAA,OAAO,CAACK,OAAR,GAAkBxB,IAAlB;AACAc,cAAAA,aAAa,CAACU,OAAd,GAAwB,IAAxB;AACAhB,cAAAA,QAAQ,CAACwB,SAAD,CAAR;AACAZ,cAAAA,eAAe,CAACI,OAAhB;AACMO,cAAAA,gBA7B6B,GA6BVX,eAAe,CAACI,OA7BN;AA8BnCR,cAAAA,kBAAkB,CAACM,SAAD,CAAlB;AAEMW,cAAAA,UAhC6B;AAiCjCC,gBAAAA,KAAK,oBAAEnC,OAAF,oBAAEA,OAAO,CAAEmC,KAAX,6BAAoBC,+BAjCQ;AAkCjCC,gBAAAA,MAAM,EAAEd,SAAS,KAAK,cAAd,IAAgC,CAAClB,oBAAjC,GAAwDF,QAAQ,CAACmC,MAAjE,GAA0E;AAlCjD,iBAmC9BtC,OAnC8B;AAAA;AAAA;AAAA,qBAuCEE,MAAM,CAACoB,aAAP,CAAqBvB,OAArB,EAA8BE,IAA9B,EAAoCiC,UAApC,EAAgD;AACjFK,gBAAAA,kBAAkB,EAAEhC,cAAc,CAACkB;AAD8C,eAAhD,CAvCF;;AAAA;AAuC3Be,cAAAA,oBAvC2B;;AAAA,oBA2C7BT,YAAY,MAAM,CAACb,YAAY,CAACO,OA3CH;AAAA;AAAA;AAAA;;AAAA;;AAAA;AA8C3BgB,cAAAA,WA9C2B,GA+C/BlB,SAAS,KAAK,cAAd,IAAgC,CAAClB,oBAAjC,iDACQF,QADR,uCACqBqC,oBADrB,KAEIA,oBAjD2B;AAmDjCpC,cAAAA,WAAW,CAACqC,WAAD,CAAX;AACAnC,cAAAA,uBAAuB,CAAC,KAAD,CAAvB;AACAK,cAAAA,cAAc,CAAC6B,oBAAoB,CAACF,MAArB,IAA+BJ,UAAU,CAACC,KAA3C,CAAd;AACA1B,cAAAA,QAAQ,CAACwB,SAAD,CAAR;AACAlB,cAAAA,aAAa,CAACU,OAAd,GAAwB,KAAxB;AAvDiC;AAAA;;AAAA;AAAA;AAAA;AAyDjCV,cAAAA,aAAa,CAACU,OAAd,GAAwB,KAAxB;AAzDiC;AAAA,qBA0D3BtC,WAAW,CAAC,CAAD,CA1DgB;;AAAA;AAAA,mBA4D7B4C,YAAY,EA5DiB;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,oBAkE7BP,UAAU,KAAK7B,qBAAf,IAAwC,CAACoB,aAAa,CAACU,OAlE1B;AAAA;AAAA;AAAA;;AAmE/BR,cAAAA,kBAAkB,CAAC,IAAD,CAAlB;AACAyB,cAAAA,OAAO,CAACC,IAAR;AAEAlC,cAAAA,QAAQ,CACN,IAAImC,KAAJ,6FADM,CAAR;AAtE+B;;AAAA;AAAA,+CA8E1BtB,aAAa,CAACC,SAAD,EAAYC,UAAU,GAAG,CAAzB,CA9Ea;;AAAA;AAiFnCP,cAAAA,kBAAkB,CAAC,IAAD,CAAlB;;AAjFmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAA5BK,aAA4B;AAAA;AAAA;AAAA,KAAlC;;AAoFA,MAAMuB,YAAY,GAAGnC,WAAW,GAAGY,aAAH,GAAmBW,SAAnD;;AAEA,MAAMa,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxB,QAAMhC,GAAG,GAAGD,IAAI,CAACC,GAAL,EAAZ;;AAEA,QAAIA,GAAG,GAAGF,WAAW,CAACa,OAAlB,GAA4B7B,oBAA5B,IAAoDY,KAAK,KAAKyB,SAAlE,EAA6E;AAC3E;AACD;;AAEDrB,IAAAA,WAAW,CAACa,OAAZ,GAAsBZ,IAAI,CAACC,GAAL,EAAtB;AACA,WAAOQ,aAAa,CAAC,SAAD,CAApB;AACD,GATD;;AAWA,MAAMyB,UAAU,GAAG,SAAbA,UAAa;AAAA,WAAMzB,aAAa,CAAC,QAAD,CAAnB;AAAA,GAAnB;;AAiBA,MAAM0B,SAAS,GAAG,oBAAQ;AAAA,WAAMrB,IAAI,CAACC,SAAL,CAAe7B,OAAf,CAAN;AAAA,GAAR,EAAuC,CAACA,OAAD,CAAvC,CAAlB;AACA,MAAMkD,OAAO,GAAG,oBAAQ;AAAA,WAAMtB,IAAI,CAACC,SAAL,CAAe3B,IAAf,CAAN;AAAA,GAAR,EAAoC,CAACA,IAAD,CAApC,CAAhB;AAEA,wBAAU,YAAM;AACd,QAAMiD,YAAY,GAAG,SAAfA,YAAe,GAAM;AAAA;;AACzB,UAAI,EAAChD,MAAD,4BAACA,MAAM,CAAEiD,IAAT,aAAC,aAAcC,EAAf,CAAJ,EAAuB;;AACvB,UAAItD,oBAAJ,EAA0B;AACxB,YAAI;AACF,cAAMuD,cAAc,GAAG,8BAAY;AAAEC,YAAAA,aAAa,EAAEpD,MAAM,CAACiD,IAAP,CAAYC,EAA7B;AAAiCrD,YAAAA,OAAO,EAAPA,OAAjC;AAA0CE,YAAAA,IAAI,EAAJA;AAA1C,WAAZ,CAAvB;AACAG,UAAAA,WAAW,CACTF,MAAM,CAACqD,qBAAP,CAA6BF,cAA7B,EAA6C;AAC3CG,YAAAA,WAAW,EAAE;AAD8B,WAA7C,CADS,CAAX;AAKD,SAPD,CAOE,OAAOC,CAAP,EAAU;AACVf,UAAAA,OAAO,CAACC,IAAR,CAAa,wCAAb,EAAuDc,CAAvD;AACD;AACF;;AAEDV,MAAAA,UAAU;AACX,KAhBD;;AAkBAG,IAAAA,YAAY;AACb,GApBD,EAoBG,CAACF,SAAD,EAAYC,OAAZ,CApBH;AAsBA,SAAO;AACL9C,IAAAA,QAAQ,EAARA,QADK;AAELK,IAAAA,KAAK,EAALA,KAFK;AAGLE,IAAAA,WAAW,EAAXA,WAHK;AAILgD,IAAAA,eAAe,EACb1C,eAAe,KAAK,cAApB,GACI,IADJ,GAEIA,eAAe,KAAK,QAApB,IAAgCb,QAAQ,CAACmC,MAAT,KAAoB,CAPrD;AAQLqB,IAAAA,eAAe,EAAE3C,eAAe,KAAK,cARhC;AASL6B,IAAAA,YAAY,EAAZA,YATK;AAULe,IAAAA,UAAU,EAAE5C,eAAe,KAAK,SAV3B;AAWL8B,IAAAA,WAAW,EAAXA,WAXK;AAYLC,IAAAA,UAAU,EAAVA,UAZK;AAaL3C,IAAAA,WAAW,EAAXA,WAbK;AAcLC,IAAAA,oBAAoB,EAApBA;AAdK,GAAP;AAgBD,CAnLM","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:
|
|
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:
|
|
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:
|
|
164
|
+
lineNumber: 220,
|
|
147
165
|
columnNumber: 9
|
|
148
166
|
}
|
|
149
|
-
},
|
|
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:
|
|
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":";;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AAIA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAEA;;AAKA;;AACA;;AAEA;;AACA;;AAGA;;;;;;;;;AAEA;;AAmGA,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,CAGtBC,KAHsB,EAInB;AAAA;;AACH,MACEC,QADF,GAOID,KAPJ,CACEC,QADF;AAAA,MAEEC,MAFF,GAOIF,KAPJ,CAEEE,MAFF;AAAA,8BAOIF,KAPJ,CAGEG,2BAHF;AAAA,MAGEA,2BAHF,sCAGgC,IAHhC;AAAA,8BAOIH,KAPJ,CAIEI,oBAJF;AAAA,MAIEA,oBAJF,sCAIyB,KAJzB;AAAA,MAKEC,YALF,GAOIL,KAPJ,CAKEK,YALF;AAAA,MAMEC,KANF,GAOIN,KAPJ,CAMEM,KANF;;AASA,kBAA8B,sBAA9B;AAAA;AAAA,MAAOC,OAAP;AAAA,MAAgBC,UAAhB;;AACA,mBAAsC,qBAA8B;AAClEC,IAAAA,CAAC,EAAE,WAACC,GAAD;AAAA,aAAiBA,GAAjB;AAAA,KAD+D;AAElEC,IAAAA,eAAe,EAAE,yBAACC,KAAD;AAAA,aAAoC,uBAAMA,KAAN,CAApC;AAAA;AAFiD,GAA9B,CAAtC;AAAA;AAAA,MAAOC,WAAP;AAAA,MAAoBC,cAApB;;AAQA,MAAMC,kBAAkB,GAAG,kCAAc;AAAEV,IAAAA,YAAY,EAAZA,YAAF;AAAgBS,IAAAA,cAAc,EAAdA;AAAhB,GAAd,CAA3B;;AAKA,qBAA2C,+BACzCZ,MADyC,EAEzCC,2BAFyC,CAA3C;AAAA,MAAQa,oBAAR,gBAAQA,oBAAR;AAAA,MAA8BC,QAA9B,gBAA8BA,QAA9B;;AASA,MAAMC,UAAU,GAAG,kCAAkChB,MAAlC,CAAnB;AAEA,wBAAU,YAAM;AACd,QAAIA,MAAJ,EAAY;AACVA,MAAAA,MAAM,CAACiB,YAAP,CAAuBC,WAAvB,SAA8BC,sBAASC,EAAvC,SAA6CC,gBAA7C;AAEArB,MAAAA,MAAM,CAACsB,uBAAP,GAAiC,KAAjC;AACAtB,MAAAA,MAAM,CAACuB,8BAAP,GAAwCrB,oBAAxC;AACD;AACF,GAPD,EAOG,CAACF,MAAD,CAPH;;AASA,MAAMwB,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,UAAD;AAAA,WAA8CnB,UAAU,CAACmB,UAAD,CAAxD;AAAA,GAAzB;;AAEA,MAAMC,WAAW,GAAG,oCAAe1B,MAAf,EAAuBe,QAAvB,CAApB;AAEA,MAAMY,WAAW,GAAG,gDAAqB;AACvCD,IAAAA,WAAW,EAAXA,WADuC;AAEvCrB,IAAAA,OAAO,EAAPA,OAFuC;AAGvCL,IAAAA,MAAM,EAANA,MAHuC;AAIvCc,IAAAA,oBAAoB,EAApBA,oBAJuC;AAKvCZ,IAAAA,oBAAoB,EAApBA,oBALuC;AAMvCa,IAAAA,QAAQ,EAARA,QANuC;AAOvCC,IAAAA,UAAU,EAAVA,UAPuC;AAQvCQ,IAAAA,gBAAgB,EAAhBA;AARuC,GAArB,CAApB;AAWA,wBAAU,YAAM;AACd,QAAItB,oBAAJ,EAA0B;AACxB0B,2CAAkBC,kBAAlB;AACD;AACF,GAJD,EAIG,EAJH;AAMA,MAAIhB,kBAAJ,EAAwB,OAAO,IAAP;AAExB,SACE,gCAAC,yBAAD;AAAkC,IAAA,KAAK,EAAEc,WAAzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,uCAAD;AACE,IAAA,KAAK,gCAAOhB,WAAP;AAAoBmB,MAAAA,YAAY,EAAE,iBAAA9B,MAAM,CAAC+B,IAAP,kCAAaC,QAAb,KAAyBC;AAA3D,MADP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAGE,gCAAC,2BAAD;AAAe,IAAA,KAAK,EAAE7B,KAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAA8BL,QAA9B,CAHF,CADF,CADF;AASD,CAhFD;;AAuGO,IAAMmC,IAAI,GAAG,SAAPA,IAAO,CAGlBpC,KAHkB,EAIf;AACH,2BAAkB,wCAAlB;AAAA,MAAQM,KAAR,sBAAQA,KAAR;;AAEA,SAAO,gCAAC,eAAD;AAAuBA,IAAAA,KAAK,EAALA;AAAvB,KAAoCN,KAApC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAP;AACD,CARM","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"]}
|
package/lib/commonjs/components/{ChannelList/hooks/listeners → Chat/hooks}/handleEventToSyncDB.js
RENAMED
|
@@ -3,23 +3,23 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
3
3
|
});
|
|
4
4
|
exports.handleEventToSyncDB = void 0;
|
|
5
5
|
|
|
6
|
-
var _deleteChannel = require("
|
|
6
|
+
var _deleteChannel = require("../../../store/apis/deleteChannel");
|
|
7
7
|
|
|
8
|
-
var _deleteMember = require("
|
|
8
|
+
var _deleteMember = require("../../../store/apis/deleteMember");
|
|
9
9
|
|
|
10
|
-
var _deleteMessagesForChannel = require("
|
|
10
|
+
var _deleteMessagesForChannel = require("../../../store/apis/deleteMessagesForChannel");
|
|
11
11
|
|
|
12
|
-
var _updateMessage = require("
|
|
12
|
+
var _updateMessage = require("../../../store/apis/updateMessage");
|
|
13
13
|
|
|
14
|
-
var _upsertChannelData = require("
|
|
14
|
+
var _upsertChannelData = require("../../../store/apis/upsertChannelData");
|
|
15
15
|
|
|
16
|
-
var _upsertChannels = require("
|
|
16
|
+
var _upsertChannels = require("../../../store/apis/upsertChannels");
|
|
17
17
|
|
|
18
|
-
var _upsertMembers = require("
|
|
18
|
+
var _upsertMembers = require("../../../store/apis/upsertMembers");
|
|
19
19
|
|
|
20
|
-
var _upsertMessages = require("
|
|
20
|
+
var _upsertMessages = require("../../../store/apis/upsertMessages");
|
|
21
21
|
|
|
22
|
-
var _upsertReads = require("
|
|
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"]}
|