import Component from 'flarum/Component'; import humanTime from 'flarum/utils/humanTime'; import ItemList from 'flarum/utils/ItemList'; import UserControls from 'flarum/utils/UserControls'; import avatar from 'flarum/helpers/avatar'; import username from 'flarum/helpers/username'; import icon from 'flarum/helpers/icon'; import Dropdown from 'flarum/components/Dropdown'; import UserBio from 'flarum/components/UserBio'; import AvatarEditor from 'flarum/components/AvatarEditor'; import listItems from 'flarum/helpers/listItems'; /** * The `UserCard` component displays a user's profile card. This is used both on * the `UserPage` (in the hero) and in discussions, shown when hovering over a * post author. * * ### Props * * - `user` * - `className` * - `editable` * - `controlsButtonClassName` */ export default class UserCard extends Component { view() { const user = this.props.user; const controls = UserControls.controls(user, this).toArray(); const color = user.color(); const badges = user.badges().toArray(); return (
{controls.length ? Dropdown.component({ children: controls, className: 'UserCard-controls App-primaryControl', menuClassName: 'Dropdown-menu--right', buttonClassName: this.props.controlsButtonClassName, label: app.trans('core.user_controls_button'), icon: 'ellipsis-v' }) : ''}

{this.props.editable ? [AvatarEditor.component({user, className: 'UserCard-avatar'}), username(user)] : (
{avatar(user)}
{username(user)}
)}

{badges.length ? (
    {listItems(badges)}
) : ''}
    {listItems(this.infoItems().toArray())}
); } /** * Build an item list of tidbits of info to show on this user's profile. * * @return {ItemList} */ infoItems() { const items = new ItemList(); const user = this.props.user; const lastSeenTime = user.lastSeenTime(); items.add('bio', UserBio.component({ user, editable: this.props.editable }) ); if (lastSeenTime) { const online = user.isOnline(); items.add('lastSeen', ( {online ? [icon('circle'), ' ', app.trans('core.user_online_text')] : [icon('clock-o'), ' ', humanTime(lastSeenTime)]} )); } items.add('joined', app.trans('core.user_joined_date_text', {ago: humanTime(user.joinTime())})); return items; } }