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 ();
};
render() {
return (
{gettext('Used:')}{' '}{this.state.quotaUsage} / {this.state.quotaTotal}