████████ ███████
███████████████ ███████████████
██ Posts ██ Following ██ Followers
import './account.css'; import { useEffect, useState } from 'preact/hooks'; import emojifyText from '../utils/emojify-text'; import enhanceContent from '../utils/enhance-content'; import handleAccountLinks from '../utils/handle-account-links'; import shortenNumber from '../utils/shorten-number'; import store from '../utils/store'; import Avatar from './avatar'; import Icon from './icon'; import NameText from './name-text'; function Account({ account }) { const [uiState, setUIState] = useState('default'); const isString = typeof account === 'string'; const [info, setInfo] = useState(isString ? null : account); useEffect(() => { if (isString) { setUIState('loading'); (async () => { try { const info = await masto.v1.accounts.lookup({ acct: account, skip_webfinger: false, }); setInfo(info); setUIState('default'); } catch (e) { try { const result = await masto.v2.search({ q: account, type: 'accounts', limit: 1, resolve: true, }); if (result.accounts.length) { setInfo(result.accounts[0]); setUIState('default'); return; } alert('Account not found'); setUIState('error'); } catch (err) { alert(err); console.error(err); setUIState('error'); } } })(); } }, [account]); const { acct, avatar, avatarStatic, bot, createdAt, displayName, emojis, fields, followersCount, followingCount, group, header, headerStatic, id, lastStatusAt, locked, note, statusesCount, url, username, } = info || {}; const [relationshipUIState, setRelationshipUIState] = useState('default'); const [relationship, setRelationship] = useState(null); useEffect(() => { if (info) { const currentAccount = store.session.get('currentAccount'); if (currentAccount === id) { // It's myself! return; } setRelationshipUIState('loading'); (async () => { try { const relationships = await masto.v1.accounts.fetchRelationships([ id, ]); console.log('fetched relationship', relationships); if (relationships.length) { setRelationship(relationships[0]); } setRelationshipUIState('default'); } catch (e) { console.error(e); setRelationshipUIState('error'); } })(); } }, [info]); const { following, showingReblogs, notifying, followedBy, blocking, blockedBy, muting, mutingNotifications, requested, domainBlocking, endorsed, } = relationship || {}; return (
████████ ███████
███████████████ ███████████████
██ Posts ██ Following ██ Followers
{shortenNumber(statusesCount)}{' '} Posts {shortenNumber(followingCount)}{' '} Following {shortenNumber(followersCount)}{' '} Followers {!!createdAt && ( Joined:{' '} )}
{followedBy ? Following you : }{' '} {relationshipUIState !== 'loading' && relationship && ( )}