import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types';
import { Link } from '@gatsbyjs/reach-router';
import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime';
import { Utils } from '../../../utils/utils';
import { systemAdminAPI } from '../../../utils/system-admin-api';
import { isPro, siteRoot, gettext } from '../../../utils/constants';
import EmptyTip from '../../../components/empty-tip';
import Loading from '../../../components/loading';
import MainPanelTopbar from '../main-panel-topbar';
import UserLink from '../user-link';
import Nav from './user-nav';
const { enableSysAdminViewRepo } = window.sysadmin.pageOptions;
dayjs.extend(relativeTime);
class Content extends Component {
render() {
const { loading, errorMsg, items } = this.props;
if (loading) {
return ;
} else if (errorMsg) {
return
{errorMsg}
;
} else {
const table = (
|
{gettext('Name')} |
{gettext('Share From')} |
{gettext('Size')} |
{gettext('Last Update')} |
{items.map((item, index) => {
return ( );
})}
);
return items.length ? table : ;
}
}
}
Content.propTypes = {
loading: PropTypes.bool.isRequired,
errorMsg: PropTypes.string.isRequired,
items: PropTypes.array.isRequired,
};
class Item extends Component {
renderRepoName = () => {
const { item } = this.props;
const repo = item;
if (repo.name) {
if (isPro && enableSysAdminViewRepo && !repo.encrypted) {
return {repo.name};
} else {
return repo.name;
}
} else {
return gettext('Broken ({repo_id_placeholder})')
.replace('{repo_id_placeholder}', repo.id);
}
};
getOwnerLink = () => {
let link;
const { item } = this.props;
const index = item.owner_email.indexOf('@seafile_group');
if (index == -1) {
link = ;
} else {
const groupID = item.owner_email.substring(0, index);
link = {item.owner_name};
}
return link;
};
render() {
const { item } = this.props;
const iconUrl = Utils.getLibIconUrl(item);
const iconTitle = Utils.getLibIconTitle(item);
return (
 |
{this.renderRepoName()} |
{this.getOwnerLink()} |
{Utils.bytesToSize(item.size)} |
{dayjs(item.last_modify).fromNow()} |
);
}
}
Item.propTypes = {
item: PropTypes.object.isRequired,
};
class Repos extends Component {
constructor(props) {
super(props);
this.state = {
loading: true,
errorMsg: '',
userInfo: {},
repoList: []
};
}
componentDidMount() {
const email = decodeURIComponent(this.props.email);
systemAdminAPI.sysAdminGetUser(email).then((res) => {
this.setState({
userInfo: res.data
});
});
systemAdminAPI.sysAdminListShareInRepos(email).then(res => {
this.setState({
loading: false,
repoList: res.data.repo_list
});
}).catch((error) => {
this.setState({
loading: false,
errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403
});
});
}
render() {
return (
);
}
}
Repos.propTypes = {
email: PropTypes.string,
};
export default Repos;