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, { useEffect } from 'react' import { StatusBar } from 'react-native' import Toast from 'react-native-toast-message' import { Feather } from '@expo/vector-icons' import ScreenLocal from '@screens/Local' import ScreenPublic from '@screens/Public' import ScreenNotifications from '@screens/Notifications' import ScreenMe from '@screens/Me' import { themes } from '@utils/styles/themes' import { useTheme } from '@utils/styles/ThemeManager' import getCurrentTab from '@utils/getCurrentTab' import { toastConfig } from '@components/toast' import { useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' import { getLocalToken, getLocalUrl, updateLocal } from './utils/slices/instancesSlice' enableScreens() const Tab = createBottomTabNavigator() export type RootStackParamList = { 'Screen-Local': undefined 'Screen-Public': { publicTab: boolean } 'Screen-Post': undefined 'Screen-Notifications': undefined 'Screen-Me': undefined } export const Index: React.FC = () => { const dispatch = useDispatch() const localInstance = useSelector(getLocalUrl) const localToken = useSelector(getLocalToken) const { i18n } = useTranslation() const { mode, theme } = useTheme() enum barStyle { light = 'dark-content', dark = 'light-content' } useEffect(() => { if (localInstance && localToken) { dispatch(updateLocal({ url: localInstance, token: localToken })) } }, []) return ( <> ({ tabBarIcon: ({ focused, color, size }) => { let name: any let updateColor: string = color switch (route.name) { case 'Screen-Local': name = 'home' break case 'Screen-Public': name = 'globe' !focused && (updateColor = theme.secondary) break case 'Screen-Post': name = 'plus' break case 'Screen-Notifications': name = 'bell' break case 'Screen-Me': name = focused ? 'meh' : 'smile' !focused && (updateColor = theme.secondary) break default: name = 'alert-octagon' break } return } })} tabBarOptions={{ activeTintColor: theme.primary, inactiveTintColor: localInstance ? theme.secondary : theme.disabled, showLabel: false }} > { if (!localInstance) { e.preventDefault() } } }} /> ({ tabPress: e => { e.preventDefault() localInstance && navigation.navigate(getCurrentTab(navigation), { screen: 'Screen-Shared-Compose' }) } })} > {() => null} { if (!localInstance) { e.preventDefault() } } }} /> Toast.setRef(ref)} config={toastConfig} /> ) }