diff options
Diffstat (limited to 'src/view/shell')
-rw-r--r-- | src/view/shell/Drawer.tsx | 3 | ||||
-rw-r--r-- | src/view/shell/bottom-bar/BottomBar.tsx | 24 | ||||
-rw-r--r-- | src/view/shell/desktop/LeftNav.tsx | 76 |
3 files changed, 70 insertions, 33 deletions
diff --git a/src/view/shell/Drawer.tsx b/src/view/shell/Drawer.tsx index d51db3960..c4624e8e1 100644 --- a/src/view/shell/Drawer.tsx +++ b/src/view/shell/Drawer.tsx @@ -5,6 +5,7 @@ import {msg, Plural, plural, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {StackActions, useNavigation} from '@react-navigation/native' +import {useActorStatus} from '#/lib/actor-status' import {FEEDBACK_FORM_URL, HELP_DESK_URL} from '#/lib/constants' import {type PressableScale} from '#/lib/custom-animations/PressableScale' import {useNavigationTabState} from '#/lib/hooks/useNavigationTabState' @@ -67,6 +68,7 @@ let DrawerProfileCard = ({ const t = useTheme() const {data: profile} = useProfileQuery({did: account.did}) const verification = useSimpleVerificationState({profile}) + const {isActive: live} = useActorStatus(profile) return ( <TouchableOpacity @@ -81,6 +83,7 @@ let DrawerProfileCard = ({ // See https://github.com/bluesky-social/social-app/pull/1801: usePlainRNImage={true} type={profile?.associated?.labeler ? 'labeler' : 'user'} + live={live} /> <View style={[a.gap_2xs]}> <View style={[a.flex_row, a.align_center, a.gap_xs, a.flex_1]}> diff --git a/src/view/shell/bottom-bar/BottomBar.tsx b/src/view/shell/bottom-bar/BottomBar.tsx index df6a045dc..92be6c67e 100644 --- a/src/view/shell/bottom-bar/BottomBar.tsx +++ b/src/view/shell/bottom-bar/BottomBar.tsx @@ -7,6 +7,7 @@ import {useLingui} from '@lingui/react' import {type BottomTabBarProps} from '@react-navigation/bottom-tabs' import {StackActions} from '@react-navigation/native' +import {useActorStatus} from '#/lib/actor-status' import {PressableScale} from '#/lib/custom-animations/PressableScale' import {BOTTOM_BAR_AVI} from '#/lib/demo' import {useHaptics} from '#/lib/haptics' @@ -127,6 +128,7 @@ export function BottomBar({navigation}: BottomTabBarProps) { }, [accountSwitchControl, playHaptic]) const [demoMode] = useDemoMode() + const {isActive: live} = useActorStatus(profile) return ( <> @@ -260,25 +262,39 @@ export function BottomBar({navigation}: BottomTabBarProps) { pal.text, styles.profileIcon, styles.onProfile, - {borderColor: pal.text.color}, + { + borderColor: pal.text.color, + borderWidth: live ? 0 : 1, + }, ]}> <UserAvatar avatar={demoMode ? BOTTOM_BAR_AVI : profile?.avatar} - size={iconWidth - 3} + size={iconWidth - 2} // See https://github.com/bluesky-social/social-app/pull/1801: usePlainRNImage={true} type={profile?.associated?.labeler ? 'labeler' : 'user'} + live={live} + hideLiveBadge /> </View> ) : ( <View - style={[styles.ctrlIcon, pal.text, styles.profileIcon]}> + style={[ + styles.ctrlIcon, + pal.text, + styles.profileIcon, + { + borderWidth: live ? 0 : 1, + }, + ]}> <UserAvatar avatar={demoMode ? BOTTOM_BAR_AVI : profile?.avatar} - size={iconWidth - 3} + size={iconWidth - 2} // See https://github.com/bluesky-social/social-app/pull/1801: usePlainRNImage={true} type={profile?.associated?.labeler ? 'labeler' : 'user'} + live={live} + hideLiveBadge /> </View> )} diff --git a/src/view/shell/desktop/LeftNav.tsx b/src/view/shell/desktop/LeftNav.tsx index 7d34a3d14..f6c852ca1 100644 --- a/src/view/shell/desktop/LeftNav.tsx +++ b/src/view/shell/desktop/LeftNav.tsx @@ -9,6 +9,7 @@ import { useNavigationState, } from '@react-navigation/native' +import {useActorStatus} from '#/lib/actor-status' import {useAccountSwitcher} from '#/lib/hooks/useAccountSwitcher' import {useOpenComposer} from '#/lib/hooks/useOpenComposer' import {usePalette} from '#/lib/hooks/usePalette' @@ -100,6 +101,8 @@ function ProfileCard() { profile: profiles?.find(p => p.did === account.did), })) + const {isActive: live} = useActorStatus(profile) + return ( <View style={[a.my_md, !leftNavMinimal && [a.w_full, a.align_start]]}> {!isLoading && profile ? ( @@ -142,6 +145,7 @@ function ProfileCard() { avatar={profile.avatar} size={size} type={profile?.associated?.labeler ? 'labeler' : 'user'} + live={live} /> </View> {!leftNavMinimal && ( @@ -226,7 +230,6 @@ function SwitchMenuItems({ signOutPromptControl: DialogControlProps }) { const {_} = useLingui() - const {onPressSwitchAccount, pendingDid} = useAccountSwitcher() const {setShowLoggedOut} = useLoggedOutViewControls() const closeEverything = useCloseAllActiveElements() @@ -243,35 +246,11 @@ function SwitchMenuItems({ <Trans>Switch account</Trans> </Menu.LabelText> {accounts.map(other => ( - <Menu.Item - disabled={!!pendingDid} - style={[{minWidth: 150}]} + <SwitchMenuItem key={other.account.did} - label={_( - msg`Switch to ${sanitizeHandle( - other.profile?.handle ?? other.account.handle, - '@', - )}`, - )} - onPress={() => - onPressSwitchAccount(other.account, 'SwitchAccount') - }> - <View style={[{marginLeft: tokens.space._2xs * -1}]}> - <UserAvatar - avatar={other.profile?.avatar} - size={20} - type={ - other.profile?.associated?.labeler ? 'labeler' : 'user' - } - /> - </View> - <Menu.ItemText> - {sanitizeHandle( - other.profile?.handle ?? other.account.handle, - '@', - )} - </Menu.ItemText> - </Menu.Item> + account={other.account} + profile={other.profile} + /> ))} </Menu.Group> <Menu.Divider /> @@ -295,6 +274,45 @@ function SwitchMenuItems({ ) } +function SwitchMenuItem({ + account, + profile, +}: { + account: SessionAccount + profile: AppBskyActorDefs.ProfileViewDetailed | undefined +}) { + const {_} = useLingui() + const {onPressSwitchAccount, pendingDid} = useAccountSwitcher() + const {isActive: live} = useActorStatus(profile) + + return ( + <Menu.Item + disabled={!!pendingDid} + style={[a.gap_sm, {minWidth: 150}]} + key={account.did} + label={_( + msg`Switch to ${sanitizeHandle( + profile?.handle ?? account.handle, + '@', + )}`, + )} + onPress={() => onPressSwitchAccount(account, 'SwitchAccount')}> + <View> + <UserAvatar + avatar={profile?.avatar} + size={20} + type={profile?.associated?.labeler ? 'labeler' : 'user'} + live={live} + hideLiveBadge + /> + </View> + <Menu.ItemText> + {sanitizeHandle(profile?.handle ?? account.handle, '@')} + </Menu.ItemText> + </Menu.Item> + ) +} + interface NavItemProps { count?: string hasNew?: boolean |