import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { Link } from '@gatsbyjs/reach-router'; import { Utils } from '../../../utils/utils'; import { seafileAPI } from '../../../utils/seafile-api'; import { gettext, siteRoot } from '../../../utils/constants'; import Loading from '../../../components/loading'; import toaster from '../../../components/toast'; import EmptyTip from '../../../components/empty-tip'; const itemPropTypes = { item: PropTypes.object.isRequired, deleteItem: PropTypes.func.isRequired }; class Item extends Component { constructor(props) { super(props); this.state = { isOperationShow: false }; } onMouseEnter = () => { this.setState({isOperationShow: true}); }; onMouseLeave = () => { this.setState({isOperationShow: false}); }; onDeleteLink = (e) => { e.preventDefault(); this.props.deleteItem(this.props.item); }; render() { let item = this.props.item; let path = item.path === '/' ? '/' : item.path.slice(0, item.path.length - 1); let objUrl = `${siteRoot}library/${item.repo_id}/${encodeURIComponent(item.repo_name)}${Utils.encodePath(path)}`; return ( {item.creator_name} {item.obj_name} {item.link} ); } } Item.propTypes = itemPropTypes; const propTypes = { repo: PropTypes.object.isRequired, }; class RepoShareAdminUploadLinks extends Component { constructor(props) { super(props); this.state = { loading: true, errorMsg: '', items: [], }; } componentDidMount() { seafileAPI.listRepoUploadLinks(this.props.repo.repo_id).then((res) => { this.setState({ loading: false, items: res.data, }); }).catch((error) => { this.setState({ loading: false, errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403 }); }); } deleteItem = (item) => { seafileAPI.deleteRepoUploadLink(this.props.repo.repo_id, item.token).then(() => { let items = this.state.items.filter(linkItem => { return linkItem.token !== item.token; }); this.setState({items: items}); let message = gettext('Successfully deleted 1 item'); toaster.success(message); }).catch((error) => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); } render() { const { loading, errorMsg, items } = this.state; return ( {loading && } {!loading && errorMsg &&

{errorMsg}

} {!loading && !errorMsg && !items.length &&

{gettext('No upload links')}

} {!loading && !errorMsg && items.length > 0 && {items.map((item, index) => { return ( ); })}
{gettext('Creator')} {gettext('Name')} {gettext('Link')}
}
); } } RepoShareAdminUploadLinks.propTypes = propTypes; export default RepoShareAdminUploadLinks;