import React from "react"; import classNames from "classnames"; import { type List } from "immutable"; import { type Account } from "flavours/glitch/types/resources"; import { autoPlayGif } from "../initial_state"; import { Skeleton } from "./skeleton"; interface Props { account?: Account, others?: List, localDomain?: string, inline?: boolean, } 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, inline } = 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} {inline ? " " : null} {suffix} ); } }