import ownerDocument from 'dom-helpers/ownerDocument'; import canUseDOM from 'dom-helpers/canUseDOM'; import { useState, useEffect } from 'react'; import useWindow from './useWindow'; export const resolveContainerRef = (ref, document) => { if (!canUseDOM) return null; if (ref == null) return (document || ownerDocument()).body; if (typeof ref === 'function') ref = ref(); if (ref && 'current' in ref) ref = ref.current; if (ref && ('nodeType' in ref || ref.getBoundingClientRect)) return ref; return null; }; export default function useWaitForDOMRef(ref, onResolved) { const window = useWindow(); const [resolvedRef, setRef] = useState(() => resolveContainerRef(ref, window == null ? void 0 : window.document)); if (!resolvedRef) { const earlyRef = resolveContainerRef(ref); if (earlyRef) setRef(earlyRef); } useEffect(() => { if (onResolved && resolvedRef) { onResolved(resolvedRef); } }, [onResolved, resolvedRef]); useEffect(() => { const nextRef = resolveContainerRef(ref); if (nextRef !== resolvedRef) { setRef(nextRef); } }, [ref, resolvedRef]); return resolvedRef; }