import React from 'react' import {View} from 'react-native' import Animated from 'react-native-reanimated' import {msg, plural, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useNavigationState} from '@react-navigation/native' import {useHideBottomBarBorder} from '#/lib/hooks/useHideBottomBarBorder' import {useMinimalShellFooterTransform} from '#/lib/hooks/useMinimalShellTransform' import {getCurrentRoute, isTab} from '#/lib/routes/helpers' import {makeProfileLink} from '#/lib/routes/links' import {type CommonNavigatorParams} from '#/lib/routes/types' import {useGate} from '#/lib/statsig/statsig' import {useHomeBadge} from '#/state/home-badge' import {useUnreadMessageCount} from '#/state/queries/messages/list-conversations' import {useUnreadNotifications} from '#/state/queries/notifications/unread' import {useSession} from '#/state/session' import {useLoggedOutViewControls} from '#/state/shell/logged-out' import {useShellLayout} from '#/state/shell/shell-layout' import {useCloseAllActiveElements} from '#/state/util' import {Link} from '#/view/com/util/Link' import {Logo} from '#/view/icons/Logo' import {Logotype} from '#/view/icons/Logotype' import {atoms as a, useTheme} from '#/alf' import {Button, ButtonText} from '#/components/Button' import { Bell_Filled_Corner0_Rounded as BellFilled, Bell_Stroke2_Corner0_Rounded as Bell, } from '#/components/icons/Bell' import { HomeOpen_Filled_Corner0_Rounded as HomeFilled, HomeOpen_Stoke2_Corner0_Rounded as Home, } from '#/components/icons/HomeOpen' import {MagnifyingGlass_Filled_Stroke2_Corner0_Rounded as MagnifyingGlassFilled} from '#/components/icons/MagnifyingGlass' import {MagnifyingGlass2_Stroke2_Corner0_Rounded as MagnifyingGlass} from '#/components/icons/MagnifyingGlass2' import { Message_Stroke2_Corner0_Rounded as Message, Message_Stroke2_Corner0_Rounded_Filled as MessageFilled, } from '#/components/icons/Message' import { UserCircle_Filled_Corner0_Rounded as UserCircleFilled, UserCircle_Stroke2_Corner0_Rounded as UserCircle, } from '#/components/icons/UserCircle' import {Text} from '#/components/Typography' import {styles} from './BottomBarStyles' export function BottomBarWeb() { const {_} = useLingui() const {hasSession, currentAccount} = useSession() const t = useTheme() const footerMinimalShellTransform = useMinimalShellFooterTransform() const {requestSwitchToAccount} = useLoggedOutViewControls() const closeAllActiveElements = useCloseAllActiveElements() const {footerHeight} = useShellLayout() const hideBorder = useHideBottomBarBorder() const iconWidth = 26 const unreadMessageCount = useUnreadMessageCount() const notificationCountStr = useUnreadNotifications() const hasHomeBadge = useHomeBadge() const gate = useGate() const showSignIn = React.useCallback(() => { closeAllActiveElements() requestSwitchToAccount({requestedAccount: 'none'}) }, [requestSwitchToAccount, closeAllActiveElements]) const showCreateAccount = React.useCallback(() => { closeAllActiveElements() requestSwitchToAccount({requestedAccount: 'new'}) // setShowLoggedOut(true) }, [requestSwitchToAccount, closeAllActiveElements]) return ( footerHeight.set(event.nativeEvent.layout.height)}> {hasSession ? ( <> {({isActive}) => { const Icon = isActive ? HomeFilled : Home return ( ) }} {({isActive}) => { const Icon = isActive ? MagnifyingGlassFilled : MagnifyingGlass return ( ) }} {hasSession && ( <> {({isActive}) => { const Icon = isActive ? MessageFilled : Message return ( ) }} {({isActive}) => { const Icon = isActive ? BellFilled : Bell return ( ) }} {({isActive}) => { const Icon = isActive ? UserCircleFilled : UserCircle return ( ) }} )} ) : ( <> )} ) } const NavItem: React.FC<{ children: (props: {isActive: boolean}) => React.ReactNode href: string routeName: string hasNew?: boolean notificationCount?: string }> = ({children, href, routeName, hasNew, notificationCount}) => { const {_} = useLingui() const {currentAccount} = useSession() const currentRoute = useNavigationState(state => { if (!state) { return {name: 'Home'} } return getCurrentRoute(state) }) // Checks whether we're on someone else's profile const isOnDifferentProfile = currentRoute.name === 'Profile' && routeName === 'Profile' && (currentRoute.params as CommonNavigatorParams['Profile']).name !== currentAccount?.handle const isActive = currentRoute.name === 'Profile' ? isTab(currentRoute.name, routeName) && (currentRoute.params as CommonNavigatorParams['Profile']).name === (routeName === 'Profile' ? currentAccount?.handle : (currentRoute.params as CommonNavigatorParams['Profile']).name) : isTab(currentRoute.name, routeName) return ( {children({isActive})} {notificationCount ? ( {notificationCount} ) : hasNew ? ( ) : null} ) }