1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-03 16:10:26 +00:00
This commit is contained in:
Michael An
2019-03-05 21:22:29 +08:00
parent ad5c82ad41
commit 3e8b1d3e39
4 changed files with 47 additions and 6 deletions

View File

@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import { gettext } from '../../utils/constants'; import { gettext } from '../../utils/constants';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Table } from 'reactstrap'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Table } from 'reactstrap';
import { seafileAPI } from '../../utils/seafile-api.js'; import { seafileAPI } from '../../utils/seafile-api.js';
import RoleEditor from '../select-editor/role-eidtor'; import RoleEditor from '../select-editor/role-editor';
import UserSelect from '../user-select.js'; import UserSelect from '../user-select.js';
import '../../css/manage-members-dialog.css'; import '../../css/manage-members-dialog.css';
@@ -22,6 +22,7 @@ class ManageMembersDialog extends React.Component {
groupMembers: [], groupMembers: [],
selectedOption: null, selectedOption: null,
errMessage: [], errMessage: [],
isItemFreezed: false,
}; };
} }
@@ -63,6 +64,12 @@ class ManageMembersDialog extends React.Component {
this.listGroupMembers(); this.listGroupMembers();
} }
toggleItemFreezed = (isFreezed) => {
this.setState({
isItemFreezed: isFreezed
});
}
toggle = () => { toggle = () => {
this.props.toggleManageMembersDialog(); this.props.toggleManageMembersDialog();
} }
@@ -99,7 +106,7 @@ class ManageMembersDialog extends React.Component {
}) })
} }
<div className="manage-members"> <div className="manage-members">
<Table hover size="sm" className="manage-members-table"> <Table size="sm" className="manage-members-table">
<thead> <thead>
<tr> <tr>
<th width="15%"></th> <th width="15%"></th>
@@ -119,6 +126,8 @@ class ManageMembersDialog extends React.Component {
onGroupMembersChange={this.onGroupMembersChange} onGroupMembersChange={this.onGroupMembersChange}
groupID={this.props.groupID} groupID={this.props.groupID}
isOwner={this.props.isOwner} isOwner={this.props.isOwner}
isItemFreezed={this.state.isItemFreezed}
toggleItemFreezed={this.toggleItemFreezed}
/> />
</React.Fragment> </React.Fragment>
); );
@@ -150,6 +159,9 @@ class Member extends React.PureComponent {
constructor(props) { constructor(props) {
super(props); super(props);
this.roles = ['Admin', 'Member']; this.roles = ['Admin', 'Member'];
this.state = ({
highlight: false,
});
} }
onChangeUserRole = (role) => { onChangeUserRole = (role) => {
@@ -157,6 +169,9 @@ class Member extends React.PureComponent {
seafileAPI.setGroupAdmin(this.props.groupID, this.props.item.email, isAdmin).then((res) => { seafileAPI.setGroupAdmin(this.props.groupID, this.props.item.email, isAdmin).then((res) => {
this.props.onGroupMembersChange(); this.props.onGroupMembersChange();
}); });
this.setState({
highlight: false,
});
} }
deleteMember = (name) => { deleteMember = (name) => {
@@ -165,10 +180,25 @@ class Member extends React.PureComponent {
}); });
} }
handleMouseOver = () => {
if (this.props.isItemFreezed) return;
this.setState({
highlight: true,
});
}
handleMouseLeave = () => {
if (this.props.isItemFreezed) return;
this.setState({
highlight: false,
});
}
render() { render() {
const { item, isOwner } = this.props; const { item, isOwner } = this.props;
const deleteAuthority = (item.role !== 'Owner' && isOwner === true) || (item.role === 'Member' && isOwner === false);
return( return(
<tr> <tr onMouseOver={this.handleMouseOver} onMouseLeave={this.handleMouseLeave} className={this.state.highlight ? 'editing' : ''}>
<th scope="row"><img className="avatar" src={item.avatar_url} alt=""/></th> <th scope="row"><img className="avatar" src={item.avatar_url} alt=""/></th>
<td>{item.name}</td> <td>{item.name}</td>
<td> <td>
@@ -178,15 +208,16 @@ class Member extends React.PureComponent {
{(isOwner === true && item.role !== 'Owner') && {(isOwner === true && item.role !== 'Owner') &&
<RoleEditor <RoleEditor
isTextMode={true} isTextMode={true}
isEditIconShow={true} isEditIconShow={this.state.highlight}
currentRole={this.props.item.role} currentRole={item.role}
roles={this.roles} roles={this.roles}
onRoleChanged={this.onChangeUserRole} onRoleChanged={this.onChangeUserRole}
toggleItemFreezed={this.props.toggleItemFreezed}
/> />
} }
</td> </td>
<td> <td>
{((item.role !== 'Owner' && isOwner === true) || (item.role === 'Member' && isOwner === false)) && {(deleteAuthority && !this.props.isItemFreezed) &&
<i <i
className="fa fa-times delete-group-member-icon" className="fa fa-times delete-group-member-icon"
name={item.email} name={item.email}

View File

@@ -9,6 +9,7 @@ const propTypes = {
roles: PropTypes.array.isRequired, roles: PropTypes.array.isRequired,
currentRole: PropTypes.string.isRequired, currentRole: PropTypes.string.isRequired,
onRoleChanged: PropTypes.func.isRequired, onRoleChanged: PropTypes.func.isRequired,
toggleItemFreezed: PropTypes.func,
}; };
class RoleEditor extends React.Component { class RoleEditor extends React.Component {
@@ -32,6 +33,7 @@ class RoleEditor extends React.Component {
currentOption={this.props.currentRole} currentOption={this.props.currentRole}
onOptionChanged={this.props.onRoleChanged} onOptionChanged={this.props.onRoleChanged}
translateOption={this.translateRole} translateOption={this.translateRole}
toggleItemFreezed={this.props.toggleItemFreezed}
/> />
); );
} }

View File

@@ -12,6 +12,7 @@ const propTypes = {
translateOption: PropTypes.func.isRequired, translateOption: PropTypes.func.isRequired,
translateExplanation: PropTypes.func, translateExplanation: PropTypes.func,
onOptionChanged: PropTypes.func.isRequired, onOptionChanged: PropTypes.func.isRequired,
toggleItemFreezed: PropTypes.func,
}; };
class SelectEditor extends React.Component { class SelectEditor extends React.Component {
@@ -47,6 +48,7 @@ class SelectEditor extends React.Component {
onEditPermission = (e) => { onEditPermission = (e) => {
e.nativeEvent.stopImmediatePropagation(); e.nativeEvent.stopImmediatePropagation();
this.setState({isEditing: true}); this.setState({isEditing: true});
this.props.toggleItemFreezed && this.props.toggleItemFreezed(true);
} }
onOptionChanged = (e) => { onOptionChanged = (e) => {
@@ -55,6 +57,7 @@ class SelectEditor extends React.Component {
this.props.onOptionChanged(permission); this.props.onOptionChanged(permission);
} }
this.setState({isEditing: false}); this.setState({isEditing: false});
this.props.toggleItemFreezed && this.props.toggleItemFreezed(false);
} }
onSelectHandler = (e) => { onSelectHandler = (e) => {
@@ -63,6 +66,7 @@ class SelectEditor extends React.Component {
onHideSelect = () => { onHideSelect = () => {
this.setState({isEditing: false}); this.setState({isEditing: false});
this.props.toggleItemFreezed && this.props.toggleItemFreezed(false);
} }
render() { render() {

View File

@@ -22,6 +22,10 @@
opacity: 1; opacity: 1;
} }
.manage-members-table .editing {
background-color: rgba(0, 0, 0, 0.04);
}
.toggle-group-admin-icon:hover, .toggle-group-admin-icon:hover,
.delete-group-member-icon:hover { .delete-group-member-icon:hover {
color: #333; color: #333;