diff options
author | Hailey <me@haileyok.com> | 2024-06-27 19:35:20 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-27 19:35:20 -0700 |
commit | 91c4aa7c2dc598dd5e2c828e44c0d2c94cf0967d (patch) | |
tree | 362f79f88bab8107053c1fe0201ddcb4d0d21ac5 /src/screens/StarterPack/StarterPackScreen.tsx | |
parent | 030c8e268e161bebe360e3ad97b1c18bd8425ca8 (diff) | |
download | voidsky-91c4aa7c2dc598dd5e2c828e44c0d2c94cf0967d.tar.zst |
Handle pressing all go.bsky.app links in-app w/ resolution (#4680)
Diffstat (limited to 'src/screens/StarterPack/StarterPackScreen.tsx')
-rw-r--r-- | src/screens/StarterPack/StarterPackScreen.tsx | 80 |
1 files changed, 75 insertions, 5 deletions
diff --git a/src/screens/StarterPack/StarterPackScreen.tsx b/src/screens/StarterPack/StarterPackScreen.tsx index aa0e75a23..679b3f2cb 100644 --- a/src/screens/StarterPack/StarterPackScreen.tsx +++ b/src/screens/StarterPack/StarterPackScreen.tsx @@ -28,15 +28,20 @@ import {HITSLOP_20} from 'lib/constants' import {makeProfileLink, makeStarterPackLink} from 'lib/routes/links' import {CommonNavigatorParams, NavigationProp} from 'lib/routes/types' import {logEvent} from 'lib/statsig/statsig' -import {getStarterPackOgCard} from 'lib/strings/starter-pack' +import { + createStarterPackUri, + getStarterPackOgCard, +} from 'lib/strings/starter-pack' import {isWeb} from 'platform/detection' import {updateProfileShadow} from 'state/cache/profile-shadow' import {useModerationOpts} from 'state/preferences/moderation-opts' import {useListMembersQuery} from 'state/queries/list-members' +import {useResolvedStarterPackShortLink} from 'state/queries/resolve-short-link' import {useResolveDidQuery} from 'state/queries/resolve-uri' import {useShortenLink} from 'state/queries/shorten-link' import {useStarterPackQuery} from 'state/queries/starter-packs' import {useAgent, useSession} from 'state/session' +import {useSetActiveStarterPack} from 'state/shell/starter-pack' import * as Toast from '#/view/com/util/Toast' import {PagerWithHeader} from 'view/com/pager/PagerWithHeader' import {ProfileSubpageHeader} from 'view/com/profile/ProfileSubpageHeader' @@ -67,12 +72,77 @@ type StarterPackScreeProps = NativeStackScreenProps< CommonNavigatorParams, 'StarterPack' > +type StarterPackScreenShortProps = NativeStackScreenProps< + CommonNavigatorParams, + 'StarterPackShort' +> export function StarterPackScreen({route}: StarterPackScreeProps) { + return <StarterPackAuthCheck routeParams={route.params} /> +} + +export function StarterPackScreenShort({route}: StarterPackScreenShortProps) { + const {_} = useLingui() + const { + data: resolvedStarterPack, + isLoading, + isError, + } = useResolvedStarterPackShortLink({ + code: route.params.code, + }) + + if (isLoading || isError || !resolvedStarterPack) { + return ( + <ListMaybePlaceholder + isLoading={isLoading} + isError={isError} + errorMessage={_(msg`That starter pack could not be found.`)} + emptyMessage={_(msg`That starter pack could not be found.`)} + /> + ) + } + return <StarterPackAuthCheck routeParams={resolvedStarterPack} /> +} + +export function StarterPackAuthCheck({ + routeParams, +}: { + routeParams: StarterPackScreeProps['route']['params'] +}) { + const navigation = useNavigation<NavigationProp>() + const setActiveStarterPack = useSetActiveStarterPack() + const {currentAccount} = useSession() + + React.useEffect(() => { + if (currentAccount) return + + const uri = createStarterPackUri({ + did: routeParams.name, + rkey: routeParams.rkey, + }) + + if (!uri) return + setActiveStarterPack({ + uri, + }) + + navigation.goBack() + }, [routeParams, currentAccount, navigation, setActiveStarterPack]) + + if (!currentAccount) return null + + return <StarterPackScreenInner routeParams={routeParams} /> +} + +export function StarterPackScreenInner({ + routeParams, +}: { + routeParams: StarterPackScreeProps['route']['params'] +}) { + const {name, rkey} = routeParams const {_} = useLingui() const {currentAccount} = useSession() - const {name, rkey} = route.params const moderationOpts = useModerationOpts() const { data: did, @@ -113,16 +183,16 @@ export function StarterPackScreen({route}: StarterPackScreeProps) { } return ( - <StarterPackScreenInner + <StarterPackScreenLoaded starterPack={starterPack} - routeParams={route.params} + routeParams={routeParams} listMembersQuery={listMembersQuery} moderationOpts={moderationOpts} /> ) } -function StarterPackScreenInner({ +function StarterPackScreenLoaded({ starterPack, routeParams, listMembersQuery, |