UNPKG

@e-group/material-module

Version:
59 lines (50 loc) 1.76 kB
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;