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.35 kB
JavaScript
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 != null ? 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 != null ? 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