diff options
author | Hailey <me@haileyok.com> | 2024-07-03 18:15:08 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-04 02:15:08 +0100 |
commit | aa7117edb60711a67464f7559118334185f01680 (patch) | |
tree | b0ccd3d7ef0d792613542a1af48c3fbae1f36f21 /src/components/StarterPack/StarterPackCard.tsx | |
parent | a3d4fb652b888ba81aecbf0e81a954968ea65d39 (diff) | |
download | voidsky-aa7117edb60711a67464f7559118334185f01680.tar.zst |
Add starter pack embeds to posts (#4699)
* starter pack embeds * revert test code * Types * add `BaseLink` * precache on click * rm log * add a comment * loading state * top margin --------- Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
Diffstat (limited to 'src/components/StarterPack/StarterPackCard.tsx')
-rw-r--r-- | src/components/StarterPack/StarterPackCard.tsx | 60 |
1 files changed, 50 insertions, 10 deletions
diff --git a/src/components/StarterPack/StarterPackCard.tsx b/src/components/StarterPack/StarterPackCard.tsx index ab904d7ff..dc9e4b70d 100644 --- a/src/components/StarterPack/StarterPackCard.tsx +++ b/src/components/StarterPack/StarterPackCard.tsx @@ -1,15 +1,20 @@ import React from 'react' import {View} from 'react-native' +import {Image} from 'expo-image' import {AppBskyGraphStarterpack, AtUri} from '@atproto/api' import {StarterPackViewBasic} from '@atproto/api/dist/client/types/app/bsky/graph/defs' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' +import {useQueryClient} from '@tanstack/react-query' import {sanitizeHandle} from 'lib/strings/handles' +import {getStarterPackOgCard} from 'lib/strings/starter-pack' +import {precacheResolvedUri} from 'state/queries/resolve-uri' +import {precacheStarterPack} from 'state/queries/starter-packs' import {useSession} from 'state/session' import {atoms as a, useTheme} from '#/alf' import {StarterPack} from '#/components/icons/StarterPack' -import {Link as InternalLink, LinkProps} from '#/components/Link' +import {BaseLink} from '#/components/Link' import {Text} from '#/components/Typography' export function Default({starterPack}: {starterPack?: StarterPackViewBasic}) { @@ -88,10 +93,13 @@ export function Card({ export function Link({ starterPack, children, - ...rest }: { starterPack: StarterPackViewBasic -} & Omit<LinkProps, 'to'>) { + onPress?: () => void + children: React.ReactNode +}) { + const {_} = useLingui() + const queryClient = useQueryClient() const {record} = starterPack const {rkey, handleOrDid} = React.useMemo(() => { const rkey = new AtUri(starterPack.uri).rkey @@ -104,14 +112,46 @@ export function Link({ } return ( - <InternalLink - label={record.name} - {...rest} - to={{ - screen: 'StarterPack', - params: {name: handleOrDid, rkey}, + <BaseLink + action="push" + to={`/starter-pack/${handleOrDid}/${rkey}`} + label={_(msg`Navigate to ${record.name}`)} + onPress={() => { + precacheResolvedUri( + queryClient, + starterPack.creator.handle, + starterPack.creator.did, + ) + precacheStarterPack(queryClient, starterPack) }}> {children} - </InternalLink> + </BaseLink> + ) +} + +export function Embed({starterPack}: {starterPack: StarterPackViewBasic}) { + const t = useTheme() + const imageUri = getStarterPackOgCard(starterPack) + + return ( + <View + style={[ + a.mt_xs, + a.border, + a.rounded_sm, + a.overflow_hidden, + t.atoms.border_contrast_low, + ]}> + <Link starterPack={starterPack}> + <Image + source={imageUri} + style={[a.w_full, {aspectRatio: 1.91}]} + accessibilityIgnoresInvertColors={true} + /> + <View style={[a.px_sm, a.py_md]}> + <Card starterPack={starterPack} /> + </View> + </Link> + </View> ) } |