Make the category functions React components
parent
222ca054c5
commit
8690ed2181
|
@ -23,33 +23,54 @@ import { sanitizedHtmlNode } from '../../HtmlUtils';
|
||||||
import { _t } from '../../languageHandler';
|
import { _t } from '../../languageHandler';
|
||||||
import AccessibleButton from '../views/elements/AccessibleButton';
|
import AccessibleButton from '../views/elements/AccessibleButton';
|
||||||
|
|
||||||
|
const RoomSummaryType = PropTypes.shape({
|
||||||
|
room_id: PropTypes.string.isRequired,
|
||||||
|
profile: PropTypes.shape({
|
||||||
|
name: PropTypes.string,
|
||||||
|
avatar_url: PropTypes.string,
|
||||||
|
canonical_alias: PropTypes.string,
|
||||||
|
}).isRequired
|
||||||
|
});
|
||||||
|
|
||||||
function categoryRoomListNode(rooms, categoryId, category) {
|
const UserSummaryType = PropTypes.shape({
|
||||||
const roomNodes = rooms.map((r) => {
|
summaryInfo: PropTypes.shape({
|
||||||
return <FeaturedRoom key={r.room_id} summaryInfo={r} />;
|
user_id: PropTypes.string.isRequired,
|
||||||
});
|
}).isRequired,
|
||||||
let catHeader = null;
|
});
|
||||||
if (category && category.profile) {
|
|
||||||
catHeader = <div className="mx_GroupView_featuredThings_category">{category.profile.name}</div>;
|
const CategoryRoomList = React.createClass({
|
||||||
}
|
displayName: 'CategoryRoomList',
|
||||||
return <div key={categoryId}>
|
|
||||||
{catHeader}
|
props: {
|
||||||
{roomNodes}
|
rooms: PropTypes.arrayOf(RoomSummaryType).isRequired,
|
||||||
</div>;
|
categoryId: PropTypes.string,
|
||||||
}
|
category: PropTypes.shape({
|
||||||
|
profile: PropTypes.shape({
|
||||||
|
name: PropTypes.string,
|
||||||
|
}).isRequired,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
|
||||||
|
render: function() {
|
||||||
|
const roomNodes = this.props.rooms.map((r) => {
|
||||||
|
return <FeaturedRoom key={r.room_id} summaryInfo={r} />;
|
||||||
|
});
|
||||||
|
let catHeader = null;
|
||||||
|
if (this.props.category && this.props.category.profile) {
|
||||||
|
catHeader = <div className="mx_GroupView_featuredThings_category">{this.props.category.profile.name}</div>;
|
||||||
|
}
|
||||||
|
return <div key={this.props.categoryId}>
|
||||||
|
{catHeader}
|
||||||
|
{roomNodes}
|
||||||
|
</div>;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const FeaturedRoom = React.createClass({
|
const FeaturedRoom = React.createClass({
|
||||||
displayName: 'FeaturedRoom',
|
displayName: 'FeaturedRoom',
|
||||||
|
|
||||||
props: {
|
props: {
|
||||||
summaryInfo: PropTypes.shape({
|
summaryInfo: RoomSummaryType.isRequired,
|
||||||
room_id: PropTypes.string.isRequired,
|
|
||||||
profile: PropTypes.shape({
|
|
||||||
name: PropTypes.string,
|
|
||||||
avatar_url: PropTypes.string,
|
|
||||||
canonical_alias: PropTypes.string,
|
|
||||||
}).isRequired,
|
|
||||||
}).isRequired,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
onClick: function(e) {
|
onClick: function(e) {
|
||||||
|
@ -89,27 +110,39 @@ const FeaturedRoom = React.createClass({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
function roleUserListNode(users, roleId, role) {
|
const RoleUserList = React.createClass({
|
||||||
const userNodes = users.map((u) => {
|
displayName: 'RoleUserList',
|
||||||
return <FeaturedUser key={u.user_id} summaryInfo={u} />;
|
|
||||||
});
|
props: {
|
||||||
let roleHeader = null;
|
users: PropTypes.arrayOf(UserSummaryType).isRequired,
|
||||||
if (role && role.profile) {
|
roleId: PropTypes.string,
|
||||||
roleHeader = <div className="mx_GroupView_featuredThings_category">{role.profile.name}</div>;
|
role: PropTypes.shape({
|
||||||
}
|
profile: PropTypes.shape({
|
||||||
return <div key={roleId}>
|
name: PropTypes.string,
|
||||||
{roleHeader}
|
}).isRequired,
|
||||||
{userNodes}
|
}),
|
||||||
</div>;
|
},
|
||||||
}
|
|
||||||
|
render: function() {
|
||||||
|
const userNodes = this.props.users.map((u) => {
|
||||||
|
return <FeaturedUser key={u.user_id} summaryInfo={u} />;
|
||||||
|
});
|
||||||
|
let roleHeader = null;
|
||||||
|
if (this.props.role && this.props.role.profile) {
|
||||||
|
roleHeader = <div className="mx_GroupView_featuredThings_category">{this.props.role.profile.name}</div>;
|
||||||
|
}
|
||||||
|
return <div key={this.props.roleId}>
|
||||||
|
{roleHeader}
|
||||||
|
{userNodes}
|
||||||
|
</div>;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const FeaturedUser = React.createClass({
|
const FeaturedUser = React.createClass({
|
||||||
displayName: 'FeaturedUser',
|
displayName: 'FeaturedUser',
|
||||||
|
|
||||||
props: {
|
props: {
|
||||||
summaryInfo: PropTypes.shape({
|
summaryInfo: UserSummaryType.isRequired,
|
||||||
user_id: PropTypes.string.isRequired,
|
|
||||||
}).isRequired,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
onClick: function(e) {
|
onClick: function(e) {
|
||||||
|
@ -206,11 +239,11 @@ export default React.createClass({
|
||||||
|
|
||||||
let defaultCategoryNode = null;
|
let defaultCategoryNode = null;
|
||||||
if (defaultCategoryRooms.length > 0) {
|
if (defaultCategoryRooms.length > 0) {
|
||||||
defaultCategoryNode = categoryRoomListNode(defaultCategoryRooms);
|
defaultCategoryNode = <CategoryRoomList rooms={defaultCategoryRooms} />;
|
||||||
}
|
}
|
||||||
const categoryRoomNodes = Object.keys(categoryRooms).map((catId) => {
|
const categoryRoomNodes = Object.keys(categoryRooms).map((catId) => {
|
||||||
const cat = summary.rooms_section.categories[catId];
|
const cat = summary.rooms_section.categories[catId];
|
||||||
return categoryRoomListNode(categoryRooms[catId], catId, cat);
|
return <CategoryRoomList rooms={categoryRooms[catId]} categoryId={catId} category={cat} />;
|
||||||
});
|
});
|
||||||
|
|
||||||
return <div className="mx_GroupView_featuredThings">
|
return <div className="mx_GroupView_featuredThings">
|
||||||
|
@ -244,11 +277,11 @@ export default React.createClass({
|
||||||
|
|
||||||
let noRoleNode = null;
|
let noRoleNode = null;
|
||||||
if (noRoleUsers.length > 0) {
|
if (noRoleUsers.length > 0) {
|
||||||
noRoleNode = roleUserListNode(noRoleUsers);
|
noRoleNode = <RoleUserList users={noRoleUsers} />;
|
||||||
}
|
}
|
||||||
const roleUserNodes = Object.keys(roleUsers).map((roleId) => {
|
const roleUserNodes = Object.keys(roleUsers).map((roleId) => {
|
||||||
const role = summary.users_section.roles[roleId];
|
const role = summary.users_section.roles[roleId];
|
||||||
return roleUserListNode(roleUsers[roleId], roleId, role);
|
return <RoleUserList users={roleUsers[roleId]} roleId={roleId} role={role} />;
|
||||||
});
|
});
|
||||||
|
|
||||||
return <div className="mx_GroupView_featuredThings">
|
return <div className="mx_GroupView_featuredThings">
|
||||||
|
|
Loading…
Reference in New Issue