tooot/src/Index.tsx

96 lines
2.8 KiB
TypeScript
Raw Normal View History

2020-10-23 09:22:17 +02:00
import 'react-native-gesture-handler'
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'
import { NavigationContainer } from '@react-navigation/native'
import { enableScreens } from 'react-native-screens'
import React from 'react'
2020-10-24 18:07:09 +02:00
import { Feather } from '@expo/vector-icons'
2020-11-21 13:19:05 +01:00
// @ts-ignore
import Toast from 'react-native-toast-message'
2020-10-23 09:22:17 +02:00
2020-11-21 13:19:05 +01:00
import ScreenLocal from 'src/screens/Local'
import ScreenPublic from 'src/screens/Public'
import ScreenNotifications from 'src/screens/Notifications'
import ScreenMe from 'src/screens/Me'
2020-10-23 09:22:17 +02:00
2020-11-23 00:07:32 +01:00
import { themes } from 'src/utils/styles/themes'
import { useTheme } from 'src/utils/styles/ThemeManager'
2020-11-24 00:18:47 +01:00
import getCurrentTab from 'src/utils/getCurrentTab'
2020-11-23 00:07:32 +01:00
2020-10-26 00:27:53 +01:00
enableScreens()
2020-11-24 00:18:47 +01:00
const Tab = createBottomTabNavigator<RootStackParamList>()
export type RootStackParamList = {
'Screen-Local': undefined
'Screen-Public': { publicTab: boolean }
'Screen-Post': undefined
'Screen-Notifications': undefined
'Screen-Me': undefined
}
2020-10-23 09:22:17 +02:00
2020-10-31 21:04:46 +01:00
export const Index: React.FC = () => {
2020-11-23 00:07:32 +01:00
const { mode, theme } = useTheme()
2020-10-23 09:22:17 +02:00
return (
2020-11-23 00:07:32 +01:00
<NavigationContainer theme={themes[mode]}>
2020-11-21 13:19:05 +01:00
<Tab.Navigator
screenOptions={({ route }) => ({
tabBarIcon: ({ focused, color, size }) => {
let name: string
switch (route.name) {
case 'Screen-Local':
name = 'home'
break
case 'Screen-Public':
name = 'globe'
break
case 'Screen-Post':
name = 'plus'
break
case 'Screen-Notifications':
name = 'bell'
break
case 'Screen-Me':
name = focused ? 'smile' : 'meh'
break
default:
name = 'alert-octagon'
break
}
return <Feather name={name} size={size} color={color} />
}
})}
tabBarOptions={{
2020-11-23 00:07:32 +01:00
activeTintColor: theme.primary,
inactiveTintColor: theme.secondary,
2020-11-21 13:19:05 +01:00
showLabel: false
}}
>
<Tab.Screen name='Screen-Local' component={ScreenLocal} />
<Tab.Screen name='Screen-Public' component={ScreenPublic} />
<Tab.Screen
name='Screen-Post'
listeners={({ navigation, route }) => ({
tabPress: e => {
e.preventDefault()
2020-11-24 00:18:47 +01:00
navigation.navigate(getCurrentTab(navigation), {
2020-11-22 00:57:43 +01:00
screen: 'Screen-Shared-Compose'
2020-11-21 13:19:05 +01:00
})
2020-11-15 23:33:01 +01:00
}
})}
2020-11-22 00:46:23 +01:00
>
{() => <></>}
</Tab.Screen>
<Tab.Screen
name='Screen-Notifications'
component={ScreenNotifications}
2020-11-21 13:19:05 +01:00
/>
<Tab.Screen name='Screen-Me' component={ScreenMe} />
</Tab.Navigator>
2020-11-21 13:19:05 +01:00
<Toast ref={(ref: any) => Toast.setRef(ref)} />
</NavigationContainer>
2020-10-23 09:22:17 +02:00
)
}