diff --git a/packages/eui/changelogs/upcoming/7760.md b/packages/eui/changelogs/upcoming/7760.md new file mode 100644 index 00000000000..fc46ac22284 --- /dev/null +++ b/packages/eui/changelogs/upcoming/7760.md @@ -0,0 +1,4 @@ +**Bug fixes** + +- Restored a removed `setTimeout` in `EuiInputPopover` to reduce flaky Cypress failures + diff --git a/packages/eui/src/components/popover/input_popover.tsx b/packages/eui/src/components/popover/input_popover.tsx index c79ba2d0b40..d8a3c2d394b 100644 --- a/packages/eui/src/components/popover/input_popover.tsx +++ b/packages/eui/src/components/popover/input_popover.tsx @@ -190,15 +190,20 @@ export const EuiInputPopover: FunctionComponent = ({ closePopover(); }; - window.addEventListener('scroll', closePopoverOnScroll, { - passive: true, // for better performance as we won't call preventDefault - capture: true, // scroll events don't bubble, they must be captured instead - }); + // Kibana Cypress tests trigger a scroll event in many common situations when the options list div is appended + // to the DOM; in testing it was always within 100ms, but setting a timeout here for 500ms to be safe + const timeoutId = setTimeout(() => { + window.addEventListener('scroll', closePopoverOnScroll, { + passive: true, // for better performance as we won't call preventDefault + capture: true, // scroll events don't bubble, they must be captured instead + }); + }, 500); return () => { window.removeEventListener('scroll', closePopoverOnScroll, { capture: true, }); + clearTimeout(timeoutId); }; } }, [closeOnScroll, closePopover, panelEl, inputEl]);