diff --git a/packages/react-core/src/helpers/Popper/thirdparty/popper-core/dom-utils/getDocumentElement.ts b/packages/react-core/src/helpers/Popper/thirdparty/popper-core/dom-utils/getDocumentElement.ts index 2489986c00f..76faa40bc2d 100644 --- a/packages/react-core/src/helpers/Popper/thirdparty/popper-core/dom-utils/getDocumentElement.ts +++ b/packages/react-core/src/helpers/Popper/thirdparty/popper-core/dom-utils/getDocumentElement.ts @@ -7,5 +7,5 @@ import { Window } from '../types'; */ export default function getDocumentElement(element: Element | Window): HTMLElement { // $FlowFixMe: assume body is always available - return (isElement(element) ? element.ownerDocument : element.document).documentElement; + return ((isElement(element) ? element.ownerDocument : element.document) || window.document).documentElement; } diff --git a/packages/react-core/src/helpers/Popper/thirdparty/react-popper/usePopper.ts b/packages/react-core/src/helpers/Popper/thirdparty/react-popper/usePopper.ts index 97b99893ae4..f105144b9d9 100644 --- a/packages/react-core/src/helpers/Popper/thirdparty/react-popper/usePopper.ts +++ b/packages/react-core/src/helpers/Popper/thirdparty/react-popper/usePopper.ts @@ -35,6 +35,17 @@ type State = { const EMPTY_MODIFIERS: any = []; +function isReferenceConnected(reference: Element | VirtualElement): boolean { + if (reference instanceof Element) { + return reference.isConnected; + } + const { contextElement } = reference; + if (contextElement instanceof Element) { + return contextElement.isConnected; + } + return true; +} + export const usePopper = ( referenceElement: (Element | VirtualElement) | null | undefined, popperElement: HTMLElement | null | undefined, @@ -114,6 +125,10 @@ export const usePopper = ( return; } + if (!isReferenceConnected(referenceElement) || !popperElement.isConnected) { + return; + } + const createPopper = options.createPopper || defaultCreatePopper; const popperInstance = createPopper(referenceElement, popperElement, popperOptions);