UNPKG

@appbuckets/react-ui

Version:
215 lines (208 loc) 5.96 kB
'use strict'; var tslib = require('tslib'); var React = require('react'); var clsx = require('clsx'); var reactUiCore = require('@appbuckets/react-ui-core'); require('../BucketTheme/BucketTheme.js'); var BucketContext = require('../BucketTheme/BucketContext.js'); var Button = require('../Button/Button.js'); var Popup = require('../Popup/Popup.js'); var Menu = require('../Menu/Menu.js'); function _interopDefaultLegacy(e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty( n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; }, } ); } }); } n['default'] = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/ _interopNamespace(React); var clsx__default = /*#__PURE__*/ _interopDefaultLegacy(clsx); /* -------- * Component Render * -------- */ var DropdownMenu = function (receivedProps) { var _a; var props = BucketContext.useWithDefaultProps('dropdownMenu', receivedProps); props.as; var basic = props.basic, children = props.children, className = props.className, closeOnItemClicked = props.closeOnItemClicked; props.content; var userDefinedDefaultOpen = props.defaultOpen, inverted = props.inverted, items = props.items, onClose = props.onClose, onItemClick = props.onItemClick, onOpen = props.onOpen, openOn = props.openOn, userDefinedOpen = props.open, position = props.position, trigger = props.trigger, rest = tslib.__rest(props, [ 'as', 'basic', 'children', 'className', 'closeOnItemClicked', 'content', 'defaultOpen', 'inverted', 'items', 'onClose', 'onItemClick', 'onOpen', 'openOn', 'open', 'position', 'trigger', ]); var ElementType = reactUiCore.useElementType( DropdownMenu, receivedProps, props ); var _b = tslib.__read( reactUiCore.useAutoControlledValue(false, { defaultProp: userDefinedDefaultOpen, prop: userDefinedOpen, }), 2 ), open = _b[0], trySetOpen = _b[1]; var classes = clsx__default['default'](open && 'open', 'dropdown', className); // ---- // Handlers // ---- var handleMenuOpen = function (e) { if (typeof onOpen === 'function') { onOpen(e, tslib.__assign(tslib.__assign({}, props), { open: true })); } trySetOpen(true); }; var handleMenuClose = function (e) { if (typeof onClose === 'function') { onClose(e, tslib.__assign(tslib.__assign({}, props), { open: false })); } trySetOpen(false); }; // ---- // Trigger Element // ---- var triggerElement = (_a = Button.create(trigger, { autoGenerateKey: false, overrideProps: function (defaultProps) { return { onClick: function (event, buttonProps) { /** Call user defined handler */ if (defaultProps.onClick) { defaultProps.onClick(event, buttonProps); } /** On trigger click toggle menu */ if (open) { handleMenuClose(event); } else { handleMenuOpen(event); } }, }; }, })) !== null && _a !== void 0 ? _a : undefined; // ---- // On Item Click Handlers // ---- var handleMenuItemClick = function (event, itemProps) { /** If a user defined handler for click on menu item exists, call it */ if (typeof onItemClick === 'function') { onItemClick(event, itemProps); } /** If the menu must be close on item click, call the handleCloseMenu */ if (closeOnItemClicked) { handleMenuClose(event); } }; // ---- // Component Render // ---- return React__namespace.createElement(Popup, { className: 'dropdown-container', portalProps: { open: open, closeOnDocumentClick: true, }, basic: basic, inverted: inverted, trigger: triggerElement, openOn: openOn, position: position, onOpen: handleMenuOpen, onClose: handleMenuClose, content: React__namespace.createElement( Menu, tslib.__assign({ avoidActive: true, text: true, vertical: true }, rest, { as: ElementType, className: classes, items: items, onItemClick: handleMenuItemClick, }), children ), // <ElementType {...rest} className={classes}> // { // Array.isArray(items) // ? items.map((item) => ( // MenuItem.create(item, { // autoGenerateKey: true, // overrideProps : ({ onClick, ...itemRest }) => ({ // onClick: (e: React.MouseEvent<HTMLElement>, itemProps: MenuItemProps) => { // /** Call defined itemClick handler */ // if (typeof onItemClick === 'function') { // onItemClick(e, itemProps); // } // // /** Call menu item click handler */ // if (onClick) { // onClick(e, itemProps); // } // // /** Check if must close the menu */ // if (closeOnItemClicked) { // handleMenuClose(e); // } // }, // ...itemRest // }) // }) // )) // : childrenUtils.isNil(children) ? content : children // } // </ElementType> }); }; DropdownMenu.displayName = 'DropdownMenu'; module.exports = DropdownMenu;