123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import _extends from "@babel/runtime/helpers/esm/extends";
- import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
- import classNames from 'classnames';
- import { findDOMNode } from 'react-dom';
- import React, { useContext } from 'react';
- import BaseDropdownMenu from 'react-overlays/DropdownMenu';
- import NavbarContext from './NavbarContext';
- import { useBootstrapPrefix } from './ThemeProvider';
-
- var wrapRef = function wrapRef(props) {
- var ref = props.ref;
-
- props.ref = ref.__wrapped || (ref.__wrapped = function (r) {
- return ref(findDOMNode(r));
- });
-
- return props;
- };
-
- var defaultProps = {
- alignRight: false,
- flip: true
- };
- var DropdownMenu = React.forwardRef(function (_ref, ref) {
- var bsPrefix = _ref.bsPrefix,
- className = _ref.className,
- alignRight = _ref.alignRight,
- rootCloseEvent = _ref.rootCloseEvent,
- flip = _ref.flip,
- popperConfig = _ref.popperConfig,
- showProps = _ref.show,
- _ref$as = _ref.as,
- Component = _ref$as === void 0 ? 'div' : _ref$as,
- props = _objectWithoutPropertiesLoose(_ref, ["bsPrefix", "className", "alignRight", "rootCloseEvent", "flip", "popperConfig", "show", "as"]);
-
- var isNavbar = useContext(NavbarContext);
- var prefix = useBootstrapPrefix(bsPrefix, 'dropdown-menu');
- return React.createElement(BaseDropdownMenu, {
- ref: ref // FIXME: the ref situation is out of hand here
- ,
- flip: flip,
- show: showProps,
- alignEnd: alignRight,
- usePopper: !isNavbar,
- popperConfig: popperConfig,
- rootCloseEvent: rootCloseEvent
- }, function (_ref2) {
- var placement = _ref2.placement,
- show = _ref2.show,
- alignEnd = _ref2.alignEnd,
- close = _ref2.close,
- menuProps = _ref2.props;
- wrapRef(menuProps); // For custom components provide additional, non-DOM, props;
-
- if (typeof Component !== 'string') {
- menuProps.show = show;
- menuProps.close = close;
- menuProps.alignRight = alignEnd;
- }
-
- var style = props.style;
-
- if (placement) {
- // we don't need the default popper style,
- // menus are display: none when not shown.
- style = _extends({}, style, {}, menuProps.style);
- props['x-placement'] = placement;
- }
-
- return React.createElement(Component, _extends({}, props, menuProps, {
- style: style,
- className: classNames(className, prefix, show && 'show', alignEnd && prefix + "-right")
- }));
- });
- });
- DropdownMenu.displayName = 'DropdownMenu';
- DropdownMenu.defaultProps = defaultProps;
- export default DropdownMenu;
|