From 5b27dcc9a595d1fad83ffd1d8d0ac0614f685aa6 Mon Sep 17 00:00:00 2001
From: zxj96 <35951769+zxj96@users.noreply.github.com>
Date: Fri, 29 Mar 2019 10:36:34 +0800
Subject: [PATCH] Merge two components into one component (#3188)
* Merge two components into one component
* Simplified code
* Delete the use of setTimeout
---
.../components/dialog/related-file-dialogs.js | 71 +++++++++++++++
.../dirent-detail/detail-list-view.js | 70 ++++-----------
.../toolbar/mutilple-dir-operation-toolbar.js | 82 ++++++------------
.../components/toolbar/view-file-toolbar.js | 62 ++++---------
frontend/src/markdown-editor.js | 86 ++++++-------------
5 files changed, 156 insertions(+), 215 deletions(-)
create mode 100644 frontend/src/components/dialog/related-file-dialogs.js
diff --git a/frontend/src/components/dialog/related-file-dialogs.js b/frontend/src/components/dialog/related-file-dialogs.js
new file mode 100644
index 0000000000..9503a34fb5
--- /dev/null
+++ b/frontend/src/components/dialog/related-file-dialogs.js
@@ -0,0 +1,71 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { Modal } from 'reactstrap';
+import AddRelatedFileDialog from './add-related-file-dialog';
+import ListRelatedFileDialog from './list-related-file-dialog';
+import ModalPortal from '../modal-portal';
+
+const propTypes = {
+ repoID: PropTypes.string.isRequired,
+ filePath: PropTypes.string.isRequired,
+ toggleCancel: PropTypes.func.isRequired,
+ onRelatedFileChange: PropTypes.func.isRequired,
+ dirent: PropTypes.object.isRequired,
+ relatedFiles: PropTypes.array,
+ viewMode: PropTypes.oneOf(['list_related_file','add_related_file']).isRequired,
+};
+
+class RelatedFileDialogs extends React.Component {
+
+ constructor(props) {
+ super(props);
+ this.state = {
+ showListRelatedFileDialog: props.viewMode === 'list_related_file',
+ };
+ }
+
+ onAddRelatedFileToggle = () => {
+ this.setState({
+ showListRelatedFileDialog: false,
+ });
+ }
+
+ onCloseAddRelatedFileDialog = () => {
+ this.setState({
+ showListRelatedFileDialog: true,
+ });
+ }
+
+ render() {
+ return (
+
+
+ {this.state.showListRelatedFileDialog &&
+
+ }
+ {!this.state.showListRelatedFileDialog &&
+
+ }
+
+
+ )
+ }
+}
+
+RelatedFileDialogs.propTypes = propTypes;
+
+export default RelatedFileDialogs
\ No newline at end of file
diff --git a/frontend/src/components/dirent-detail/detail-list-view.js b/frontend/src/components/dirent-detail/detail-list-view.js
index 3a7dd8ba7b..701f7ddc6c 100644
--- a/frontend/src/components/dirent-detail/detail-list-view.js
+++ b/frontend/src/components/dirent-detail/detail-list-view.js
@@ -4,10 +4,8 @@ import moment from 'moment';
import { gettext, siteRoot } from '../../utils/constants';
import { Utils } from '../../utils/utils';
import EditFileTagDialog from '../dialog/edit-filetag-dialog';
-import ListRelatedFileDialog from '../dialog/list-related-file-dialog';
-import { Modal } from 'reactstrap';
import ModalPortal from '../modal-portal';
-import AddRelatedFileDialog from '../dialog/add-related-file-dialog';
+import RelatedFileDialogs from '../dialog/related-file-dialogs';
const propTypes = {
repoInfo: PropTypes.object.isRequired,
@@ -28,9 +26,7 @@ class DetailListView extends React.Component {
super(props);
this.state = {
isEditFileTagShow: false,
- isListRelatedFileShow: false,
- isAddRelatedFileShow: false,
- isRelatedFileDialogShow: false,
+ showRelatedFileDialog: false,
};
}
@@ -64,32 +60,15 @@ class DetailListView extends React.Component {
onListRelatedFileToggle = () => {
this.setState({
- isListRelatedFileShow: true,
- isRelatedFileDialogShow: true,
+ showRelatedFileDialog: true,
});
}
toggleCancel = () => {
this.setState({
- isListRelatedFileShow: false,
- isAddRelatedFileShow: false,
- isRelatedFileDialogShow: false,
+ showRelatedFileDialog: false,
});
}
-
- onCloseAddRelatedFileDialog = () => {
- this.setState({
- isListRelatedFileShow: true,
- isAddRelatedFileShow: false,
- });
- }
-
- onAddRelatedFileToggle = () => {
- this.setState({
- isListRelatedFileShow: false,
- isAddRelatedFileShow: true
- });
- }
render() {
let { direntType, direntDetail, fileTagList, relatedFiles } = this.props;
@@ -152,34 +131,19 @@ class DetailListView extends React.Component {
- { this.state.isRelatedFileDialogShow && (
-
-
- {
- this.state.isAddRelatedFileShow &&
-
- }
- {
- this.state.isListRelatedFileShow &&
-
- }
-
-
- )}
+ {this.state.showRelatedFileDialog &&
+
+
+
+ }
{
this.state.isEditFileTagShow &&
{
let filePath = this.getDirentPath(dirent);
seafileAPI.listRelatedFiles(this.props.repoID, filePath).then(res => {
- this.setState({
- relatedFiles: res.data.related_files,
- showLibContentViewDialogs: true,
- });
- if (res.data.related_files.length > 0) {
+ let relatedFiles = res.data.related_files;
+ if (relatedFiles.length > 0) {
this.setState({
- isRelatedFileDialogShow: true,
- showListRelatedFileDialog: true,
+ relatedFiles: relatedFiles,
+ showLibContentViewDialogs: true,
+ showRelatedFileDialog: true,
+ viewMode: 'list_related_file',
});
} else {
this.setState({
- isRelatedFileDialogShow: true,
- showAddRelatedFileDialog: true,
+ relatedFiles: relatedFiles,
+ showLibContentViewDialogs: true,
+ showRelatedFileDialog: true,
+ viewMode: 'add_related_file',
});
}
});
@@ -221,25 +220,7 @@ class MutipleDirOperationToolbar extends React.Component {
showLibContentViewDialogs: false,
showShareDialog: false,
showEditFileTagDialog: false,
- showAddRelatedFileDialog: false,
- showListRelatedFileDialog: false,
- isRelatedFileDialogShow: false,
- });
- }
-
- closeAddRelatedFileDialog = () => {
- this.setState({
- showLibContentViewDialogs: true,
- showAddRelatedFileDialog: false,
- showListRelatedFileDialog: true,
- });
- }
-
- addRelatedFileToggle = () => {
- this.setState({
- showLibContentViewDialogs: true,
- showAddRelatedFileDialog: true,
- showListRelatedFileDialog: false,
+ showRelatedFileDialog: false,
});
}
@@ -359,32 +340,19 @@ class MutipleDirOperationToolbar extends React.Component {
/>
}
- {this.state.isRelatedFileDialogShow && (
+ {this.state.showRelatedFileDialog &&
-
- {this.state.showListRelatedFileDialog &&
-
- }
- {this.state.showAddRelatedFileDialog &&
-
- }
-
+
- )}
+ }
)}
diff --git a/frontend/src/components/toolbar/view-file-toolbar.js b/frontend/src/components/toolbar/view-file-toolbar.js
index 42fc87b94b..9483552e7c 100644
--- a/frontend/src/components/toolbar/view-file-toolbar.js
+++ b/frontend/src/components/toolbar/view-file-toolbar.js
@@ -1,14 +1,13 @@
import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
-import { DropdownToggle, Dropdown, DropdownMenu, DropdownItem, Tooltip, Modal } from 'reactstrap';
+import { DropdownToggle, Dropdown, DropdownMenu, DropdownItem, Tooltip} from 'reactstrap';
import { Utils } from '../../utils/utils';
import { gettext, siteRoot } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api';
import ModalPotal from '../modal-portal';
import ShareDialog from '../dialog/share-dialog';
import EditFileTagDialog from '../dialog/edit-filetag-dialog';
-import ListRelatedFileDialog from '../dialog/list-related-file-dialog';
-import AddRelatedFileDialog from '../dialog/add-related-file-dialog';
+import RelatedFileDialogs from '../dialog/related-file-dialogs';
const propTypes = {
path: PropTypes.string.isRequired,
@@ -35,9 +34,8 @@ class ViewFileToolbar extends React.Component {
isMoreMenuShow: false,
isShareDialogShow: false,
isEditTagDialogShow: false,
- isListRelatedFileDialogShow: false,
- isAddRelatedFileDialogShow: false,
isRelatedFileDialogShow: false,
+ showRelatedFileDialog: false,
};
}
@@ -74,33 +72,18 @@ class ViewFileToolbar extends React.Component {
onListRelatedFileToggle = () => {
this.setState({
- isListRelatedFileDialogShow: true,
isRelatedFileDialogShow: true,
+ showRelatedFileDialog: true,
});
}
toggleCancel = () => {
this.setState({
- isListRelatedFileDialogShow: false,
- isAddRelatedFileDialogShow: false,
isRelatedFileDialogShow: false,
+ showRelatedFileDialog: false,
})
}
- onCloseAddRelatedFileDialog = () => {
- this.setState({
- isListRelatedFileDialogShow: true,
- isAddRelatedFileDialogShow: false,
- });
- }
-
- onAddRelatedFileToggle = () => {
- this.setState({
- isListRelatedFileDialogShow: false,
- isAddRelatedFileDialogShow: true,
- });
- }
-
render() {
let name = Utils.getFileName(this.props.path);
@@ -160,32 +143,19 @@ class ViewFileToolbar extends React.Component {
/>
)}
- {this.state.isRelatedFileDialogShow && (
+ {this.state.showRelatedFileDialog &&
-
- {this.state.isListRelatedFileDialogShow &&
-
- }
- {this.state.isAddRelatedFileDialogShow &&
-
- }
-
+
- )}
+ }
);
}
diff --git a/frontend/src/markdown-editor.js b/frontend/src/markdown-editor.js
index 66f0913725..ee130627ce 100644
--- a/frontend/src/markdown-editor.js
+++ b/frontend/src/markdown-editor.js
@@ -9,8 +9,7 @@ import io from 'socket.io-client';
import toaster from './components/toast';
import ModalPortal from './components/modal-portal';
import EditFileTagDialog from './components/dialog/edit-filetag-dialog';
-import ListRelatedFileDialog from './components/dialog/list-related-file-dialog';
-import AddRelatedFileDialog from './components/dialog/add-related-file-dialog';
+import RelatedFileDialogs from './components/dialog/related-file-dialogs';
import ShareDialog from './components/dialog/share-dialog';
import CommentDialog from './components/markdown-view/comment-dialog';
import InsertFileDialog from './components/dialog/insert-file-dialog';
@@ -23,7 +22,6 @@ import HistoryList from './components/markdown-view/history-list';
import CommentPanel from './components/file-view/comment-panel';
import OutlineView from './components/markdown-view/outline';
import Loading from './components/loading';
-import { Modal } from 'reactstrap';
import { findRange } from '@seafile/slate-react';
import './css/markdown-viewer/markdown-editor.css';
@@ -297,7 +295,6 @@ class MarkdownEditor extends React.Component {
localDraftDialog: false,
showRelatedFileDialog: false,
showEditFileTagDialog: false,
- showAddRelatedFileDialog: false,
showMarkdownEditorDialog: false,
showShareLinkDialog: false,
showCommentDialog: false,
@@ -311,7 +308,7 @@ class MarkdownEditor extends React.Component {
isShowComments: false,
isShowHistory: false,
isShowOutline: true,
- isRelatedFileDialogShow: false,
+ viewMode:'list_related_file',
};
if (this.state.collabServer) {
@@ -394,12 +391,10 @@ class MarkdownEditor extends React.Component {
this.setState({
showRelatedFileDialog: false,
showEditFileTagDialog: false,
- showAddRelatedFileDialog: false,
showMarkdownEditorDialog: false,
showShareLinkDialog: false,
showCommentDialog: false,
showInsertFileDialog: false,
- isRelatedFileDialogShow: false,
});
}
@@ -471,38 +466,24 @@ class MarkdownEditor extends React.Component {
this.timer = null;
}
- closeAddRelatedFileDialog = () => {
- this.setState({
- showAddRelatedFileDialog: false,
- showRelatedFileDialog: true,
- });
- }
-
- addRelatedFileToggle = () => {
- this.setState({
- showRelatedFileDialog: false,
- showAddRelatedFileDialog: true,
- });
- }
-
openDialogs = (option) => {
switch(option)
{
case 'related_files':
- if (this.state.relatedFiles.length > 0) {
- this.setState({
- showRelatedFileDialog: true,
- showMarkdownEditorDialog: true,
- isRelatedFileDialogShow: true,
- });
- }
- else {
- this.setState({
- showAddRelatedFileDialog: true,
- showMarkdownEditorDialog: true,
- isRelatedFileDialogShow: true,
- });
- }
+ if (this.state.relatedFiles.length > 0) {
+ this.setState({
+ showRelatedFileDialog: true,
+ showMarkdownEditorDialog: true,
+ viewMode: 'list_related_file',
+ });
+ }
+ else {
+ this.setState({
+ showRelatedFileDialog: true,
+ showMarkdownEditorDialog: true,
+ viewMode: 'add_related_file',
+ });
+ }
break;
case 'tags':
this.setState({
@@ -1116,32 +1097,19 @@ class MarkdownEditor extends React.Component {
/>
}
- {this.state.isRelatedFileDialogShow && (
+ {this.state.showRelatedFileDialog &&
-
- {this.state.showRelatedFileDialog &&
-
- }
- {this.state.showAddRelatedFileDialog &&
-
- }
-
+
- )}
+ }
{this.state.showInsertFileDialog &&