import { useMemo } from 'react'; import { Platform, useWindowDimensions } from 'react-native'; import { Tabs, usePathname } from 'expo-router'; import { MaterialCommunityIcons } from '@expo/vector-icons'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { useAppColors, shadows } from '../../../src/theme'; import { BREAKPOINTS } from '../../../src/hooks/useResponsive'; import { useHomeTabBarVisibilityStore, useTotalUnreadCount } from '../../../src/stores'; const TAB_BAR_HEIGHT = 56; const TAB_BAR_FLOATING_MARGIN = 12; const TAB_BAR_MARGIN = 20; export default function TabsLayout() { const colors = useAppColors(); const { width } = useWindowDimensions(); const insets = useSafeAreaInsets(); const pathname = usePathname(); const unreadCount = useTotalUnreadCount(); const scrollHideTabBar = useHomeTabBarVisibilityStore((s) => s.bottomTabBarHiddenByScroll); const hideTabBar = Platform.OS === 'web' && width >= BREAKPOINTS.desktop; const isHomeStackRoute = pathname === '/home' || pathname.startsWith('/home/'); const tabBarStyle = useMemo(() => { if (hideTabBar) { return { display: 'none' as const, height: 0, overflow: 'hidden' as const }; } const visibleStyle = { position: 'absolute' as const, left: 0, right: 0, marginHorizontal: TAB_BAR_MARGIN, bottom: TAB_BAR_FLOATING_MARGIN + insets.bottom, height: TAB_BAR_HEIGHT, borderRadius: 22, backgroundColor: colors.background.paper, ...shadows.lg, borderTopWidth: 0, elevation: 100, zIndex: 100, }; if (isHomeStackRoute && scrollHideTabBar) { return { ...visibleStyle, display: 'none' as const, height: 0, opacity: 0, overflow: 'hidden' as const, }; } return visibleStyle; }, [hideTabBar, insets.bottom, isHomeStackRoute, scrollHideTabBar, colors]); return ( ( ), }} /> ( ), }} /> 0 ? (unreadCount > 99 ? 99 : unreadCount) : undefined, tabBarIcon: ({ color, focused }) => ( ), }} /> ( ), }} /> ); }