From 79462f5fd39c2f8a669ef5afbe460728e629ab46 Mon Sep 17 00:00:00 2001
From: shanshuirenjia <978987373@qq.com>
Date: Sun, 21 Apr 2019 16:27:20 +0800
Subject: [PATCH] package text-dropdown-menu for text-button dropdown menu
---
.../dropdown-menu/item-dropdown-menu.js | 3 +-
.../dropdown-menu/text-dropdown-menu.js | 105 ++++++++++++++++++
.../components/toolbar/view-file-toolbar.js | 36 +++---
3 files changed, 129 insertions(+), 15 deletions(-)
create mode 100644 frontend/src/components/dropdown-menu/text-dropdown-menu.js
diff --git a/frontend/src/components/dropdown-menu/item-dropdown-menu.js b/frontend/src/components/dropdown-menu/item-dropdown-menu.js
index dcf73818dd..c8988d9b1c 100644
--- a/frontend/src/components/dropdown-menu/item-dropdown-menu.js
+++ b/frontend/src/components/dropdown-menu/item-dropdown-menu.js
@@ -30,7 +30,6 @@ class ItemDropDownMenu extends React.Component {
menuList: [],
isItemMenuShow: false,
};
-
}
componentDidMount() {
@@ -96,7 +95,7 @@ class ItemDropDownMenu extends React.Component {
onMenuItemClick = (event) => {
let operation = event.target.dataset.toggle;
- this.props.onMenuItemClick(operation);
+ this.props.onMenuItemClick(operation, event);
}
render() {
diff --git a/frontend/src/components/dropdown-menu/text-dropdown-menu.js b/frontend/src/components/dropdown-menu/text-dropdown-menu.js
new file mode 100644
index 0000000000..2087ad55c3
--- /dev/null
+++ b/frontend/src/components/dropdown-menu/text-dropdown-menu.js
@@ -0,0 +1,105 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import listener from '../context-menu/globalEventListener';
+import { Dropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap';
+import { gettext } from '../../utils/constants';
+
+const propTypes = {
+ menuClass: PropTypes.string,
+ menuType: PropTypes.oneOf(['pc', 'mobile']),
+ menuChildren: PropTypes.string.isRequired,
+ menuList: PropTypes.array.isRequired,
+ isHandleContextMenuEvent: PropTypes.bool,
+ onMenuItemClick: PropTypes.func.isRequired,
+};
+
+class TextDropDownMenu extends React.Component {
+
+ static defaultProps = {
+ isHandleContextMenuEvent: true,
+ menuType: 'pc',
+ };
+
+ constructor(props) {
+ super(props);
+ this.state = {
+ isItemMenuShow: false,
+ };
+ }
+
+ componentDidMount() {
+ if (this.props.isHandleContextMenuEvent) {
+ this.listenerId = listener.register(this.onShowMenu, this.onHideMenu);
+ }
+ }
+
+ componentWillUnmount() {
+ if (this.props.isHandleContextMenuEvent && this.listenerId) {
+ listener.unregister(this.listenerId);
+ }
+ }
+
+ onShowMenu = () => {
+ // nothing todo
+ }
+
+ onHideMenu = () => {
+ if (this.state.isItemMenuShow) {
+ this.setState({isItemMenuShow: false});
+ }
+ }
+
+ onDropdownToggleClick = (e) => {
+ e.preventDefault();
+ e.stopPropagation();
+
+ this.toggleOperationMenu();
+ }
+
+ toggleOperationMenu = () => {
+ this.setState({isItemMenuShow: !this.state.isItemMenuShow});
+ }
+
+ onMenuItemClick = (event) => {
+ let operation = event.target.dataset.toggle;
+ this.props.onMenuItemClick(operation, event);
+ }
+
+ render() {
+ let { menuClass, menuChildren, menuList } = this.props;
+ menuClass = 'btn btn-secondary operation-item ' + menuClass;
+
+ if (!menuList.length) {
+ return '';
+ }
+
+ return (
+
+
+ {menuChildren}
+
+
+ {menuList.map((menuItem, index) => {
+ if (menuItem === 'Divider') {
+ return ;
+ } else {
+ return (
+ {menuItem.value}
+ );
+ }
+ })}
+
+
+ );
+ }
+}
+
+TextDropDownMenu.propTypes = propTypes;
+
+export default TextDropDownMenu;
diff --git a/frontend/src/components/toolbar/view-file-toolbar.js b/frontend/src/components/toolbar/view-file-toolbar.js
index f636d6e557..1809fb7404 100644
--- a/frontend/src/components/toolbar/view-file-toolbar.js
+++ b/frontend/src/components/toolbar/view-file-toolbar.js
@@ -4,10 +4,12 @@ import { DropdownToggle, Dropdown, DropdownMenu, DropdownItem, Tooltip} from 're
import { Utils } from '../../utils/utils';
import { gettext, siteRoot } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api';
+import TextTranslation from '../../utils/text-translation';
import ModalPotal from '../modal-portal';
import ShareDialog from '../dialog/share-dialog';
import EditFileTagDialog from '../dialog/edit-filetag-dialog';
import RelatedFileDialogs from '../dialog/related-file-dialogs';
+import TextDropDownMenu from '../dropdown-menu/text-dropdown-menu';
const propTypes = {
path: PropTypes.string.isRequired,
@@ -31,7 +33,6 @@ class ViewFileToolbar extends React.Component {
super(props);
this.state = {
isDraftMessageShow: false,
- isMoreMenuShow: false,
isShareDialogShow: false,
isEditTagDialogShow: false,
isRelatedFileDialogShow: false,
@@ -58,8 +59,20 @@ class ViewFileToolbar extends React.Component {
this.setState({isDraftMessageShow: !this.state.isDraftMessageShow});
}
- toggleMore = () => {
- this.setState({isMoreMenuShow: !this.state.isMoreMenuShow});
+ onMenuItemClick = (operation) => {
+ switch (operation) {
+ case 'Share':
+ this.onShareToggle();
+ break;
+ case 'Tags':
+ this.onEditFileTagToggle();
+ break;
+ case 'Related Files':
+ this.onListRelatedFileToggle();
+ break;
+ default:
+ break;
+ }
}
onShareToggle = () => {
@@ -104,16 +117,13 @@ class ViewFileToolbar extends React.Component {
)}
{filePermission === 'rw' && (
-
-
- {gettext('More')}
-
-
- {gettext('Share')}
- {gettext('Tags')}
- {gettext('Related Files')}
-
-
+
)}
{this.state.isShareDialogShow && (