@atlaskit/navigation-system 5.32.2 → 5.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/cjs/ui/page-layout/banner.compiled.css +1 -1
- package/dist/cjs/ui/page-layout/banner.js +1 -1
- package/dist/cjs/ui/page-layout/constants.js +7 -6
- package/dist/cjs/ui/page-layout/panel-splitter/panel-splitter.compiled.css +1 -0
- package/dist/cjs/ui/page-layout/panel-splitter/panel-splitter.js +3 -2
- package/dist/cjs/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +52 -12
- package/dist/cjs/ui/page-layout/side-nav/side-nav.compiled.css +4 -3
- package/dist/cjs/ui/page-layout/side-nav/side-nav.js +25 -20
- package/dist/cjs/ui/page-layout/top-nav/top-nav.compiled.css +0 -1
- package/dist/cjs/ui/page-layout/top-nav/top-nav.js +2 -16
- package/dist/es2019/ui/page-layout/banner.compiled.css +1 -1
- package/dist/es2019/ui/page-layout/banner.js +1 -1
- package/dist/es2019/ui/page-layout/constants.js +7 -6
- package/dist/es2019/ui/page-layout/panel-splitter/panel-splitter.compiled.css +1 -0
- package/dist/es2019/ui/page-layout/panel-splitter/panel-splitter.js +3 -2
- package/dist/es2019/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +43 -13
- package/dist/es2019/ui/page-layout/side-nav/side-nav.compiled.css +4 -3
- package/dist/es2019/ui/page-layout/side-nav/side-nav.js +17 -6
- package/dist/es2019/ui/page-layout/top-nav/top-nav.compiled.css +0 -1
- package/dist/es2019/ui/page-layout/top-nav/top-nav.js +3 -18
- package/dist/esm/ui/page-layout/banner.compiled.css +1 -1
- package/dist/esm/ui/page-layout/banner.js +1 -1
- package/dist/esm/ui/page-layout/constants.js +7 -6
- package/dist/esm/ui/page-layout/panel-splitter/panel-splitter.compiled.css +1 -0
- package/dist/esm/ui/page-layout/panel-splitter/panel-splitter.js +3 -2
- package/dist/esm/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +53 -13
- package/dist/esm/ui/page-layout/side-nav/side-nav.compiled.css +4 -3
- package/dist/esm/ui/page-layout/side-nav/side-nav.js +26 -21
- package/dist/esm/ui/page-layout/top-nav/top-nav.compiled.css +0 -1
- package/dist/esm/ui/page-layout/top-nav/top-nav.js +3 -18
- package/dist/types/ui/page-layout/constants.d.ts +1 -1
- package/dist/types-ts4.5/ui/page-layout/constants.d.ts +1 -1
- package/package.json +4 -4
- package/dist/cjs/ui/page-layout/use-open-layer-count.js +0 -59
- package/dist/es2019/ui/page-layout/use-open-layer-count.js +0 -44
- package/dist/esm/ui/page-layout/use-open-layer-count.js +0 -53
- package/dist/types/ui/page-layout/use-open-layer-count.d.ts +0 -8
- package/dist/types-ts4.5/ui/page-layout/use-open-layer-count.d.ts +0 -8
|
@@ -8,13 +8,11 @@ import { useSkipLink } from '../../../context/skip-links/skip-links-context';
|
|
|
8
8
|
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
9
9
|
import { HasCustomThemeContext } from '../../top-nav-items/themed/has-custom-theme-context';
|
|
10
10
|
import { useCustomTheme } from '../../top-nav-items/themed/use-custom-theme';
|
|
11
|
-
import { bannerMountedVar, localSlotLayers,
|
|
11
|
+
import { bannerMountedVar, localSlotLayers, sideNavLiveWidthVar, topNavMountedVar, UNSAFE_topNavVar } from '../constants';
|
|
12
12
|
import { DangerouslyHoistSlotSizes } from '../hoist-slot-sizes-context';
|
|
13
13
|
import { DangerouslyHoistCssVarToDocumentRoot, HoistCssVarToLocalGrid } from '../hoist-utils';
|
|
14
14
|
import { useLayoutId } from '../id-utils';
|
|
15
15
|
import { useSideNavVisibility } from '../side-nav/use-side-nav-visibility';
|
|
16
|
-
import { useHasOpenLayers } from '../use-open-layer-count';
|
|
17
|
-
|
|
18
16
|
/**
|
|
19
17
|
* Styles for the container for the top nav items.
|
|
20
18
|
*
|
|
@@ -27,8 +25,7 @@ const styles = {
|
|
|
27
25
|
root: "_nd5l8cbt _zulpu2gc _18zrutpp _179ria51 _1e0c11p5 _yv0e1mfv _4cvr1h6o _bfhkvuon _vchhusvi _4t3i1dgc _152t1nws _kqsw1if8 _1pbyegat _d6vu1bgi _1j8b18ax",
|
|
28
26
|
fullHeightSidebar: "_18zrze3t _179rglyw _bfhkglyw _lcxvglyw _pdlmutpp",
|
|
29
27
|
fullHeightSidebarExpanded: "_1rqt16a9 _jh1g18ax",
|
|
30
|
-
fullHeightSidebarWithLayeringFixes: "
|
|
31
|
-
fullHeightSidebarWithLayeringFixesAndOpenLayer: "_1pby11wp"
|
|
28
|
+
fullHeightSidebarWithLayeringFixes: "_1pby11wp _lcxv1wug _bfhkvuon _aetrb3bt _18postnw _1gufidpf _1czdidpf _g0nf3tht _1beue4h9 _uaeunqa1 _1cte1l7x"
|
|
32
29
|
};
|
|
33
30
|
|
|
34
31
|
/**
|
|
@@ -41,14 +38,6 @@ const backgroundStyles = {
|
|
|
41
38
|
sideNavExpanded: "_hyzqcs5v"
|
|
42
39
|
};
|
|
43
40
|
|
|
44
|
-
/**
|
|
45
|
-
* Namespaces to check for open layers within the top nav.
|
|
46
|
-
* When there is an open layer in the top nav, the top nav is given a higher z-index than the side nav.
|
|
47
|
-
*
|
|
48
|
-
* Placed outside the component for stability, as the list is used as an effect dependency.
|
|
49
|
-
*/
|
|
50
|
-
const topNavOpenLayerNamespaces = [openLayerObserverTopNavStartNamespace, openLayerObserverTopNavMiddleNamespace, openLayerObserverTopNavEndNamespace];
|
|
51
|
-
|
|
52
41
|
/**
|
|
53
42
|
* The top nav layout area. It will display at the top of the screen, below the banner if one is present.
|
|
54
43
|
*/
|
|
@@ -102,10 +91,6 @@ export function TopNav({
|
|
|
102
91
|
const {
|
|
103
92
|
isExpandedOnDesktop
|
|
104
93
|
} = useSideNavVisibility();
|
|
105
|
-
const hasOpenPopup = useHasOpenLayers({
|
|
106
|
-
namespaces: topNavOpenLayerNamespaces,
|
|
107
|
-
type: 'popup'
|
|
108
|
-
});
|
|
109
94
|
return /*#__PURE__*/React.createElement(HasCustomThemeContext.Provider, {
|
|
110
95
|
value: customTheme.isEnabled
|
|
111
96
|
}, isFhsEnabled && !fg('platform-dst-side-nav-layering-fixes') && /*#__PURE__*/React.createElement("div", {
|
|
@@ -118,7 +103,7 @@ export function TopNav({
|
|
|
118
103
|
}), /*#__PURE__*/React.createElement("header", {
|
|
119
104
|
id: id,
|
|
120
105
|
"data-layout-slot": true,
|
|
121
|
-
className: ax([styles.root, isFhsEnabled && styles.fullHeightSidebar, isFhsEnabled && fg('platform-dst-side-nav-layering-fixes') && styles.fullHeightSidebarWithLayeringFixes,
|
|
106
|
+
className: ax([styles.root, isFhsEnabled && styles.fullHeightSidebar, isFhsEnabled && fg('platform-dst-side-nav-layering-fixes') && styles.fullHeightSidebarWithLayeringFixes, isExpandedOnDesktop && isFhsEnabled && styles.fullHeightSidebarExpanded, xcss]),
|
|
122
107
|
"data-testid": testId
|
|
123
108
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
|
|
124
109
|
,
|
|
@@ -12,7 +12,7 @@ import { DangerouslyHoistCssVarToDocumentRoot, HoistCssVarToLocalGrid } from './
|
|
|
12
12
|
import { useLayoutId } from './id-utils';
|
|
13
13
|
var styles = {
|
|
14
14
|
root: "_nd5ldkfm _1reo15vq _18m915vq _4t3iutvi _152tidpf _kqsw1if8 _1pbyegat",
|
|
15
|
-
fullHeightSidebarWithLayeringFixes: "
|
|
15
|
+
fullHeightSidebarWithLayeringFixes: "_1pby11wp"
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -48,14 +48,15 @@ export var UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = "calc(var(".concat(UNS
|
|
|
48
48
|
* rely on accessing them through global means.
|
|
49
49
|
*/
|
|
50
50
|
export var localSlotLayers = {
|
|
51
|
+
// The side nav panel splitter is layered above the top nav when FHS and 'platform-dst-side-nav-layering-fixes' is enabled.
|
|
52
|
+
// It has the same z-index value, but is rendered after the top nav in the DOM so is stacked above.
|
|
53
|
+
sideNavPanelSplitterFHS: 4,
|
|
51
54
|
topBar: 4,
|
|
52
55
|
banner: 4,
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
bannerFHS: 2,
|
|
58
|
-
topNavFHS: 2,
|
|
56
|
+
// When FHS and 'platform-dst-side-nav-layering-fixes' is enabled, the side nav is layered below the top nav,
|
|
57
|
+
// but above the panel
|
|
58
|
+
bannerFHS: 3,
|
|
59
|
+
topNavFHS: 3,
|
|
59
60
|
sideNav: 2,
|
|
60
61
|
panelSmallViewports: 1
|
|
61
62
|
};
|
|
@@ -48,7 +48,8 @@ var lineStyles = {
|
|
|
48
48
|
root: "_kqswstnw _1e0c1ule _1bsb1l7b _4t3i1osq _syaz1kw7 _bfhk1r31 _1e021v6z"
|
|
49
49
|
};
|
|
50
50
|
var tooltipStyles = {
|
|
51
|
-
root: "_ahbq196n"
|
|
51
|
+
root: "_ahbq196n",
|
|
52
|
+
fullHeightSidebarWithLayeringFixes: "_1bsb1ris"
|
|
52
53
|
};
|
|
53
54
|
var panelSplitterDragDataSymbol = Symbol('panel-splitter-drag-data');
|
|
54
55
|
function signPanelSplitterDragData(data) {
|
|
@@ -86,7 +87,7 @@ var PanelSplitterTooltip = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
86
87
|
// Must be statically passed
|
|
87
88
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop, @atlaskit/design-system/no-unsafe-style-overrides
|
|
88
89
|
,
|
|
89
|
-
className: ax([tooltipStyles.root, className])
|
|
90
|
+
className: ax([tooltipStyles.root, fg('platform-dst-side-nav-layering-fixes') && tooltipStyles.fullHeightSidebarWithLayeringFixes, className])
|
|
90
91
|
// eslint-disable-next-line @atlaskit/design-system/no-unsafe-style-overrides
|
|
91
92
|
,
|
|
92
93
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import React, { useContext, useEffect, useState } from 'react';
|
|
2
3
|
import invariant from 'tiny-invariant';
|
|
4
|
+
import { useOpenLayerObserver } from '@atlaskit/layering/experimental/open-layer-observer';
|
|
3
5
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
4
6
|
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
5
7
|
import { openLayerObserverSideNavNamespace, openLayerObserverTopNavEndNamespace, openLayerObserverTopNavMiddleNamespace, openLayerObserverTopNavStartNamespace, sideNavPanelSplitterId } from '../constants';
|
|
6
8
|
import { useToggleSideNav } from '../side-nav/use-toggle-side-nav';
|
|
7
|
-
import { useHasOpenLayers } from '../use-open-layer-count';
|
|
8
9
|
import { OnDoubleClickContext, PanelSplitterContext } from './context';
|
|
9
10
|
import { PanelSplitter } from './panel-splitter';
|
|
10
11
|
|
|
@@ -14,14 +15,56 @@ import { PanelSplitter } from './panel-splitter';
|
|
|
14
15
|
* Placed outside the component for stability, as the list is used as an effect dependency.
|
|
15
16
|
*/
|
|
16
17
|
var openLayerNamespacesToCheck = [
|
|
17
|
-
//
|
|
18
|
-
// panel splitter, as it sits within the same stacking context as the side nav. For consistency however,
|
|
19
|
-
// we check it as well.
|
|
18
|
+
// The side nav panel splitter is layered above the side nav, so needs to be disabled when there are open popups in the side nav.
|
|
20
19
|
openLayerObserverSideNavNamespace,
|
|
21
|
-
//
|
|
22
|
-
// This means the part of the side nav panel splitter that was sitting above the top nav will no longer
|
|
23
|
-
// be interactive (as it is now behind the top nav). So, we need to disable the entire panel splitter.
|
|
20
|
+
// The side nav panel splitter is layered above the top nav, so needs to be disabled when there are open popups in the top nav.
|
|
24
21
|
openLayerObserverTopNavStartNamespace, openLayerObserverTopNavMiddleNamespace, openLayerObserverTopNavEndNamespace];
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Returns whether there are any open popups in the side nav or top nav
|
|
25
|
+
*/
|
|
26
|
+
function useHasOpenPopupsInSideNavOrTopNav() {
|
|
27
|
+
var isFhsEnabled = useIsFhsEnabled();
|
|
28
|
+
var openLayerObserver = useOpenLayerObserver();
|
|
29
|
+
// Setting the initial state to false, as it is unlikely that there would be any open popups when the app starts.
|
|
30
|
+
var _useState = useState(false),
|
|
31
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
32
|
+
hasOpenPopups = _useState2[0],
|
|
33
|
+
setHasOpenPopups = _useState2[1];
|
|
34
|
+
useEffect(function () {
|
|
35
|
+
if (!openLayerObserver || !isFhsEnabled || !fg('platform-dst-side-nav-layering-fixes')) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
function updateState() {
|
|
39
|
+
if (!openLayerObserver) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
var hasAnyOpenLayers = openLayerNamespacesToCheck.some(function (namespace) {
|
|
43
|
+
return openLayerObserver.getCount({
|
|
44
|
+
namespace: namespace,
|
|
45
|
+
type: 'popup'
|
|
46
|
+
}) > 0;
|
|
47
|
+
});
|
|
48
|
+
setHasOpenPopups(hasAnyOpenLayers);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Initial check. We do this _in case_ a popup is already open when the component mounts.
|
|
52
|
+
updateState();
|
|
53
|
+
|
|
54
|
+
// Subscribe to each namespace
|
|
55
|
+
var cleanups = openLayerNamespacesToCheck.map(function (namespace) {
|
|
56
|
+
return openLayerObserver.onChange(updateState, {
|
|
57
|
+
namespace: namespace
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
return function cleanupHook() {
|
|
61
|
+
cleanups.forEach(function (cleanup) {
|
|
62
|
+
return cleanup();
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
}, [isFhsEnabled, openLayerObserver]);
|
|
66
|
+
return hasOpenPopups;
|
|
67
|
+
}
|
|
25
68
|
/**
|
|
26
69
|
* _SideNavPanelSplitter_
|
|
27
70
|
*
|
|
@@ -53,11 +96,8 @@ export var SideNavPanelSplitter = function SideNavPanelSplitter(_ref) {
|
|
|
53
96
|
// The logic and state for disabling the panel splitter when there are open popups
|
|
54
97
|
// in the side nav or top nav is being placed here, instead of in `SideNav`, to prevent
|
|
55
98
|
// re-rendering the side nav anytime the number of open popups changes.
|
|
56
|
-
var
|
|
57
|
-
|
|
58
|
-
type: 'popup'
|
|
59
|
-
});
|
|
60
|
-
if (hasOpenLayers && isFhsEnabled && fg('platform-dst-side-nav-layering-fixes')) {
|
|
99
|
+
var hasOpenLayersInSideNavOrTopNav = useHasOpenPopupsInSideNavOrTopNav();
|
|
100
|
+
if (hasOpenLayersInSideNavOrTopNav && isFhsEnabled && fg('platform-dst-side-nav-layering-fixes')) {
|
|
61
101
|
return null;
|
|
62
102
|
}
|
|
63
103
|
return /*#__PURE__*/React.createElement(OnDoubleClickContext.Provider, {
|
|
@@ -9,19 +9,20 @@
|
|
|
9
9
|
._1e0c1txw{display:flex}
|
|
10
10
|
._1e0cglyw{display:none}
|
|
11
11
|
._1pbycs5v{z-index:2}
|
|
12
|
+
._1pbyegat{z-index:4}
|
|
12
13
|
._2lx21bp4{flex-direction:column}
|
|
13
14
|
._4t3i1osq{height:100%}
|
|
14
15
|
._4t3ieqxy{height:calc(100vh - var(--n_bnrM, 0px) - var(--n_tNvM, 0px))}
|
|
15
16
|
._bfhk1bhr{background-color:var(--ds-surface-overlay,#fff)}
|
|
16
17
|
._kqsw1if8{position:sticky}
|
|
17
|
-
.
|
|
18
|
-
.
|
|
18
|
+
._kqsw1n9t{position:fixed}
|
|
19
|
+
._t9ectl5p{transform:translateX(calc(var(--n_snvRsz, var(--n_snvW, 0px))))}
|
|
19
20
|
._u7coidpf{inset-block-end:0}
|
|
20
21
|
._vchhusvi{box-sizing:border-box}
|
|
21
22
|
[dir=rtl] ._65m41mrw{--animation-direction:-1}
|
|
22
23
|
@media (prefers-reduced-motion:no-preference){._10t88iot{transition-property:transform,display}._1vrh1a5r{transition-behavior:allow-discrete}._xrrpfnf5{transition-duration:.2s}._1lh81gzg{grid-area:main}._1xq51mm8{transition-timing-function:cubic-bezier(0,.4,0,1)}@starting-style{._1nu51p9u{transform:translateX(calc(-100%*var(--animation-direction)))}}._1xq51ku9{transition-timing-function:cubic-bezier(.6,0,0,1)}}
|
|
23
24
|
@media (min-width:48rem){._14b5hc79{width:var(--n_snvRsz,var(--n_sNvw))}}
|
|
24
|
-
@media (min-width:64rem){._165t56xv{height:calc(100vh - var(--n_bnrM, 0px))}._180k1wjm{inset-block-start:calc(var(--n_bnrM, 0px))}._26vxoned{padding-block-start:calc(var(--n_tNvM, 0px))}._1mt19dtb{margin-block-start:calc(var(--n_tNvM, 0px)*-1)}._dm2518uv{display:initial}._dm25glyw{display:none}._qiln1gzg{grid-area:main}._p5clglyw{border-inline-end:none}._4ap31bhr{background-color:var(--ds-surface-overlay,#fff)}._scbp130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}._qilnk0mc{grid-area:side-nav}._p5clia51{border-inline-end:var(--ds-border-width,1px) solid var(--ds-border,#0b120e24)}._4ap3vuon{background-color:var(--ds-surface,#fff)}._scbpglyw{box-shadow:none}}
|
|
25
|
+
@media (min-width:64rem){._165t56xv{height:calc(100vh - var(--n_bnrM, 0px))}._180k1wjm{inset-block-start:calc(var(--n_bnrM, 0px))}._26vxoned{padding-block-start:calc(var(--n_tNvM, 0px))}._1mt19dtb{margin-block-start:calc(var(--n_tNvM, 0px)*-1)}._p0az1elq{transform:translateX(calc(var(--n_snvRsz, var(--n_snvW, 0px)) - var(--ds-border-width, 1px)))}._dm2518uv{display:initial}._dm25glyw{display:none}._qiln1gzg{grid-area:main}._p5clglyw{border-inline-end:none}._4ap31bhr{background-color:var(--ds-surface-overlay,#fff)}._scbp130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}._qilnk0mc{grid-area:side-nav}._p5clia51{border-inline-end:var(--ds-border-width,1px) solid var(--ds-border,#0b120e24)}._4ap3vuon{background-color:var(--ds-surface,#fff)}._scbpglyw{box-shadow:none}}
|
|
25
26
|
@media (prefers-reduced-motion:no-preference) and (min-width:64rem){._17ly8iot{transition-property:transform,display}._177m1a5r{transition-behavior:allow-discrete}._1sg81gzg{grid-area:main}._vgub1mm8{transition-timing-function:cubic-bezier(0,.4,0,1)}._hh1u1p9u{transform:translateX(calc(-100%*var(--animation-direction)))}@starting-style{._s2eg1p9u{transform:translateX(calc(-100%*var(--animation-direction)))}}._1sg8k0mc{grid-area:side-nav}._vgub1ku9{transition-timing-function:cubic-bezier(.6,0,0,1)}._hjoifnf5{transition-duration:.2s}}
|
|
26
27
|
@media (prefers-reduced-motion:no-preference) and (not (min-width:64rem)){._aadi1p9u{transform:translateX(calc(-100%*var(--animation-direction)))}}
|
|
27
28
|
@supports not (-moz-appearance:none){@media (prefers-reduced-motion:no-preference){._139f8iot{transition-property:transform,display}._1tpvfnf5{transition-duration:.2s}._sylc1a5r{transition-behavior:allow-discrete}._1uwsjq3t{transform:translateX(-100%)}}@media (prefers-reduced-motion:no-preference){@starting-style{._oyeijq3t{transform:translateX(-100%)}}._139f8iot{transition-property:transform,display}._1tpvfnf5{transition-duration:.2s}._sylc1a5r{transition-behavior:allow-discrete}}}
|
|
@@ -19,7 +19,7 @@ import { media } from '@atlaskit/primitives/responsive';
|
|
|
19
19
|
import { useSkipLinkInternal } from '../../../context/skip-links/skip-links-context';
|
|
20
20
|
import { TopNavStartElement } from '../../../context/top-nav-start/top-nav-start-context';
|
|
21
21
|
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
22
|
-
import { bannerMountedVar, contentHeightWhenFixed, contentInsetBlockStart, localSlotLayers, openLayerObserverSideNavNamespace, sideNavLiveWidthVar, sideNavPanelSplitterId, sideNavVar, topNavMountedVar, UNSAFE_sideNavLayoutVar } from '../constants';
|
|
22
|
+
import { bannerMountedVar, contentHeightWhenFixed, contentInsetBlockStart, localSlotLayers, openLayerObserverSideNavNamespace, openLayerObserverTopNavStartNamespace, sideNavLiveWidthVar, sideNavPanelSplitterId, sideNavVar, topNavMountedVar, UNSAFE_sideNavLayoutVar } from '../constants';
|
|
23
23
|
import { DangerouslyHoistSlotSizes } from '../hoist-slot-sizes-context';
|
|
24
24
|
import { DangerouslyHoistCssVarToDocumentRoot } from '../hoist-utils';
|
|
25
25
|
import { useLayoutId } from '../id-utils';
|
|
@@ -38,6 +38,9 @@ import { useSideNavVisibilityCallbacks } from './use-side-nav-visibility-callbac
|
|
|
38
38
|
import { useToggleSideNav } from './use-toggle-side-nav';
|
|
39
39
|
import { SetSideNavVisibilityState, SideNavVisibilityState } from './visibility-context';
|
|
40
40
|
var panelSplitterResizingVar = '--n_snvRsz';
|
|
41
|
+
// Used to share the side nav width with the panel splitter, which is rendered outside the side nav element
|
|
42
|
+
// but positioned to stay at its right edge.
|
|
43
|
+
var sideNavClampedWidthVar = '--n_snvW';
|
|
41
44
|
var widthResizeBounds = {
|
|
42
45
|
min: '240px',
|
|
43
46
|
max: '50vw'
|
|
@@ -53,7 +56,7 @@ function getResizeBounds() {
|
|
|
53
56
|
*/
|
|
54
57
|
var isFirefox = typeof navigator !== 'undefined' && navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
|
|
55
58
|
var panelSplitterPortalTargetStyles = {
|
|
56
|
-
root: "
|
|
59
|
+
root: "_kqsw1n9t _1pbyegat _u7coidpf _t9ectl5p _4t3ieqxy _165t56xv _p0az1elq"
|
|
57
60
|
};
|
|
58
61
|
var styles = {
|
|
59
62
|
root: "_nd5l1b6c _191wglyw _t51zglyw _bfhk1bhr _16qs130s _vchhusvi _4t3ieqxy _152timx3 _kqsw1if8 _1bsb1ego _1pbycs5v _14b5hc79 _qilnk0mc _p5clia51 _4ap3vuon _scbpglyw",
|
|
@@ -212,7 +215,7 @@ function SideNavInternal(_ref) {
|
|
|
212
215
|
function open() {
|
|
213
216
|
// Prevent the flyout from being opened if there are any open layers in the top nav start
|
|
214
217
|
if (openLayerObserver && openLayerObserver.getCount({
|
|
215
|
-
namespace:
|
|
218
|
+
namespace: openLayerObserverTopNavStartNamespace,
|
|
216
219
|
type: 'popup'
|
|
217
220
|
}) > 0 && fg('platform_dst_nav4_side_nav_resize_tooltip_feedback')) {
|
|
218
221
|
return;
|
|
@@ -740,7 +743,7 @@ function SideNavInternal(_ref) {
|
|
|
740
743
|
* Avoiding nesting the `@supports` at-rule inside of `@media` means Compiled can remove duplicate styles from the generated CSS.
|
|
741
744
|
*/
|
|
742
745
|
!isFirefox;
|
|
743
|
-
return /*#__PURE__*/React.createElement("nav", _extends({
|
|
746
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("nav", _extends({
|
|
744
747
|
id: id
|
|
745
748
|
}, devTimeOnlyAttributes, {
|
|
746
749
|
"data-layout-slot": true,
|
|
@@ -781,9 +784,11 @@ function SideNavInternal(_ref) {
|
|
|
781
784
|
shortcut: isShortcutEnabled ? sideNavToggleTooltipKeyboardShortcut : undefined
|
|
782
785
|
}, /*#__PURE__*/React.createElement("div", {
|
|
783
786
|
className: ax([styles.flexContainer])
|
|
784
|
-
}, children)), isFhsEnabled && fg('platform-dst-side-nav-layering-fixes') && /*#__PURE__*/React.createElement("div", {
|
|
787
|
+
}, children))), isFhsEnabled && fg('platform-dst-side-nav-layering-fixes') && /*#__PURE__*/React.createElement("div", {
|
|
785
788
|
ref: panelSplitterPortalTargetRef,
|
|
786
|
-
|
|
789
|
+
"data-layout-slot": true,
|
|
790
|
+
style: _defineProperty({}, sideNavClampedWidthVar, clampedWidth),
|
|
791
|
+
className: ax([panelSplitterPortalTargetStyles.root, isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileOnly, !isExpandedOnDesktop && isExpandedOnMobile && !isFlyoutVisible && styles.hiddenDesktopOnly, !isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileAndDesktop])
|
|
787
792
|
}));
|
|
788
793
|
}
|
|
789
794
|
|
|
@@ -795,21 +800,21 @@ function SideNavInternal(_ref) {
|
|
|
795
800
|
*
|
|
796
801
|
* You can optionally render a `PanelSplitter` as a child to make the side navigation slot resizable.
|
|
797
802
|
*/
|
|
798
|
-
export function SideNav(
|
|
799
|
-
var children =
|
|
800
|
-
defaultCollapsed =
|
|
801
|
-
|
|
802
|
-
defaultWidth =
|
|
803
|
-
testId =
|
|
804
|
-
label =
|
|
805
|
-
|
|
806
|
-
skipLinkLabel =
|
|
807
|
-
onExpand =
|
|
808
|
-
onCollapse =
|
|
809
|
-
onPeekStart =
|
|
810
|
-
onPeekEnd =
|
|
811
|
-
canToggleWithShortcut =
|
|
812
|
-
id =
|
|
803
|
+
export function SideNav(_ref9) {
|
|
804
|
+
var children = _ref9.children,
|
|
805
|
+
defaultCollapsed = _ref9.defaultCollapsed,
|
|
806
|
+
_ref9$defaultWidth = _ref9.defaultWidth,
|
|
807
|
+
defaultWidth = _ref9$defaultWidth === void 0 ? 320 : _ref9$defaultWidth,
|
|
808
|
+
testId = _ref9.testId,
|
|
809
|
+
label = _ref9.label,
|
|
810
|
+
_ref9$skipLinkLabel = _ref9.skipLinkLabel,
|
|
811
|
+
skipLinkLabel = _ref9$skipLinkLabel === void 0 ? label : _ref9$skipLinkLabel,
|
|
812
|
+
onExpand = _ref9.onExpand,
|
|
813
|
+
onCollapse = _ref9.onCollapse,
|
|
814
|
+
onPeekStart = _ref9.onPeekStart,
|
|
815
|
+
onPeekEnd = _ref9.onPeekEnd,
|
|
816
|
+
canToggleWithShortcut = _ref9.canToggleWithShortcut,
|
|
817
|
+
id = _ref9.id;
|
|
813
818
|
return /*#__PURE__*/React.createElement(OpenLayerObserverNamespaceProvider, {
|
|
814
819
|
namespace: openLayerObserverSideNavNamespace
|
|
815
820
|
}, /*#__PURE__*/React.createElement(SideNavInternal, {
|
|
@@ -10,13 +10,11 @@ import { useSkipLink } from '../../../context/skip-links/skip-links-context';
|
|
|
10
10
|
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
11
11
|
import { HasCustomThemeContext } from '../../top-nav-items/themed/has-custom-theme-context';
|
|
12
12
|
import { useCustomTheme } from '../../top-nav-items/themed/use-custom-theme';
|
|
13
|
-
import { bannerMountedVar, localSlotLayers,
|
|
13
|
+
import { bannerMountedVar, localSlotLayers, sideNavLiveWidthVar, topNavMountedVar, UNSAFE_topNavVar } from '../constants';
|
|
14
14
|
import { DangerouslyHoistSlotSizes } from '../hoist-slot-sizes-context';
|
|
15
15
|
import { DangerouslyHoistCssVarToDocumentRoot, HoistCssVarToLocalGrid } from '../hoist-utils';
|
|
16
16
|
import { useLayoutId } from '../id-utils';
|
|
17
17
|
import { useSideNavVisibility } from '../side-nav/use-side-nav-visibility';
|
|
18
|
-
import { useHasOpenLayers } from '../use-open-layer-count';
|
|
19
|
-
|
|
20
18
|
/**
|
|
21
19
|
* Styles for the container for the top nav items.
|
|
22
20
|
*
|
|
@@ -29,8 +27,7 @@ var styles = {
|
|
|
29
27
|
root: "_nd5l8cbt _zulpu2gc _18zrutpp _179ria51 _1e0c11p5 _yv0e1mfv _4cvr1h6o _bfhkvuon _vchhusvi _4t3i1dgc _152t1nws _kqsw1if8 _1pbyegat _d6vu1bgi _1j8b18ax",
|
|
30
28
|
fullHeightSidebar: "_18zrze3t _179rglyw _bfhkglyw _lcxvglyw _pdlmutpp",
|
|
31
29
|
fullHeightSidebarExpanded: "_1rqt16a9 _jh1g18ax",
|
|
32
|
-
fullHeightSidebarWithLayeringFixes: "
|
|
33
|
-
fullHeightSidebarWithLayeringFixesAndOpenLayer: "_1pby11wp"
|
|
30
|
+
fullHeightSidebarWithLayeringFixes: "_1pby11wp _lcxv1wug _bfhkvuon _aetrb3bt _18postnw _1gufidpf _1czdidpf _g0nf3tht _1beue4h9 _uaeunqa1 _1cte1l7x"
|
|
34
31
|
};
|
|
35
32
|
|
|
36
33
|
/**
|
|
@@ -43,14 +40,6 @@ var backgroundStyles = {
|
|
|
43
40
|
sideNavExpanded: "_hyzqcs5v"
|
|
44
41
|
};
|
|
45
42
|
|
|
46
|
-
/**
|
|
47
|
-
* Namespaces to check for open layers within the top nav.
|
|
48
|
-
* When there is an open layer in the top nav, the top nav is given a higher z-index than the side nav.
|
|
49
|
-
*
|
|
50
|
-
* Placed outside the component for stability, as the list is used as an effect dependency.
|
|
51
|
-
*/
|
|
52
|
-
var topNavOpenLayerNamespaces = [openLayerObserverTopNavStartNamespace, openLayerObserverTopNavMiddleNamespace, openLayerObserverTopNavEndNamespace];
|
|
53
|
-
|
|
54
43
|
/**
|
|
55
44
|
* The top nav layout area. It will display at the top of the screen, below the banner if one is present.
|
|
56
45
|
*/
|
|
@@ -102,10 +91,6 @@ export function TopNav(_ref) {
|
|
|
102
91
|
foregroundStyle = _useMemo.foregroundStyle;
|
|
103
92
|
var _useSideNavVisibility = useSideNavVisibility(),
|
|
104
93
|
isExpandedOnDesktop = _useSideNavVisibility.isExpandedOnDesktop;
|
|
105
|
-
var hasOpenPopup = useHasOpenLayers({
|
|
106
|
-
namespaces: topNavOpenLayerNamespaces,
|
|
107
|
-
type: 'popup'
|
|
108
|
-
});
|
|
109
94
|
return /*#__PURE__*/React.createElement(HasCustomThemeContext.Provider, {
|
|
110
95
|
value: customTheme.isEnabled
|
|
111
96
|
}, isFhsEnabled && !fg('platform-dst-side-nav-layering-fixes') && /*#__PURE__*/React.createElement("div", {
|
|
@@ -118,7 +103,7 @@ export function TopNav(_ref) {
|
|
|
118
103
|
}), /*#__PURE__*/React.createElement("header", {
|
|
119
104
|
id: id,
|
|
120
105
|
"data-layout-slot": true,
|
|
121
|
-
className: ax([styles.root, isFhsEnabled && styles.fullHeightSidebar, isFhsEnabled && fg('platform-dst-side-nav-layering-fixes') && styles.fullHeightSidebarWithLayeringFixes,
|
|
106
|
+
className: ax([styles.root, isFhsEnabled && styles.fullHeightSidebar, isFhsEnabled && fg('platform-dst-side-nav-layering-fixes') && styles.fullHeightSidebarWithLayeringFixes, isExpandedOnDesktop && isFhsEnabled && styles.fullHeightSidebarExpanded, xcss]),
|
|
122
107
|
"data-testid": testId
|
|
123
108
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
|
|
124
109
|
,
|
|
@@ -33,9 +33,9 @@ export declare const UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = "calc(var(--
|
|
|
33
33
|
* rely on accessing them through global means.
|
|
34
34
|
*/
|
|
35
35
|
export declare const localSlotLayers: {
|
|
36
|
+
sideNavPanelSplitterFHS: number;
|
|
36
37
|
topBar: number;
|
|
37
38
|
banner: number;
|
|
38
|
-
topNavFHSWithOpenLayer: number;
|
|
39
39
|
bannerFHS: number;
|
|
40
40
|
topNavFHS: number;
|
|
41
41
|
sideNav: number;
|
|
@@ -33,9 +33,9 @@ export declare const UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = "calc(var(--
|
|
|
33
33
|
* rely on accessing them through global means.
|
|
34
34
|
*/
|
|
35
35
|
export declare const localSlotLayers: {
|
|
36
|
+
sideNavPanelSplitterFHS: number;
|
|
36
37
|
topBar: number;
|
|
37
38
|
banner: number;
|
|
38
|
-
topNavFHSWithOpenLayer: number;
|
|
39
39
|
bannerFHS: number;
|
|
40
40
|
topNavFHS: number;
|
|
41
41
|
sideNav: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/navigation-system",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.33.0",
|
|
4
4
|
"description": "The latest navigation system for Atlassian apps.",
|
|
5
5
|
"repository": "https://bitbucket.org/atlassian/atlassian-frontend-mirror",
|
|
6
6
|
"author": "Atlassian Pty Ltd",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"@atlaskit/popup": "^4.13.0",
|
|
79
79
|
"@atlaskit/pragmatic-drag-and-drop": "^1.7.0",
|
|
80
80
|
"@atlaskit/primitives": "^18.0.0",
|
|
81
|
-
"@atlaskit/side-nav-items": "^1.
|
|
81
|
+
"@atlaskit/side-nav-items": "^1.5.0",
|
|
82
82
|
"@atlaskit/tokens": "^11.0.0",
|
|
83
83
|
"@atlaskit/tooltip": "^20.14.0",
|
|
84
84
|
"@atlaskit/visually-hidden": "^3.0.0",
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"@atlaskit/breadcrumbs": "^15.3.0",
|
|
103
103
|
"@atlaskit/dropdown-menu": "^16.4.0",
|
|
104
104
|
"@atlaskit/form": "^15.3.0",
|
|
105
|
-
"@atlaskit/heading": "^5.
|
|
105
|
+
"@atlaskit/heading": "^5.3.0",
|
|
106
106
|
"@atlaskit/link": "^3.3.0",
|
|
107
107
|
"@atlaskit/lozenge": "^13.4.0",
|
|
108
108
|
"@atlaskit/menu": "^8.4.0",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"@atlaskit/skeleton": "^2.1.0",
|
|
116
116
|
"@atlaskit/textfield": "^8.2.0",
|
|
117
117
|
"@atlassian/feature-flags-test-utils": "^1.0.0",
|
|
118
|
-
"@atlassian/gemini": "^1.
|
|
118
|
+
"@atlassian/gemini": "^1.32.0",
|
|
119
119
|
"@atlassian/search-dialog": "^9.13.0",
|
|
120
120
|
"@atlassian/ssr-tests": "workspace:^",
|
|
121
121
|
"@atlassian/test-utils": "^1.0.0",
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.useHasOpenLayers = useHasOpenLayers;
|
|
8
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
-
var _react = require("react");
|
|
10
|
-
var _openLayerObserver = require("@atlaskit/layering/experimental/open-layer-observer");
|
|
11
|
-
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
12
|
-
var _useIsFhsEnabled = require("../fhs-rollout/use-is-fhs-enabled");
|
|
13
|
-
/**
|
|
14
|
-
* Returns whether there are any open layers across the specified namespaces, optionally filtered by type.
|
|
15
|
-
*/
|
|
16
|
-
function useHasOpenLayers(_ref) {
|
|
17
|
-
var namespaces = _ref.namespaces,
|
|
18
|
-
type = _ref.type;
|
|
19
|
-
var isFhsEnabled = (0, _useIsFhsEnabled.useIsFhsEnabled)();
|
|
20
|
-
var openLayerObserver = (0, _openLayerObserver.useOpenLayerObserver)();
|
|
21
|
-
// Setting the initial state to false, as it is unlikely that there would be any open layers when the app starts.
|
|
22
|
-
var _useState = (0, _react.useState)(false),
|
|
23
|
-
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
24
|
-
hasOpenLayers = _useState2[0],
|
|
25
|
-
setHasOpenLayers = _useState2[1];
|
|
26
|
-
(0, _react.useEffect)(function () {
|
|
27
|
-
if (!openLayerObserver || !isFhsEnabled || !(0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes')) {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
function updateState() {
|
|
31
|
-
if (!openLayerObserver) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
var hasAnyOpenLayers = namespaces.some(function (namespace) {
|
|
35
|
-
return openLayerObserver.getCount({
|
|
36
|
-
namespace: namespace,
|
|
37
|
-
type: type
|
|
38
|
-
}) > 0;
|
|
39
|
-
});
|
|
40
|
-
setHasOpenLayers(hasAnyOpenLayers);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Initial check
|
|
44
|
-
updateState();
|
|
45
|
-
|
|
46
|
-
// Subscribe to each namespace
|
|
47
|
-
var cleanups = namespaces.map(function (namespace) {
|
|
48
|
-
return openLayerObserver.onChange(updateState, {
|
|
49
|
-
namespace: namespace
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
return function cleanupHook() {
|
|
53
|
-
cleanups.forEach(function (cleanup) {
|
|
54
|
-
return cleanup();
|
|
55
|
-
});
|
|
56
|
-
};
|
|
57
|
-
}, [isFhsEnabled, openLayerObserver, namespaces, type]);
|
|
58
|
-
return hasOpenLayers;
|
|
59
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from 'react';
|
|
2
|
-
import { useOpenLayerObserver } from '@atlaskit/layering/experimental/open-layer-observer';
|
|
3
|
-
import { fg } from '@atlaskit/platform-feature-flags';
|
|
4
|
-
import { useIsFhsEnabled } from '../fhs-rollout/use-is-fhs-enabled';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Returns whether there are any open layers across the specified namespaces, optionally filtered by type.
|
|
8
|
-
*/
|
|
9
|
-
export function useHasOpenLayers({
|
|
10
|
-
namespaces,
|
|
11
|
-
type
|
|
12
|
-
}) {
|
|
13
|
-
const isFhsEnabled = useIsFhsEnabled();
|
|
14
|
-
const openLayerObserver = useOpenLayerObserver();
|
|
15
|
-
// Setting the initial state to false, as it is unlikely that there would be any open layers when the app starts.
|
|
16
|
-
const [hasOpenLayers, setHasOpenLayers] = useState(false);
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
if (!openLayerObserver || !isFhsEnabled || !fg('platform-dst-side-nav-layering-fixes')) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
function updateState() {
|
|
22
|
-
if (!openLayerObserver) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const hasAnyOpenLayers = namespaces.some(namespace => openLayerObserver.getCount({
|
|
26
|
-
namespace,
|
|
27
|
-
type
|
|
28
|
-
}) > 0);
|
|
29
|
-
setHasOpenLayers(hasAnyOpenLayers);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Initial check
|
|
33
|
-
updateState();
|
|
34
|
-
|
|
35
|
-
// Subscribe to each namespace
|
|
36
|
-
const cleanups = namespaces.map(namespace => openLayerObserver.onChange(updateState, {
|
|
37
|
-
namespace
|
|
38
|
-
}));
|
|
39
|
-
return function cleanupHook() {
|
|
40
|
-
cleanups.forEach(cleanup => cleanup());
|
|
41
|
-
};
|
|
42
|
-
}, [isFhsEnabled, openLayerObserver, namespaces, type]);
|
|
43
|
-
return hasOpenLayers;
|
|
44
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
-
import { useEffect, useState } from 'react';
|
|
3
|
-
import { useOpenLayerObserver } from '@atlaskit/layering/experimental/open-layer-observer';
|
|
4
|
-
import { fg } from '@atlaskit/platform-feature-flags';
|
|
5
|
-
import { useIsFhsEnabled } from '../fhs-rollout/use-is-fhs-enabled';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Returns whether there are any open layers across the specified namespaces, optionally filtered by type.
|
|
9
|
-
*/
|
|
10
|
-
export function useHasOpenLayers(_ref) {
|
|
11
|
-
var namespaces = _ref.namespaces,
|
|
12
|
-
type = _ref.type;
|
|
13
|
-
var isFhsEnabled = useIsFhsEnabled();
|
|
14
|
-
var openLayerObserver = useOpenLayerObserver();
|
|
15
|
-
// Setting the initial state to false, as it is unlikely that there would be any open layers when the app starts.
|
|
16
|
-
var _useState = useState(false),
|
|
17
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
18
|
-
hasOpenLayers = _useState2[0],
|
|
19
|
-
setHasOpenLayers = _useState2[1];
|
|
20
|
-
useEffect(function () {
|
|
21
|
-
if (!openLayerObserver || !isFhsEnabled || !fg('platform-dst-side-nav-layering-fixes')) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
function updateState() {
|
|
25
|
-
if (!openLayerObserver) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
var hasAnyOpenLayers = namespaces.some(function (namespace) {
|
|
29
|
-
return openLayerObserver.getCount({
|
|
30
|
-
namespace: namespace,
|
|
31
|
-
type: type
|
|
32
|
-
}) > 0;
|
|
33
|
-
});
|
|
34
|
-
setHasOpenLayers(hasAnyOpenLayers);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Initial check
|
|
38
|
-
updateState();
|
|
39
|
-
|
|
40
|
-
// Subscribe to each namespace
|
|
41
|
-
var cleanups = namespaces.map(function (namespace) {
|
|
42
|
-
return openLayerObserver.onChange(updateState, {
|
|
43
|
-
namespace: namespace
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
return function cleanupHook() {
|
|
47
|
-
cleanups.forEach(function (cleanup) {
|
|
48
|
-
return cleanup();
|
|
49
|
-
});
|
|
50
|
-
};
|
|
51
|
-
}, [isFhsEnabled, openLayerObserver, namespaces, type]);
|
|
52
|
-
return hasOpenLayers;
|
|
53
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { type LayerType } from '@atlaskit/layering/experimental/open-layer-observer';
|
|
2
|
-
/**
|
|
3
|
-
* Returns whether there are any open layers across the specified namespaces, optionally filtered by type.
|
|
4
|
-
*/
|
|
5
|
-
export declare function useHasOpenLayers({ namespaces, type, }: {
|
|
6
|
-
namespaces: string[];
|
|
7
|
-
type?: LayerType;
|
|
8
|
-
}): boolean;
|