diff --git a/frontend/src/components/dialog/add-related-file-dialog.js b/frontend/src/components/dialog/add-related-file-dialog.js index 18d58de12c..1ba7cf1f07 100644 --- a/frontend/src/components/dialog/add-related-file-dialog.js +++ b/frontend/src/components/dialog/add-related-file-dialog.js @@ -95,6 +95,7 @@ class AddRelatedFileDialog extends React.Component { repoID={this.props.repoID} onDirentItemClick={this.onDirentItemClick} onRepoItemClick={this.onRepoItemClick} + mode="current_repo_and_other_repos" /> {this.state.errMessage && {this.state.errMessage}} diff --git a/frontend/src/components/dialog/copy-dirent-dialog.js b/frontend/src/components/dialog/copy-dirent-dialog.js index d5bffded6a..ec9a1c1b39 100644 --- a/frontend/src/components/dialog/copy-dirent-dialog.js +++ b/frontend/src/components/dialog/copy-dirent-dialog.js @@ -164,6 +164,7 @@ class CopyDirent extends React.Component { repoID={this.props.repoID} onDirentItemClick={this.onDirentItemClick} onRepoItemClick={this.onRepoItemClick} + mode="current_repo_and_other_repos" /> {this.state.errMessage && {this.state.errMessage}} diff --git a/frontend/src/components/dialog/move-dirent-dialog.js b/frontend/src/components/dialog/move-dirent-dialog.js index b7f40a3844..0703854feb 100644 --- a/frontend/src/components/dialog/move-dirent-dialog.js +++ b/frontend/src/components/dialog/move-dirent-dialog.js @@ -164,6 +164,7 @@ class MoveDirent extends React.Component { repoID={this.props.repoID} onDirentItemClick={this.onDirentItemClick} onRepoItemClick={this.onRepoItemClick} + mode="current_repo_and_other_repos" /> {this.state.errMessage && {this.state.errMessage}} diff --git a/frontend/src/components/dialog/save-shared-file-dialog.js b/frontend/src/components/dialog/save-shared-file-dialog.js index b9b3f78c29..44cf0fbb49 100644 --- a/frontend/src/components/dialog/save-shared-file-dialog.js +++ b/frontend/src/components/dialog/save-shared-file-dialog.js @@ -6,7 +6,6 @@ import { seafileAPI } from '../../utils/seafile-api'; import FileChooser from '../file-chooser/file-chooser'; const propTypes = { - repoID: PropTypes.string.isRequired, sharedToken: PropTypes.string.isRequired, toggleCancel: PropTypes.func.isRequired, handleSaveSharedFile: PropTypes.func.isRequired, @@ -51,14 +50,23 @@ class SaveSharedFileDialog extends React.Component { } } + onRepoItemClick = (repo) => { + this.setState({ + repo: repo, + selectedPath: '/', + }); + } + render() { return ( - {gettext('Select Folder')} + {gettext('Save to:')} {this.state.errMessage && {this.state.errMessage}} diff --git a/frontend/src/components/file-chooser/file-chooser.js b/frontend/src/components/file-chooser/file-chooser.js index 5f289ec730..db8f876efa 100644 --- a/frontend/src/components/file-chooser/file-chooser.js +++ b/frontend/src/components/file-chooser/file-chooser.js @@ -13,6 +13,7 @@ const propTypes = { repoID: PropTypes.string, onDirentItemClick: PropTypes.func, onRepoItemClick: PropTypes.func, + mode: PropTypes.oneOf(['current_repo_and_other_repos', 'only_all_repos', 'only_current_library']), }; class FileChooser extends React.Component { @@ -99,10 +100,11 @@ class FileChooser extends React.Component { } render() { + const mode = this.props.mode; + let libName = mode === 'current_repo_and_other_repos' ? gettext('Other Libraries') : gettext('Libraries'); return (
- { - this.props.repoID && + {(mode === 'current_repo_and_other_repos' || mode === 'only_current_library') &&
@@ -122,24 +124,26 @@ class FileChooser extends React.Component { }
} -
-
- - {gettext('Other Libraries')} + {mode !== 'only_current_library' && +
+
+ + {libName} +
+ { + this.state.isOtherRepoShow && + + }
- { - this.state.isOtherRepoShow && - - } -
+ }
); } diff --git a/frontend/src/shared-file-view-text.js b/frontend/src/shared-file-view-text.js index 9ddb298e9c..099c14e84f 100644 --- a/frontend/src/shared-file-view-text.js +++ b/frontend/src/shared-file-view-text.js @@ -5,6 +5,8 @@ import CodeMirror from 'react-codemirror'; import { Button } from 'reactstrap'; import { Utils } from './utils/utils'; import watermark from 'watermark-dom'; +import SaveSharedFileDialog from './components/dialog/save-shared-file-dialog'; +import toaster from './components/toast'; import { serviceURL, gettext, siteRoot, mediaUrl, logoPath, logoWidth, logoHeight, siteTitle } from './utils/constants'; import 'codemirror/lib/codemirror.css'; @@ -42,6 +44,9 @@ class SharedFileViewText extends React.Component { constructor(props) { super(props); + this.state = { + showSaveSharedFileDialog: false, + }; } changeEncode = (e) => { @@ -68,6 +73,18 @@ class SharedFileViewText extends React.Component { ); } + handleSaveSharedFileDialog = () => { + this.setState({ + showSaveSharedFileDialog: !this.state.showSaveSharedFileDialog + }); + } + + saveFileSuccess = () => { + let msg = gettext('Successfully saved {fileName}.'); + msg = msg.replace('{fileName}', fileName); + toaster.success(msg); + } + render() { return (
@@ -94,7 +111,7 @@ class SharedFileViewText extends React.Component { }{' '} {(trafficOverLimit === 'False') && }
@@ -104,7 +121,14 @@ class SharedFileViewText extends React.Component { {this.fileEncode()}
{ err ?
{err}
: - } + } + { this.state.showSaveSharedFileDialog && + + }