diff --git a/frontend/src/components/group-members.js b/frontend/src/components/group-members.js index 5092ce0555..3d5467a787 100644 --- a/frontend/src/components/group-members.js +++ b/frontend/src/components/group-members.js @@ -26,9 +26,9 @@ class GroupMembers extends React.Component { - + - + @@ -140,7 +140,7 @@ class Member extends React.PureComponent { return( - +
{gettext('Name')}{gettext('Role')}{gettext('Role')}
{item.name} {((isOwner === false) || (isOwner === true && item.role === 'Owner')) && diff --git a/frontend/src/css/group-view.css b/frontend/src/css/group-view.css index 49b5cb3827..d31de1937d 100644 --- a/frontend/src/css/group-view.css +++ b/frontend/src/css/group-view.css @@ -1,30 +1,3 @@ -#group-setting-popover, -#group-members-popover { - top: 42px; - right: 0; -} -.group-member-list-header { - border-bottom: 1px solid #e3e3e5; - padding-bottom: 10px; - margin-bottom: 0px; -} -.group-member-list { - max-height: 400px; - border-top: 0; - margin-top: 0; - padding-top: 0; -} -.group-member-list .user-item { - line-height: 2rem; -} -.group-member-list .user-item:hover { - background-color: #f8f8f8; -} -.group-member-list .user-item .group-member-name { - margin: 0 5px; - max-width: 70%; -} -.group-member-list .user-item .group-member-admin { - color: #888; - font-size: 12px; +.group-member:hover { + background: #f5f5f5; } diff --git a/frontend/src/css/groups.css b/frontend/src/css/groups.css index e56b0baa13..69189295ed 100644 --- a/frontend/src/css/groups.css +++ b/frontend/src/css/groups.css @@ -1,8 +1,3 @@ -.department-group-icon { - margin-left: 0.25rem; - color:#888; -} - .group-top-op-icon { /* for cur-view-path*/ display: inline-block; font-size: 22px; diff --git a/frontend/src/pages/groups/group-view.js b/frontend/src/pages/groups/group-view.js index 584a2f817c..377c82a4b1 100644 --- a/frontend/src/pages/groups/group-view.js +++ b/frontend/src/pages/groups/group-view.js @@ -10,9 +10,9 @@ import ModalPortal from '../../components/modal-portal'; import Group from '../../models/group'; import Repo from '../../models/repo'; import toaster from '../../components/toast'; -import OpIcon from '../../components/op-icon'; import CommonToolbar from '../../components/toolbar/common-toolbar'; import CreateRepoDialog from '../../components/dialog/create-repo-dialog'; +import GroupMembersDialog from '../../components/dialog/group-members-dialog'; import DismissGroupDialog from '../../components/dialog/dismiss-group-dialog'; import RenameGroupDialog from '../../components/dialog/rename-group-dialog'; import TransferGroupDialog from '../../components/dialog/transfer-group-dialog'; @@ -21,6 +21,7 @@ import ManageMembersDialog from '../../components/dialog/manage-members-dialog'; import LeaveGroupDialog from '../../components/dialog/leave-group-dialog'; import SharedRepoListView from '../../components/shared-repo-list-view/shared-repo-list-view'; import SortOptionsDialog from '../../components/dialog/sort-options'; +import SingleDropdownToolbar from '../../components/toolbar/single-dropdown-toolbar'; import '../../css/group-view.css'; @@ -63,6 +64,7 @@ class GroupView extends React.Component { showManageMembersDialog: false, groupMembers: [], isLeaveGroupDialogOpen: false, + isMembersDialogOpen: false }; } @@ -94,6 +96,7 @@ class GroupView extends React.Component { repoList: [] // empty it for the current group }, () => { this.loadRepos(this.state.currentPage); + this.listGroupMembers(); }); }).catch((error) => { this.setState({ @@ -257,12 +260,6 @@ class GroupView extends React.Component { this.setState({repoList: repoList}); }; - toggleGroupDropdown = () => { - this.setState({ - showGroupDropdown: !this.state.showGroupDropdown - }); - }; - toggleDismissGroupDialog = () => { this.setState({ showDismissGroupDialog: !this.state.showDismissGroupDialog, @@ -385,38 +382,57 @@ class GroupView extends React.Component { } }; - render() { - let { errMessage, emptyTip, currentGroup, isDepartmentGroup, isStaff } = this.state; - let isShowSettingIcon = false; - if (currentGroup) { // group message is loaded - if (currentGroup.parent_group_id === 0) { - isShowSettingIcon = true; - } else { - if (currentGroup.admins.indexOf(username) > -1) { - isShowSettingIcon = true; + toggleMembersDialog = () => { + this.setState({ + isMembersDialogOpen: !this.state.isMembersDialogOpen + }); + }; + + getOpList = () => { + const { currentGroup, isDepartmentGroup, isStaff, isOwner } = this.state; + const opList = []; + if ((!isDepartmentGroup && canAddRepo) || + (isDepartmentGroup && isStaff)) { + opList.push({'text': gettext('New Library'), 'onClick': this.onCreateRepoToggle}); + } + opList.push({'text': gettext('Members'), 'onClick': this.toggleMembersDialog}); + if (currentGroup) { + if (isStaff || isOwner) { + opList.push({'text': gettext('Rename'), 'onClick': this.toggleRenameGroupDialog}); + if (isOwner) { + opList.push({'text': gettext('Transfer'), 'onClick': this.toggleTransferGroupDialog}); + } + opList.push({'text': gettext('Import members'), 'onClick': this.toggleImportMembersDialog}); + opList.push({'text': gettext('Manage members'), 'onClick': this.toggleManageMembersDialog}); + if (isOwner) { + opList.push({'text': gettext('Delete group'), 'onClick': this.toggleDismissGroupDialog}); } } + + if (!isOwner && !isDepartmentGroup) { + opList.push({'text': gettext('Leave group'), 'onClick': this.toggleLeaveGroupDialog}); + } } + + return opList; + }; + + render() { + const { errMessage, emptyTip, currentGroup, isDepartmentGroup, + groupMembers, isMembersDialogOpen + } = this.state; + let useRate = 0; if (isDepartmentGroup && currentGroup.group_quota) { useRate = currentGroup.group_quota_usage / currentGroup.group_quota * 100 + '%'; } + + const opList = this.getOpList(); return (
- -
- {((!isDepartmentGroup && canAddRepo) || (isDepartmentGroup && isStaff)) && ( - Utils.isDesktop() ? ( - - ) : ( - - ) - )} -
+
@@ -425,101 +441,26 @@ class GroupView extends React.Component {
{currentGroup && ( -
+
+ {isDepartmentGroup && + + } {currentGroup.name} + +
+
{isDepartmentGroup && ( - - + <> {currentGroup.group_quota > 0 && - +
{Utils.bytesToSize(currentGroup.group_quota_usage)} / {Utils.bytesToSize(currentGroup.group_quota)}
- +
} -
+ )} -
-
- { isShowSettingIcon && - - - {this.state.showGroupDropdown && -
-
- {gettext('Settings')} - -
-
- {(this.state.isStaff || this.state.isOwner) && - - } - {(this.state.isStaff || this.state.isOwner) && - - } - { - this.state.isOwner && - - } - {/* gourp owner only can dissmiss group, admin could not quit, department member could not quit */} - {(!this.state.isOwner && !isDepartmentGroup) && - - } -
-
} -
- } - this.toggleGroupMembersPopover('open')}> - - {this.state.showGroupMembersPopover && -
-
- {gettext('Members')} - -
-
- -
-
} {(!Utils.isDesktop() && this.state.repoList.length > 0) && } {this.state.isSortOptionsDialogOpen && } + {isMembersDialogOpen && + + } {this.state.showRenameGroupDialog &&