1 | import ownerDocument from 'dom-helpers/ownerDocument';
|
2 | import { useState, useEffect } from 'react';
|
3 | export var resolveContainerRef = function resolveContainerRef(ref) {
|
4 | var _ref;
|
5 |
|
6 | if (typeof document === 'undefined') return null;
|
7 | if (ref == null) return ownerDocument().body;
|
8 | if (typeof ref === 'function') ref = ref();
|
9 | if (ref && 'current' in ref) ref = ref.current;
|
10 | if ((_ref = ref) == null ? void 0 : _ref.nodeType) return ref || null;
|
11 | return null;
|
12 | };
|
13 | export default function useWaitForDOMRef(ref, onResolved) {
|
14 | var _useState = useState(function () {
|
15 | return resolveContainerRef(ref);
|
16 | }),
|
17 | resolvedRef = _useState[0],
|
18 | setRef = _useState[1];
|
19 |
|
20 | if (!resolvedRef) {
|
21 | var earlyRef = resolveContainerRef(ref);
|
22 | if (earlyRef) setRef(earlyRef);
|
23 | }
|
24 |
|
25 | useEffect(function () {
|
26 | if (onResolved && resolvedRef) {
|
27 | onResolved(resolvedRef);
|
28 | }
|
29 | }, [onResolved, resolvedRef]);
|
30 | useEffect(function () {
|
31 | var nextRef = resolveContainerRef(ref);
|
32 |
|
33 | if (nextRef !== resolvedRef) {
|
34 | setRef(nextRef);
|
35 | }
|
36 | }, [ref, resolvedRef]);
|
37 | return resolvedRef;
|
38 | } |
\ | No newline at end of file |