forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
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}