diff --git a/framework/core/js/src/forum/components/PostUser.tsx b/framework/core/js/src/forum/components/PostUser.tsx index 2a091c8da8..f5f8394595 100644 --- a/framework/core/js/src/forum/components/PostUser.tsx +++ b/framework/core/js/src/forum/components/PostUser.tsx @@ -8,6 +8,8 @@ import Avatar from '../../common/components/Avatar'; import type Model from '../../common/Model'; import type Post from '../../common/models/Post'; import type User from '../../common/models/User'; +import ItemList from '../../common/utils/ItemList'; +import type Mithril from 'mithril'; export interface IPostUserAttrs extends ComponentAttrs { /** Can be a post or similar model like private message */ @@ -22,27 +24,53 @@ export default class PostUser -

- {username(user)} -

- - ); - } + const items = user ? this.userViewItems(user, post) : this.noUserViewItems(user, post); + + return
{items.toArray()}
; + } + + noUserViewItems(user: false | User | null, post: Post | (Model & { user: () => false | User | null })): ItemList { + const items = new ItemList(); + + items.add( + 'postUser-name', +

+ {username(user)} +

, + 100 + ); + + return items; + } + + userViewItems(user: User, post: Post | (Model & { user: () => false | User | null })): ItemList { + const items = new ItemList(); - return ( -
-

- - - {userOnline(user)} - {username(user)} - -

-
    {listItems(user.badges().toArray())}
-
+ items.add( + 'postUser-name', +

+ {this.linkChildren(user).toArray()} +

, + 100 ); + + items.add('postUser-badges',
    {listItems(user.badges().toArray())}
, 90); + + return items; + } + + linkChildren(user: User): ItemList { + const items = new ItemList(); + + items.add('avatar', , 100); + + const onlineIndicator = userOnline(user); + if (onlineIndicator !== null) { + items.add('userOnline', onlineIndicator, 90); + } + + items.add('username', username(user), 80); + + return items; } }