ffr-components
Version:
Fiori styled UI components
138 lines (120 loc) • 4.01 kB
JavaScript
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
import _createClass from "@babel/runtime/helpers/esm/createClass";
import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
import _inherits from "@babel/runtime/helpers/esm/inherits";
// Import React Component
import React, { Component } from 'react';
// Import Customized Components
import Icon from '../icon';
import Button from '../button';
import Popover from '../popover';
import ListGroup from '../list-group'; // Import Utils
import { KeyCode, isClickedKey } from '../utils'; // Import Css
import './MenuButton.css';
var MenuButton =
/*#__PURE__*/
function (_Component) {
_inherits(MenuButton, _Component);
function MenuButton(props) {
var _this;
_classCallCheck(this, MenuButton);
_this = _possibleConstructorReturn(this, _getPrototypeOf(MenuButton).call(this, props));
_this.toggleMenu = function (expand) {
_this.expand = expand;
};
_this.groupControl = function (ref) {
if (ref) {
ref.children && ref.children[0] && ref.children[0].focus();
} else {
_this.menuBtnRef.current && _this.menuBtnRef.current.focus();
}
};
_this.handleKeyDown = function (e) {
if (!_this.expand) {
var onEdit = _this.props.onEdit;
var keyCode = e.keyCode;
if (isClickedKey(keyCode)) {
onEdit();
}
if (keyCode === KeyCode.DOWN) {
_this.downBtnRef.current.click();
}
}
};
_this.handleSelect = function (e, item) {
var keyCode = e.keyCode;
var onSelect = _this.props.onSelect;
var eventType = e.nativeEvent.type;
if (eventType === 'click' || isClickedKey(keyCode)) {
onSelect && onSelect(item);
}
};
_this.expand = false;
_this.menuBtnRef = React.createRef();
_this.downBtnRef = React.createRef();
return _this;
}
_createClass(MenuButton, [{
key: "render",
value: function render() {
var _this2 = this;
var _this$props = this.props,
itemList = _this$props.itemList,
onEdit = _this$props.onEdit;
return React.createElement("div", {
ref: this.menuBtnRef,
id: "menu-btn",
className: "ffr-menu-button",
role: "button",
tabIndex: "0",
onKeyDown: this.handleKeyDown
}, React.createElement(Button, {
tabIndex: "-1",
className: "toggle-edit",
glyph: "edit",
onClick: onEdit
}), React.createElement(Popover, {
placement: "bottom-end",
popperClassName: "ffr-menu-button-popper",
toggleMenu: this.toggleMenu,
body: React.createElement("div", {
className: "ffr-menu-button-operate"
}, React.createElement(ListGroup, {
innerRef: this.groupControl
}, itemList.map(function (item) {
return React.createElement(ListGroup.Item, {
key: item.id,
onClick: function onClick(e) {
_this2.handleSelect(e, item);
},
onKeyDown: function onKeyDown(e) {
_this2.handleSelect(e, item);
}
}, React.createElement("div", {
tabIndex: "0",
className: "ffr-menu-btn-operate",
role: "button"
}, item.glyph ? React.createElement(Icon, {
glyph: item.glyph,
size: "s"
}) : null, React.createElement("span", {
className: "text"
}, item.text)));
}))),
control: React.createElement(Button, {
tabIndex: "-1",
className: "toggle-drop",
glyph: "slim-arrow-down",
innerDomRef: this.downBtnRef
})
}));
}
}]);
return MenuButton;
}(Component);
MenuButton.defaultProps = {
onEdit: function onEdit() {},
itemList: []
};
export { MenuButton as default };