stream-chat-react-native-core 5.8.0 → 5.8.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/lib/commonjs/components/ChannelList/ChannelList.js +1 -1
  2. package/lib/commonjs/components/ChannelList/ChannelList.js.map +1 -1
  3. package/lib/commonjs/components/ChannelList/ChannelListFooterLoadingIndicator.js +2 -0
  4. package/lib/commonjs/components/ChannelList/ChannelListFooterLoadingIndicator.js.map +1 -1
  5. package/lib/commonjs/components/ChannelList/ChannelListMessenger.js +23 -25
  6. package/lib/commonjs/components/ChannelList/ChannelListMessenger.js.map +1 -1
  7. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +64 -48
  8. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  9. package/lib/commonjs/contexts/channelsContext/ChannelsContext.js.map +1 -1
  10. package/lib/commonjs/version.json +1 -1
  11. package/lib/module/components/ChannelList/ChannelList.js +1 -1
  12. package/lib/module/components/ChannelList/ChannelList.js.map +1 -1
  13. package/lib/module/components/ChannelList/ChannelListFooterLoadingIndicator.js +2 -0
  14. package/lib/module/components/ChannelList/ChannelListFooterLoadingIndicator.js.map +1 -1
  15. package/lib/module/components/ChannelList/ChannelListMessenger.js +23 -25
  16. package/lib/module/components/ChannelList/ChannelListMessenger.js.map +1 -1
  17. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +64 -48
  18. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  19. package/lib/module/contexts/channelsContext/ChannelsContext.js.map +1 -1
  20. package/lib/module/version.json +1 -1
  21. package/lib/typescript/components/ChannelList/ChannelListMessenger.d.ts +1 -1
  22. package/lib/typescript/components/ChannelList/hooks/usePaginatedChannels.d.ts +2 -2
  23. package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts +1 -1
  24. package/package.json +1 -1
  25. package/src/components/ChannelList/ChannelList.tsx +2 -2
  26. package/src/components/ChannelList/ChannelListFooterLoadingIndicator.tsx +1 -1
  27. package/src/components/ChannelList/ChannelListMessenger.tsx +9 -7
  28. package/src/components/ChannelList/hooks/usePaginatedChannels.ts +11 -12
  29. package/src/contexts/channelsContext/ChannelsContext.tsx +1 -1
  30. package/src/version.json +1 -1
@@ -58,7 +58,7 @@ var ChannelList = function ChannelList(props) {
58
58
  _props$LoadingIndicat = props.LoadingIndicator,
59
59
  LoadingIndicator = _props$LoadingIndicat === void 0 ? _ChannelListLoadingIndicator.ChannelListLoadingIndicator : _props$LoadingIndicat,
60
60
  _props$loadMoreThresh = props.loadMoreThreshold,
61
- loadMoreThreshold = _props$loadMoreThresh === void 0 ? 2 : _props$loadMoreThresh,
61
+ loadMoreThreshold = _props$loadMoreThresh === void 0 ? 0.1 : _props$loadMoreThresh,
62
62
  _props$lockChannelOrd = props.lockChannelOrder,
63
63
  lockChannelOrder = _props$lockChannelOrd === void 0 ? false : _props$lockChannelOrd,
64
64
  _props$maxUnreadCount = props.maxUnreadCount,
@@ -1 +1 @@
1
- {"version":3,"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","useState","forceUpdate","setForceUpdate","useChatContext","enableOfflineSupport","usePaginatedChannels","channels","error","hasNextPage","loadingChannels","loadingNextPage","loadNextPage","refreshing","refreshList","reloadList","setChannels","staticChannelsActive","useAddedToChannelNotification","useChannelDeleted","useChannelHidden","useChannelTruncated","useChannelUpdated","useChannelVisible","useNewMessage","useNewMessageNotification","useRemovedFromChannelNotification","useUserPresence","channelIdsStr","reduce","acc","channel","cid","useEffect","upsertCidsForQuery","cids","map","c","channelsContext","useCreateChannelsContext","ref"],"sources":["ChannelList.tsx"],"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>[] | null>>,\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>[] | null>>,\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>[] | null>>,\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>[] | null>>,\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>[] | null>>,\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>[] | null>>,\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>[] | null>>,\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>[] | null>>,\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<StreamChatGenerics>();\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 setForceUpdate,\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 (channels === null || staticChannelsActive || !enableOfflineSupport) {\n return;\n }\n\n upsertCidsForQuery({\n cids: channels.map((c) => c.cid),\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"],"mappings":"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"}
1
+ {"version":3,"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","useState","forceUpdate","setForceUpdate","useChatContext","enableOfflineSupport","usePaginatedChannels","channels","error","hasNextPage","loadingChannels","loadingNextPage","loadNextPage","refreshing","refreshList","reloadList","setChannels","staticChannelsActive","useAddedToChannelNotification","useChannelDeleted","useChannelHidden","useChannelTruncated","useChannelUpdated","useChannelVisible","useNewMessage","useNewMessageNotification","useRemovedFromChannelNotification","useUserPresence","channelIdsStr","reduce","acc","channel","cid","useEffect","upsertCidsForQuery","cids","map","c","channelsContext","useCreateChannelsContext","ref"],"sources":["ChannelList.tsx"],"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>[] | null>>,\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>[] | null>>,\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>[] | null>>,\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>[] | null>>,\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>[] | null>>,\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>[] | null>>,\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>[] | null>>,\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>[] | null>>,\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://stackoverflow.com/a/60666252/10826415\n loadMoreThreshold = 0.1,\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<StreamChatGenerics>();\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 setForceUpdate,\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 (channels === null || staticChannelsActive || !enableOfflineSupport) {\n return;\n }\n\n upsertCidsForQuery({\n cids: channels.map((c) => c.cid),\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"],"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;AAA4G;EAAA;AAAA;AAAA;AA4J5G,IAAMA,eAAe,GAAG,CAAC,CAAC;AAC1B,IAAMC,eAAe,GAAG,CAAC,CAAC;AAC1B,IAAMC,YAAY,GAAG,CAAC,CAAC;AAShB,IAAMC,WAAW,GAAG,SAAdA,WAAW,CAGtBC,KAA2C,EACxC;EACH,4BAmCIA,KAAK,CAlCPC,uBAAuB;IAAvBA,uBAAuB,sCAAG,CAAC,CAAC;IAAA,wBAkC1BD,KAAK,CAjCPE,mBAAmB;IAAnBA,mBAAmB,sCAAGC,wCAA0B;IAAA,wBAiC9CH,KAAK,CAhCPI,sBAAsB;IAAtBA,sBAAsB,sCAAGC,oEAAiC;IAAA,iBAgCxDL,KAAK,CA/BPM,OAAO;IAAPA,OAAO,+BAAGV,eAAe;IAAA,wBA+BvBI,KAAK,CA9BPO,oBAAoB;IAApBA,oBAAoB,sCAAGC,gEAA+B;IAAA,wBA8BpDR,KAAK,CA7BPS,0BAA0B;IAA1BA,0BAA0B,sCAAGC,4EAAqC;IAAA,cA6BhEV,KAAK,CA5BPW,IAAI;IAAJA,IAAI,4BAAGC,0CAAoB;IAC3BC,mBAAmB,GA2BjBb,KAAK,CA3BPa,mBAAmB;IAAA,wBA2BjBb,KAAK,CA1BPc,qBAAqB;IAArBA,qBAAqB,sCAAGC,4CAA4B;IAAA,wBA0BlDf,KAAK,CAzBPgB,gBAAgB;IAAhBA,gBAAgB,sCAAGC,wDAA2B;IAAA,wBAyB5CjB,KAAK,CAvBPkB,iBAAiB;IAAjBA,iBAAiB,sCAAG,GAAG;IAAA,wBAuBrBlB,KAAK,CAtBPmB,gBAAgB;IAAhBA,gBAAgB,sCAAG,KAAK;IAAA,wBAsBtBnB,KAAK,CArBPoB,cAAc;IAAdA,cAAc,sCAAG,GAAG;IAAA,wBAqBlBpB,KAAK,CApBPqB,iBAAiB;IAAjBA,iBAAiB,sCAAG,CAAC;IACrBC,gBAAgB,GAmBdtB,KAAK,CAnBPsB,gBAAgB;IAChBC,gBAAgB,GAkBdvB,KAAK,CAlBPuB,gBAAgB;IAChBC,eAAe,GAiBbxB,KAAK,CAjBPwB,eAAe;IACfC,gBAAgB,GAgBdzB,KAAK,CAhBPyB,gBAAgB;IAChBC,kBAAkB,GAehB1B,KAAK,CAfP0B,kBAAkB;IAClBC,gBAAgB,GAcd3B,KAAK,CAdP2B,gBAAgB;IAChBC,YAAY,GAaV5B,KAAK,CAbP4B,YAAY;IACZC,oBAAoB,GAYlB7B,KAAK,CAZP6B,oBAAoB;IACpBC,QAAQ,GAWN9B,KAAK,CAXP8B,QAAQ;IAAA,iBAWN9B,KAAK,CAVP+B,OAAO;IAAPA,OAAO,+BAAGlC,eAAe;IAAA,iBAUvBG,KAAK,CATPgC,OAAO;IAAPA,OAAO,+BAAGC,gDAAuB;IACjCC,aAAa,GAQXlC,KAAK,CARPkC,aAAa;IACbC,cAAc,GAOZnC,KAAK,CAPPmC,cAAc;IACdC,aAAa,GAMXpC,KAAK,CANPoC,aAAa;IACbC,YAAY,GAKVrC,KAAK,CALPqC,YAAY;IACZC,kBAAkB,GAIhBtC,KAAK,CAJPsC,kBAAkB;IAClBC,eAAc,GAGZvC,KAAK,CAHPuC,cAAc;IAAA,kBAGZvC,KAAK,CAFPwC,QAAQ;IAARA,QAAQ,gCAAGC,kBAAe;IAAA,cAExBzC,KAAK,CADP0C,IAAI;IAAJA,IAAI,4BAAG5C,YAAY;EAGrB,gBAAsC,IAAA6C,eAAQ,EAAC,CAAC,CAAC;IAAA;IAA1CC,WAAW;IAAEC,cAAc;EAClC,sBAAiC,IAAAC,2BAAc,GAAsB;IAA7DC,oBAAoB,mBAApBA,oBAAoB;EAC5B,4BAYI,IAAAC,2CAAoB,EAAqB;MAC3CD,oBAAoB,EAApBA,oBAAoB;MACpBzC,OAAO,EAAPA,OAAO;MACPyB,OAAO,EAAPA,OAAO;MACPc,cAAc,EAAdA,cAAc;MACdH,IAAI,EAAJA;IACF,CAAC,CAAC;IAjBAO,QAAQ,yBAARA,QAAQ;IACRC,KAAK,yBAALA,KAAK;IACLC,WAAW,yBAAXA,WAAW;IACXC,eAAe,yBAAfA,eAAe;IACfC,eAAe,yBAAfA,eAAe;IACfC,YAAY,yBAAZA,YAAY;IACZC,UAAU,yBAAVA,UAAU;IACVC,WAAW,yBAAXA,WAAW;IACXC,UAAU,yBAAVA,UAAU;IACVC,WAAW,yBAAXA,WAAW;IACXC,oBAAoB,yBAApBA,oBAAoB;EAUtB,IAAAC,4DAA6B,EAAC;IAC5BtC,gBAAgB,EAAhBA,gBAAgB;IAChBoC,WAAW,EAAXA;EACF,CAAC,CAAC;EAEF,IAAAG,oCAAiB,EAAC;IAChBtC,gBAAgB,EAAhBA,gBAAgB;IAChBmC,WAAW,EAAXA;EACF,CAAC,CAAC;EAEF,IAAAI,kCAAgB,EAAC;IACftC,eAAe,EAAfA,eAAe;IACfkC,WAAW,EAAXA;EACF,CAAC,CAAC;EAEF,IAAAK,wCAAmB,EAAC;IAClBrC,kBAAkB,EAAlBA,kBAAkB;IAClB8B,WAAW,EAAXA,WAAW;IACXE,WAAW,EAAXA,WAAW;IACXb,cAAc,EAAdA;EACF,CAAC,CAAC;EAEF,IAAAmB,oCAAiB,EAAC;IAChBrC,gBAAgB,EAAhBA,gBAAgB;IAChB+B,WAAW,EAAXA;EACF,CAAC,CAAC;EAEF,IAAAO,oCAAiB,EAAC;IAChBxC,gBAAgB,EAAhBA,gBAAgB;IAChBiC,WAAW,EAAXA;EACF,CAAC,CAAC;EAEF,IAAAQ,4BAAa,EAAC;IACZ/C,gBAAgB,EAAhBA,gBAAgB;IAChBuC,WAAW,EAAXA;EACF,CAAC,CAAC;EAEF,IAAAS,oDAAyB,EAAC;IACxBvC,YAAY,EAAZA,YAAY;IACZ8B,WAAW,EAAXA;EACF,CAAC,CAAC;EAEF,IAAAU,oEAAiC,EAAC;IAChCvC,oBAAoB,EAApBA,oBAAoB;IACpB6B,WAAW,EAAXA;EACF,CAAC,CAAC;EAEF,IAAAW,gCAAe,EAAC;IACdX,WAAW,EAAXA;EACF,CAAC,CAAC;EAEF,IAAMY,aAAa,GAAGrB,QAAQ,oBAARA,QAAQ,CAAEsB,MAAM,CAAC,UAACC,GAAG,EAAEC,OAAO;IAAA,YAAQD,GAAG,GAAGC,OAAO,CAACC,GAAG;EAAA,CAAE,EAAE,EAAE,CAAC;EAEpF,IAAAC,gBAAS,EAAC,YAAM;IACd,IAAI1B,QAAQ,KAAK,IAAI,IAAIU,oBAAoB,IAAI,CAACZ,oBAAoB,EAAE;MACtE;IACF;IAEA,IAAA6B,sCAAkB,EAAC;MACjBC,IAAI,EAAE5B,QAAQ,CAAC6B,GAAG,CAAC,UAACC,CAAC;QAAA,OAAKA,CAAC,CAACL,GAAG;MAAA,EAAC;MAChCpE,OAAO,EAAPA,OAAO;MACPoC,IAAI,EAAJA;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAAC4B,aAAa,EAAEX,oBAAoB,CAAC,CAAC;EAEzC,IAAMqB,eAAe,GAAG,IAAAC,kDAAwB,EAAC;IAC/ChF,uBAAuB,EAAvBA,uBAAuB;IACvBgD,QAAQ,EAARA,QAAQ;IACR/C,mBAAmB,EAAnBA,mBAAmB;IACnBgD,KAAK,EAALA,KAAK;IACL9C,sBAAsB,EAAtBA,sBAAsB;IACtBwC,WAAW,EAAXA,WAAW;IACXO,WAAW,EAAXA,WAAW;IACX5C,oBAAoB,EAApBA,oBAAoB;IACpBE,0BAA0B,EAA1BA,0BAA0B;IAC1BI,mBAAmB,EAAnBA,mBAAmB;IACnBuC,eAAe,EAAfA,eAAe;IACftC,qBAAqB,EAArBA,qBAAqB;IACrBE,gBAAgB,EAAhBA,gBAAgB;IAChBqC,eAAe,EAAfA,eAAe;IACfnC,iBAAiB,EAAjBA,iBAAiB;IACjBoC,YAAY,EAAZA,YAAY;IACZlC,cAAc,EAAdA,cAAc;IACdC,iBAAiB,EAAjBA,iBAAiB;IACjBS,QAAQ,EAARA,QAAQ;IACRE,OAAO,EAAPA,OAAO;IACPE,aAAa,EAAbA,aAAa;IACbC,cAAc,EAAdA,cAAc;IACdC,aAAa,EAAbA,aAAa;IACbC,YAAY,EAAZA,YAAY;IACZC,kBAAkB,EAAlBA,kBAAkB;IAClBiB,UAAU,EAAVA,UAAU;IACVC,WAAW,EAAXA,WAAW;IACXC,UAAU,EAAVA,UAAU;IACVlB,cAAc,EAAE,wBAAC2C,GAAiD,EAAK;MACrE,IAAI3C,eAAc,EAAE;QAClBA,eAAc,CAAC2C,GAAG,CAAC;MACrB;IACF,CAAC;IACD1C,QAAQ,EAARA;EACF,CAAC,CAAC;EAEF,OACE,gCAAC,iCAAgB;IAAC,KAAK,EAAEwC,eAAgB;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,GACvC,gCAAC,IAAI;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,EAAuB,CACX;AAEvB,CAAC;AAAC"}
@@ -29,6 +29,8 @@ var ChannelListFooterLoadingIndicator = function ChannelListFooterLoadingIndicat
29
29
  columnNumber: 5
30
30
  }
31
31
  }, _react["default"].createElement(_Spinner.Spinner, {
32
+ height: 20,
33
+ width: 20,
32
34
  __self: _this,
33
35
  __source: {
34
36
  fileName: _jsxFileName,
@@ -1 +1 @@
1
- {"version":3,"names":["styles","StyleSheet","create","container","alignItems","justifyContent","width","ChannelListFooterLoadingIndicator","useTheme","theme","channelListFooterLoadingIndicator","displayName"],"sources":["ChannelListFooterLoadingIndicator.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleSheet, View } from 'react-native';\n\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { Spinner } from '../Spinner/Spinner';\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n },\n});\n\nexport const ChannelListFooterLoadingIndicator: React.FC = () => {\n const {\n theme: {\n channelListFooterLoadingIndicator: { container },\n },\n } = useTheme();\n\n return (\n <View style={[styles.container, container]} testID='channel-list-footer-loading-indicator'>\n <Spinner />\n </View>\n );\n};\n\nChannelListFooterLoadingIndicator.displayName =\n 'ChannelListFooterLoadingIndicator{channelListFooterLoadingIndicator}';\n"],"mappings":";;;;;AAAA;AACA;AAEA;AACA;AAA6C;EAAA;AAE7C,IAAMA,MAAM,GAAGC,uBAAU,CAACC,MAAM,CAAC;EAC/BC,SAAS,EAAE;IACTC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,KAAK,EAAE;EACT;AACF,CAAC,CAAC;AAEK,IAAMC,iCAA2C,GAAG,SAA9CA,iCAA2C,GAAS;EAC/D,gBAII,IAAAC,sBAAQ,GAAE;IAF2BL,SAAS,aADhDM,KAAK,CACHC,iCAAiC,CAAIP,SAAS;EAIlD,OACE,gCAAC,iBAAI;IAAC,KAAK,EAAE,CAACH,MAAM,CAACG,SAAS,EAAEA,SAAS,CAAE;IAAC,MAAM,EAAC,uCAAuC;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,GACxF,gCAAC,gBAAO;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,EAAG,CACN;AAEX,CAAC;AAAC;AAEFI,iCAAiC,CAACI,WAAW,GAC3C,sEAAsE"}
1
+ {"version":3,"names":["styles","StyleSheet","create","container","alignItems","justifyContent","width","ChannelListFooterLoadingIndicator","useTheme","theme","channelListFooterLoadingIndicator","displayName"],"sources":["ChannelListFooterLoadingIndicator.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleSheet, View } from 'react-native';\n\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { Spinner } from '../Spinner/Spinner';\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n },\n});\n\nexport const ChannelListFooterLoadingIndicator: React.FC = () => {\n const {\n theme: {\n channelListFooterLoadingIndicator: { container },\n },\n } = useTheme();\n\n return (\n <View style={[styles.container, container]} testID='channel-list-footer-loading-indicator'>\n <Spinner height={20} width={20} />\n </View>\n );\n};\n\nChannelListFooterLoadingIndicator.displayName =\n 'ChannelListFooterLoadingIndicator{channelListFooterLoadingIndicator}';\n"],"mappings":";;;;;AAAA;AACA;AAEA;AACA;AAA6C;EAAA;AAE7C,IAAMA,MAAM,GAAGC,uBAAU,CAACC,MAAM,CAAC;EAC/BC,SAAS,EAAE;IACTC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,KAAK,EAAE;EACT;AACF,CAAC,CAAC;AAEK,IAAMC,iCAA2C,GAAG,SAA9CA,iCAA2C,GAAS;EAC/D,gBAII,IAAAC,sBAAQ,GAAE;IAF2BL,SAAS,aADhDM,KAAK,CACHC,iCAAiC,CAAIP,SAAS;EAIlD,OACE,gCAAC,iBAAI;IAAC,KAAK,EAAE,CAACH,MAAM,CAACG,SAAS,EAAEA,SAAS,CAAE;IAAC,MAAM,EAAC,uCAAuC;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,GACxF,gCAAC,gBAAO;IAAC,MAAM,EAAE,EAAG;IAAC,KAAK,EAAE,EAAG;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,EAAG,CAC7B;AAEX,CAAC;AAAC;AAEFI,iCAAiC,CAACI,WAAW,GAC3C,sEAAsE"}
@@ -47,14 +47,14 @@ var StatusIndicator = function StatusIndicator() {
47
47
  __self: _this,
48
48
  __source: {
49
49
  fileName: _jsxFileName,
50
- lineNumber: 54,
50
+ lineNumber: 53,
51
51
  columnNumber: 7
52
52
  }
53
53
  }, _react["default"].createElement(HeaderNetworkDownIndicator, {
54
54
  __self: _this,
55
55
  __source: {
56
56
  fileName: _jsxFileName,
57
- lineNumber: 55,
57
+ lineNumber: 54,
58
58
  columnNumber: 9
59
59
  }
60
60
  }));
@@ -64,7 +64,7 @@ var StatusIndicator = function StatusIndicator() {
64
64
  __self: _this,
65
65
  __source: {
66
66
  fileName: _jsxFileName,
67
- lineNumber: 60,
67
+ lineNumber: 59,
68
68
  columnNumber: 7
69
69
  }
70
70
  }, _react["default"].createElement(HeaderErrorIndicator, {
@@ -72,7 +72,7 @@ var StatusIndicator = function StatusIndicator() {
72
72
  __self: _this,
73
73
  __source: {
74
74
  fileName: _jsxFileName,
75
- lineNumber: 61,
75
+ lineNumber: 60,
76
76
  columnNumber: 9
77
77
  }
78
78
  }));
@@ -86,7 +86,7 @@ var renderItem = function renderItem(_ref) {
86
86
  __self: _this,
87
87
  __source: {
88
88
  fileName: _jsxFileName,
89
- lineNumber: 74,
89
+ lineNumber: 73,
90
90
  columnNumber: 7
91
91
  }
92
92
  });
@@ -95,12 +95,14 @@ var keyExtractor = function keyExtractor(item) {
95
95
  return item.cid;
96
96
  };
97
97
  var ChannelListMessengerWithContext = function ChannelListMessengerWithContext(props) {
98
+ var onEndReachedCalledDuringCurrentScrollRef = (0, _react.useRef)(false);
98
99
  var additionalFlatListProps = props.additionalFlatListProps,
99
100
  channels = props.channels,
100
101
  EmptyStateIndicator = props.EmptyStateIndicator,
101
102
  error = props.error,
102
103
  FooterLoadingIndicator = props.FooterLoadingIndicator,
103
104
  forceUpdate = props.forceUpdate,
105
+ hasNextPage = props.hasNextPage,
104
106
  ListHeaderComponent = props.ListHeaderComponent,
105
107
  loadingChannels = props.loadingChannels,
106
108
  LoadingErrorIndicator = props.LoadingErrorIndicator,
@@ -150,33 +152,24 @@ var ChannelListMessengerWithContext = function ChannelListMessengerWithContext(p
150
152
  __self: _this,
151
153
  __source: {
152
154
  fileName: _jsxFileName,
153
- lineNumber: 144,
155
+ lineNumber: 145,
154
156
  columnNumber: 7
155
157
  }
156
158
  });
157
159
  }
158
160
  var onEndReached = function onEndReached() {
159
- if (loadNextPage) {
161
+ if (!onEndReachedCalledDuringCurrentScrollRef.current && hasNextPage) {
160
162
  loadNextPage();
163
+ onEndReachedCalledDuringCurrentScrollRef.current = true;
161
164
  }
162
165
  };
163
- var ListFooterComponent = function ListFooterComponent() {
164
- return channels != null && channels.length && ListHeaderComponent ? _react["default"].createElement(ListHeaderComponent, {
165
- __self: _this,
166
- __source: {
167
- fileName: _jsxFileName,
168
- lineNumber: 160,
169
- columnNumber: 47
170
- }
171
- }) : null;
172
- };
173
166
  if (loadingChannels) {
174
167
  return _react["default"].createElement(LoadingIndicator, {
175
168
  listType: "channel",
176
169
  __self: _this,
177
170
  __source: {
178
171
  fileName: _jsxFileName,
179
- lineNumber: 163,
172
+ lineNumber: 162,
180
173
  columnNumber: 12
181
174
  }
182
175
  });
@@ -184,7 +177,7 @@ var ChannelListMessengerWithContext = function ChannelListMessengerWithContext(p
184
177
  return _react["default"].createElement(_react["default"].Fragment, {
185
178
  __source: {
186
179
  fileName: _jsxFileName,
187
- lineNumber: 167,
180
+ lineNumber: 166,
188
181
  columnNumber: 5
189
182
  }
190
183
  }, _react["default"].createElement(_reactNative.FlatList, (0, _extends2["default"])({
@@ -199,7 +192,7 @@ var ChannelListMessengerWithContext = function ChannelListMessengerWithContext(p
199
192
  __self: _this,
200
193
  __source: {
201
194
  fileName: _jsxFileName,
202
- lineNumber: 179,
195
+ lineNumber: 178,
203
196
  columnNumber: 13
204
197
  }
205
198
  }) : _react["default"].createElement(EmptyStateIndicator, {
@@ -207,7 +200,7 @@ var ChannelListMessengerWithContext = function ChannelListMessengerWithContext(p
207
200
  __self: _this,
208
201
  __source: {
209
202
  fileName: _jsxFileName,
210
- lineNumber: 181,
203
+ lineNumber: 180,
211
204
  columnNumber: 13
212
205
  }
213
206
  }),
@@ -215,13 +208,16 @@ var ChannelListMessengerWithContext = function ChannelListMessengerWithContext(p
215
208
  __self: _this,
216
209
  __source: {
217
210
  fileName: _jsxFileName,
218
- lineNumber: 184,
211
+ lineNumber: 183,
219
212
  columnNumber: 48
220
213
  }
221
214
  }) : undefined,
222
- ListHeaderComponent: ListFooterComponent,
215
+ ListHeaderComponent: ListHeaderComponent,
223
216
  onEndReached: onEndReached,
224
217
  onEndReachedThreshold: loadMoreThreshold,
218
+ onMomentumScrollBegin: function onMomentumScrollBegin() {
219
+ return onEndReachedCalledDuringCurrentScrollRef.current = false;
220
+ },
225
221
  ref: setFlatListRef,
226
222
  refreshControl: _react["default"].createElement(_reactNative.RefreshControl, {
227
223
  onRefresh: refreshList,
@@ -242,7 +238,7 @@ var ChannelListMessengerWithContext = function ChannelListMessengerWithContext(p
242
238
  __self: _this,
243
239
  __source: {
244
240
  fileName: _jsxFileName,
245
- lineNumber: 168,
241
+ lineNumber: 167,
246
242
  columnNumber: 7
247
243
  }
248
244
  })), _react["default"].createElement(StatusIndicator, {
@@ -262,6 +258,7 @@ var ChannelListMessenger = function ChannelListMessenger(props) {
262
258
  error = _useChannelsContext2.error,
263
259
  FooterLoadingIndicator = _useChannelsContext2.FooterLoadingIndicator,
264
260
  forceUpdate = _useChannelsContext2.forceUpdate,
261
+ hasNextPage = _useChannelsContext2.hasNextPage,
265
262
  ListHeaderComponent = _useChannelsContext2.ListHeaderComponent,
266
263
  loadingChannels = _useChannelsContext2.loadingChannels,
267
264
  LoadingErrorIndicator = _useChannelsContext2.LoadingErrorIndicator,
@@ -280,6 +277,7 @@ var ChannelListMessenger = function ChannelListMessenger(props) {
280
277
  error: error,
281
278
  FooterLoadingIndicator: FooterLoadingIndicator,
282
279
  forceUpdate: forceUpdate,
280
+ hasNextPage: hasNextPage,
283
281
  ListHeaderComponent: ListHeaderComponent,
284
282
  loadingChannels: loadingChannels,
285
283
  LoadingErrorIndicator: LoadingErrorIndicator,
@@ -295,7 +293,7 @@ var ChannelListMessenger = function ChannelListMessenger(props) {
295
293
  __self: _this,
296
294
  __source: {
297
295
  fileName: _jsxFileName,
298
- lineNumber: 236,
296
+ lineNumber: 237,
299
297
  columnNumber: 5
300
298
  }
301
299
  }));
@@ -1 +1 @@
1
- {"version":3,"names":["styles","StyleSheet","create","flatList","flex","flatListContentContainer","flexGrow","statusIndicator","left","position","right","top","StatusIndicator","useChatContext","isOnline","useChannelsContext","error","HeaderErrorIndicator","HeaderNetworkDownIndicator","loadingChannels","refreshList","renderItem","item","keyExtractor","cid","ChannelListMessengerWithContext","props","additionalFlatListProps","channels","EmptyStateIndicator","FooterLoadingIndicator","forceUpdate","ListHeaderComponent","LoadingErrorIndicator","LoadingIndicator","loadingNextPage","loadMoreThreshold","loadNextPage","refreshing","reloadList","setFlatListRef","useTheme","theme","channelListMessenger","flatListContent","white_snow","colors","useState","loading","setLoading","debugRef","useDebugContext","useEffect","isDebugModeEnabled","__DEV__","current","setEventType","setSendEventParams","action","data","map","channel","members","state","onEndReached","ListFooterComponent","length","backgroundColor","undefined","ChannelListMessenger","displayName"],"sources":["ChannelListMessenger.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\n// RNGR's FlatList ist currently breaking the pull-to-refresh behaviour on Android\n// See https://github.com/software-mansion/react-native-gesture-handler/issues/598\nimport { FlatList, RefreshControl, StyleSheet, View } from 'react-native';\n\nimport type { Channel } from 'stream-chat';\n\nimport {\n ChannelsContextValue,\n useChannelsContext,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { useChatContext } from '../../contexts/chatContext/ChatContext';\nimport { useDebugContext } from '../../contexts/debugContext/DebugContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { ChannelPreview } from '../ChannelPreview/ChannelPreview';\n\nconst styles = StyleSheet.create({\n flatList: { flex: 1 },\n flatListContentContainer: { flexGrow: 1 },\n statusIndicator: { left: 0, position: 'absolute', right: 0, top: 0 },\n});\n\nexport type ChannelListMessengerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Omit<\n ChannelsContextValue<StreamChatGenerics>,\n | 'hasNextPage'\n | 'HeaderErrorIndicator'\n | 'HeaderNetworkDownIndicator'\n | 'maxUnreadCount'\n | 'numberOfSkeletons'\n | 'onSelect'\n | 'Preview'\n | 'PreviewTitle'\n | 'PreviewStatus'\n | 'PreviewAvatar'\n | 'previewMessage'\n | 'Skeleton'\n>;\n\nconst StatusIndicator = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n const { isOnline } = useChatContext<StreamChatGenerics>();\n const { error, HeaderErrorIndicator, HeaderNetworkDownIndicator, loadingChannels, refreshList } =\n useChannelsContext<StreamChatGenerics>();\n\n if (loadingChannels) return null;\n\n if (!isOnline) {\n return (\n <View style={styles.statusIndicator}>\n <HeaderNetworkDownIndicator />\n </View>\n );\n } else if (error) {\n return (\n <View style={styles.statusIndicator}>\n <HeaderErrorIndicator onPress={refreshList} />\n </View>\n );\n }\n return null;\n};\n\nconst renderItem = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n item,\n}: {\n item: Channel<StreamChatGenerics>;\n}) => <ChannelPreview<StreamChatGenerics> channel={item} />;\n\nconst keyExtractor = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n item: Channel<StreamChatGenerics>,\n) => item.cid;\n\nconst ChannelListMessengerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelListMessengerPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalFlatListProps,\n channels,\n EmptyStateIndicator,\n error,\n FooterLoadingIndicator,\n forceUpdate,\n ListHeaderComponent,\n loadingChannels,\n LoadingErrorIndicator,\n LoadingIndicator,\n loadingNextPage,\n loadMoreThreshold,\n loadNextPage,\n refreshing,\n refreshList,\n reloadList,\n setFlatListRef,\n } = props;\n\n const {\n theme: {\n channelListMessenger: { flatList, flatListContent },\n colors: { white_snow },\n },\n } = useTheme();\n\n /**\n * In order to prevent the EmptyStateIndicator component from showing up briefly on mount,\n * we set the loading state one cycle behind to ensure the channels are set before the\n * change to loadingChannels is registered.\n */\n const [loading, setLoading] = useState(true);\n const debugRef = useDebugContext();\n\n useEffect(() => {\n if (!!loadingChannels !== loading) {\n setLoading(!!loadingChannels);\n }\n }, [loading, loadingChannels]);\n\n const isDebugModeEnabled = __DEV__ && debugRef && debugRef.current;\n\n if (isDebugModeEnabled) {\n if (debugRef.current.setEventType) debugRef.current.setEventType('send');\n if (debugRef.current.setSendEventParams)\n debugRef.current.setSendEventParams({\n action: 'Channels',\n data: channels?.map((channel) => ({\n data: channel.data,\n members: channel.state.members,\n })),\n });\n }\n\n if (error && !refreshing && !loadingChannels && channels === null) {\n return (\n <LoadingErrorIndicator\n error={error}\n listType='channel'\n loadNextPage={loadNextPage}\n retry={reloadList}\n />\n );\n }\n\n const onEndReached = () => {\n if (loadNextPage) {\n loadNextPage();\n }\n };\n\n const ListFooterComponent = () =>\n channels?.length && ListHeaderComponent ? <ListHeaderComponent /> : null;\n\n if (loadingChannels) {\n return <LoadingIndicator listType='channel' />;\n }\n\n return (\n <>\n <FlatList\n contentContainerStyle={[\n styles.flatListContentContainer,\n { backgroundColor: white_snow },\n flatListContent,\n ]}\n data={channels}\n extraData={forceUpdate}\n keyExtractor={keyExtractor}\n ListEmptyComponent={\n loading ? (\n <LoadingIndicator listType='channel' />\n ) : (\n <EmptyStateIndicator listType='channel' />\n )\n }\n ListFooterComponent={loadingNextPage ? <FooterLoadingIndicator /> : undefined}\n ListHeaderComponent={ListFooterComponent}\n onEndReached={onEndReached}\n onEndReachedThreshold={loadMoreThreshold}\n ref={setFlatListRef}\n refreshControl={<RefreshControl onRefresh={refreshList} refreshing={refreshing} />}\n renderItem={renderItem}\n style={[styles.flatList, { backgroundColor: white_snow }, flatList]}\n testID='channel-list-messenger'\n {...additionalFlatListProps}\n />\n <StatusIndicator<StreamChatGenerics> />\n </>\n );\n};\n\nexport type ChannelListMessengerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<ChannelListMessengerPropsWithContext<StreamChatGenerics>>;\n\n/**\n * This UI component displays the preview list of channels and handles Channel navigation. It\n * receives all props from the ChannelList component.\n *\n * @example ./ChannelListMessenger.md\n */\nexport const ChannelListMessenger = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelListMessengerProps<StreamChatGenerics>,\n) => {\n const {\n additionalFlatListProps,\n channels,\n EmptyStateIndicator,\n error,\n FooterLoadingIndicator,\n forceUpdate,\n ListHeaderComponent,\n loadingChannels,\n LoadingErrorIndicator,\n LoadingIndicator,\n loadingNextPage,\n loadMoreThreshold,\n loadNextPage,\n refreshing,\n refreshList,\n reloadList,\n setFlatListRef,\n } = useChannelsContext<StreamChatGenerics>();\n\n return (\n <ChannelListMessengerWithContext\n {...{\n additionalFlatListProps,\n channels,\n EmptyStateIndicator,\n error,\n FooterLoadingIndicator,\n forceUpdate,\n ListHeaderComponent,\n loadingChannels,\n LoadingErrorIndicator,\n LoadingIndicator,\n loadingNextPage,\n loadMoreThreshold,\n loadNextPage,\n refreshing,\n refreshList,\n reloadList,\n setFlatListRef,\n }}\n {...props}\n />\n );\n};\n\nChannelListMessenger.displayName = 'ChannelListMessenger{channelListMessenger}';\n"],"mappings":"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"}
1
+ {"version":3,"names":["styles","StyleSheet","create","flatList","flex","flatListContentContainer","flexGrow","statusIndicator","left","position","right","top","StatusIndicator","useChatContext","isOnline","useChannelsContext","error","HeaderErrorIndicator","HeaderNetworkDownIndicator","loadingChannels","refreshList","renderItem","item","keyExtractor","cid","ChannelListMessengerWithContext","props","onEndReachedCalledDuringCurrentScrollRef","useRef","additionalFlatListProps","channels","EmptyStateIndicator","FooterLoadingIndicator","forceUpdate","hasNextPage","ListHeaderComponent","LoadingErrorIndicator","LoadingIndicator","loadingNextPage","loadMoreThreshold","loadNextPage","refreshing","reloadList","setFlatListRef","useTheme","theme","channelListMessenger","flatListContent","white_snow","colors","useState","loading","setLoading","debugRef","useDebugContext","useEffect","isDebugModeEnabled","__DEV__","current","setEventType","setSendEventParams","action","data","map","channel","members","state","onEndReached","backgroundColor","undefined","ChannelListMessenger","displayName"],"sources":["ChannelListMessenger.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\n// RNGR's FlatList ist currently breaking the pull-to-refresh behaviour on Android\n// See https://github.com/software-mansion/react-native-gesture-handler/issues/598\nimport { FlatList, RefreshControl, StyleSheet, View } from 'react-native';\n\nimport type { Channel } from 'stream-chat';\n\nimport {\n ChannelsContextValue,\n useChannelsContext,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { useChatContext } from '../../contexts/chatContext/ChatContext';\nimport { useDebugContext } from '../../contexts/debugContext/DebugContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { ChannelPreview } from '../ChannelPreview/ChannelPreview';\n\nconst styles = StyleSheet.create({\n flatList: { flex: 1 },\n flatListContentContainer: { flexGrow: 1 },\n statusIndicator: { left: 0, position: 'absolute', right: 0, top: 0 },\n});\n\nexport type ChannelListMessengerPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Omit<\n ChannelsContextValue<StreamChatGenerics>,\n | 'HeaderErrorIndicator'\n | 'HeaderNetworkDownIndicator'\n | 'maxUnreadCount'\n | 'numberOfSkeletons'\n | 'onSelect'\n | 'Preview'\n | 'PreviewTitle'\n | 'PreviewStatus'\n | 'PreviewAvatar'\n | 'previewMessage'\n | 'Skeleton'\n>;\n\nconst StatusIndicator = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n const { isOnline } = useChatContext<StreamChatGenerics>();\n const { error, HeaderErrorIndicator, HeaderNetworkDownIndicator, loadingChannels, refreshList } =\n useChannelsContext<StreamChatGenerics>();\n\n if (loadingChannels) return null;\n\n if (!isOnline) {\n return (\n <View style={styles.statusIndicator}>\n <HeaderNetworkDownIndicator />\n </View>\n );\n } else if (error) {\n return (\n <View style={styles.statusIndicator}>\n <HeaderErrorIndicator onPress={refreshList} />\n </View>\n );\n }\n return null;\n};\n\nconst renderItem = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n item,\n}: {\n item: Channel<StreamChatGenerics>;\n}) => <ChannelPreview<StreamChatGenerics> channel={item} />;\n\nconst keyExtractor = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n item: Channel<StreamChatGenerics>,\n) => item.cid;\n\nconst ChannelListMessengerWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelListMessengerPropsWithContext<StreamChatGenerics>,\n) => {\n const onEndReachedCalledDuringCurrentScrollRef = useRef<boolean>(false);\n const {\n additionalFlatListProps,\n channels,\n EmptyStateIndicator,\n error,\n FooterLoadingIndicator,\n forceUpdate,\n hasNextPage,\n ListHeaderComponent,\n loadingChannels,\n LoadingErrorIndicator,\n LoadingIndicator,\n loadingNextPage,\n loadMoreThreshold,\n loadNextPage,\n refreshing,\n refreshList,\n reloadList,\n setFlatListRef,\n } = props;\n\n const {\n theme: {\n channelListMessenger: { flatList, flatListContent },\n colors: { white_snow },\n },\n } = useTheme();\n\n /**\n * In order to prevent the EmptyStateIndicator component from showing up briefly on mount,\n * we set the loading state one cycle behind to ensure the channels are set before the\n * change to loadingChannels is registered.\n */\n const [loading, setLoading] = useState(true);\n const debugRef = useDebugContext();\n\n useEffect(() => {\n if (!!loadingChannels !== loading) {\n setLoading(!!loadingChannels);\n }\n }, [loading, loadingChannels]);\n\n const isDebugModeEnabled = __DEV__ && debugRef && debugRef.current;\n\n if (isDebugModeEnabled) {\n if (debugRef.current.setEventType) debugRef.current.setEventType('send');\n if (debugRef.current.setSendEventParams)\n debugRef.current.setSendEventParams({\n action: 'Channels',\n data: channels?.map((channel) => ({\n data: channel.data,\n members: channel.state.members,\n })),\n });\n }\n\n if (error && !refreshing && !loadingChannels && channels === null) {\n return (\n <LoadingErrorIndicator\n error={error}\n listType='channel'\n loadNextPage={loadNextPage}\n retry={reloadList}\n />\n );\n }\n\n const onEndReached = () => {\n if (!onEndReachedCalledDuringCurrentScrollRef.current && hasNextPage) {\n loadNextPage();\n onEndReachedCalledDuringCurrentScrollRef.current = true;\n }\n };\n\n if (loadingChannels) {\n return <LoadingIndicator listType='channel' />;\n }\n\n return (\n <>\n <FlatList\n contentContainerStyle={[\n styles.flatListContentContainer,\n { backgroundColor: white_snow },\n flatListContent,\n ]}\n data={channels}\n extraData={forceUpdate}\n keyExtractor={keyExtractor}\n ListEmptyComponent={\n loading ? (\n <LoadingIndicator listType='channel' />\n ) : (\n <EmptyStateIndicator listType='channel' />\n )\n }\n ListFooterComponent={loadingNextPage ? <FooterLoadingIndicator /> : undefined}\n ListHeaderComponent={ListHeaderComponent}\n onEndReached={onEndReached}\n onEndReachedThreshold={loadMoreThreshold}\n onMomentumScrollBegin={() => (onEndReachedCalledDuringCurrentScrollRef.current = false)}\n ref={setFlatListRef}\n refreshControl={<RefreshControl onRefresh={refreshList} refreshing={refreshing} />}\n renderItem={renderItem}\n style={[styles.flatList, { backgroundColor: white_snow }, flatList]}\n testID='channel-list-messenger'\n {...additionalFlatListProps}\n />\n <StatusIndicator<StreamChatGenerics> />\n </>\n );\n};\n\nexport type ChannelListMessengerProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<ChannelListMessengerPropsWithContext<StreamChatGenerics>>;\n\n/**\n * This UI component displays the preview list of channels and handles Channel navigation. It\n * receives all props from the ChannelList component.\n *\n * @example ./ChannelListMessenger.md\n */\nexport const ChannelListMessenger = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelListMessengerProps<StreamChatGenerics>,\n) => {\n const {\n additionalFlatListProps,\n channels,\n EmptyStateIndicator,\n error,\n FooterLoadingIndicator,\n forceUpdate,\n hasNextPage,\n ListHeaderComponent,\n loadingChannels,\n LoadingErrorIndicator,\n LoadingIndicator,\n loadingNextPage,\n loadMoreThreshold,\n loadNextPage,\n refreshing,\n refreshList,\n reloadList,\n setFlatListRef,\n } = useChannelsContext<StreamChatGenerics>();\n\n return (\n <ChannelListMessengerWithContext\n {...{\n additionalFlatListProps,\n channels,\n EmptyStateIndicator,\n error,\n FooterLoadingIndicator,\n forceUpdate,\n hasNextPage,\n ListHeaderComponent,\n loadingChannels,\n LoadingErrorIndicator,\n LoadingIndicator,\n loadingNextPage,\n loadMoreThreshold,\n loadNextPage,\n refreshing,\n refreshList,\n reloadList,\n setFlatListRef,\n }}\n {...props}\n />\n );\n};\n\nChannelListMessenger.displayName = 'ChannelListMessenger{channelListMessenger}';\n"],"mappings":"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"}
@@ -35,35 +35,35 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
35
35
  setForceUpdate = _ref.setForceUpdate,
36
36
  _ref$sort = _ref.sort,
37
37
  sort = _ref$sort === void 0 ? {} : _ref$sort;
38
- var _useChatContext = (0, _ChatContext.useChatContext)(),
39
- client = _useChatContext.client;
40
38
  var _useState = (0, _react.useState)(null),
41
39
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
42
40
  channels = _useState2[0],
43
41
  setChannels = _useState2[1];
44
- var _useState3 = (0, _react.useState)(false),
42
+ var _useState3 = (0, _react.useState)(undefined),
45
43
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
46
- staticChannelsActive = _useState4[0],
47
- setStaticChannelsActive = _useState4[1];
48
- var activeChannels = (0, _ActiveChannelsRefContext.useActiveChannelsRefContext)();
49
- var _useState5 = (0, _react.useState)(),
44
+ error = _useState4[0],
45
+ setError = _useState4[1];
46
+ var _useState5 = (0, _react.useState)(false),
50
47
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
51
- error = _useState6[0],
52
- setError = _useState6[1];
53
- var _useState7 = (0, _react.useState)(true),
48
+ staticChannelsActive = _useState6[0],
49
+ setStaticChannelsActive = _useState6[1];
50
+ var _useState7 = (0, _react.useState)('queryLocalDB'),
54
51
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
55
- hasNextPage = _useState8[0],
56
- setHasNextPage = _useState8[1];
57
- var lastRefresh = (0, _react.useRef)(Date.now());
58
- var isQueryingRef = (0, _react.useRef)(false);
59
- var _useState9 = (0, _react.useState)('queryLocalDB'),
52
+ activeQueryType = _useState8[0],
53
+ setActiveQueryType = _useState8[1];
54
+ var _useState9 = (0, _react.useState)(false),
60
55
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
61
- activeQueryType = _useState10[0],
62
- setActiveQueryType = _useState10[1];
56
+ hasNextPage = _useState10[0],
57
+ setHasNextPage = _useState10[1];
58
+ var activeChannels = (0, _ActiveChannelsRefContext.useActiveChannelsRefContext)();
63
59
  var isMountedRef = (0, _useIsMountedRef.useIsMountedRef)();
60
+ var _useChatContext = (0, _ChatContext.useChatContext)(),
61
+ client = _useChatContext.client;
64
62
  var filtersRef = (0, _react.useRef)(null);
65
63
  var sortRef = (0, _react.useRef)(null);
66
64
  var activeRequestId = (0, _react.useRef)(0);
65
+ var isQueryingRef = (0, _react.useRef)(false);
66
+ var lastRefresh = (0, _react.useRef)(Date.now());
67
67
  var queryChannels = function () {
68
68
  var _ref2 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee() {
69
69
  var _options$limit;
@@ -143,54 +143,70 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
143
143
  setChannels(newChannels);
144
144
  setStaticChannelsActive(false);
145
145
  setHasNextPage(channelQueryResponse.length >= newOptions.limit);
146
- setError(undefined);
147
146
  isQueryingRef.current = false;
148
- _context.next = 46;
147
+ _context.next = 45;
149
148
  break;
150
- case 33:
151
- _context.prev = 33;
149
+ case 32:
150
+ _context.prev = 32;
152
151
  _context.t0 = _context["catch"](17);
153
152
  isQueryingRef.current = false;
154
- _context.next = 38;
153
+ _context.next = 37;
155
154
  return waitSeconds(2);
156
- case 38:
155
+ case 37:
157
156
  if (!isQueryStale()) {
158
- _context.next = 40;
157
+ _context.next = 39;
159
158
  break;
160
159
  }
161
160
  return _context.abrupt("return");
162
- case 40:
161
+ case 39:
163
162
  if (!(retryCount === MAX_NUMBER_OF_RETRIES && !isQueryingRef.current)) {
164
- _context.next = 45;
163
+ _context.next = 44;
165
164
  break;
166
165
  }
167
166
  setActiveQueryType(null);
168
167
  console.warn(_context.t0);
169
168
  setError(new Error("Maximum number of retries reached in queryChannels. Last error message is: " + _context.t0));
170
169
  return _context.abrupt("return");
171
- case 45:
170
+ case 44:
172
171
  return _context.abrupt("return", queryChannels(queryType, retryCount + 1));
173
- case 46:
172
+ case 45:
174
173
  setActiveQueryType(null);
175
- case 47:
174
+ case 46:
176
175
  case "end":
177
176
  return _context.stop();
178
177
  }
179
- }, _callee, null, [[17, 33]]);
178
+ }, _callee, null, [[17, 32]]);
180
179
  }));
181
180
  return function queryChannels() {
182
181
  return _ref2.apply(this, arguments);
183
182
  };
184
183
  }();
185
- var loadNextPage = hasNextPage ? queryChannels : undefined;
186
- var refreshList = function refreshList() {
187
- var now = Date.now();
188
- if (now - lastRefresh.current < RETRY_INTERVAL_IN_MS && error === undefined) {
189
- return;
190
- }
191
- lastRefresh.current = Date.now();
192
- return queryChannels('refresh');
193
- };
184
+ var refreshList = function () {
185
+ var _ref3 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2() {
186
+ var now;
187
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
188
+ while (1) switch (_context2.prev = _context2.next) {
189
+ case 0:
190
+ now = Date.now();
191
+ if (!(now - lastRefresh.current < RETRY_INTERVAL_IN_MS && error === undefined)) {
192
+ _context2.next = 3;
193
+ break;
194
+ }
195
+ return _context2.abrupt("return");
196
+ case 3:
197
+ lastRefresh.current = Date.now();
198
+ _context2.next = 6;
199
+ return queryChannels('refresh');
200
+ case 6:
201
+ case "end":
202
+ return _context2.stop();
203
+ }
204
+ }, _callee2);
205
+ }));
206
+ return function refreshList() {
207
+ return _ref3.apply(this, arguments);
208
+ };
209
+ }();
194
210
  var reloadList = function reloadList() {
195
211
  return queryChannels('reload');
196
212
  };
@@ -236,15 +252,15 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
236
252
  }
237
253
  } else {
238
254
  listener = client.on('connection.changed', function () {
239
- var _ref3 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2(event) {
240
- return _regenerator["default"].wrap(function _callee2$(_context2) {
241
- while (1) switch (_context2.prev = _context2.next) {
255
+ var _ref4 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3(event) {
256
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
257
+ while (1) switch (_context3.prev = _context3.next) {
242
258
  case 0:
243
259
  if (!event.online) {
244
- _context2.next = 4;
260
+ _context3.next = 4;
245
261
  break;
246
262
  }
247
- _context2.next = 3;
263
+ _context3.next = 3;
248
264
  return refreshList();
249
265
  case 3:
250
266
  setForceUpdate(function (u) {
@@ -252,12 +268,12 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
252
268
  });
253
269
  case 4:
254
270
  case "end":
255
- return _context2.stop();
271
+ return _context3.stop();
256
272
  }
257
- }, _callee2);
273
+ }, _callee3);
258
274
  }));
259
275
  return function (_x) {
260
- return _ref3.apply(this, arguments);
276
+ return _ref4.apply(this, arguments);
261
277
  };
262
278
  }());
263
279
  reloadList();
@@ -273,7 +289,7 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
273
289
  hasNextPage: hasNextPage,
274
290
  loadingChannels: activeQueryType === 'queryLocalDB' ? true : (activeQueryType === 'reload' || activeQueryType === null) && channels === null,
275
291
  loadingNextPage: activeQueryType === 'loadChannels',
276
- loadNextPage: loadNextPage,
292
+ loadNextPage: queryChannels,
277
293
  refreshing: activeQueryType === 'refresh',
278
294
  refreshList: refreshList,
279
295
  reloadList: reloadList,