UNPKG

3.16 kBJavaScriptView Raw
1import _extends from "@babel/runtime/helpers/esm/extends";
2import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3var _excluded = ["children", "transition", "popperConfig"],
4 _excluded2 = ["props", "arrowProps", "show", "update", "forceUpdate", "placement", "state"];
5import React, { useRef } from 'react';
6import classNames from 'classnames';
7import BaseOverlay from 'react-overlays/Overlay';
8import safeFindDOMNode from 'react-overlays/safeFindDOMNode';
9import usePopperMarginModifiers from './usePopperMarginModifiers';
10import Fade from './Fade';
11var defaultProps = {
12 transition: Fade,
13 rootClose: false,
14 show: false,
15 placement: 'top'
16};
17
18function wrapRefs(props, arrowProps) {
19 var ref = props.ref;
20 var aRef = arrowProps.ref;
21
22 props.ref = ref.__wrapped || (ref.__wrapped = function (r) {
23 return ref(safeFindDOMNode(r));
24 });
25
26 arrowProps.ref = aRef.__wrapped || (aRef.__wrapped = function (r) {
27 return aRef(safeFindDOMNode(r));
28 });
29}
30
31function Overlay(_ref) {
32 var overlay = _ref.children,
33 transition = _ref.transition,
34 _ref$popperConfig = _ref.popperConfig,
35 popperConfig = _ref$popperConfig === void 0 ? {} : _ref$popperConfig,
36 outerProps = _objectWithoutPropertiesLoose(_ref, _excluded);
37
38 var popperRef = useRef({});
39
40 var _usePopperMarginModif = usePopperMarginModifiers(),
41 ref = _usePopperMarginModif[0],
42 marginModifiers = _usePopperMarginModif[1];
43
44 var actualTransition = transition === true ? Fade : transition || null;
45 return /*#__PURE__*/React.createElement(BaseOverlay, _extends({}, outerProps, {
46 ref: ref,
47 popperConfig: _extends({}, popperConfig, {
48 modifiers: marginModifiers.concat(popperConfig.modifiers || [])
49 }),
50 transition: actualTransition
51 }), function (_ref2) {
52 var _state$modifiersData$;
53
54 var overlayProps = _ref2.props,
55 arrowProps = _ref2.arrowProps,
56 show = _ref2.show,
57 update = _ref2.update,
58 _ = _ref2.forceUpdate,
59 placement = _ref2.placement,
60 state = _ref2.state,
61 props = _objectWithoutPropertiesLoose(_ref2, _excluded2);
62
63 wrapRefs(overlayProps, arrowProps);
64 var popper = Object.assign(popperRef.current, {
65 state: state,
66 scheduleUpdate: update,
67 placement: placement,
68 outOfBoundaries: (state == null ? void 0 : (_state$modifiersData$ = state.modifiersData.hide) == null ? void 0 : _state$modifiersData$.isReferenceHidden) || false
69 });
70 if (typeof overlay === 'function') return overlay(_extends({}, props, overlayProps, {
71 placement: placement,
72 show: show
73 }, !transition && show && {
74 className: 'show'
75 }, {
76 popper: popper,
77 arrowProps: arrowProps
78 }));
79 return /*#__PURE__*/React.cloneElement(overlay, _extends({}, props, overlayProps, {
80 placement: placement,
81 arrowProps: arrowProps,
82 popper: popper,
83 className: classNames(overlay.props.className, !transition && show && 'show'),
84 style: _extends({}, overlay.props.style, overlayProps.style)
85 }));
86 });
87}
88
89Overlay.defaultProps = defaultProps;
90export default Overlay;
\No newline at end of file