████████ ███████
███████████████ ███████████████
██ Posts ██ Following ██ Followers
import './account.css'; import { useEffect, useRef, useState } from 'preact/hooks'; import { useHotkeys } from 'react-hotkeys-hook'; import { api } from '../utils/api'; import emojifyText from '../utils/emojify-text'; import enhanceContent from '../utils/enhance-content'; import handleContentLinks from '../utils/handle-content-links'; import niceDateTime from '../utils/nice-date-time'; import shortenNumber from '../utils/shorten-number'; import states, { hideAllModals } from '../utils/states'; import store from '../utils/store'; import AccountBlock from './account-block'; import Avatar from './avatar'; import Icon from './icon'; import Link from './link'; function Account({ account, instance: propInstance, onClose }) { const { masto, instance, authenticated } = api({ instance: propInstance }); 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: authenticated, }); if (result.accounts.length) { setInfo(result.accounts[0]); setUIState('default'); return; } setInfo(null); setUIState('error'); } catch (err) { console.error(err); setInfo(null); setUIState('error'); } } })(); } else { setInfo(account); } }, [account]); const { acct, avatar, avatarStatic, bot, createdAt, displayName, emojis, fields, followersCount, followingCount, group, header, headerStatic, id, lastStatusAt, locked, note, statusesCount, url, username, } = info || {}; const escRef = useHotkeys('esc', onClose, [onClose]); return (
Unable to load account.
████████ ███████
███████████████ ███████████████
██ Posts ██ Following ██ Followers
{
hideAllModals();
}}
>
Posts
{shortenNumber(statusesCount)}
{' '}
Following
{shortenNumber(followingCount)}
{' '}
Followers
{shortenNumber(followersCount)}
{' '}
{!!createdAt && (
Joined
)}
Common followers{' '}
{familiarFollowers.map((follower) => (
{
e.preventDefault();
states.showAccount = {
account: follower,
instance,
};
}}
>
{followedBy ? Following you : }{' '} {relationshipUIState !== 'loading' && relationship && ( )}
> ); } export default Account;