import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { Utils } from '../../utils/utils'; import { seafileAPI } from '../../utils/seafile-api'; import { siteRoot, isPro, gettext, appAvatarURL, enableSSOToThirdpartWebsite } from '../../utils/constants'; import toaster from '../toast'; const { isOrgContext, } = window.app.pageOptions; 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: '', enableSubscription: false, }; this.isFirstMounted = true; } componentDidUpdate(prevProps) { this.handleProps(); } 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; if (this.accountDOM && this.accountDOM.contains(e.target) && this.accountDOM !== e.target && (e.type !== 'keyup' || e.which === Utils.keyCodes.tab)) { return; } this.setState({ showInfo: !this.state.showInfo, }); }; onClickAccount = (e) => { e.preventDefault(); 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, enableSubscription: resp.data.enable_subscription, }); }).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; const { isAdminPanel = false } = this.props; if (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/info/`, text: gettext('Organization Admin') }; } else if (isPro && isInstAdmin) { data = { url: `${siteRoot}inst/useradmin/`, text: gettext('Institution Admin') }; } } return data && {data.text}; }; renderAvatar = () => { return ({gettext('Avatar')}); }; render() { return (
this.accountDOM = ref}> {this.renderAvatar()}
{this.renderAvatar()}
{this.state.userName}

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

{gettext('Settings')} {(this.state.enableSubscription && !isOrgContext) && {'付费管理'}} {this.renderMenu()} {enableSSOToThirdpartWebsite && {gettext('Customer Portal')}} {gettext('Log out')}
); } } Account.propTypes = propTypes; export default Account;