UNPKG

3.18 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7exports.__esModule = true;
8exports.default = void 0;
9
10var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
12var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
14var _classnames = _interopRequireDefault(require("classnames"));
15
16var _reactDom = require("react-dom");
17
18var _react = _interopRequireWildcard(require("react"));
19
20var _DropdownMenu = _interopRequireDefault(require("react-overlays/DropdownMenu"));
21
22var _NavbarContext = _interopRequireDefault(require("./NavbarContext"));
23
24var _ThemeProvider = require("./ThemeProvider");
25
26var wrapRef = function wrapRef(props) {
27 var ref = props.ref;
28
29 props.ref = ref.__wrapped || (ref.__wrapped = function (r) {
30 return ref((0, _reactDom.findDOMNode)(r));
31 });
32
33 return props;
34};
35
36var defaultProps = {
37 alignRight: false,
38 flip: true
39};
40
41var DropdownMenu = _react.default.forwardRef(function (_ref, ref) {
42 var bsPrefix = _ref.bsPrefix,
43 className = _ref.className,
44 alignRight = _ref.alignRight,
45 rootCloseEvent = _ref.rootCloseEvent,
46 flip = _ref.flip,
47 popperConfig = _ref.popperConfig,
48 showProps = _ref.show,
49 _ref$as = _ref.as,
50 Component = _ref$as === void 0 ? 'div' : _ref$as,
51 props = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["bsPrefix", "className", "alignRight", "rootCloseEvent", "flip", "popperConfig", "show", "as"]);
52 var isNavbar = (0, _react.useContext)(_NavbarContext.default);
53 var prefix = (0, _ThemeProvider.useBootstrapPrefix)(bsPrefix, 'dropdown-menu');
54 return _react.default.createElement(_DropdownMenu.default, {
55 ref: ref // FIXME: the ref situation is out of hand here
56 ,
57 flip: flip,
58 show: showProps,
59 alignEnd: alignRight,
60 usePopper: !isNavbar,
61 popperConfig: popperConfig,
62 rootCloseEvent: rootCloseEvent
63 }, function (_ref2) {
64 var placement = _ref2.placement,
65 show = _ref2.show,
66 alignEnd = _ref2.alignEnd,
67 close = _ref2.close,
68 menuProps = _ref2.props;
69 wrapRef(menuProps); // For custom components provide additional, non-DOM, props;
70
71 if (typeof Component !== 'string') {
72 menuProps.show = show;
73 menuProps.close = close;
74 menuProps.alignRight = alignEnd;
75 }
76
77 var style = props.style;
78
79 if (placement) {
80 // we don't need the default popper style,
81 // menus are display: none when not shown.
82 style = (0, _extends2.default)({}, style, {}, menuProps.style);
83 props['x-placement'] = placement;
84 }
85
86 return _react.default.createElement(Component, (0, _extends2.default)({}, props, menuProps, {
87 style: style,
88 className: (0, _classnames.default)(className, prefix, show && 'show', alignEnd && prefix + "-right")
89 }));
90 });
91});
92
93DropdownMenu.displayName = 'DropdownMenu';
94DropdownMenu.defaultProps = defaultProps;
95var _default = DropdownMenu;
96exports.default = _default;
97module.exports = exports["default"];
\No newline at end of file