Bluesky app fork with some witchin' additions 馃挮
at main 62 lines 1.8 kB view raw
1import {useCallback} from 'react' 2import {View} from 'react-native' 3import {type AppBskyActorDefs, type ModerationOpts} from '@atproto/api' 4import {msg} from '@lingui/core/macro' 5import {useLingui} from '@lingui/react' 6import {useQueryClient} from '@tanstack/react-query' 7 8import {makeProfileLink} from '#/lib/routes/links' 9import {unstableCacheProfileView} from '#/state/queries/unstable-profile-cache' 10import {atoms as a, useTheme} from '#/alf' 11import {Link} from '#/components/Link' 12import * as ProfileCard from '#/components/ProfileCard' 13 14export function SearchProfileCard({ 15 profile, 16 moderationOpts, 17 onPress: onPressInner, 18}: { 19 profile: AppBskyActorDefs.ProfileViewBasic 20 moderationOpts: ModerationOpts 21 onPress?: () => void 22}) { 23 const t = useTheme() 24 const {_} = useLingui() 25 const qc = useQueryClient() 26 27 const onPress = useCallback(() => { 28 unstableCacheProfileView(qc, profile) 29 onPressInner?.() 30 }, [qc, profile, onPressInner]) 31 32 return ( 33 <Link 34 testID={`searchAutoCompleteResult-${profile.handle}`} 35 to={makeProfileLink(profile)} 36 label={_(msg`View ${profile.handle}'s profile`)} 37 onPress={onPress}> 38 {({hovered, pressed}) => ( 39 <View 40 style={[ 41 a.flex_1, 42 a.px_md, 43 a.py_sm, 44 (hovered || pressed) && t.atoms.bg_contrast_25, 45 ]}> 46 <ProfileCard.Outer> 47 <ProfileCard.Header> 48 <ProfileCard.Avatar 49 profile={profile} 50 moderationOpts={moderationOpts} 51 /> 52 <ProfileCard.NameAndHandle 53 profile={profile} 54 moderationOpts={moderationOpts} 55 /> 56 </ProfileCard.Header> 57 </ProfileCard.Outer> 58 </View> 59 )} 60 </Link> 61 ) 62}