import React from 'react'; import AsyncSelect from 'react-select/lib/Async'; import PropTypes from 'prop-types'; import { gettext } from '../../utils/constants'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Table } from 'reactstrap'; import { seafileAPI } from '../../utils/seafile-api.js'; import '../../css/manage-members-dialog.css'; const propTypes = { groupID: PropTypes.string.isRequired, toggleManageMembersDialog: PropTypes.func.isRequired, onGroupChanged: PropTypes.func.isRequired, isOwner: PropTypes.bool.isRequired, }; class ManageMembersDialog extends React.Component { constructor(props) { super(props); this.state = { groupMembers: [], selectedOption: null, errMessage: '', }; this.options = []; } handleSelectChange = (option) => { this.setState({ selectedOption: option, errMessage: '', }); this.options = []; } loadOptions = (value, callback) => { if (value.trim().length > 0) { seafileAPI.searchUsers(value.trim()).then((res) => { this.options = []; for (let i = 0 ; i < res.data.users.length; i++) { let obj = {}; obj.value = res.data.users[i].name; obj.email = res.data.users[i].email; obj.label = {res.data.users[i].name} ; this.options.push(obj); } callback(this.options); }); } } addGroupMember = () => { if (this.state.selectedOption && this.state.selectedOption.email) { this.refs.memberSelect.select.onChange([], { action: 'clear' }); seafileAPI.addGroupMember(this.props.groupID, this.state.selectedOption.email).then((res) => { this.listGroupMembers(); this.options = []; this.setState({ selectedOption: null, }); }).catch((error) => { if (error.response) { this.setState({ errMessage: error.response.data.error_msg }); } }); } } listGroupMembers = () => { seafileAPI.listGroupMembers(this.props.groupID).then((res) => { this.setState({ groupMembers: res.data }); }); } deleteMember = (name) => { seafileAPI.deleteGroupMember(this.props.groupID, name).then((res) => { this.listGroupMembers(); }); } toggle = () => { this.props.toggleManageMembersDialog(); } componentDidMount() { this.listGroupMembers(); } render() { return ( {gettext('Manage group members')}

{gettext('Add group member')}

{this.state.errMessage}
{ this.state.groupMembers.length > 0 && this.state.groupMembers.map((item, index = 0) => { return ( ); }) }
{gettext('Name')} {gettext('Role')}
{item.name} { ((this.props.isOwner === false) || (this.props.isOwner === true && item.role === 'Owner')) && {item.role} } { (this.props.isOwner === true && item.role !== 'Owner') && } { ((item.role !== 'Owner' && this.props.isOwner === true) || (item.role === 'Member' && this.props.isOwner === false)) && }
); } } ManageMembersDialog.propTypes = propTypes; const ChangeMemberAdminPropTypes = { item: PropTypes.object, listGroupMembers: PropTypes.func.isRequired, groupID: PropTypes.string.isRequired, isOwner: PropTypes.bool.isRequired, }; class ChangeMemberAdmin extends React.PureComponent { constructor(props) { super(props); this.state = { changeAdmin: false }; } toggleGroupAdmin = () => { this.setState({ changeAdmin: !this.state.changeAdmin }); } setGroupAdmin = (e) => { const isAdmin = e.target.value.indexOf('admin') > -1 ? 'true' : 'false'; const userName = e.target.value.split('-', 2)[1]; seafileAPI.setGroupAdmin(this.props.groupID, userName, isAdmin).then((res) => { this.props.listGroupMembers(); this.setState({ changeAdmin: false }); }); } render() { const item = this.props.item; const value = item.email; let options = item.role === 'Member' ? ( ): ( ); let admin = this.state.changeAdmin ? () : ({item.role} ); return( admin ); } } ChangeMemberAdmin.propTypes = ChangeMemberAdminPropTypes; export default ManageMembersDialog;