import { View, TouchableOpacity, Text } from 'react-native';
import { useState, useEffect, useContext } from 'react';
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { createDrawerNavigator } from '@react-navigation/drawer';
import { createStackNavigator } from '@react-navigation/stack';
import { NavigationContainer } from '@react-navigation/native';
import Ionicons from '@expo/vector-icons/AntDesign';
import { useSession } from './useSession.hook';
import { styles } from './Session.styled';
import Colors from 'constants/Colors';
import { ProfileTitle, Profile } from './profile/Profile';
import { CardsTitle, CardsBody, Cards } from './cards/Cards';
import { useCards } from './cards/useCards.hook';
import { RegistryTitle, RegistryBody, Registry } from './registry/Registry';
import { useRegistry } from './registry/useRegistry.hook';
import { Contact, ContactTitle } from './contact/Contact';
import { Details, DetailsHeader, DetailsBody } from './details/Details';
import { Conversation, ConversationHeader, ConversationBody } from './conversation/Conversation';
import { Welcome } from './welcome/Welcome';
import { ChannelsTitle, ChannelsBody, Channels } from './channels/Channels';
import { useChannels } from './channels/useChannels.hook';
import { CommonActions } from '@react-navigation/native';
import { ConversationContext } from 'context/ConversationContext';
const ConversationStack = createStackNavigator();
const ProfileStack = createStackNavigator();
const ContactStack = createStackNavigator();
const ProfileDrawer = createDrawerNavigator();
const ContactDrawer = createDrawerNavigator();
const DetailDrawer = createDrawerNavigator();
const CardDrawer = createDrawerNavigator();
const RegistryDrawer = createDrawerNavigator();
const Tab = createBottomTabNavigator();
export function Session() {
const { state, actions } = useSession();
// tabbed containers
const ConversationStackScreen = () => {
const [selected, setSelected] = useState(null);
const setConversation = (navigation, cardId, channelId, revision) => {
setSelected({ cardId, channelId, revision });
navigation.navigate('conversation');
}
const clearConversation = (navigation) => {
navigation.dispatch(
CommonActions.reset({
index: 0,
routes: [
{ name: 'channels' },
],
})
);
}
const setDetail = (navigation) => {
navigation.navigate('details');
}
const clearDetail = (navigation) => {
navigation.goBack();
}
const channels = useChannels();
const conversation = useContext(ConversationContext);
useEffect(() => {
conversation.actions.setChannel(selected);
}, [selected]);
return (
({ headerShown: true, headerTintColor: Colors.primary })}
screenListeners={{ state: (e) => { if (e?.data?.state?.index === 0 && selected) { setSelected(null); }}, }}>
}}>
{(props) => setConversation(props.navigation, cardId, channelId, revision)} />}
}}>
{(props) => }
}}>
{(props) => clearConversation(props.navigation)} />}
);
}
const ProfileStackScreen = () => {
return (
({ headerShown: true, headerTintColor: Colors.primary })}>
}} />
);
}
const ContactStackScreen = () => {
const [selected, setSelected] = useState(null);
const setCardStack = (navigation, contact) => {
setSelected(contact);
navigation.navigate('contact')
}
const clearCardStack = (navigation) => {
navigation.goBack();
}
const setRegistryStack = (navigation) => {
navigation.navigate('registry');
}
const clearRegistryStack = (navigation) => {
navigation.goBack();
}
const registry = useRegistry();
const cards = useCards();
return (
({ headerShow: true, headerTintColor: Colors.primary })}
initialRouteName="cards">
}}>
{(props) => setCardStack(props.navigation, contact)} />}
}}>
{(props) => clearCardStack(props.navigation)} />}
}}>
{(props) => setCardStack(props.navigation, contact)} />}
);
}
const HomeScreen = ({ cardNav, registryNav, detailNav, contactNav, profileNav, setDetails, resetConversation, clearReset }) => {
const [channel, setChannel] = useState(null);
const setConversation = (cardId, channelId, revision) => {
setChannel({ cardId, channelId, revision });
};
const clearConversation = () => {
setChannel(null);
};
const setProfile = () => {
profileNav.openDrawer();
};
const setChannelDetails = (channel) => {
setDetails(channel);
detailNav.openDrawer();
};
const openProfile = () => {
profileNav.openDrawer();
}
const openCards = () => {
cardNav.openDrawer();
}
const conversation = useContext(ConversationContext);
useEffect(() => {
if (resetConversation) {
detailNav.closeDrawer();
setChannel(null);
setDetails(null);
clearReset();
}
}, [resetConversation]);
useEffect(() => {
conversation.actions.setChannel(channel);
}, [channel]);
return (
Profile
Contacts
{ channel && (
)}
{ !channel && (
)}
)
}
const CardDrawerScreen = ({ registryNav, detailNav, contactNav, profileNav, setContact, setDetails, clearReset, resetConversation }) => {
const openRegistry = () => {
registryNav.openDrawer();
};
setCardContact = (contact) => {
setContact(contact);
contactNav.openDrawer();
};
const params = {
profileNav,
registryNav,
detailNav,
contactNav,
setDetails,
setContact,
clearReset,
resetConversation,
};
return (
}>
{(props) => }
);
};
const RegistryDrawerScreen = ({ detailNav, contactNav, profileNav, setContact, setDetails, clearReset, resetConversation }) => {
const setRegistryContact = (contact) => {
setContact(contact);
contactNav.openDrawer();
};
const params = {
profileNav,
detailNav,
contactNav,
setDetails,
setContact,
clearReset,
resetConversation,
};
return (
}>
{(props) => }
);
};
const ContactDrawerScreen = ({ detailNav, profileNav, setDetails, resetConversation, clearReset }) => {
const [selected, setSelected] = useState(null);
const setContact = (contact) => {
setSelected(contact);
}
const params = {
profileNav,
detailNav,
setDetails,
setContact,
clearReset,
resetConversation,
};
return (
}>
{(props) => }
);
}
const DetailDrawerScreen = ({ profileNav }) => {
const [selected, setSelected] = useState(null);
const [resetConversation, setResetConversation] = useState(false);
const setDetails = (channel) => {
setSelected(channel);
};
const clearConversation = () => {
setResetConversation(true);
}
const clearReset = () => {
setResetConversation(false);
}
const params = {
profileNav,
setDetails,
clearReset,
resetConversation,
};
return (
}
>
{(props) => }
);
}
return (
{ state.tabbed === false && (
}>
{(props) => }
)}
{ state.tabbed === true && (
({
tabBarStyle: styles.tabBar,
headerShown: false,
tabBarIcon: ({ focused, color, size }) => {
if (route.name === 'Profile') {
return ;
}
if (route.name === 'Conversation') {
return ;
}
if (route.name === 'Contacts') {
return ;
}
},
tabBarShowLabel: false,
tabBarActiveTintColor: Colors.white,
tabBarInactiveTintColor: Colors.disabled,
})}>
)}
);
}