diff --git a/frontend/src/components/dialog/list-taggedfiles-dialog.js b/frontend/src/components/dialog/list-taggedfiles-dialog.js index 056647e170..6cce26eb56 100644 --- a/frontend/src/components/dialog/list-taggedfiles-dialog.js +++ b/frontend/src/components/dialog/list-taggedfiles-dialog.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import moment from 'moment'; @@ -12,8 +12,9 @@ const propTypes = { currentTag: PropTypes.object.isRequired, toggleCancel: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired, - updateUsedRepoTags: PropTypes.func.isRequired, + updateUsedRepoTags: PropTypes.func, onFileTagChanged: PropTypes.func, + shareLinkToken: PropTypes.string }; class ListTaggedFilesDialog extends React.Component { @@ -50,8 +51,11 @@ class ListTaggedFilesDialog extends React.Component { } getTaggedFiles = () => { - let { repoID, currentTag } = this.props; - seafileAPI.listTaggedFiles(repoID, currentTag.id).then(res => { + let { repoID, currentTag, shareLinkToken } = this.props; + let request = shareLinkToken ? + seafileAPI.getShareLinkTaggedFiles(shareLinkToken, currentTag.id) : + seafileAPI.listTaggedFiles(repoID, currentTag.id); + request.then(res => { let taggedFileList = []; res.data.tagged_files !== undefined && res.data.tagged_files.forEach(file => { @@ -90,6 +94,7 @@ class ListTaggedFilesDialog extends React.Component { repoID={this.props.repoID} taggedFile={taggedFile} onDeleteTaggedFile={this.onDeleteTaggedFile} + shareLinkToken={this.props.shareLinkToken} /> ); })} @@ -112,6 +117,7 @@ const TaggedFilePropTypes = { repoID: PropTypes.string.isRequired, taggedFile: PropTypes.object, onDeleteTaggedFile: PropTypes.func.isRequired, + shareLinkToken: PropTypes.string }; class TaggedFile extends React.Component { @@ -141,23 +147,32 @@ class TaggedFile extends React.Component { } render() { - const taggedFile = this.props.taggedFile; + const { taggedFile, shareLinkToken } = this.props; let className = this.state.active ? 'action-icon sf2-icon-x3' : 'action-icon vh sf2-icon-x3'; let path = taggedFile.parent_path ? Utils.joinPath(taggedFile.parent_path, taggedFile.filename) : ''; - let href = siteRoot + 'lib/' + this.props.repoID + '/file' + Utils.encodePath(path); - return ( taggedFile.file_deleted ? + let href = shareLinkToken ? + siteRoot + 'd/' + shareLinkToken + '/files/?p=' + Utils.encodePath(path) : + siteRoot + 'lib/' + this.props.repoID + '/file' + Utils.encodePath(path); + return ( - {taggedFile.filename}{' '} - {gettext('deleted')} + {taggedFile.file_deleted ? + + {taggedFile.filename}{' '} + {gettext('deleted')} + + + : + + {taggedFile.filename} + {Utils.bytesToSize(taggedFile.size)} + {moment.unix(taggedFile.mtime).fromNow()} + + } + + {!shareLinkToken && + + } - - - : - - {taggedFile.filename} - {Utils.bytesToSize(taggedFile.size)} - {moment.unix(taggedFile.mtime).fromNow()} - ); } diff --git a/frontend/src/components/repo-info-bar.js b/frontend/src/components/repo-info-bar.js index ff19ad8b08..f721797661 100644 --- a/frontend/src/components/repo-info-bar.js +++ b/frontend/src/components/repo-info-bar.js @@ -15,8 +15,10 @@ const propTypes = { usedRepoTags: PropTypes.array.isRequired, readmeMarkdown: PropTypes.object, draftCounts: PropTypes.number, - updateUsedRepoTags: PropTypes.func.isRequired, - onFileTagChanged: PropTypes.func.isRequired, + updateUsedRepoTags: PropTypes.func, + onFileTagChanged: PropTypes.func, + className: PropTypes.string, + shareLinkToken: PropTypes.string }; class RepoInfoBar extends React.Component { @@ -57,11 +59,20 @@ class RepoInfoBar extends React.Component { } render() { - let {repoID, currentPath, usedRepoTags, readmeMarkdown} = this.props; + let { repoID, currentPath, usedRepoTags, readmeMarkdown, draftCounts, className } = this.props; + + // to be compatible with the existing code + if (readmeMarkdown === undefined) { + readmeMarkdown = null; + } + if (draftCounts === undefined) { + draftCounts = 0; + } + let href = readmeMarkdown !== null ? siteRoot + 'lib/' + repoID + '/file' + Utils.joinPath(currentPath, readmeMarkdown.name) + '?mode=edit' : ''; let filePath = readmeMarkdown !== null ? currentPath + readmeMarkdown.name : ''; return ( -
+
{usedRepoTags.length > 0 && (