diff options
| author | Ivan Chen <ivan@tagg.id> | 2021-06-22 18:51:57 -0400 | 
|---|---|---|
| committer | Ivan Chen <ivan@tagg.id> | 2021-06-22 18:51:57 -0400 | 
| commit | 0561794c67d827c918029f2e06572fd03b4531fd (patch) | |
| tree | 6036820345118253d05c8438a3f02bf645172924 /src/screens/chat | |
| parent | 457b5cf34c032e7b73f972d5ba801ff420915190 (diff) | |
Finish poc for for video streaming
Diffstat (limited to 'src/screens/chat')
| -rw-r--r-- | src/screens/chat/ChatListScreen.tsx | 288 | 
1 files changed, 122 insertions, 166 deletions
| diff --git a/src/screens/chat/ChatListScreen.tsx b/src/screens/chat/ChatListScreen.tsx index 08b41151..0f5d8073 100644 --- a/src/screens/chat/ChatListScreen.tsx +++ b/src/screens/chat/ChatListScreen.tsx @@ -1,10 +1,26 @@ +import {useBottomTabBarHeight} from '@react-navigation/bottom-tabs';  import {StackNavigationProp} from '@react-navigation/stack'; -import React from 'react'; -import {StyleSheet} from 'react-native'; -import {SafeAreaView} from 'react-native-safe-area-context'; -import Video from 'react-native-video'; +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 {SCREEN_WIDTH} from '../../utils'; +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, @@ -13,174 +29,114 @@ type ChatListScreenNavigationProp = StackNavigationProp<  interface ChatListScreenProps {    navigation: ChatListScreenNavigationProp;  } - +/* + * Screen that displays all of the user's active conversations. + */  const ChatListScreen: React.FC<ChatListScreenProps> = () => { +  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 ( -    <SafeAreaView> -      <Video -        // HLS m3u8 version -        source={{ -          uri: 'https://multiplatform-f.akamaihd.net/i/multi/will/bunny/big_buck_bunny_,640x360_400,640x360_700,640x360_1000,950x540_1500,.f4v.csmil/master.m3u8', -        }} -        // mp4 version -        // source={{ -        //   uri: 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4', -        // }} -        volume={5} -        style={styles.video} -      /> -    </SafeAreaView> +    <View style={styles.background}> +      <SafeAreaView> +        <StatusBar barStyle="dark-content" /> +        <MessagesHeader +          createChannel={() => { +            setChatModalVisible(true); +          }} +        /> +        <Chat client={chatClient} style={chatTheme}> +          <View style={styles.chatContainer}> +            <ChannelList< +              LocalAttachmentType, +              LocalChannelType, +              LocalCommandType, +              LocalEventType, +              LocalMessageType, +              LocalReactionType, +              LocalUserType +            > +              filters={memoizedFilters} +              options={{ +                presence: true, +                state: true, +                watch: true, +              }} +              sort={{last_message_at: -1}} +              maxUnreadCount={99} +              Preview={ChannelPreview} +              EmptyStateIndicator={() => { +                return <EmptyContentView viewType={'ChatList'} />; +              }} +            /> +          </View> +        </Chat> +        <NewChatModal {...{modalVisible, setChatModalVisible}} /> +      </SafeAreaView> +      <TabsGradient /> +    </View>    );  };  const styles = StyleSheet.create({ -  video: { -    width: SCREEN_WIDTH, -    aspectRatio: 2, +  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; - -// 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 {ChannelPreview, MessagesHeader} from '../../components/messages'; -// import {MainStackParams} from '../../routes'; -// import {RootState} from '../../store/rootReducer'; -// import EmptyContentView from '../../components/common/EmptyContentView'; -// 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<ChatListScreenProps> = () => { -//   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 ( -//     <View style={styles.background}> -//       <SafeAreaView> -//         <StatusBar barStyle="dark-content" /> -//         <MessagesHeader -//           createChannel={() => { -//             setChatModalVisible(true); -//           }} -//         /> -//         <Chat client={chatClient} style={chatTheme}> -//           <View style={styles.chatContainer}> -//             <ChannelList< -//               LocalAttachmentType, -//               LocalChannelType, -//               LocalCommandType, -//               LocalEventType, -//               LocalMessageType, -//               LocalReactionType, -//               LocalUserType -//             > -//               filters={memoizedFilters} -//               options={{ -//                 presence: true, -//                 state: true, -//                 watch: true, -//               }} -//               sort={{last_message_at: -1}} -//               maxUnreadCount={99} -//               Preview={ChannelPreview} -//               EmptyStateIndicator={() => { -//                 return <EmptyContentView viewType={'ChatList'} />; -//               }} -//             /> -//           </View> -//         </Chat> -//         <NewChatModal {...{modalVisible, setChatModalVisible}} /> -//       </SafeAreaView> -//       <TabsGradient /> -//     </View> -//   ); -// }; - -// 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; | 
