@e-group/material-module
Version:
EGroup Team react component modules.
59 lines (50 loc) • 1.76 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import React, { Children, cloneElement, useState, isValidElement } from 'react';
import { Menu } from '@material-ui/core';
const ButtonMenu = (_ref) => {
let button = _ref.button,
children = _ref.children,
anchorElProp = _ref.anchorEl,
open = _ref.open,
onClose = _ref.onClose,
other = _objectWithoutProperties(_ref, ["button", "children", "anchorEl", "open", "onClose"]);
const _useState = useState(null),
_useState2 = _slicedToArray(_useState, 2),
anchorEl = _useState2[0],
setAnchorEl = _useState2[1];
function handleClose(e, reason) {
setAnchorEl(null);
if (onClose) {
onClose(e, reason);
}
}
const controledButton = /*#__PURE__*/cloneElement(button, {
onClick: e => {
setAnchorEl(e.currentTarget);
if (button.props.onClick) {
button.props.onClick(e);
}
}
});
const items = Children.map(children, child => {
if ( /*#__PURE__*/isValidElement(child)) {
return /*#__PURE__*/cloneElement(child, {
onClick: e => {
handleClose(e, 'itemClick');
if (child.props.onClick) {
child.props.onClick(e);
}
}
});
}
return undefined;
});
return /*#__PURE__*/React.createElement(React.Fragment, null, controledButton, /*#__PURE__*/React.createElement(Menu, _extends({
anchorEl: anchorEl,
open: open !== null && open !== void 0 ? open : Boolean(anchorEl),
onClose: handleClose
}, other), items));
};
export default ButtonMenu;