diff options
author | Eric Bailey <git@esb.lol> | 2023-11-16 12:54:03 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-16 10:54:03 -0800 |
commit | 310a7eaca747e53fb24692998ffe9343762d681f (patch) | |
tree | a0608cfff4ce169e00d0e0010e5d4b799ad35209 /src | |
parent | a652b52b880c2967e5b70f6f7661891253e20150 (diff) | |
download | voidsky-310a7eaca747e53fb24692998ffe9343762d681f.tar.zst |
Some me model cleanup (#1928)
* Replace me model in post dropdown btn * Replace delete account logic * Replace me model in bottom bar web * Replace me model in bottom bar * Replace me model in reply prompt * Better fallback * Fix reference * Fix bad ref in bottom bar
Diffstat (limited to 'src')
-rw-r--r-- | src/view/com/composer/Prompt.tsx | 8 | ||||
-rw-r--r-- | src/view/com/modals/DeleteAccount.tsx | 20 | ||||
-rw-r--r-- | src/view/com/util/forms/PostDropdownBtn.tsx | 6 | ||||
-rw-r--r-- | src/view/shell/bottom-bar/BottomBar.tsx | 10 | ||||
-rw-r--r-- | src/view/shell/bottom-bar/BottomBarWeb.tsx | 19 |
5 files changed, 41 insertions, 22 deletions
diff --git a/src/view/com/composer/Prompt.tsx b/src/view/com/composer/Prompt.tsx index 5e8a01d96..ae055f9ac 100644 --- a/src/view/com/composer/Prompt.tsx +++ b/src/view/com/composer/Prompt.tsx @@ -3,13 +3,15 @@ import {StyleSheet, TouchableOpacity} from 'react-native' import {UserAvatar} from '../util/UserAvatar' import {Text} from '../util/text/Text' import {usePalette} from 'lib/hooks/usePalette' -import {useStores} from 'state/index' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {Trans, msg} from '@lingui/macro' import {useLingui} from '@lingui/react' +import {useSession} from '#/state/session' +import {useProfileQuery} from '#/state/queries/profile' export function ComposePrompt({onPressCompose}: {onPressCompose: () => void}) { - const store = useStores() + const {currentAccount} = useSession() + const {data: profile} = useProfileQuery({did: currentAccount?.did}) const pal = usePalette('default') const {_} = useLingui() const {isDesktop} = useWebMediaQueries() @@ -21,7 +23,7 @@ export function ComposePrompt({onPressCompose}: {onPressCompose: () => void}) { accessibilityRole="button" accessibilityLabel={_(msg`Compose reply`)} accessibilityHint="Opens composer"> - <UserAvatar avatar={store.me.avatar} size={38} /> + <UserAvatar avatar={profile?.avatar} size={38} /> <Text type="xl" style={[ diff --git a/src/view/com/modals/DeleteAccount.tsx b/src/view/com/modals/DeleteAccount.tsx index 624dbda2d..7969cf69f 100644 --- a/src/view/com/modals/DeleteAccount.tsx +++ b/src/view/com/modals/DeleteAccount.tsx @@ -9,7 +9,6 @@ import {TextInput} from './util' import LinearGradient from 'react-native-linear-gradient' import * as Toast from '../util/Toast' import {Text} from '../util/text/Text' -import {useStores} from 'state/index' import {s, colors, gradients} from 'lib/styles' import {usePalette} from 'lib/hooks/usePalette' import {useTheme} from 'lib/ThemeContext' @@ -20,13 +19,15 @@ import {resetToTab} from '../../../Navigation' import {Trans, msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useModalControls} from '#/state/modals' +import {useSession, useSessionApi} from '#/state/session' export const snapPoints = ['60%'] export function Component({}: {}) { const pal = usePalette('default') const theme = useTheme() - const store = useStores() + const {agent, currentAccount} = useSession() + const {clearCurrentAccount, removeAccount} = useSessionApi() const {_} = useLingui() const {closeModal} = useModalControls() const {isMobile} = useWebMediaQueries() @@ -39,7 +40,7 @@ export function Component({}: {}) { setError('') setIsProcessing(true) try { - await store.agent.com.atproto.server.requestAccountDelete() + await agent.com.atproto.server.requestAccountDelete() setIsEmailSent(true) } catch (e: any) { setError(cleanError(e)) @@ -47,19 +48,24 @@ export function Component({}: {}) { setIsProcessing(false) } const onPressConfirmDelete = async () => { + if (!currentAccount?.did) { + throw new Error(`DeleteAccount modal: currentAccount.did is undefined`) + } + setError('') setIsProcessing(true) const token = confirmCode.replace(/\s/g, '') try { - await store.agent.com.atproto.server.deleteAccount({ - did: store.me.did, + await agent.com.atproto.server.deleteAccount({ + did: currentAccount.did, password, token, }) Toast.show('Your account has been deleted') resetToTab('HomeTab') - store.session.clear() + removeAccount(currentAccount) + clearCurrentAccount() closeModal() } catch (e: any) { setError(cleanError(e)) @@ -88,7 +94,7 @@ export function Component({}: {}) { pal.text, s.bold, ]}> - {store.me.handle} + {currentAccount?.handle} </Text> <Text type="title-xl" style={[pal.text, s.bold]}> {'"'} diff --git a/src/view/com/util/forms/PostDropdownBtn.tsx b/src/view/com/util/forms/PostDropdownBtn.tsx index dfaa77c1c..90a165ce7 100644 --- a/src/view/com/util/forms/PostDropdownBtn.tsx +++ b/src/view/com/util/forms/PostDropdownBtn.tsx @@ -15,12 +15,12 @@ import {EventStopper} from '../EventStopper' import {useModalControls} from '#/state/modals' import {makeProfileLink} from '#/lib/routes/links' import {getTranslatorLink} from '#/locale/helpers' -import {useStores} from '#/state' import {usePostDeleteMutation} from '#/state/queries/post' import {useMutedThreads, useToggleThreadMute} from '#/state/muted-threads' import {useLanguagePrefs} from '#/state/preferences' import {logger} from '#/logger' import {Shadow} from '#/state/cache/types' +import {useSession} from '#/state/session' export function PostDropdownBtn({ testID, @@ -33,7 +33,7 @@ export function PostDropdownBtn({ record: AppBskyFeedPost.Record style?: StyleProp<ViewStyle> }) { - const store = useStores() + const {currentAccount} = useSession() const theme = useTheme() const defaultCtrlColor = theme.palette.default.postCtrl const {openModal} = useModalControls() @@ -44,7 +44,7 @@ export function PostDropdownBtn({ const rootUri = record.reply?.root?.uri || post.uri const isThreadMuted = mutedThreads.includes(rootUri) - const isAuthor = post.author.did === store.me.did + const isAuthor = post.author.did === currentAccount?.did const href = React.useMemo(() => { const urip = new AtUri(post.uri) return makeProfileLink(post.author, 'post', urip.rkey) diff --git a/src/view/shell/bottom-bar/BottomBar.tsx b/src/view/shell/bottom-bar/BottomBar.tsx index de1dc1703..a1502d2e9 100644 --- a/src/view/shell/bottom-bar/BottomBar.tsx +++ b/src/view/shell/bottom-bar/BottomBar.tsx @@ -6,7 +6,6 @@ import {BottomTabBarProps} from '@react-navigation/bottom-tabs' import {useSafeAreaInsets} from 'react-native-safe-area-context' import {observer} from 'mobx-react-lite' import {Text} from 'view/com/util/text/Text' -import {useStores} from 'state/index' import {useAnalytics} from 'lib/analytics/analytics' import {clamp} from 'lib/numbers' import { @@ -30,6 +29,8 @@ import {useModalControls} from '#/state/modals' import {useShellLayout} from '#/state/shell/shell-layout' import {useUnreadNotifications} from '#/state/queries/notifications/unread' import {emitSoftReset} from '#/state/events' +import {useSession} from '#/state/session' +import {useProfileQuery} from '#/state/queries/profile' type TabOptions = 'Home' | 'Search' | 'Notifications' | 'MyProfile' | 'Feeds' @@ -37,7 +38,7 @@ export const BottomBar = observer(function BottomBarImpl({ navigation, }: BottomTabBarProps) { const {openModal} = useModalControls() - const store = useStores() + const {currentAccount} = useSession() const pal = usePalette('default') const {_} = useLingui() const safeAreaInsets = useSafeAreaInsets() @@ -47,6 +48,7 @@ export const BottomBar = observer(function BottomBarImpl({ useNavigationTabState() const numUnreadNotifications = useUnreadNotifications() const {footerMinimalShellTransform} = useMinimalShellMode() + const {data: profile} = useProfileQuery({did: currentAccount?.did}) const onPressTab = React.useCallback( (tab: TabOptions) => { @@ -203,7 +205,7 @@ export const BottomBar = observer(function BottomBarImpl({ {borderColor: pal.text.color}, ]}> <UserAvatar - avatar={store.me.avatar} + avatar={profile?.avatar} size={27} // See https://github.com/bluesky-social/social-app/pull/1801: usePlainRNImage={true} @@ -212,7 +214,7 @@ export const BottomBar = observer(function BottomBarImpl({ ) : ( <View style={[styles.ctrlIcon, pal.text, styles.profileIcon]}> <UserAvatar - avatar={store.me.avatar} + avatar={profile?.avatar} size={28} // See https://github.com/bluesky-social/social-app/pull/1801: usePlainRNImage={true} diff --git a/src/view/shell/bottom-bar/BottomBarWeb.tsx b/src/view/shell/bottom-bar/BottomBarWeb.tsx index ebcc527a1..d58580502 100644 --- a/src/view/shell/bottom-bar/BottomBarWeb.tsx +++ b/src/view/shell/bottom-bar/BottomBarWeb.tsx @@ -1,6 +1,5 @@ import React from 'react' import {observer} from 'mobx-react-lite' -import {useStores} from 'state/index' import {usePalette} from 'lib/hooks/usePalette' import {useNavigationState} from '@react-navigation/native' import Animated from 'react-native-reanimated' @@ -23,9 +22,10 @@ import {Link} from 'view/com/util/Link' import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode' import {makeProfileLink} from 'lib/routes/links' import {CommonNavigatorParams} from 'lib/routes/types' +import {useSession} from '#/state/session' export const BottomBarWeb = observer(function BottomBarWebImpl() { - const store = useStores() + const {currentAccount} = useSession() const pal = usePalette('default') const safeAreaInsets = useSafeAreaInsets() const {footerMinimalShellTransform} = useMinimalShellMode() @@ -88,7 +88,16 @@ export const BottomBarWeb = observer(function BottomBarWebImpl() { ) }} </NavItem> - <NavItem routeName="Profile" href={makeProfileLink(store.me)}> + <NavItem + routeName="Profile" + href={ + currentAccount + ? makeProfileLink({ + did: currentAccount.did, + handle: currentAccount.handle, + }) + : '/' + }> {({isActive}) => { const Icon = isActive ? UserIconSolid : UserIcon return ( @@ -109,18 +118,18 @@ const NavItem: React.FC<{ href: string routeName: string }> = ({children, href, routeName}) => { + const {currentAccount} = useSession() const currentRoute = useNavigationState(state => { if (!state) { return {name: 'Home'} } return getCurrentRoute(state) }) - const store = useStores() const isActive = currentRoute.name === 'Profile' ? isTab(currentRoute.name, routeName) && (currentRoute.params as CommonNavigatorParams['Profile']).name === - store.me.handle + currentAccount?.handle : isTab(currentRoute.name, routeName) return ( |