Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 

78 rader
2.3 KiB

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