Skip to content

Commit 802d5fd

Browse files
authored
Enhance useDetectClickOut with extra nodes to cross reference (#2123)
1 parent eab4343 commit 802d5fd

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed

geonode_mapstore_client/client/js/hooks/useDetectClickOut.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { useEffect, useRef } from 'react';
1414
* Detect a click out event given a target node
1515
* @name useDetectClickOut
1616
* @memberof hooks
17+
* @prop {string[]} extraNodes extra selectors to check if the click is inside
1718
* @prop {boolean} disabled ensure the callback is not triggered
1819
* @prop {function} onClickOut callback on click outside the targeted node
1920
* @example
@@ -25,6 +26,7 @@ import { useEffect, useRef } from 'react';
2526
* }
2627
*/
2728
function useDetectClickOut({
29+
extraNodes,
2830
disabled,
2931
onClickOut
3032
}) {
@@ -34,11 +36,15 @@ function useDetectClickOut({
3436
if (disabled || !node.current) return;
3537
const target = event.target;
3638
const isNode = target instanceof Node;
37-
if ((isNode && !node.current.contains(target))
38-
|| document.activeElement === document.querySelector("iframe")
39-
) {
40-
onClickOut();
41-
}
39+
40+
// Check if click is inside any extraNodes
41+
const isInsideExtra = extraNodes?.some(extra => document.querySelector(extra)?.contains(target));
42+
43+
const isInsideNode = isNode
44+
? !node.current.contains(target) && !isInsideExtra
45+
: document.activeElement === document.querySelector("iframe");
46+
47+
isInsideNode && onClickOut();
4248
}
4349
window.addEventListener('mousedown', handleClickOut);
4450
window.addEventListener('blur', handleClickOut);

geonode_mapstore_client/client/js/plugins/LayerDetailViewer.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ function LayerDetailViewer({
6565
}) {
6666

6767
const node = useDetectClickOut({
68+
extraNodes: ['.ms-popover-overlay'],
6869
disabled: !enabled,
6970
onClickOut: () => {
7071
onClose();

geonode_mapstore_client/client/js/plugins/ResourceDetails/ResourceDetails.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ function ResourceDetailsPanel({
300300
}, []);
301301

302302
const node = useDetectClickOut({
303+
extraNodes: ['.ms-popover-overlay'],
303304
disabled: !closeOnClickOut || !show,
304305
onClickOut: () => {
305306
handleClose();

0 commit comments

Comments
 (0)