Skip to content

Commit b296ac8

Browse files
authored
Merge pull request #753 from strapi/fix/dismissible-layer
fix: dismissible layer closing prematurely
2 parents b5c4b1a + ef98bd8 commit b296ac8

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

packages/strapi-design-system/src/DismissibleLayer/DismissibleLayer.js

+15-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,21 @@ export const DismissibleLayer = ({ children, className, onEscapeKeyDown, onPoint
2626
* @type {(event: PointerEvent) => void}
2727
*/
2828
const handlePointerDownOutside = (event) => {
29-
if (layerRef.current && !layerRef.current.contains(event.target)) {
29+
/**
30+
* Because certain elements that live inside modals e.g. Selects
31+
* render their dropdowns in portals the `layerRef.current.contains(event.target)` fails.
32+
*
33+
* Therefore we check the closest portal of the DimissibleLayer (which we're trying to close)
34+
* and the event that _may_ prematurely close the layer and see if they are equal.
35+
*/
36+
const dismissibleLayersReactPortal = layerRef.current.closest('[data-react-portal]');
37+
const eventsReactPortal = event.target.closest('[data-react-portal]');
38+
39+
if (
40+
layerRef.current &&
41+
!layerRef.current.contains(event.target) &&
42+
dismissibleLayersReactPortal === eventsReactPortal
43+
) {
3044
onPointerDownOutsideHandler();
3145
}
3246
};

0 commit comments

Comments
 (0)