diff --git a/packages/react-core/src/helpers/Popper/Popper.tsx b/packages/react-core/src/helpers/Popper/Popper.tsx index 43b7976a08b..c0e66241a5f 100644 --- a/packages/react-core/src/helpers/Popper/Popper.tsx +++ b/packages/react-core/src/helpers/Popper/Popper.tsx @@ -221,6 +221,7 @@ export const Popper: React.FunctionComponent = ({ const [popperContent, setPopperContent] = React.useState(null); const [ready, setReady] = React.useState(false); const [opacity, setOpacity] = React.useState(0); + const [display, setDisplay] = React.useState('none'); const [internalIsVisible, setInternalIsVisible] = React.useState(isVisible); const transitionTimerRef = React.useRef(null); const showTimerRef = React.useRef(null); @@ -443,6 +444,12 @@ export const Popper: React.FunctionComponent = ({ ] }); + React.useEffect(() => { + if (internalIsVisible) { + forceUpdate && forceUpdate(); + } + }, [internalIsVisible]); + /** We want to forceUpdate only when a tooltip's content is dynamically updated. * TODO: Investigate into 3rd party libraries for a less limited/specific solution */ @@ -475,6 +482,7 @@ export const Popper: React.FunctionComponent = ({ showTimerRef.current = setTimeout(() => { setInternalIsVisible(true); setOpacity(1); + setDisplay(''); onShown(); }, entryDelay); }; @@ -486,6 +494,7 @@ export const Popper: React.FunctionComponent = ({ setOpacity(0); transitionTimerRef.current = setTimeout(() => { setInternalIsVisible(false); + setDisplay('none'); onHidden(); }, animationDuration); }, exitDelay); @@ -516,6 +525,7 @@ export const Popper: React.FunctionComponent = ({ ...popperStyles.popper, zIndex, opacity, + display, transition: getOpacityTransition(animationDuration) }, ...attributes.popper diff --git a/packages/react-templates/src/components/Select/__tests__/CheckboxSelect.test.tsx b/packages/react-templates/src/components/Select/__tests__/CheckboxSelect.test.tsx index 1c1292af863..312b801ecc4 100644 --- a/packages/react-templates/src/components/Select/__tests__/CheckboxSelect.test.tsx +++ b/packages/react-templates/src/components/Select/__tests__/CheckboxSelect.test.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { render, screen, waitForElementToBeRemoved } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { CheckboxSelect } from '../CheckboxSelect'; import styles from '@patternfly/react-styles/css/components/Badge/badge'; @@ -137,8 +137,6 @@ test('toggles the select menu when the toggle button is clicked', async () => { await user.click(toggleButton); - await waitForElementToBeRemoved(() => screen.queryByRole('menu')); - expect(screen.queryByRole('menu')).not.toBeInTheDocument(); });