import {useBottomTabBarHeight} from '@react-navigation/bottom-tabs'; import {StackNavigationProp} from '@react-navigation/stack'; import React, {useContext, useEffect, useMemo, useState} from 'react'; import {Alert, SafeAreaView, StatusBar, StyleSheet, View} from 'react-native'; import {useStore} from 'react-redux'; import {ChannelList, Chat} from 'stream-chat-react-native'; import {ChatContext} from '../../App'; import {TabsGradient} from '../../components'; import EmptyContentView from '../../components/common/EmptyContentView'; import {ChannelPreview, MessagesHeader} from '../../components/messages'; import {MainStackParams} from '../../routes'; import {RootState} from '../../store/rootReducer'; import { LocalAttachmentType, LocalChannelType, LocalCommandType, LocalEventType, LocalMessageType, LocalReactionType, LocalUserType, } from '../../types'; import {connectChatAccount, HeaderHeight} from '../../utils'; import NewChatModal from './NewChatModal'; type ChatListScreenNavigationProp = StackNavigationProp< MainStackParams, 'ChatList' >; interface ChatListScreenProps { navigation: ChatListScreenNavigationProp; } /* * Screen that displays all of the user's active conversations. */ const ChatListScreen: React.FC = () => { const {chatClient} = useContext(ChatContext); const [modalVisible, setChatModalVisible] = useState(false); const state: RootState = useStore().getState(); const loggedInUserId = state.user.user.userId; const tabbarHeight = useBottomTabBarHeight(); const memoizedFilters = useMemo( () => ({ members: {$in: [loggedInUserId]}, type: 'messaging', }), [], ); const chatTheme = { channelListMessenger: { flatListContent: { backgroundColor: 'white', paddingBottom: tabbarHeight + HeaderHeight + 20, }, }, }; useEffect(() => { if (loggedInUserId) { connectChatAccount(loggedInUserId, chatClient) .then((success) => { if (!success) { Alert.alert('Something wrong with chat'); } }) .catch((err) => { console.log('Error connecting to chat: ', err); Alert.alert('Something wrong with chat'); }); } }, [loggedInUserId]); return ( { setChatModalVisible(true); }} /> filters={memoizedFilters} options={{ presence: true, state: true, watch: true, }} sort={{last_message_at: -1}} maxUnreadCount={99} Preview={ChannelPreview} EmptyStateIndicator={() => { return ; }} /> ); }; const styles = StyleSheet.create({ background: { flex: 1, backgroundColor: 'white', }, container: { flex: 1, justifyContent: 'center', alignItems: 'center', }, placeholder: { fontSize: 14, fontWeight: 'bold', marginBottom: 10, }, button: { backgroundColor: '#CCE4FC', padding: 15, borderRadius: 5, }, chatContainer: { height: '100%', marginTop: 10, }, }); export default ChatListScreen;