import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { Form, FormGroup, Input, Col } from 'reactstrap'; import { Utils } from '../../utils/utils'; import { seafileAPI } from '../../utils/seafile-api'; import { gettext, orgID } from '../../utils/constants'; import toaster from '../../components/toast'; import UserItem from './org-user-item'; import OrgUserInfo from '../../models/org-user'; class OrgUsersSearchUsersResult extends React.Component { constructor(props) { super(props); this.state = { isItemFreezed: false }; } onFreezedItem = () => { this.setState({isItemFreezed: true}); }; onUnfreezedItem = () => { this.setState({isItemFreezed: false}); }; render() { let { orgUsers, changeStatus } = this.props; return (
{orgUsers.map((item, index) => { return ( );})}
{gettext('Name')} {gettext('Status')} {gettext('Space Used')} / {gettext('Quota')} {gettext('Created At')} / {gettext('Last Login')} {/*Operations*/}
); } } OrgUsersSearchUsersResult.propTypes = { toggleDelete: PropTypes.func.isRequired, orgUsers: PropTypes.array.isRequired, changeStatus: PropTypes.func.isRequired, }; class OrgUsersSearchUsers extends Component { constructor(props) { super(props); this.state = { query: '', orgUsers: [], org_id: '', isSubmitBtnActive: false, loading: true, errorMsg: '', }; } componentDidMount () { let params = (new URL(document.location)).searchParams; this.setState({ query: params.get('query') || '', }, () => {this.getItems();}); } getItems = () => { seafileAPI.orgAdminSearchUser(orgID, this.state.query.trim()).then(res => { let userList = res.data.user_list.map(item => { return new OrgUserInfo(item); }); this.setState({ orgUsers: userList, loading: false, }); }).catch((error) => { this.setState({ loading: false, errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403 }); }); }; deleteUser = (email, username) => { seafileAPI.orgAdminDeleteOrgUser(orgID, email).then(res => { let newUserList = this.state.orgUsers.filter(item => { return item.email != email; }); this.setState({orgUsers: newUserList}); let msg = gettext('Deleted user %s'); msg = msg.replace('%s', username); toaster.success(msg); }).catch((error) => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); }; updateUser = (email, key, value) => { seafileAPI.sysAdminUpdateUser(email, key, value).then(res => { let newUserList = this.state.orgUsers.map(item => { if (item.email == email) { item[key]= res.data[key]; } return item; }); this.setState({orgUsers: newUserList}); const msg = (key == 'is_active' && value) ? res.data.update_status_tip : gettext('Edit succeeded'); toaster.success(msg); }).catch((error) => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); }; handleInputChange = (e) => { this.setState({ query: e.target.value }, this.checkSubmitBtnActive); }; checkSubmitBtnActive = () => { const { query } = this.state; this.setState({ isSubmitBtnActive: query.trim() }); }; handleKeyDown = (e) => { if (e.keyCode === 13) { const { isSubmitBtnActive } = this.state; if (isSubmitBtnActive) { this.getItems(); } } }; changeStatus = (email, isActive) => { seafileAPI.orgAdminChangeOrgUserStatus(orgID, email, isActive).then(res => { let users = this.state.orgUsers.map(item => { if (item.email == email) { item['is_active']= res.data['is_active']; } return item; }); this.setState({orgUsers: users}); toaster.success(gettext('Edit succeeded.')); }).catch(error => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); }; render() { const { query, isSubmitBtnActive } = this.state; return (

{gettext('Users')}

{gettext('Search Users')}

{gettext('Result')}

); } } export default OrgUsersSearchUsers;