import React, {useState, useEffect} from 'react' import {AppBskyActorGetProfile as GetProfile} from '@atproto/api' import {StyleProp, StyleSheet, TextStyle} from 'react-native' import {DesktopWebTextLink} from './Link' import {Text} from './text/Text' import {LoadingPlaceholder} from './LoadingPlaceholder' import {useStores} from 'state/index' import {TypographyVariant} from 'lib/ThemeContext' export function UserInfoText({ type = 'md', did, attr, failed, prefix, style, }: { type?: TypographyVariant did: string attr?: keyof GetProfile.OutputSchema loading?: string failed?: string prefix?: string style?: StyleProp }) { attr = attr || 'handle' failed = failed || 'user' const store = useStores() const [profile, setProfile] = useState( undefined, ) const [didFail, setFailed] = useState(false) useEffect(() => { let aborted = false store.profiles.getProfile(did).then( v => { if (aborted) { return } setProfile(v.data) }, _err => { if (aborted) { return } setFailed(true) }, ) return () => { aborted = true } }, [did, store.profiles]) let inner if (didFail) { inner = ( {failed} ) } else if (profile) { inner = ( ) } else { inner = ( ) } return inner } const styles = StyleSheet.create({ loadingPlaceholder: {position: 'relative', top: 1, left: 2}, })