Skip to content

Commit e1ce3b5

Browse files
committed
Merge remote-tracking branch 'origin/4.6'
2 parents 0b0adc6 + 7f7e2a7 commit e1ce3b5

File tree

1 file changed

+24
-9
lines changed
  • src/bundle/ui-dev/src/modules/universal-discovery/components/breadcrumbs

1 file changed

+24
-9
lines changed

src/bundle/ui-dev/src/modules/universal-discovery/components/breadcrumbs/breadcrumbs.js

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useContext, useState, useMemo, useEffect, useCallback } from 'react';
1+
import React, { useContext, useState, useMemo, useEffect, useCallback, useRef } from 'react';
22

33
import Icon from '../../../common/icon/icon';
44

@@ -9,6 +9,7 @@ import { LoadedLocationsMapContext, MarkedLocationIdContext, GridActiveLocationI
99

1010
const Breadcrumbs = () => {
1111
const Translator = getTranslator();
12+
const hiddenListWrapperRef = useRef();
1213
const [, setMarkedLocationId] = useContext(MarkedLocationIdContext);
1314
const [gridActiveLocationId, setGridActiveLocationId] = useContext(GridActiveLocationIdContext);
1415
const [loadedLocationsFullMap, dispatchLoadedLocationsAction] = useContext(LoadedLocationsMapContext);
@@ -41,6 +42,10 @@ const Breadcrumbs = () => {
4142
const toggleHiddenListVisible = useCallback(() => {
4243
setHiddenListVisible(!hiddenListVisible);
4344
}, [setHiddenListVisible, hiddenListVisible]);
45+
const handleTogglerClick = (event) => {
46+
event.stopPropagation();
47+
toggleHiddenListVisible();
48+
};
4449
const renderHiddenList = () => {
4550
if (!hiddenItems.length) {
4651
return null;
@@ -56,8 +61,8 @@ const Breadcrumbs = () => {
5661
});
5762

5863
return (
59-
<div className="c-breadcrumbs__hidden-list-wrapper">
60-
<button className={toggleClassNames} onClick={toggleHiddenListVisible} type="button">
64+
<div ref={hiddenListWrapperRef} className="c-breadcrumbs__hidden-list-wrapper">
65+
<button className={toggleClassNames} onClick={handleTogglerClick} type="button">
6166
<Icon name="options" extraClasses="ibexa-icon--small-medium" />
6267
</button>
6368
<ul className={hiddenListClassNames}>
@@ -88,14 +93,24 @@ const Breadcrumbs = () => {
8893
};
8994

9095
useEffect(() => {
91-
if (hiddenListVisible) {
92-
window.document.body.addEventListener('click', toggleHiddenListVisible, false);
93-
} else {
94-
window.document.body.removeEventListener('click', toggleHiddenListVisible, false);
96+
if (!hiddenListVisible) {
97+
return;
9598
}
9699

97-
return () => window.document.body.removeEventListener('click', toggleHiddenListVisible, false);
98-
}, [hiddenListVisible, toggleHiddenListVisible]);
100+
const hideHiddenMenuOnClickOutside = (event) => {
101+
const { target } = event;
102+
103+
if (hiddenListWrapperRef.current?.contains(target) ?? false) {
104+
return;
105+
}
106+
107+
setHiddenListVisible(false);
108+
};
109+
110+
window.document.body.addEventListener('click', hideHiddenMenuOnClickOutside, false);
111+
112+
return () => window.document.body.removeEventListener('click', hideHiddenMenuOnClickOutside, false);
113+
}, [hiddenListVisible, setHiddenListVisible, hiddenListWrapperRef]);
99114

100115
if (loadedLocationsMap.some((loadedLocation) => loadedLocation.parentLocationId !== 1 && !loadedLocation.location)) {
101116
return null;

0 commit comments

Comments
 (0)