import React from 'react'; import type { List } from 'immutable'; import type { Account } from '../../types/resources'; import { autoPlayGif } from '../initial_state'; import { Skeleton } from './skeleton'; interface Props { account?: Account; others?: List; localDomain?: string; } export class DisplayName extends React.PureComponent { handleMouseEnter: React.ReactEventHandler = ({ currentTarget, }) => { if (autoPlayGif) { return; } const emojis = currentTarget.querySelectorAll('img.custom-emoji'); emojis.forEach((emoji) => { const originalSrc = emoji.getAttribute('data-original'); if (originalSrc != null) emoji.src = originalSrc; }); }; handleMouseLeave: React.ReactEventHandler = ({ currentTarget, }) => { if (autoPlayGif) { return; } const emojis = currentTarget.querySelectorAll('img.custom-emoji'); emojis.forEach((emoji) => { const staticSrc = emoji.getAttribute('data-static'); if (staticSrc != null) emoji.src = staticSrc; }); }; render() { const { others, localDomain } = this.props; let displayName: React.ReactNode, suffix: React.ReactNode, account: Account | undefined; if (others && others.size > 0) { account = others.first(); } else if (this.props.account) { account = this.props.account; } if (others && others.size > 1) { displayName = others .take(2) .map((a) => ( )) .reduce((prev, cur) => [prev, ', ', cur]); if (others.size - 2 > 0) { suffix = `+${others.size - 2}`; } } else if (account) { let acct = account.get('acct'); if (!acct.includes('@') && localDomain) { acct = `${acct}@${localDomain}`; } displayName = ( ); suffix = @{acct}; } else { displayName = ( ); suffix = ( ); } return ( {displayName} {suffix} ); } }