UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

189 lines 9.3 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.ChannelList = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _ChannelListView = require("./ChannelListView"); var _useChannelUpdated = require("./hooks/listeners/useChannelUpdated"); var _useCreateChannelsContext = require("./hooks/useCreateChannelsContext"); var _usePaginatedChannels2 = require("./hooks/usePaginatedChannels"); var _ChannelsContext = require("../../contexts/channelsContext/ChannelsContext"); var _ChatContext = require("../../contexts/chatContext/ChatContext"); var _ComponentsContext = require("../../contexts/componentsContext/ComponentsContext"); var _SwipeRegistryContext = require("../../contexts/swipeableContext/SwipeRegistryContext"); var _useLazyRef = require("../../hooks/useLazyRef"); var _utils = require("../../utils/utils"); var _NotificationTargetContext = require("../Notifications/NotificationTargetContext"); var _jsxRuntime = require("react/jsx-runtime"); var _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/ChannelList/ChannelList.tsx"; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } var DEFAULT_FILTERS = {}; var DEFAULT_OPTIONS = {}; var DEFAULT_SORT = {}; var ChannelList = props => { var _props$additionalFlat = props.additionalFlatListProps, additionalFlatListProps = _props$additionalFlat === void 0 ? {} : _props$additionalFlat, channelRenderFilterFn = props.channelRenderFilterFn, _props$filters = props.filters, filters = _props$filters === void 0 ? DEFAULT_FILTERS : _props$filters, _props$loadMoreThresh = props.loadMoreThreshold, loadMoreThreshold = _props$loadMoreThresh === void 0 ? 0.1 : _props$loadMoreThresh, _props$lockChannelOrd = props.lockChannelOrder, lockChannelOrder = _props$lockChannelOrd === void 0 ? false : _props$lockChannelOrd, _props$maxUnreadCount = props.maxUnreadCount, maxUnreadCount = _props$maxUnreadCount === void 0 ? 255 : _props$maxUnreadCount, _props$numberOfSkelet = props.numberOfSkeletons, numberOfSkeletons = _props$numberOfSkelet === void 0 ? 8 : _props$numberOfSkelet, onAddedToChannel = props.onAddedToChannel, onChannelDeleted = props.onChannelDeleted, onChannelHidden = props.onChannelHidden, onChannelMemberUpdated = props.onChannelMemberUpdated, onChannelTruncated = props.onChannelTruncated, onChannelUpdated = props.onChannelUpdated, onChannelVisible = props.onChannelVisible, onNewMessage = props.onNewMessage, onNewMessageNotification = props.onNewMessageNotification, onRemovedFromChannel = props.onRemovedFromChannel, onSelect = props.onSelect, _props$options = props.options, options = _props$options === void 0 ? DEFAULT_OPTIONS : _props$options, getChannelActionItems = props.getChannelActionItems, setFlatListRef = props.setFlatListRef, _props$sort = props.sort, sort = _props$sort === void 0 ? DEFAULT_SORT : _props$sort, queryChannelsOverride = props.queryChannelsOverride, notificationHostIdProp = props.notificationHostId, _props$mutedStatusPos = props.mutedStatusPosition, mutedStatusPosition = _props$mutedStatusPos === void 0 ? 'inlineTitle' : _props$mutedStatusPos, _props$pinnedStatusPo = props.pinnedStatusPosition, pinnedStatusPosition = _props$pinnedStatusPo === void 0 ? 'inlineTitle' : _props$pinnedStatusPo, _props$swipeActionsEn = props.swipeActionsEnabled, swipeActionsEnabled = _props$swipeActionsEn === void 0 ? true : _props$swipeActionsEn; var _useState = (0, _react.useState)(0), _useState2 = (0, _slicedToArray2.default)(_useState, 2), forceUpdate = _useState2[0], setForceUpdate = _useState2[1]; var fallbackNotificationHostIdRef = (0, _useLazyRef.useLazyRef)(() => `channel-list:${(0, _utils.generateRandomId)()}`); var notificationHostId = notificationHostIdProp ?? fallbackNotificationHostIdRef.current; var _useChatContext = (0, _ChatContext.useChatContext)(), client = _useChatContext.client, enableOfflineSupport = _useChatContext.enableOfflineSupport; var _useComponentsContext = (0, _ComponentsContext.useComponentsContext)(), NotificationList = _useComponentsContext.NotificationList; var channelManager = (0, _react.useMemo)(() => client.createChannelManager({}), [client]); (0, _react.useEffect)(() => { channelManager.setEventHandlerOverrides({ channelDeletedHandler: onChannelDeleted, channelHiddenHandler: onChannelHidden, channelTruncatedHandler: onChannelTruncated, channelVisibleHandler: onChannelVisible, memberUpdatedHandler: onChannelMemberUpdated ? (setChannels, event) => onChannelMemberUpdated(lockChannelOrder, setChannels, event, { filters, sort }) : undefined, newMessageHandler: onNewMessage ? (setChannels, event) => onNewMessage(lockChannelOrder, setChannels, event, { filters, sort }) : undefined, notificationAddedToChannelHandler: onAddedToChannel ? (setChannels, event) => onAddedToChannel(setChannels, event, { filters, sort }) : undefined, notificationNewMessageHandler: onNewMessageNotification ? (setChannels, event) => onNewMessageNotification(setChannels, event, { filters, sort }) : undefined, notificationRemovedFromChannelHandler: onRemovedFromChannel }); }, [channelManager, filters, lockChannelOrder, onAddedToChannel, onChannelDeleted, onChannelHidden, onChannelMemberUpdated, onChannelTruncated, onChannelVisible, onNewMessage, onNewMessageNotification, onRemovedFromChannel, sort]); (0, _react.useEffect)(() => { if (queryChannelsOverride) { channelManager.setQueryChannelsRequest(queryChannelsOverride); } }, [channelManager, queryChannelsOverride]); (0, _react.useEffect)(() => { channelManager.setOptions({ abortInFlightQuery: false, lockChannelOrder }); }, [channelManager, lockChannelOrder]); (0, _react.useEffect)(() => { channelManager.registerSubscriptions(); return () => { channelManager.unregisterSubscriptions(); }; }, [channelManager]); var _usePaginatedChannels = (0, _usePaginatedChannels2.usePaginatedChannels)({ channelManager, enableOfflineSupport, filters, options, setForceUpdate, sort }), channelListInitialized = _usePaginatedChannels.channelListInitialized, channels = _usePaginatedChannels.channels, error = _usePaginatedChannels.error, hasNextPage = _usePaginatedChannels.hasNextPage, loadingChannels = _usePaginatedChannels.loadingChannels, loadingNextPage = _usePaginatedChannels.loadingNextPage, loadNextPage = _usePaginatedChannels.loadNextPage, refreshing = _usePaginatedChannels.refreshing, refreshList = _usePaginatedChannels.refreshList, reloadList = _usePaginatedChannels.reloadList; (0, _useChannelUpdated.useChannelUpdated)({ onChannelUpdated, setChannels: channelManager.setChannels }); var channelsContext = (0, _useCreateChannelsContext.useCreateChannelsContext)({ additionalFlatListProps, channelListInitialized, channels: channelRenderFilterFn ? channelRenderFilterFn(channels ?? []) : channels, error, forceUpdate, hasNextPage, loadingChannels, loadingNextPage, loadMoreThreshold, loadNextPage, maxUnreadCount, numberOfSkeletons, onSelect, getChannelActionItems, swipeActionsEnabled, refreshing, refreshList, reloadList, setFlatListRef: ref => { if (setFlatListRef) { setFlatListRef(ref); } }, mutedStatusPosition, pinnedStatusPosition }); return (0, _jsxRuntime.jsx)(_NotificationTargetContext.NotificationTargetProvider, { hostId: notificationHostId, panel: "channel-list", children: (0, _jsxRuntime.jsx)(_ChannelsContext.ChannelsProvider, { value: channelsContext, children: (0, _jsxRuntime.jsx)(_SwipeRegistryContext.SwipeRegistryProvider, { children: (0, _jsxRuntime.jsxs)(_reactNative.View, { style: styles.container, children: [(0, _jsxRuntime.jsx)(_ChannelListView.ChannelListView, {}), (0, _jsxRuntime.jsx)(NotificationList, {})] }) }) }) }); }; exports.ChannelList = ChannelList; var styles = _reactNative.StyleSheet.create({ container: { backgroundColor: 'transparent', flex: 1 } }); //# sourceMappingURL=ChannelList.js.map