import React, { Component, Fragment } from 'react'; import { Button } from 'reactstrap'; import { seafileAPI } from '../../utils/seafile-api'; import { gettext, isPro, isDefaultAdmin, seafileVersion } from '../../utils/constants'; import toaster from '../../components/toast'; import { Utils } from '../../utils/utils'; import Loading from '../../components/loading'; import MainPanelTopbar from './main-panel-topbar'; import '../../css/system-info.css'; class Info extends Component { constructor(props) { super(props); this.state = { loading: true, errorMsg: '', sysInfo: {} }; this.fileInput = React.createRef(); } componentDidMount () { seafileAPI.sysAdminGetSysInfo().then((res) => { this.setState({ loading: false, sysInfo: res.data }); }).catch((error) => { this.setState({ loading: false, errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403 }); }); } uploadLicenseFile = (e) => { // no file selected if (!this.fileInput.current.files.length) { return; } const file = this.fileInput.current.files[0]; seafileAPI.sysAdminUploadLicense(file).then((res) => { let info = this.state.sysInfo; Object.assign(info, res.data, {with_license: true}); this.setState({ sysInfo: info }); }).catch((error) => { let errMsg = Utils.getErrorMsg(error); toaster.danger(errMsg); }); }; openFileInput = () => { this.fileInput.current.click(); }; renderLicenseDescString = (license_mode, license_to, license_expiration) => { if (license_mode == 'life-time') { if (window.app.config.lang == 'zh-cn') { return '永久授权给 ' + license_to + ',技术支持服务至 ' + license_expiration + ' 到期'; } else { return gettext('licensed to {placeholder_license_to}, upgrade service expired in {placeholder_license_expiration}') .replace('{placeholder_license_to}', license_to).replace('{placeholder_license_expiration}', license_expiration); } } else { return gettext('licensed to {placeholder_license_to}, expires on {placeholder_license_expiration}') .replace('{placeholder_license_to}', license_to).replace('{placeholder_license_expiration}', license_expiration); } }; render() { let { license_mode, license_to, license_expiration, org_count, repos_count, total_files_count, total_storage, total_devices_count, current_connected_devices_count, license_maxusers, multi_tenancy_enabled, active_users_count, users_count, groups_count, with_license } = this.state.sysInfo; let { loading, errorMsg } = this.state; return (

{gettext('Info')}

{loading && } {errorMsg &&

{errorMsg}

} {(!loading && !errorMsg) &&
{gettext('System Info')}
{isPro ?
{gettext('Professional Edition')} {with_license && ' ' + this.renderLicenseDescString(license_mode, license_to, license_expiration) }
{isDefaultAdmin && }
:
{gettext('Community Edition')} {gettext('Upgrade to Pro Edition')}
}
{gettext('Version')}
{seafileVersion}
{gettext('Libraries')} / {gettext('Files')}
{repos_count} / {total_files_count}
{gettext('Storage Used')}
{Utils.bytesToSize(total_storage)}
{gettext('Total Devices')} / {gettext('Current Connected Devices')}
{total_devices_count} / {current_connected_devices_count}
{isPro ?
{gettext('Activated Users')} / {gettext('Total Users')} / {gettext('Limits')}
{active_users_count}{' / '}{users_count}{' / '}{with_license ? license_maxusers : '--'}
:
{gettext('Activated Users')} / {gettext('Total Users')}
{active_users_count} / {users_count}
}
{gettext('Groups')}
{groups_count}
{multi_tenancy_enabled &&
{gettext('Organizations')}
{org_count}
}
}
); } } export default Info;