Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

191 строка
6.7 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 _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
  9. var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
  10. var _react = _interopRequireDefault(require("react"));
  11. var _propTypes = _interopRequireDefault(require("prop-types"));
  12. var _reactDom = _interopRequireDefault(require("react-dom"));
  13. var _classnames = _interopRequireDefault(require("classnames"));
  14. var _reactPopper = require("react-popper");
  15. var _utils = require("./utils");
  16. var propTypes = {
  17. children: _propTypes.default.node.isRequired,
  18. className: _propTypes.default.string,
  19. placement: _propTypes.default.string,
  20. placementPrefix: _propTypes.default.string,
  21. arrowClassName: _propTypes.default.string,
  22. hideArrow: _propTypes.default.bool,
  23. tag: _utils.tagPropType,
  24. isOpen: _propTypes.default.bool.isRequired,
  25. cssModule: _propTypes.default.object,
  26. offset: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
  27. fallbackPlacement: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.array]),
  28. flip: _propTypes.default.bool,
  29. container: _utils.targetPropType,
  30. target: _utils.targetPropType.isRequired,
  31. modifiers: _propTypes.default.object,
  32. boundariesElement: _propTypes.default.oneOfType([_propTypes.default.string, _utils.DOMElement])
  33. };
  34. var defaultProps = {
  35. boundariesElement: 'scrollParent',
  36. placement: 'auto',
  37. hideArrow: false,
  38. isOpen: false,
  39. offset: 0,
  40. fallbackPlacement: 'flip',
  41. flip: true,
  42. container: 'body',
  43. modifiers: {}
  44. };
  45. var childContextTypes = {
  46. popperManager: _propTypes.default.object.isRequired
  47. };
  48. var PopperContent =
  49. /*#__PURE__*/
  50. function (_React$Component) {
  51. (0, _inheritsLoose2.default)(PopperContent, _React$Component);
  52. function PopperContent(props) {
  53. var _this;
  54. _this = _React$Component.call(this, props) || this;
  55. _this.handlePlacementChange = _this.handlePlacementChange.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
  56. _this.setTargetNode = _this.setTargetNode.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
  57. _this.getTargetNode = _this.getTargetNode.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
  58. _this.getRef = _this.getRef.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
  59. _this.state = {};
  60. return _this;
  61. }
  62. var _proto = PopperContent.prototype;
  63. _proto.getChildContext = function getChildContext() {
  64. return {
  65. popperManager: {
  66. setTargetNode: this.setTargetNode,
  67. getTargetNode: this.getTargetNode
  68. }
  69. };
  70. };
  71. _proto.componentDidUpdate = function componentDidUpdate() {
  72. if (this._element && this._element.childNodes && this._element.childNodes[0] && this._element.childNodes[0].focus) {
  73. this._element.childNodes[0].focus();
  74. }
  75. };
  76. _proto.setTargetNode = function setTargetNode(node) {
  77. this.targetNode = node;
  78. };
  79. _proto.getTargetNode = function getTargetNode() {
  80. return this.targetNode;
  81. };
  82. _proto.getContainerNode = function getContainerNode() {
  83. return (0, _utils.getTarget)(this.props.container);
  84. };
  85. _proto.getRef = function getRef(ref) {
  86. this._element = ref;
  87. };
  88. _proto.handlePlacementChange = function handlePlacementChange(data) {
  89. if (this.state.placement !== data.placement) {
  90. this.setState({
  91. placement: data.placement
  92. });
  93. }
  94. return data;
  95. };
  96. _proto.renderChildren = function renderChildren() {
  97. var _this$props = this.props,
  98. cssModule = _this$props.cssModule,
  99. children = _this$props.children,
  100. isOpen = _this$props.isOpen,
  101. flip = _this$props.flip,
  102. target = _this$props.target,
  103. offset = _this$props.offset,
  104. fallbackPlacement = _this$props.fallbackPlacement,
  105. placementPrefix = _this$props.placementPrefix,
  106. _arrowClassName = _this$props.arrowClassName,
  107. hideArrow = _this$props.hideArrow,
  108. className = _this$props.className,
  109. tag = _this$props.tag,
  110. container = _this$props.container,
  111. modifiers = _this$props.modifiers,
  112. boundariesElement = _this$props.boundariesElement,
  113. attrs = (0, _objectWithoutPropertiesLoose2.default)(_this$props, ["cssModule", "children", "isOpen", "flip", "target", "offset", "fallbackPlacement", "placementPrefix", "arrowClassName", "hideArrow", "className", "tag", "container", "modifiers", "boundariesElement"]);
  114. var arrowClassName = (0, _utils.mapToCssModules)((0, _classnames.default)('arrow', _arrowClassName), cssModule);
  115. var placement = (this.state.placement || attrs.placement).split('-')[0];
  116. var popperClassName = (0, _utils.mapToCssModules)((0, _classnames.default)(className, placementPrefix ? placementPrefix + "-" + placement : placement), this.props.cssModule);
  117. var extendedModifiers = (0, _objectSpread2.default)({
  118. offset: {
  119. offset: offset
  120. },
  121. flip: {
  122. enabled: flip,
  123. behavior: fallbackPlacement
  124. },
  125. preventOverflow: {
  126. boundariesElement: boundariesElement
  127. },
  128. update: {
  129. enabled: true,
  130. order: 950,
  131. fn: this.handlePlacementChange
  132. }
  133. }, modifiers);
  134. return _react.default.createElement(_reactPopper.Popper, (0, _extends2.default)({
  135. modifiers: extendedModifiers
  136. }, attrs, {
  137. component: tag,
  138. className: popperClassName,
  139. "x-placement": this.state.placement || attrs.placement
  140. }), children, !hideArrow && _react.default.createElement(_reactPopper.Arrow, {
  141. className: arrowClassName
  142. }));
  143. };
  144. _proto.render = function render() {
  145. this.setTargetNode((0, _utils.getTarget)(this.props.target));
  146. if (this.props.isOpen) {
  147. return this.props.container === 'inline' ? this.renderChildren() : _reactDom.default.createPortal(_react.default.createElement("div", {
  148. ref: this.getRef
  149. }, this.renderChildren()), this.getContainerNode());
  150. }
  151. return null;
  152. };
  153. return PopperContent;
  154. }(_react.default.Component);
  155. PopperContent.propTypes = propTypes;
  156. PopperContent.defaultProps = defaultProps;
  157. PopperContent.childContextTypes = childContextTypes;
  158. var _default = PopperContent;
  159. exports.default = _default;