import React from 'react'; import PropTypes from 'prop-types'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { gettext, siteRoot, orgID, username } from '../../utils/constants'; import { seafileAPI } from '../../utils/seafile-api'; import Toast from '../../components/toast'; import UserStatusEditor from '../../components/select-editor/user-status-editor'; const propTypes = { currentTab: PropTypes.string, toggleRevokeAdmin: PropTypes.func, isItemFreezed: PropTypes.bool.isRequired, toggleDelete: PropTypes.func.isRequired, onFreezedItem: PropTypes.func.isRequired, onUnfreezedItem: PropTypes.func.isRequired, }; class UserItem extends React.Component { constructor(props) { super(props); this.state = { highlight: false, showMenu: false, currentStatus: this.props.user.is_active ? 'active' : 'inactive', isItemMenuShow: false }; this.statusArray = ['active', 'inactive']; } onMouseEnter = () => { if (!this.props.isItemFreezed) { this.setState({ showMenu: true, highlight: true, }); } } onMouseLeave = () => { if (!this.props.isItemFreezed) { this.setState({ showMenu: false, highlight: false }); } } toggleDelete = () => { const email = this.props.user.email; this.props.toggleDelete(email); } toggleResetPW = () => { const email = this.props.user.email; seafileAPI.resetOrgUserPassword(orgID, email).then(res => { let msg; msg = gettext('Successfully reset password to %(passwd)s for user %(user)s.'); msg = msg.replace('%(passwd)s', res.data.new_password); msg = msg.replace('%(user)s', email); Toast.success(msg); }); } toggleRevokeAdmin = () => { const email = this.props.user.email; this.props.toggleRevokeAdmin(email); } changeStatus = (st) => { let statusCode; if (st == 'active') { statusCode = 1; } else { statusCode = 0; } seafileAPI.changeOrgUserStatus(this.props.user.id, statusCode).then(res => { this.setState({ currentStatus: statusCode == 1 ? 'active' : 'inactive', highlight: false, showMenu: false, }); Toast.success(gettext('Edit succeeded.')); }).catch(err => { Toast.danger(gettext('Edit failed.')); }); } onDropdownToggleClick = (e) => { e.preventDefault(); this.toggleOperationMenu(e); } toggleOperationMenu = (e) => { e.stopPropagation(); this.setState( {isItemMenuShow: !this.state.isItemMenuShow }, () => { if (this.state.isItemMenuShow) { this.props.onFreezedItem(); } else { this.setState({ highlight: false, showMenu: false, }); this.props.onUnfreezedItem(); } } ); } render() { let { user, currentTab } = this.props; let href = siteRoot + 'org/useradmin/info/' + encodeURIComponent(user.email) + '/'; let isOperationMenuShow = (user.email !== username) && this.state.showMenu; let isEditIconShow = isOperationMenuShow; return ( {user.name} {user.quota ? user.self_usage + ' / ' + user.quota : user.self_usage} {user.ctime} / {user.last_login ? user.last_login : '--'} {isOperationMenuShow && ( {gettext('Delete')} {gettext('ResetPwd')} {currentTab == 'admins' && {gettext('Revoke Admin')}} )} ); } } UserItem.propTypes = propTypes; export default UserItem;