import haptics from '@components/haptics' import Icon from '@components/Icon' import { BottomTabNavigationOptions, createBottomTabNavigator } from '@react-navigation/bottom-tabs' import { NavigatorScreenParams } from '@react-navigation/native' import { StackScreenProps } from '@react-navigation/stack' import { getPreviousTab } from '@utils/slices/contextsSlice' import { getInstanceAccount, getInstanceActive } from '@utils/slices/instancesSlice' import { useTheme } from '@utils/styles/ThemeManager' import React, { useCallback, useMemo } from 'react' import { Image, Platform } from 'react-native' import { useSelector } from 'react-redux' import TabLocal from './Tabs/Local' import TabMe from './Tabs/Me' import TabNotifications from './Tabs/Notifications' import TabPublic from './Tabs/Public' export type ScreenTabsParamList = { 'Tab-Local': NavigatorScreenParams 'Tab-Public': NavigatorScreenParams 'Tab-Compose': NavigatorScreenParams 'Tab-Notifications': NavigatorScreenParams 'Tab-Me': NavigatorScreenParams } export type ScreenTabsProp = StackScreenProps< Nav.RootStackParamList, 'Screen-Tabs' > const Tab = createBottomTabNavigator() const ScreenTabs = React.memo( ({ navigation }: ScreenTabsProp) => { const { mode, theme } = useTheme() const instanceActive = useSelector(getInstanceActive) const instanceAccount = useSelector( getInstanceAccount, (prev, next) => prev?.avatarStatic === next?.avatarStatic ) const screenOptions = useCallback( ({ route }): BottomTabNavigationOptions => ({ tabBarVisible: instanceActive !== -1, tabBarIcon: ({ focused, color, size }: { focused: boolean color: string size: number }) => { switch (route.name) { case 'Tab-Local': return case 'Tab-Public': return case 'Tab-Compose': return case 'Tab-Notifications': return case 'Tab-Me': return instanceActive !== -1 ? ( ) : ( ) default: return } } }), [instanceAccount, instanceActive] ) const tabBarOptions = useMemo( () => ({ activeTintColor: theme.primaryDefault, inactiveTintColor: theme.secondary, showLabel: false, ...(Platform.OS === 'android' && { keyboardHidesTabBar: true }) }), [mode] ) const composeListeners = useMemo( () => ({ tabPress: (e: any) => { e.preventDefault() haptics('Light') navigation.navigate('Screen-Compose') } }), [] ) const composeComponent = useCallback(() => null, []) const previousTab = useSelector(getPreviousTab, () => true) return ( ) }, () => true ) export default ScreenTabs