diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 28fb3d1655..4534840ba8 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -5282,7 +5282,7 @@
},
"git-up": {
"version": "1.2.1",
- "resolved": "http://registry.npmjs.org/git-up/-/git-up-1.2.1.tgz",
+ "resolved": "https://registry.npmjs.org/git-up/-/git-up-1.2.1.tgz",
"integrity": "sha1-JkSAoAax2EJhrB/gmjpRacV+oZ0=",
"requires": {
"is-ssh": "^1.0.0",
@@ -5291,7 +5291,7 @@
},
"git-url-parse": {
"version": "5.0.1",
- "resolved": "http://registry.npmjs.org/git-url-parse/-/git-url-parse-5.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-5.0.1.tgz",
"integrity": "sha1-/j15xnRq4FBIz6UIyB553du6OEM=",
"requires": {
"git-up": "^1.0.0"
@@ -7844,7 +7844,7 @@
},
"node-status-codes": {
"version": "1.0.0",
- "resolved": "http://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
"integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8="
},
"noop6": {
@@ -8151,7 +8151,7 @@
},
"package.json": {
"version": "2.0.1",
- "resolved": "http://registry.npmjs.org/package.json/-/package.json-2.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/package.json/-/package.json-2.0.1.tgz",
"integrity": "sha1-+IYFnSpJ7QduZIg2ldc7K0bSHW0=",
"requires": {
"git-package-json": "^1.4.0",
@@ -8161,7 +8161,7 @@
"dependencies": {
"got": {
"version": "5.7.1",
- "resolved": "http://registry.npmjs.org/got/-/got-5.7.1.tgz",
+ "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz",
"integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=",
"requires": {
"create-error-class": "^3.0.1",
@@ -8183,7 +8183,7 @@
},
"package-json": {
"version": "2.4.0",
- "resolved": "http://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz",
"integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=",
"requires": {
"got": "^5.0.0",
@@ -10819,9 +10819,9 @@
}
},
"seafile-js": {
- "version": "0.2.57",
- "resolved": "https://registry.npmjs.org/seafile-js/-/seafile-js-0.2.57.tgz",
- "integrity": "sha512-LVZ63u9rp5UnKuifzlGb3DfHv9F5C/AANgii53cwHfcAJPI3Fws/dHQaWZU9c1kTjgf4e15lltQI+6ch4MKw0A==",
+ "version": "0.2.58",
+ "resolved": "https://registry.npmjs.org/seafile-js/-/seafile-js-0.2.58.tgz",
+ "integrity": "sha512-4/H5SLSZo4qBE3D9sdHyZqBtt3NZLEOhL+xSFcivE3lnCpITTaPaQZUl7Icx/PXHjD6CqIlM6EDKJgJz9m0BRA==",
"requires": {
"axios": "^0.18.0",
"form-data": "^2.3.2",
diff --git a/frontend/package.json b/frontend/package.json
index 852f0a44bd..8fb4f90d8e 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -32,7 +32,7 @@
"react-moment": "^0.7.9",
"react-select": "^2.1.1",
"reactstrap": "^6.4.0",
- "seafile-js": "^0.2.57",
+ "seafile-js": "^0.2.58",
"socket.io-client": "^2.2.0",
"sw-precache-webpack-plugin": "0.11.4",
"unified": "^7.0.0",
diff --git a/frontend/src/pages/repo-wiki-mode/main-panel.js b/frontend/src/pages/repo-wiki-mode/main-panel.js
index b5521941a4..429e5ed1d3 100644
--- a/frontend/src/pages/repo-wiki-mode/main-panel.js
+++ b/frontend/src/pages/repo-wiki-mode/main-panel.js
@@ -214,83 +214,81 @@ class MainPanel extends Component {
)}
- {!this.props.pathExist ?
- ErrMessage :
+ {!this.props.pathExist && ErrMessage }
+ {(this.props.pathExist && this.props.isViewFile) && (
+
+
+ {this.props.reviewStatus === 'open' &&
+
+ }
+ {(!this.props.isDraft && this.props.hasDraft && this.props.reviewStatus !== 'open') &&
+
+ }
+
+
+ )}
+ {(this.props.pathExist && !this.props.isViewFile) && (
- {this.props.isViewFile ?
-
-
- {this.props.reviewStatus === 'open' &&
-
- }
- {(!this.props.isDraft && this.props.hasDraft && this.props.reviewStatus !== 'open') &&
-
- }
-
- :
-
- {showRepoInfoBar && (
-
- )}
-
- this.uploader = uploader}
- dragAndDrop={true}
- path={this.props.path}
- repoID={repoID}
- direntList={this.props.direntList}
- onFileUploadSuccess={this.onFileUploadSuccess}
- />
-
- }
+ {showRepoInfoBar && (
+
+ )}
+
+ this.uploader = uploader}
+ dragAndDrop={true}
+ path={this.props.path}
+ repoID={repoID}
+ direntList={this.props.direntList}
+ onFileUploadSuccess={this.onFileUploadSuccess}
+ />
- }
+ )}
{this.state.isDirentDetailShow && (
diff --git a/frontend/src/pages/repo-wiki-mode/side-panel.js b/frontend/src/pages/repo-wiki-mode/side-panel.js
index d62d0a7b82..8cf4109f6a 100644
--- a/frontend/src/pages/repo-wiki-mode/side-panel.js
+++ b/frontend/src/pages/repo-wiki-mode/side-panel.js
@@ -1,9 +1,11 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
-import { gettext, siteRoot, logoPath, mediaUrl, siteTitle, logoWidth, logoHeight } from '../../utils/constants';
+import { gettext } from '../../utils/constants';
+import { Dropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap';
import TreeView from '../../components/tree-view/tree-view';
import NodeMenu from '../../components/tree-view/node-menu';
-import MenuControl from '../../components/menu-control';
+import Logo from '../../components/logo';
+import ModalPortal from '../../components/modal-portal';
import Delete from '../../components/dialog/delete-dialog';
import Rename from '../../components/dialog/rename-dialog';
import CreateFolder from '../../components/dialog/create-folder-dialog';
@@ -37,29 +39,29 @@ class SidePanel extends Component {
},
isLoadFailed: false,
isMenuIconShow: false,
- showDelete: false,
- showFile: false,
- showFolder: false,
- showRename: false,
- isFile: false
+ isHeaderMenuShow: false,
+ isDeleteDialogShow: false,
+ isAddFileDialogShow: false,
+ isAddFolderDialogShow: false,
+ isRenameDialogShow: false,
};
- this.searchedPath = null;
- }
-
- closeSide = () => {
- this.props.onCloseSide();
}
onMouseEnter = () => {
- this.setState({
- isMenuIconShow: true
- });
+ this.setState({isMenuIconShow: true});
}
onMouseLeave = () => {
- this.setState({
- isMenuIconShow: false
- });
+ this.setState({isMenuIconShow: false});
+ }
+
+ onDropdownToggleClick = (e) => {
+ e.preventDefault();
+ this.toggleOperationMenu();
+ }
+
+ toggleOperationMenu = () => {
+ this.setState({isHeaderMenuShow: !this.state.isHeaderMenuShow});
}
onNodeClick = (node) => {
@@ -79,19 +81,6 @@ class SidePanel extends Component {
});
}
- onHeadingMenuClick = (e) => {
- e.nativeEvent.stopImmediatePropagation();
- let node = this.props.treeData.root;
- let left = e.clientX - 8*16;
- let top = e.clientY + 10;
- let position = Object.assign({},this.state.menuPosition, {left: left, top: top});
- this.setState({
- isShowMenu: !this.state.isShowMenu,
- currentNode: node,
- menuPosition: position
- });
- }
-
onHideContextMenu = () => {
if (!this.state.isShowMenu) {
return;
@@ -102,44 +91,50 @@ class SidePanel extends Component {
});
}
- toggleAddFile = () => {
- this.setState({showFile: !this.state.showFile});
+ onAddFileToggle = () => {
+ this.setState({
+ isMenuIconShow: false,
+ isAddFileDialogShow: !this.state.isAddFileDialogShow
+ });
this.onHideContextMenu();
}
- toggleAddFolder = () => {
- this.setState({showFolder: !this.state.showFolder});
+ onAddFolderToggle = () => {
+ this.setState({
+ isMenuIconShow: false,
+ isAddFolderDialogShow: !this.state.isAddFolderDialogShow
+ });
this.onHideContextMenu();
}
- toggleRename = () => {
- this.setState({showRename: !this.state.showRename});
+ onRenameToggle = () => {
+ this.setState({isRenameDialogShow: !this.state.isRenameDialogShow});
this.onHideContextMenu();
}
- toggleDelete = () => {
- this.setState({showDelete: !this.state.showDelete});
+ onDeleteToggle = () => {
+ this.setState({isDeleteDialogShow: !this.state.isDeleteDialogShow});
this.onHideContextMenu();
}
onAddFolderNode = (dirPath) => {
- this.setState({showFolder: !this.state.showFolder});
+ this.setState({isAddFolderDialogShow: !this.state.isAddFolderDialogShow});
this.props.onAddFolderNode(dirPath);
}
onAddFileNode = (filePath, isDraft) => {
- this.setState({showFile: !this.state.showFile});
+ this.setState({isAddFileDialogShow: !this.state.isAddFileDialogShow});
this.props.onAddFileNode(filePath, isDraft);
}
onRenameNode = (newName) => {
- this.setState({showRename: !this.state.showRename});
+ this.setState({isRenameDialogShow: !this.state.isRenameDialogShow});
let node = this.state.currentNode;
this.props.onRenameNode(node, newName);
}
onDeleteNode = () => {
- this.setState({showDelete: !this.state.showDelete});
+ this.setState({isDeleteDialogShow: !this.state.isDeleteDialogShow});
let node = this.state.currentNode;
this.props.onDeleteNode(node);
}
@@ -157,97 +152,109 @@ class SidePanel extends Component {
}
addFolderCancel = () => {
- this.setState({showFolder: !this.state.showFolder});
+ this.setState({isAddFolderDialogShow: !this.state.isAddFolderDialogShow});
}
addFileCancel = () => {
- this.setState({showFile: !this.state.showFile});
+ this.setState({isAddFileDialogShow: !this.state.isAddFileDialogShow});
}
deleteCancel = () => {
- this.setState({showDelete: !this.state.showDelete});
+ this.setState({isDeleteDialogShow: !this.state.isDeleteDialogShow});
}
renameCancel = () => {
- this.setState({showRename: !this.state.showRename});
+ this.setState({isRenameDialogShow: !this.state.isRenameDialogShow});
}
render() {
return (
-
+
{gettext('Files')}
-
+ {this.state.isMenuIconShow && (
+
+
+
+ {gettext('New Folder')}
+ {gettext('New File')}
+
+
+ )}
- {this.props.treeData &&
-
- }
- {this.state.isShowMenu &&
-
- }
- {this.state.showDelete &&
+ {this.props.treeData && (
+
+ )}
+ {this.state.isShowMenu && (
+
+ )}
+
+
+ {this.state.isDeleteDialogShow && (
+
- }
- {this.state.showFile &&
+
+ )}
+ {this.state.isAddFileDialogShow && (
+
- }
- {this.state.showFolder &&
+
+ )}
+ {this.state.isAddFolderDialogShow && (
+
- }
- {this.state.showRename &&
+
+ )}
+ {this.state.isRenameDialogShow && (
+
- }
-
-
+
+ )}
);
}