Bluesky app fork with some witchin' additions 馃挮 witchsky.app
bluesky fork client
119
fork

Configure Feed

Select the types of activity you want to include in your feed.

at a876aae44ea07494ebea9727350aa060b81f317b 69 lines 1.7 kB view raw
1import {type StyleProp, type TextStyle} from 'react-native' 2import {type AppBskyActorGetProfile} from '@atproto/api' 3 4import {makeProfileLink} from '#/lib/routes/links' 5import {sanitizeDisplayName} from '#/lib/strings/display-names' 6import {sanitizeHandle} from '#/lib/strings/handles' 7import {STALE} from '#/state/queries' 8import {useProfileQuery} from '#/state/queries/profile' 9import {atoms as a} from '#/alf' 10import {InlineLinkText} from '#/components/Link' 11import {Text} from '#/components/Typography' 12import {LoadingPlaceholder} from './LoadingPlaceholder' 13 14export function UserInfoText({ 15 did, 16 attr, 17 failed, 18 prefix, 19 style, 20}: { 21 did: string 22 attr?: keyof AppBskyActorGetProfile.OutputSchema 23 loading?: string 24 failed?: string 25 prefix?: string 26 style?: StyleProp<TextStyle> 27}) { 28 attr = attr || 'handle' 29 failed = failed || 'user' 30 31 const {data: profile, isError} = useProfileQuery({ 32 did, 33 staleTime: STALE.INFINITY, 34 }) 35 36 if (isError) { 37 return ( 38 <Text style={style} numberOfLines={1}> 39 {failed} 40 </Text> 41 ) 42 } else if (profile) { 43 const text = `${prefix || ''}${sanitizeDisplayName( 44 typeof profile[attr] === 'string' && profile[attr] 45 ? (profile[attr] as string) 46 : sanitizeHandle(profile.handle), 47 )}` 48 return ( 49 <InlineLinkText 50 label={text} 51 style={style} 52 numberOfLines={1} 53 to={makeProfileLink(profile)}> 54 <Text emoji style={style}> 55 {text} 56 </Text> 57 </InlineLinkText> 58 ) 59 } 60 61 // eslint-disable-next-line bsky-internal/avoid-unwrapped-text 62 return ( 63 <LoadingPlaceholder 64 width={80} 65 height={8} 66 style={[a.relative, {top: 1, left: 2}]} 67 /> 68 ) 69}