import React, { Component } from 'react'; import PropTypes from 'prop-types'; import ReactDOM from 'react-dom'; import { Utils } from '../../utils/utils'; import { seafileAPI } from '../../utils/seafile-api'; import { siteRoot, gettext, appAvatarURL } from '../../utils/constants'; import toaster from '../toast'; const propTypes = { isAdminPanel: PropTypes.bool, }; class Account extends Component { constructor(props) { super(props); this.state = { showInfo: false, userName: '', contactEmail: '', quotaUsage: '', quotaTotal: '', isStaff: false, isOrgStaff: false, usageRate: '', }; this.isFirstMounted = true; } componentDidUpdate(prevProps) { this.handleProps(); } getContainer = () => { return ReactDOM.findDOMNode(this); } handleProps = () => { if (this.state.showInfo) { this.addEvents(); } else { this.removeEvents(); } } addEvents = () => { ['click', 'touchstart', 'keyup'].forEach(event => document.addEventListener(event, this.handleDocumentClick, true) ); } removeEvents = () => { ['click', 'touchstart', 'keyup'].forEach(event => document.removeEventListener(event, this.handleDocumentClick, true) ); } handleDocumentClick = (e) => { if (e && (e.which === 3 || (e.type === 'keyup' && e.which !== Utils.keyCodes.tab))) return; const container = this.getContainer(); if (container.contains(e.target) && container !== e.target && (e.type !== 'keyup' || e.which === Utils.keyCodes.tab)) { return; } this.setState({ showInfo: !this.state.showInfo, }); } onClickAccount = () => { if (this.isFirstMounted) { seafileAPI.getAccountInfo().then(resp => { this.setState({ userName: resp.data.name, contactEmail: resp.data.email, usageRate: resp.data.space_usage, quotaUsage: Utils.bytesToSize(resp.data.usage), quotaTotal: Utils.bytesToSize(resp.data.total), isStaff: resp.data.is_staff, isInstAdmin: resp.data.is_inst_admin, isOrgStaff: resp.data.is_org_staff === 1 ? true : false, showInfo: !this.state.showInfo, }); }).catch(error => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); this.isFirstMounted = false; } else { this.setState({showInfo: !this.state.showInfo}); } } renderMenu = () => { let data; const { isStaff, isOrgStaff, isInstAdmin } = this.state; if (this.props.isAdminPanel) { if (isStaff) { data = { url: siteRoot, text: gettext('Exit System Admin') }; } else if (isOrgStaff) { data = { url: siteRoot, text: gettext('Exit Organization Admin') }; } else if (isInstAdmin) { data = { url: siteRoot, text: gettext('Exit Institution Admin') }; } } else { if (isStaff) { data = { url: `${siteRoot}sys/info/`, text: gettext('System Admin') }; } else if (isOrgStaff) { data = { url: `${siteRoot}org/useradmin/`, text: gettext('Organization Admin') }; } else if (isInstAdmin) { data = { url: `${siteRoot}inst/useradmin/`, text: gettext('Institution Admin') }; } } return data && {data.text}; } renderAvatar = () => { return ({gettext('Avatar')}); } render() { return (
{this.renderAvatar()}
{this.renderAvatar()}
{this.state.userName}

{gettext('Used:')}{' '}{this.state.quotaUsage} / {this.state.quotaTotal}

{gettext('Settings')} {this.renderMenu()} {gettext('Log out')}
); } } Account.defaultProps = { isAdminPanel: false }; Account.propTypes = propTypes; export default Account;