From 8690ed2181bcfbf2d9e98c96fc9f1cde06ffbe19 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 11 Jul 2017 14:28:44 +0100 Subject: [PATCH] Make the category functions React components --- src/components/structures/GroupView.js | 115 ++++++++++++++++--------- 1 file changed, 74 insertions(+), 41 deletions(-) diff --git a/src/components/structures/GroupView.js b/src/components/structures/GroupView.js index 92ba36a18f..39cf5ece8f 100644 --- a/src/components/structures/GroupView.js +++ b/src/components/structures/GroupView.js @@ -23,33 +23,54 @@ import { sanitizedHtmlNode } from '../../HtmlUtils'; import { _t } from '../../languageHandler'; 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 roomNodes = rooms.map((r) => { - return ; - }); - let catHeader = null; - if (category && category.profile) { - catHeader =
{category.profile.name}
; - } - return
- {catHeader} - {roomNodes} -
; -} +const UserSummaryType = PropTypes.shape({ + summaryInfo: PropTypes.shape({ + user_id: PropTypes.string.isRequired, + }).isRequired, +}); + +const CategoryRoomList = React.createClass({ + displayName: 'CategoryRoomList', + + props: { + rooms: PropTypes.arrayOf(RoomSummaryType).isRequired, + categoryId: PropTypes.string, + category: PropTypes.shape({ + profile: PropTypes.shape({ + name: PropTypes.string, + }).isRequired, + }), + }, + + render: function() { + const roomNodes = this.props.rooms.map((r) => { + return ; + }); + let catHeader = null; + if (this.props.category && this.props.category.profile) { + catHeader =
{this.props.category.profile.name}
; + } + return
+ {catHeader} + {roomNodes} +
; + }, +}); const FeaturedRoom = React.createClass({ displayName: 'FeaturedRoom', props: { - summaryInfo: PropTypes.shape({ - room_id: PropTypes.string.isRequired, - profile: PropTypes.shape({ - name: PropTypes.string, - avatar_url: PropTypes.string, - canonical_alias: PropTypes.string, - }).isRequired, - }).isRequired, + summaryInfo: RoomSummaryType.isRequired, }, onClick: function(e) { @@ -89,27 +110,39 @@ const FeaturedRoom = React.createClass({ }, }); -function roleUserListNode(users, roleId, role) { - const userNodes = users.map((u) => { - return ; - }); - let roleHeader = null; - if (role && role.profile) { - roleHeader =
{role.profile.name}
; - } - return
- {roleHeader} - {userNodes} -
; -} +const RoleUserList = React.createClass({ + displayName: 'RoleUserList', + + props: { + users: PropTypes.arrayOf(UserSummaryType).isRequired, + roleId: PropTypes.string, + role: PropTypes.shape({ + profile: PropTypes.shape({ + name: PropTypes.string, + }).isRequired, + }), + }, + + render: function() { + const userNodes = this.props.users.map((u) => { + return ; + }); + let roleHeader = null; + if (this.props.role && this.props.role.profile) { + roleHeader =
{this.props.role.profile.name}
; + } + return
+ {roleHeader} + {userNodes} +
; + }, +}); const FeaturedUser = React.createClass({ displayName: 'FeaturedUser', props: { - summaryInfo: PropTypes.shape({ - user_id: PropTypes.string.isRequired, - }).isRequired, + summaryInfo: UserSummaryType.isRequired, }, onClick: function(e) { @@ -206,11 +239,11 @@ export default React.createClass({ let defaultCategoryNode = null; if (defaultCategoryRooms.length > 0) { - defaultCategoryNode = categoryRoomListNode(defaultCategoryRooms); + defaultCategoryNode = ; } const categoryRoomNodes = Object.keys(categoryRooms).map((catId) => { const cat = summary.rooms_section.categories[catId]; - return categoryRoomListNode(categoryRooms[catId], catId, cat); + return ; }); return
@@ -244,11 +277,11 @@ export default React.createClass({ let noRoleNode = null; if (noRoleUsers.length > 0) { - noRoleNode = roleUserListNode(noRoleUsers); + noRoleNode = ; } const roleUserNodes = Object.keys(roleUsers).map((roleId) => { const role = summary.users_section.roles[roleId]; - return roleUserListNode(roleUsers[roleId], roleId, role); + return ; }); return