1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-11 20:01:10 +00:00

[add] add file chooser modes and fix share text page (#2947)

This commit is contained in:
Michael An
2019-02-19 15:14:50 +08:00
committed by Daniel Pan
parent 0db20b41a9
commit 89b23ed3fe
6 changed files with 62 additions and 23 deletions

View File

@@ -95,6 +95,7 @@ class AddRelatedFileDialog extends React.Component {
repoID={this.props.repoID} repoID={this.props.repoID}
onDirentItemClick={this.onDirentItemClick} onDirentItemClick={this.onDirentItemClick}
onRepoItemClick={this.onRepoItemClick} onRepoItemClick={this.onRepoItemClick}
mode="current_repo_and_other_repos"
/> />
{this.state.errMessage && <Alert color="danger">{this.state.errMessage}</Alert>} {this.state.errMessage && <Alert color="danger">{this.state.errMessage}</Alert>}
</ModalBody> </ModalBody>

View File

@@ -164,6 +164,7 @@ class CopyDirent extends React.Component {
repoID={this.props.repoID} repoID={this.props.repoID}
onDirentItemClick={this.onDirentItemClick} onDirentItemClick={this.onDirentItemClick}
onRepoItemClick={this.onRepoItemClick} onRepoItemClick={this.onRepoItemClick}
mode="current_repo_and_other_repos"
/> />
{this.state.errMessage && <Alert color="danger" style={{margin: '0.5rem'}}>{this.state.errMessage}</Alert>} {this.state.errMessage && <Alert color="danger" style={{margin: '0.5rem'}}>{this.state.errMessage}</Alert>}
</ModalBody> </ModalBody>

View File

@@ -164,6 +164,7 @@ class MoveDirent extends React.Component {
repoID={this.props.repoID} repoID={this.props.repoID}
onDirentItemClick={this.onDirentItemClick} onDirentItemClick={this.onDirentItemClick}
onRepoItemClick={this.onRepoItemClick} onRepoItemClick={this.onRepoItemClick}
mode="current_repo_and_other_repos"
/> />
{this.state.errMessage && <Alert color="danger" style={{margin: '0.5rem'}}>{this.state.errMessage}</Alert>} {this.state.errMessage && <Alert color="danger" style={{margin: '0.5rem'}}>{this.state.errMessage}</Alert>}
</ModalBody> </ModalBody>

View File

@@ -6,7 +6,6 @@ import { seafileAPI } from '../../utils/seafile-api';
import FileChooser from '../file-chooser/file-chooser'; import FileChooser from '../file-chooser/file-chooser';
const propTypes = { const propTypes = {
repoID: PropTypes.string.isRequired,
sharedToken: PropTypes.string.isRequired, sharedToken: PropTypes.string.isRequired,
toggleCancel: PropTypes.func.isRequired, toggleCancel: PropTypes.func.isRequired,
handleSaveSharedFile: PropTypes.func.isRequired, handleSaveSharedFile: PropTypes.func.isRequired,
@@ -51,14 +50,23 @@ class SaveSharedFileDialog extends React.Component {
} }
} }
onRepoItemClick = (repo) => {
this.setState({
repo: repo,
selectedPath: '/',
});
}
render() { render() {
return ( return (
<Modal isOpen={true} className="sf-save-file"> <Modal isOpen={true} className="sf-save-file">
<ModalHeader toggle={this.props.toggleCancel}>{gettext('Select Folder')}</ModalHeader> <ModalHeader toggle={this.props.toggleCancel}>{gettext('Save to:')}</ModalHeader>
<ModalBody> <ModalBody>
<FileChooser <FileChooser
isShowFile={false} isShowFile={false}
onDirentItemClick={this.onDirentItemClick} onDirentItemClick={this.onDirentItemClick}
onRepoItemClick={this.onRepoItemClick}
mode="only_all_repos"
/> />
{this.state.errMessage && <Alert color="danger">{this.state.errMessage}</Alert>} {this.state.errMessage && <Alert color="danger">{this.state.errMessage}</Alert>}
</ModalBody> </ModalBody>

View File

@@ -13,6 +13,7 @@ const propTypes = {
repoID: PropTypes.string, repoID: PropTypes.string,
onDirentItemClick: PropTypes.func, onDirentItemClick: PropTypes.func,
onRepoItemClick: PropTypes.func, onRepoItemClick: PropTypes.func,
mode: PropTypes.oneOf(['current_repo_and_other_repos', 'only_all_repos', 'only_current_library']),
}; };
class FileChooser extends React.Component { class FileChooser extends React.Component {
@@ -99,10 +100,11 @@ class FileChooser extends React.Component {
} }
render() { render() {
const mode = this.props.mode;
let libName = mode === 'current_repo_and_other_repos' ? gettext('Other Libraries') : gettext('Libraries');
return ( return (
<div className="file-chooser-container"> <div className="file-chooser-container">
{ {(mode === 'current_repo_and_other_repos' || mode === 'only_current_library') &&
this.props.repoID &&
<div className="list-view"> <div className="list-view">
<div className="list-view-header"> <div className="list-view-header">
<span className={`item-toggle fa ${this.state.isCurrentRepoShow ? 'fa-caret-down' : 'fa-caret-right'}`} onClick={this.onCurrentRepoToggle}></span> <span className={`item-toggle fa ${this.state.isCurrentRepoShow ? 'fa-caret-down' : 'fa-caret-right'}`} onClick={this.onCurrentRepoToggle}></span>
@@ -122,24 +124,26 @@ class FileChooser extends React.Component {
} }
</div> </div>
} }
<div className="list-view"> {mode !== 'only_current_library' &&
<div className="list-view-header"> <div className="list-view">
<span className={`item-toggle fa ${this.state.isOtherRepoShow ? 'fa-caret-down' : 'fa-caret-right'}`} onClick={this.onOtherRepoToggle}></span> <div className="list-view-header">
<span className="library">{gettext('Other Libraries')}</span> <span className={`item-toggle fa ${this.state.isOtherRepoShow ? 'fa-caret-down' : 'fa-caret-right'}`} onClick={this.onOtherRepoToggle}></span>
<span className="library">{libName}</span>
</div>
{
this.state.isOtherRepoShow &&
<RepoListView
initToShowChildren={false}
repoList={this.state.repoList}
selectedRepo={this.state.selectedRepo}
selectedPath={this.state.selectedPath}
onRepoItemClick={this.onRepoItemClick}
onDirentItemClick={this.onDirentItemClick}
isShowFile={this.props.isShowFile}
/>
}
</div> </div>
{ }
this.state.isOtherRepoShow &&
<RepoListView
initToShowChildren={false}
repoList={this.state.repoList}
selectedRepo={this.state.selectedRepo}
selectedPath={this.state.selectedPath}
onRepoItemClick={this.onRepoItemClick}
onDirentItemClick={this.onDirentItemClick}
isShowFile={this.props.isShowFile}
/>
}
</div>
</div> </div>
); );
} }

View File

@@ -5,6 +5,8 @@ import CodeMirror from 'react-codemirror';
import { Button } from 'reactstrap'; import { Button } from 'reactstrap';
import { Utils } from './utils/utils'; import { Utils } from './utils/utils';
import watermark from 'watermark-dom'; 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 { serviceURL, gettext, siteRoot, mediaUrl, logoPath, logoWidth, logoHeight, siteTitle } from './utils/constants';
import 'codemirror/lib/codemirror.css'; import 'codemirror/lib/codemirror.css';
@@ -42,6 +44,9 @@ class SharedFileViewText extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = {
showSaveSharedFileDialog: false,
};
} }
changeEncode = (e) => { 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() { render() {
return ( return (
<div className="shared-file-view-md"> <div className="shared-file-view-md">
@@ -94,7 +111,7 @@ class SharedFileViewText extends React.Component {
}{' '} }{' '}
{(trafficOverLimit === 'False') && {(trafficOverLimit === 'False') &&
<Button color="success" className="shared-file-op-btn"> <Button color="success" className="shared-file-op-btn">
<a href="?dl=1">{gettext('Download')}({Utils.bytesToSize(fileSize)})</a> <a href="?dl=1">{gettext('Download')}{' '}({Utils.bytesToSize(parseInt(fileSize))})</a>
</Button> </Button>
} }
</div> </div>
@@ -104,7 +121,14 @@ class SharedFileViewText extends React.Component {
{this.fileEncode()} {this.fileEncode()}
<div className="txt-view"> <div className="txt-view">
{ err ? <div className="file-view-tip error">{err}</div> : { err ? <div className="file-view-tip error">{err}</div> :
<CodeMirror ref="editor-sql" value={fileContent} options={options}/>} <CodeMirror ref="editor-sql" value={fileContent} options={options}/>}
{ this.state.showSaveSharedFileDialog &&
<SaveSharedFileDialog
sharedToken={sharedToken}
toggleCancel={this.handleSaveSharedFileDialog}
handleSaveSharedFile={this.saveFileSuccess}
/>
}
</div> </div>
</div> </div>
</div> </div>