Skip to content

Commit 18e140b

Browse files
committed
chore: make PostUser more extensible
1 parent 593b9cf commit 18e140b

1 file changed

Lines changed: 51 additions & 23 deletions

File tree

framework/core/js/src/forum/components/PostUser.js

Lines changed: 51 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import avatar from '../../common/helpers/avatar';
66
import username from '../../common/helpers/username';
77
import userOnline from '../../common/helpers/userOnline';
88
import listItems from '../../common/helpers/listItems';
9+
import ItemList from '../../common/utils/ItemList';
910

1011
/**
1112
* The `PostUser` component shows the avatar and username of a post's author.
@@ -19,32 +20,59 @@ export default class PostUser extends Component {
1920
const post = this.attrs.post;
2021
const user = post.user();
2122

22-
if (!user) {
23-
return (
24-
<div className="PostUser">
25-
<h3 className="PostUser-name">
26-
{avatar(user, { className: 'PostUser-avatar' })} {username(user)}
27-
</h3>
28-
</div>
23+
const items = user ? this.userViewItems(user, post) : this.noUserViewItems(user);
24+
25+
return <div className="PostUser">{items.toArray()}</div>;
26+
}
27+
28+
noUserViewItems(user) {
29+
const items = new ItemList();
30+
31+
items.add(
32+
'postUser-name',
33+
<h3 className="PostUser-name">
34+
{avatar(user, { className: 'PostUser-avatar' })} {username(user)}
35+
</h3>,
36+
100
37+
);
38+
39+
return items;
40+
}
41+
42+
userViewItems(user, post) {
43+
const items = new ItemList();
44+
45+
items.add(
46+
'postUser-name',
47+
<h3 className="PostUser-name">
48+
<Link href={app.route.user(user)}>{this.linkChildren(user).toArray()}</Link>
49+
</h3>,
50+
100
51+
);
52+
53+
items.add('postUser-badges', <ul className="PostUser-badges badges">{listItems(user.badges().toArray())}</ul>, 90);
54+
55+
if (!post.isHidden() && this.attrs.cardVisible) {
56+
items.add(
57+
'postUser-card',
58+
<UserCard user={user} className="UserCard--popover" controlsButtonClassName="Button Button--icon Button--flat" />,
59+
80
2960
);
3061
}
3162

32-
return (
33-
<div className="PostUser">
34-
<h3 className="PostUser-name">
35-
<Link href={app.route.user(user)}>
36-
{avatar(user, { className: 'PostUser-avatar' })}
37-
{userOnline(user)}
38-
{username(user)}
39-
</Link>
40-
</h3>
41-
<ul className="PostUser-badges badges">{listItems(user.badges().toArray())}</ul>
42-
43-
{!post.isHidden() && this.attrs.cardVisible && (
44-
<UserCard user={user} className="UserCard--popover" controlsButtonClassName="Button Button--icon Button--flat" />
45-
)}
46-
</div>
47-
);
63+
return items;
64+
}
65+
66+
linkChildren(user) {
67+
const items = new ItemList();
68+
69+
items.add('avatar', avatar(user, { className: 'PostUser-avatar' }), 100);
70+
71+
items.add('userOnline', userOnline(user), 90);
72+
73+
items.add('username', username(user), 80);
74+
75+
return items;
4876
}
4977

5078
oncreate(vnode) {

0 commit comments

Comments
 (0)