import GracefullyImage from '@components/GracefullyImage' import haptics from '@components/haptics' import Icon from '@components/Icon' import { BottomTabNavigationOptions, createBottomTabNavigator } from '@react-navigation/bottom-tabs' import { useAppDispatch } from '@root/store' import { RootStackScreenProps, ScreenTabsStackParamList } from '@utils/navigation/navigators' import { getPreviousTab } from '@utils/slices/contextsSlice' import { getInstanceAccount, getInstanceActive } from '@utils/slices/instancesSlice' import { getVersionUpdate, retriveVersionLatest } from '@utils/slices/versionSlice' import { useTheme } from '@utils/styles/ThemeManager' import React, { useCallback, useEffect, useMemo } from 'react' import { 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' const Tab = createBottomTabNavigator() const ScreenTabs = React.memo( ({ navigation }: RootStackScreenProps<'Screen-Tabs'>) => { const { colors, theme } = useTheme() const instanceActive = useSelector(getInstanceActive) const instanceAccount = useSelector( getInstanceAccount, (prev, next) => prev?.avatarStatic === next?.avatarStatic ) const screenOptions = useCallback( ({ route }): BottomTabNavigationOptions => ({ headerShown: false, tabBarActiveTintColor: colors.primaryDefault, tabBarInactiveTintColor: colors.secondary, tabBarShowLabel: false, ...(Platform.OS === 'android' && { tabBarHideOnKeyboard: true }), tabBarStyle: { display: instanceActive !== -1 ? 'flex' : 'none' }, 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 ( ) default: return } } }), [instanceAccount?.avatarStatic, instanceActive, theme] ) const composeListeners = useMemo( () => ({ tabPress: (e: any) => { e.preventDefault() haptics('Light') navigation.navigate('Screen-Compose') } }), [] ) const composeComponent = useCallback(() => null, []) const meListeners = useMemo( () => ({ tabLongPress: () => { haptics('Light') //@ts-ignore navigation.navigate('Tab-Me', { screen: 'Tab-Me-Root' }) //@ts-ignore navigation.navigate('Tab-Me', { screen: 'Tab-Me-Switch' }) } }), [] ) const previousTab = useSelector(getPreviousTab, () => true) const versionUpdate = useSelector(getVersionUpdate) const dispatch = useAppDispatch() useEffect(() => { dispatch(retriveVersionLatest()) }, []) const tabMeOptions = useMemo(() => { if (versionUpdate) { return { tabBarBadge: 1 } } }, [versionUpdate]) return ( ) }, () => true ) export default ScreenTabs