1 | import _extends from "@babel/runtime/helpers/esm/extends";
|
2 | import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
3 | import PropTypes from 'prop-types';
|
4 | import React, { useState } from 'react';
|
5 | import ReactDOM from 'react-dom';
|
6 | import useCallbackRef from '@restart/hooks/useCallbackRef';
|
7 | import useMergedRefs from '@restart/hooks/useMergedRefs';
|
8 | import { placements } from './popper';
|
9 | import usePopper from './usePopper';
|
10 | import useRootClose from './useRootClose';
|
11 | import useWaitForDOMRef from './useWaitForDOMRef';
|
12 | import mergeOptionsWithPopperConfig from './mergeOptionsWithPopperConfig';
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | var Overlay = React.forwardRef(function (props, outerRef) {
|
19 | var flip = props.flip,
|
20 | offset = props.offset,
|
21 | placement = props.placement,
|
22 | _props$containerPaddi = props.containerPadding,
|
23 | containerPadding = _props$containerPaddi === void 0 ? 5 : _props$containerPaddi,
|
24 | _props$popperConfig = props.popperConfig,
|
25 | popperConfig = _props$popperConfig === void 0 ? {} : _props$popperConfig,
|
26 | Transition = props.transition;
|
27 |
|
28 | var _useCallbackRef = useCallbackRef(),
|
29 | rootElement = _useCallbackRef[0],
|
30 | attachRef = _useCallbackRef[1];
|
31 |
|
32 | var _useCallbackRef2 = useCallbackRef(),
|
33 | arrowElement = _useCallbackRef2[0],
|
34 | attachArrowRef = _useCallbackRef2[1];
|
35 |
|
36 | var mergedRef = useMergedRefs(attachRef, outerRef);
|
37 | var container = useWaitForDOMRef(props.container);
|
38 | var target = useWaitForDOMRef(props.target);
|
39 |
|
40 | var _useState = useState(!props.show),
|
41 | exited = _useState[0],
|
42 | setExited = _useState[1];
|
43 |
|
44 | var _usePopper = usePopper(target, rootElement, mergeOptionsWithPopperConfig({
|
45 | placement: placement,
|
46 | enableEvents: !!props.show,
|
47 | containerPadding: containerPadding || 5,
|
48 | flip: flip,
|
49 | offset: offset,
|
50 | arrowElement: arrowElement,
|
51 | popperConfig: popperConfig
|
52 | })),
|
53 | styles = _usePopper.styles,
|
54 | attributes = _usePopper.attributes,
|
55 | popper = _objectWithoutPropertiesLoose(_usePopper, ["styles", "attributes"]);
|
56 |
|
57 | if (props.show) {
|
58 | if (exited) setExited(false);
|
59 | } else if (!props.transition && !exited) {
|
60 | setExited(true);
|
61 | }
|
62 |
|
63 | var handleHidden = function handleHidden() {
|
64 | setExited(true);
|
65 |
|
66 | if (props.onExited) {
|
67 | props.onExited.apply(props, arguments);
|
68 | }
|
69 | };
|
70 |
|
71 |
|
72 | var mountOverlay = props.show || Transition && !exited;
|
73 | useRootClose(rootElement, props.onHide, {
|
74 | disabled: !props.rootClose || props.rootCloseDisabled,
|
75 | clickTrigger: props.rootCloseEvent
|
76 | });
|
77 |
|
78 | if (!mountOverlay) {
|
79 |
|
80 | return null;
|
81 | }
|
82 |
|
83 | var child = props.children(_extends({}, popper, {
|
84 | show: !!props.show,
|
85 | props: _extends({}, attributes.popper, {
|
86 | style: styles.popper,
|
87 | ref: mergedRef
|
88 | }),
|
89 | arrowProps: _extends({}, attributes.arrow, {
|
90 | style: styles.arrow,
|
91 | ref: attachArrowRef
|
92 | })
|
93 | }));
|
94 |
|
95 | if (Transition) {
|
96 | var onExit = props.onExit,
|
97 | onExiting = props.onExiting,
|
98 | onEnter = props.onEnter,
|
99 | onEntering = props.onEntering,
|
100 | onEntered = props.onEntered;
|
101 | child = React.createElement(Transition, {
|
102 | "in": props.show,
|
103 | appear: true,
|
104 | onExit: onExit,
|
105 | onExiting: onExiting,
|
106 | onExited: handleHidden,
|
107 | onEnter: onEnter,
|
108 | onEntering: onEntering,
|
109 | onEntered: onEntered
|
110 | }, child);
|
111 | }
|
112 |
|
113 | return container ? ReactDOM.createPortal(child, container) : null;
|
114 | });
|
115 | Overlay.displayName = 'Overlay';
|
116 | Overlay.propTypes = {
|
117 | |
118 |
|
119 |
|
120 | show: PropTypes.bool,
|
121 |
|
122 |
|
123 | placement: PropTypes.oneOf(placements),
|
124 |
|
125 | |
126 |
|
127 |
|
128 |
|
129 | target: PropTypes.any,
|
130 |
|
131 | |
132 |
|
133 |
|
134 |
|
135 | container: PropTypes.any,
|
136 |
|
137 | |
138 |
|
139 |
|
140 |
|
141 |
|
142 | flip: PropTypes.bool,
|
143 |
|
144 | |
145 |
|
146 |
|
147 |
|
148 |
|
149 |
|
150 |
|
151 |
|
152 |
|
153 |
|
154 |
|
155 |
|
156 |
|
157 |
|
158 |
|
159 |
|
160 |
|
161 |
|
162 |
|
163 |
|
164 |
|
165 |
|
166 | children: PropTypes.func.isRequired,
|
167 |
|
168 | |
169 |
|
170 |
|
171 |
|
172 | containerPadding: PropTypes.number,
|
173 |
|
174 | |
175 |
|
176 |
|
177 | popperConfig: PropTypes.object,
|
178 |
|
179 | |
180 |
|
181 |
|
182 | rootClose: PropTypes.bool,
|
183 |
|
184 | |
185 |
|
186 |
|
187 | rootCloseEvent: PropTypes.oneOf(['click', 'mousedown']),
|
188 |
|
189 | |
190 |
|
191 |
|
192 | rootCloseDisabled: PropTypes.bool,
|
193 |
|
194 | |
195 |
|
196 |
|
197 |
|
198 |
|
199 |
|
200 |
|
201 | onHide: function onHide(props) {
|
202 | for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
203 | args[_key - 1] = arguments[_key];
|
204 | }
|
205 |
|
206 | if (props.rootClose) {
|
207 | var _PropTypes$func;
|
208 |
|
209 | return (_PropTypes$func = PropTypes.func).isRequired.apply(_PropTypes$func, [props].concat(args));
|
210 | }
|
211 |
|
212 | return PropTypes.func.apply(PropTypes, [props].concat(args));
|
213 | },
|
214 |
|
215 | |
216 |
|
217 |
|
218 |
|
219 |
|
220 | transition: PropTypes.elementType,
|
221 |
|
222 | |
223 |
|
224 |
|
225 | onEnter: PropTypes.func,
|
226 |
|
227 | |
228 |
|
229 |
|
230 | onEntering: PropTypes.func,
|
231 |
|
232 | |
233 |
|
234 |
|
235 | onEntered: PropTypes.func,
|
236 |
|
237 | |
238 |
|
239 |
|
240 | onExit: PropTypes.func,
|
241 |
|
242 | |
243 |
|
244 |
|
245 | onExiting: PropTypes.func,
|
246 |
|
247 | |
248 |
|
249 |
|
250 | onExited: PropTypes.func
|
251 | };
|
252 | export default Overlay; |
\ | No newline at end of file |