@gathertown/uikit-react-native
Version:
Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.
67 lines • 2.93 kB
JavaScript
import React from 'react';
import { useGroupChannelList } from '@gathertown/uikit-chat-hooks';
import { PASS, useAppState, useFreshCallback } from '@gathertown/uikit-utils';
import StatusComposition from '../components/StatusComposition';
import GroupChannelPreviewContainer from '../containers/GroupChannelPreviewContainer';
import createGroupChannelListModule from '../domain/groupChannelList/module/createGroupChannelListModule';
import { useSendbirdChat } from '../hooks/useContext';
const createGroupChannelListFragment = initModule => {
const GroupChannelListModule = createGroupChannelListModule(initModule);
return _ref => {
let {
onPressChannel,
onPressCreateChannel,
collectionCreator,
renderGroupChannelPreview,
skipTypeSelection = false,
flatListProps = {},
menuItemCreator = PASS
} = _ref;
const {
sdk,
currentUser,
sbOptions,
markAsDeliveredWithChannel
} = useSendbirdChat();
const {
groupChannels,
next,
loading
} = useGroupChannelList(sdk, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId, {
collectionCreator,
enableCollectionWithoutLocalCache: true
});
if (sbOptions.appInfo.deliveryReceiptEnabled) {
useAppState('change', status => {
if (status === 'active') groupChannels.forEach(markAsDeliveredWithChannel);
});
}
const _renderGroupChannelPreview = useFreshCallback(props => {
if (renderGroupChannelPreview) return renderGroupChannelPreview(props);
return /*#__PURE__*/React.createElement(GroupChannelPreviewContainer, props);
});
const isChannelTypeAvailable = sbOptions.appInfo.broadcastChannelEnabled || sbOptions.appInfo.superGroupChannelEnabled;
return /*#__PURE__*/React.createElement(GroupChannelListModule.Provider, null, /*#__PURE__*/React.createElement(GroupChannelListModule.Header, null), /*#__PURE__*/React.createElement(StatusComposition, {
loading: loading,
LoadingComponent: /*#__PURE__*/React.createElement(GroupChannelListModule.StatusLoading, null)
}, /*#__PURE__*/React.createElement(GroupChannelListModule.List, {
onPressChannel: onPressChannel,
menuItemCreator: menuItemCreator,
renderGroupChannelPreview: _renderGroupChannelPreview,
groupChannels: groupChannels,
onLoadNext: next,
flatListProps: {
ListEmptyComponent: /*#__PURE__*/React.createElement(GroupChannelListModule.StatusEmpty, null),
contentContainerStyle: {
flexGrow: 1
},
...flatListProps
}
})), /*#__PURE__*/React.createElement(GroupChannelListModule.TypeSelector, {
skipTypeSelection: isChannelTypeAvailable ? skipTypeSelection : true,
onSelectType: onPressCreateChannel
}));
};
};
export default createGroupChannelListFragment;
//# sourceMappingURL=createGroupChannelListFragment.js.map