import React from 'react'; import { LogBox, Platform, useColorScheme } from 'react-native'; import { createDrawerNavigator } from '@react-navigation/drawer'; import { DarkTheme, DefaultTheme, NavigationContainer } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; import { SafeAreaProvider, useSafeAreaInsets } from 'react-native-safe-area-context'; import { Chat, OverlayProvider, ThemeProvider, useOverlayContext } from 'stream-chat-react-native'; import { AppContext } from './src/context/AppContext'; import { AppOverlayProvider } from './src/context/AppOverlayProvider'; import { UserSearchProvider } from './src/context/UserSearchContext'; import { useChatClient } from './src/hooks/useChatClient'; import { useStreamChatTheme } from './src/hooks/useStreamChatTheme'; import { AdvancedUserSelectorScreen } from './src/screens/AdvancedUserSelectorScreen'; import { ChannelFilesScreen } from './src/screens/ChannelFilesScreen'; import { ChannelImagesScreen } from './src/screens/ChannelImagesScreen'; import { ChannelScreen } from './src/screens/ChannelScreen'; import { ChatScreen } from './src/screens/ChatScreen'; import { GroupChannelDetailsScreen } from './src/screens/GroupChannelDetailsScreen'; import { LoadingScreen } from './src/screens/LoadingScreen'; import { MenuDrawer } from './src/screens/MenuDrawer'; import { NewDirectMessagingScreen } from './src/screens/NewDirectMessagingScreen'; import { NewGroupChannelAddMemberScreen } from './src/screens/NewGroupChannelAddMemberScreen'; import { NewGroupChannelAssignNameScreen } from './src/screens/NewGroupChannelAssignNameScreen'; import { OneOnOneChannelDetailScreen } from './src/screens/OneOnOneChannelDetailScreen'; import { SharedGroupsScreen } from './src/screens/SharedGroupsScreen'; import { ThreadScreen } from './src/screens/ThreadScreen'; import { UserSelectorScreen } from './src/screens/UserSelectorScreen'; import type { StreamChat } from 'stream-chat'; import type { LocalAttachmentType, LocalChannelType, LocalCommandType, LocalEventType, LocalMessageType, LocalReactionType, LocalUserType, StackNavigatorParamList, UserSelectorParamList, } from './src/types'; LogBox.ignoreAllLogs(true); console.assert = () => null; const Drawer = createDrawerNavigator(); const Stack = createStackNavigator(); const UserSelectorStack = createStackNavigator(); const App = () => { const { chatClient, isConnecting, loginUser, logout, switchUser } = useChatClient(); const colorScheme = useColorScheme(); const streamChatTheme = useStreamChatTheme(); return ( {isConnecting ? ( ) : chatClient ? ( ) : ( )} ); }; const DrawerNavigator: React.FC = () => { const { overlay } = useOverlayContext(); return ( } drawerStyle={{ width: 300, }} screenOptions={{ gestureEnabled: Platform.OS === 'ios' && overlay === 'none', }} > ); }; const DrawerNavigatorWrapper: React.FC<{ chatClient: StreamChat< LocalAttachmentType, LocalChannelType, LocalCommandType, LocalEventType, LocalMessageType, LocalReactionType, LocalUserType >; }> = ({ chatClient }) => { const { bottom } = useSafeAreaInsets(); const streamChatTheme = useStreamChatTheme(); return ( bottomInset={bottom} value={{ style: streamChatTheme }} > client={chatClient} > ); }; const UserSelector = () => { const streamChatTheme = useStreamChatTheme(); return ( ); }; // TODO: Split the stack into multiple stacks - ChannelStack, CreateChannelStack etc. const HomeScreen = () => { const { overlay } = useOverlayContext(); return ( ); }; export default App;