87 lines
No EOL
2.6 KiB
JavaScript
87 lines
No EOL
2.6 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
|
|
|
var _react = require('react');
|
|
|
|
var _react2 = _interopRequireDefault(_react);
|
|
|
|
var _propTypes = require('prop-types');
|
|
|
|
var _propTypes2 = _interopRequireDefault(_propTypes);
|
|
|
|
var _classnames = require('classnames');
|
|
|
|
var _classnames2 = _interopRequireDefault(_classnames);
|
|
|
|
var _reactPopper = require('react-popper');
|
|
|
|
var _utils = require('./utils');
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
|
|
|
|
var propTypes = {
|
|
tag: _propTypes2.default.string,
|
|
children: _propTypes2.default.node.isRequired,
|
|
right: _propTypes2.default.bool,
|
|
flip: _propTypes2.default.bool,
|
|
className: _propTypes2.default.string,
|
|
cssModule: _propTypes2.default.object
|
|
};
|
|
|
|
var defaultProps = {
|
|
tag: 'div',
|
|
flip: true
|
|
};
|
|
|
|
var contextTypes = {
|
|
isOpen: _propTypes2.default.bool.isRequired,
|
|
dropup: _propTypes2.default.bool.isRequired
|
|
};
|
|
|
|
var noFlipModifier = { flip: { enabled: false } };
|
|
|
|
var DropdownMenu = function DropdownMenu(props, context) {
|
|
var className = props.className,
|
|
cssModule = props.cssModule,
|
|
right = props.right,
|
|
tag = props.tag,
|
|
flip = props.flip,
|
|
attrs = _objectWithoutProperties(props, ['className', 'cssModule', 'right', 'tag', 'flip']);
|
|
|
|
var classes = (0, _utils.mapToCssModules)((0, _classnames2.default)(className, 'dropdown-menu', {
|
|
'dropdown-menu-right': right,
|
|
show: context.isOpen
|
|
}), cssModule);
|
|
|
|
var Tag = tag;
|
|
|
|
if (context.isOpen) {
|
|
Tag = _reactPopper.Popper;
|
|
var position1 = context.dropup ? 'top' : 'bottom';
|
|
var position2 = right ? 'end' : 'start';
|
|
attrs.placement = position1 + '-' + position2;
|
|
attrs.component = tag;
|
|
attrs.modifiers = !flip ? noFlipModifier : undefined;
|
|
}
|
|
|
|
return _react2.default.createElement(Tag, _extends({
|
|
tabIndex: '-1',
|
|
role: 'menu'
|
|
}, attrs, {
|
|
'aria-hidden': !context.isOpen,
|
|
className: classes
|
|
}));
|
|
};
|
|
|
|
DropdownMenu.propTypes = propTypes;
|
|
DropdownMenu.defaultProps = defaultProps;
|
|
DropdownMenu.contextTypes = contextTypes;
|
|
|
|
exports.default = DropdownMenu; |