import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { Modal, ModalHeader, ModalBody } from 'reactstrap'; import moment from 'moment'; import { gettext, lang, trashReposExpireDays } from '../../utils/constants'; import { seafileAPI } from '../../utils/seafile-api'; import { Utils } from '../../utils/utils'; import toaster from '../../components/toast'; import Loading from '../../components/loading'; import EmptyTip from '../../components/empty-tip'; import '../../css/my-deleted-repos.css'; moment.locale(lang); class MyLibsDeleted extends Component { constructor(props) { super(props); this.state = { deletedRepoList: [], isLoading: true, }; } componentDidMount() { seafileAPI.listDeletedRepo().then(res => { this.setState({ deletedRepoList: res.data, isLoading: false, }); }).catch(error => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); } refreshDeletedRepoList = (repoID) => { let deletedRepoList = this.state.deletedRepoList.filter(item => { return item.repo_id !== repoID; }); this.setState({ deletedRepoList: deletedRepoList }); }; render() { const { deletedRepoList: repos } = this.state; return ( {gettext('Deleted Libraries')} {this.state.isLoading && } {(!this.state.isLoading && repos.length === 0) &&

{gettext('No deleted libraries')}

{gettext('You have not deleted any libraries in the last {placeholder} days. A deleted library will be cleaned automatically after this period.').replace('{placeholder}', trashReposExpireDays)}

} {repos.length !== 0 &&

{gettext('Tip: libraries deleted {placeholder} days ago will be cleaned automatically.').replace('{placeholder}', trashReposExpireDays)}

{repos.map((item) => { return ( ); })}
{/* img*/} {gettext('Name')} {gettext('Deleted Time')}
}
); } } class DeletedRepoItem extends Component { constructor(props) { super(props); this.state = { hideRestoreMenu: true, highlight: false, }; } onMouseEnter = () => { this.setState({ hideRestoreMenu: false, highlight: true, }); }; onMouseLeave = () => { this.setState({ hideRestoreMenu: true, highlight: false, }); }; restoreDeletedRepo = (e) => { e.preventDefault(); let repoID = this.props.repo.repo_id; let repoName = this.props.repo.repo_name; seafileAPI.restoreDeletedRepo(repoID).then(res => { let message = gettext('Successfully restored the library {library_name}.').replace('{library_name}', repoName); toaster.success(message); this.props.refreshDeletedRepoList(repoID); }).catch(error => { const errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); }; render() { let localTime = moment.utc(this.props.repo.del_time).toDate(); localTime = moment(localTime).fromNow(); let iconUrl = Utils.getLibIconUrl(this.props.repo); return ( {this.props.repo.repo_name} {localTime} ); } } DeletedRepoItem.propTypes = { repo: PropTypes.object.isRequired, refreshDeletedRepoList: PropTypes.func.isRequired, }; MyLibsDeleted.propTypes = { toggleDialog: PropTypes.func.isRequired }; export default MyLibsDeleted;