Skip to content

Commit 39835ba

Browse files
authoredMay 17, 2024
fix(ui5-popover): fix auto close when click on iframe inside a shadow root (#8968)
Fixes #8959 Fixes #7994

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed
 

‎packages/main/src/popup-utils/PopoverRegistry.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { isClickInRect } from "@ui5/webcomponents-base/dist/util/PopupUtils.js";
22
import type { Interval } from "@ui5/webcomponents-base/dist/types.js";
3+
import getActiveElement from "@ui5/webcomponents-base/dist/util/getActiveElement.js";
34
import type Popover from "../Popover.js";
45
import { instanceOfPopover } from "../Popover.js";
56
import { getOpenedPopups, addOpenedPopup, removeOpenedPopup } from "./OpenedPopupsRegistry.js";
@@ -20,7 +21,7 @@ const repositionPopovers = () => {
2021
};
2122

2223
const closePopoversIfLostFocus = () => {
23-
if (document.activeElement!.tagName === "IFRAME") {
24+
if (getActiveElement()!.tagName === "IFRAME") {
2425
getRegistry().reverse().forEach(popup => popup.instance.close(false, false, true));
2526
}
2627
};

‎packages/main/test/pages/Popover.html

+6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@
2626

2727
<body class="popover2auto">
2828
<iframe id="clickThisIframe" src="//localhost:8080"></iframe>
29+
<div id="host">
30+
<template shadowrootmode="open">
31+
<span>I'm in the shadow DOM</span>
32+
<iframe id="clickThisIframeInsideShadowRoot" src="//localhost:8080"></iframe>
33+
</template>
34+
</div>
2935
<ui5-button id="btn">Click me !</ui5-button>
3036

3137
<ui5-popover id="pop" class="popover6auto" placement-type="Top" accessible-name="This popover is important">

‎packages/main/test/specs/Popover.spec.js

+14
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,20 @@ describe("Popover general interaction", () => {
363363
assert.notOk(await popover.isDisplayedInViewport(), "Popover is closed.");
364364
});
365365

366+
it("tests clicking on an iframe inside a shadow root closes the popover", async () => {
367+
const btnOpenPopover = await browser.$("#btn");
368+
await btnOpenPopover.click();
369+
370+
const popover = await browser.$("#pop");
371+
const iframe = await browser.$("#host").shadow$("#clickThisIframeInsideShadowRoot");
372+
373+
assert.ok(await popover.isDisplayedInViewport(), "Popover is opened.");
374+
375+
await iframe.click();
376+
377+
assert.notOk(await popover.isDisplayedInViewport(), "Popover is closed.");
378+
});
379+
366380
it("Test initial focus when content is provided after the header and footer", async () => {
367381
const listContainerItem = await browser.$("#popoverFocusButton");
368382
await listContainerItem.scrollIntoView();

0 commit comments

Comments
 (0)
Please sign in to comment.