UNPKG

1.09 kBJavaScriptView Raw
1import ownerDocument from 'dom-helpers/ownerDocument';
2import { useState, useEffect } from 'react';
3export 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 && _ref.nodeType) return ref || null;
11 return null;
12};
13export 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