You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

93 lines
2.8 KiB

  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. exports.__esModule = true;
  4. exports.default = void 0;
  5. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  6. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
  7. var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
  8. var _react = _interopRequireDefault(require("react"));
  9. var _propTypes = _interopRequireDefault(require("prop-types"));
  10. var _classnames = _interopRequireDefault(require("classnames"));
  11. var _reactPopper = require("react-popper");
  12. var _utils = require("./utils");
  13. var propTypes = {
  14. tag: _utils.tagPropType,
  15. children: _propTypes.default.node.isRequired,
  16. right: _propTypes.default.bool,
  17. flip: _propTypes.default.bool,
  18. modifiers: _propTypes.default.object,
  19. className: _propTypes.default.string,
  20. cssModule: _propTypes.default.object,
  21. persist: _propTypes.default.bool
  22. };
  23. var defaultProps = {
  24. tag: 'div',
  25. flip: true
  26. };
  27. var contextTypes = {
  28. isOpen: _propTypes.default.bool.isRequired,
  29. direction: _propTypes.default.oneOf(['up', 'down', 'left', 'right']).isRequired,
  30. inNavbar: _propTypes.default.bool.isRequired
  31. };
  32. var noFlipModifier = {
  33. flip: {
  34. enabled: false
  35. }
  36. };
  37. var directionPositionMap = {
  38. up: 'top',
  39. left: 'left',
  40. right: 'right',
  41. down: 'bottom'
  42. };
  43. var DropdownMenu = function DropdownMenu(props, context) {
  44. var className = props.className,
  45. cssModule = props.cssModule,
  46. right = props.right,
  47. tag = props.tag,
  48. flip = props.flip,
  49. modifiers = props.modifiers,
  50. persist = props.persist,
  51. attrs = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "cssModule", "right", "tag", "flip", "modifiers", "persist"]);
  52. var classes = (0, _utils.mapToCssModules)((0, _classnames.default)(className, 'dropdown-menu', {
  53. 'dropdown-menu-right': right,
  54. show: context.isOpen
  55. }), cssModule);
  56. var Tag = tag;
  57. if (persist || context.isOpen && !context.inNavbar) {
  58. Tag = _reactPopper.Popper;
  59. var position1 = directionPositionMap[context.direction] || 'bottom';
  60. var position2 = right ? 'end' : 'start';
  61. attrs.placement = position1 + "-" + position2;
  62. attrs.component = tag;
  63. attrs.modifiers = !flip ? (0, _objectSpread2.default)({}, modifiers, noFlipModifier) : modifiers;
  64. }
  65. return _react.default.createElement(Tag, (0, _extends2.default)({
  66. tabIndex: "-1",
  67. role: "menu"
  68. }, attrs, {
  69. "aria-hidden": !context.isOpen,
  70. className: classes,
  71. "x-placement": attrs.placement
  72. }));
  73. };
  74. DropdownMenu.propTypes = propTypes;
  75. DropdownMenu.defaultProps = defaultProps;
  76. DropdownMenu.contextTypes = contextTypes;
  77. var _default = DropdownMenu;
  78. exports.default = _default;