@atlaskit/navigation-system 5.5.1 → 5.6.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 +8 -0
- package/dist/cjs/entry-points/fhs-rollout.js +26 -0
- package/dist/cjs/index.js +21 -0
- package/dist/cjs/ui/fhs-rollout/is-custom-is-fhs-enabled-context.js +14 -0
- package/dist/cjs/ui/fhs-rollout/is-fhs-enabled-context.js +17 -0
- package/dist/cjs/ui/fhs-rollout/is-fhs-enabled-provider.js +29 -0
- package/dist/cjs/ui/fhs-rollout/types.js +1 -0
- package/dist/cjs/ui/fhs-rollout/use-is-fhs-enabled.js +17 -0
- package/dist/cjs/ui/page-layout/panel-splitter/panel-splitter.js +9 -2
- package/dist/cjs/ui/page-layout/side-nav/side-nav-content.js +6 -2
- package/dist/cjs/ui/page-layout/side-nav/side-nav.js +7 -3
- package/dist/cjs/ui/page-layout/side-nav/toggle-button.js +6 -2
- package/dist/cjs/ui/page-layout/side-nav/use-side-nav-toggle-keyboard-shortcut.js +6 -2
- package/dist/cjs/ui/page-layout/top-nav/top-nav-end.js +5 -1
- package/dist/cjs/ui/page-layout/top-nav/top-nav-middle.js +5 -1
- package/dist/cjs/ui/page-layout/top-nav/top-nav-start.js +14 -10
- package/dist/cjs/ui/page-layout/top-nav/top-nav.js +8 -4
- package/dist/cjs/ui/top-nav-items/nav-logo/app-logo.js +7 -3
- package/dist/cjs/ui/top-nav-items/search.js +5 -1
- package/dist/es2019/entry-points/fhs-rollout.js +3 -0
- package/dist/es2019/index.js +3 -0
- package/dist/es2019/ui/fhs-rollout/is-custom-is-fhs-enabled-context.js +9 -0
- package/dist/es2019/ui/fhs-rollout/is-fhs-enabled-context.js +9 -0
- package/dist/es2019/ui/fhs-rollout/is-fhs-enabled-provider.js +23 -0
- package/dist/es2019/ui/fhs-rollout/types.js +0 -0
- package/dist/es2019/ui/fhs-rollout/use-is-fhs-enabled.js +12 -0
- package/dist/es2019/ui/page-layout/panel-splitter/panel-splitter.js +9 -2
- package/dist/es2019/ui/page-layout/side-nav/side-nav-content.js +7 -2
- package/dist/es2019/ui/page-layout/side-nav/side-nav.js +7 -3
- package/dist/es2019/ui/page-layout/side-nav/toggle-button.js +6 -2
- package/dist/es2019/ui/page-layout/side-nav/use-side-nav-toggle-keyboard-shortcut.js +6 -2
- package/dist/es2019/ui/page-layout/top-nav/top-nav-end.js +5 -1
- package/dist/es2019/ui/page-layout/top-nav/top-nav-middle.js +5 -1
- package/dist/es2019/ui/page-layout/top-nav/top-nav-start.js +14 -10
- package/dist/es2019/ui/page-layout/top-nav/top-nav.js +8 -4
- package/dist/es2019/ui/top-nav-items/nav-logo/app-logo.js +7 -3
- package/dist/es2019/ui/top-nav-items/search.js +40 -34
- package/dist/esm/entry-points/fhs-rollout.js +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/ui/fhs-rollout/is-custom-is-fhs-enabled-context.js +9 -0
- package/dist/esm/ui/fhs-rollout/is-fhs-enabled-context.js +11 -0
- package/dist/esm/ui/fhs-rollout/is-fhs-enabled-provider.js +22 -0
- package/dist/esm/ui/fhs-rollout/types.js +0 -0
- package/dist/esm/ui/fhs-rollout/use-is-fhs-enabled.js +12 -0
- package/dist/esm/ui/page-layout/panel-splitter/panel-splitter.js +9 -2
- package/dist/esm/ui/page-layout/side-nav/side-nav-content.js +7 -2
- package/dist/esm/ui/page-layout/side-nav/side-nav.js +7 -3
- package/dist/esm/ui/page-layout/side-nav/toggle-button.js +6 -2
- package/dist/esm/ui/page-layout/side-nav/use-side-nav-toggle-keyboard-shortcut.js +6 -2
- package/dist/esm/ui/page-layout/top-nav/top-nav-end.js +5 -1
- package/dist/esm/ui/page-layout/top-nav/top-nav-middle.js +5 -1
- package/dist/esm/ui/page-layout/top-nav/top-nav-start.js +14 -10
- package/dist/esm/ui/page-layout/top-nav/top-nav.js +8 -4
- package/dist/esm/ui/top-nav-items/nav-logo/app-logo.js +7 -3
- package/dist/esm/ui/top-nav-items/search.js +5 -1
- package/dist/types/entry-points/fhs-rollout.d.ts +3 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/ui/fhs-rollout/is-custom-is-fhs-enabled-context.d.ts +7 -0
- package/dist/types/ui/fhs-rollout/is-fhs-enabled-context.d.ts +8 -0
- package/dist/types/ui/fhs-rollout/is-fhs-enabled-provider.d.ts +10 -0
- package/dist/types/ui/fhs-rollout/types.d.ts +1 -0
- package/dist/types/ui/fhs-rollout/use-is-fhs-enabled.d.ts +6 -0
- package/dist/types/ui/page-layout/panel-splitter/panel-splitter.d.ts +1 -1
- package/dist/types/ui/page-layout/panel-splitter/side-nav-panel-splitter.d.ts +1 -1
- package/dist/types/ui/page-layout/root.d.ts +1 -1
- package/dist/types/ui/page-layout/side-nav/side-nav.d.ts +1 -1
- package/dist/types-ts4.5/entry-points/fhs-rollout.d.ts +3 -0
- package/dist/types-ts4.5/index.d.ts +3 -0
- package/dist/types-ts4.5/ui/fhs-rollout/is-custom-is-fhs-enabled-context.d.ts +7 -0
- package/dist/types-ts4.5/ui/fhs-rollout/is-fhs-enabled-context.d.ts +8 -0
- package/dist/types-ts4.5/ui/fhs-rollout/is-fhs-enabled-provider.d.ts +10 -0
- package/dist/types-ts4.5/ui/fhs-rollout/types.d.ts +1 -0
- package/dist/types-ts4.5/ui/fhs-rollout/use-is-fhs-enabled.d.ts +6 -0
- package/dist/types-ts4.5/ui/page-layout/panel-splitter/panel-splitter.d.ts +1 -1
- package/dist/types-ts4.5/ui/page-layout/panel-splitter/side-nav-panel-splitter.d.ts +1 -1
- package/dist/types-ts4.5/ui/page-layout/root.d.ts +1 -1
- package/dist/types-ts4.5/ui/page-layout/side-nav/side-nav.d.ts +1 -1
- package/fhs-rollout/package.json +17 -0
- package/package.json +5 -2
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createContext } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* __Is custom is fhs enabled context__
|
|
5
|
+
*
|
|
6
|
+
* Tracks if a custom value has been provided for `IsFhsEnabledContext`.
|
|
7
|
+
* Used to prevent nesting of the `IsFhsEnabledProvider`.
|
|
8
|
+
*/
|
|
9
|
+
export const IsCustomIsFhsEnabledContext = /*#__PURE__*/createContext(false);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createContext } from 'react';
|
|
2
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
3
|
+
/**
|
|
4
|
+
* __Is fhs enabled context__
|
|
5
|
+
*
|
|
6
|
+
* Tracks is FHS enabled.
|
|
7
|
+
* Defaults to feature gate 'navx-full-height-sidebar'.
|
|
8
|
+
*/
|
|
9
|
+
export const IsFhsEnabledContext = /*#__PURE__*/createContext(() => fg('navx-full-height-sidebar'));
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React, { useContext } from 'react';
|
|
2
|
+
import { IsCustomIsFhsEnabledContext } from './is-custom-is-fhs-enabled-context';
|
|
3
|
+
import { IsFhsEnabledContext } from './is-fhs-enabled-context';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* __Is fhs enabled provider__
|
|
7
|
+
*
|
|
8
|
+
* Used to provide a custom value for is FHS enabled.
|
|
9
|
+
*/
|
|
10
|
+
export const IsFhsEnabledProvider = ({
|
|
11
|
+
children,
|
|
12
|
+
value
|
|
13
|
+
}) => {
|
|
14
|
+
const isCustomIsFhsEnabled = useContext(IsCustomIsFhsEnabledContext);
|
|
15
|
+
if (isCustomIsFhsEnabled) {
|
|
16
|
+
throw new Error('A custom value for IsFhsEnabledContext has already been provided');
|
|
17
|
+
}
|
|
18
|
+
return /*#__PURE__*/React.createElement(IsCustomIsFhsEnabledContext.Provider, {
|
|
19
|
+
value: true
|
|
20
|
+
}, /*#__PURE__*/React.createElement(IsFhsEnabledContext.Provider, {
|
|
21
|
+
value: value
|
|
22
|
+
}, children));
|
|
23
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { IsFhsEnabledContext } from './is-fhs-enabled-context';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* __Use is fhs enabled__
|
|
6
|
+
*
|
|
7
|
+
* Retrieves is FHS enabled.
|
|
8
|
+
*/
|
|
9
|
+
export const useIsFhsEnabled = () => {
|
|
10
|
+
const isFhsEnabled = useContext(IsFhsEnabledContext);
|
|
11
|
+
return typeof isFhsEnabled === 'boolean' ? isFhsEnabled : isFhsEnabled();
|
|
12
|
+
};
|
|
@@ -17,6 +17,7 @@ import { disableNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/elem
|
|
|
17
17
|
import { preventUnhandled } from '@atlaskit/pragmatic-drag-and-drop/prevent-unhandled';
|
|
18
18
|
import Tooltip from '@atlaskit/tooltip';
|
|
19
19
|
import VisuallyHidden from '@atlaskit/visually-hidden';
|
|
20
|
+
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
20
21
|
import { OnDoubleClickContext, PanelSplitterContext } from './context';
|
|
21
22
|
import { convertResizeBoundToPixels } from './convert-resize-bound-to-pixels';
|
|
22
23
|
import { getPercentageWithinPixelBounds } from './get-percentage-within-pixel-bounds';
|
|
@@ -49,7 +50,10 @@ const MaybeTooltip = ({
|
|
|
49
50
|
shortcut,
|
|
50
51
|
children
|
|
51
52
|
}) => {
|
|
52
|
-
|
|
53
|
+
const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
|
|
54
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
55
|
+
useIsFhsEnabled() : fg('navx-full-height-sidebar');
|
|
56
|
+
if (tooltipContent && isFhsEnabled) {
|
|
53
57
|
return /*#__PURE__*/React.createElement(Tooltip, {
|
|
54
58
|
content: tooltipContent,
|
|
55
59
|
shortcut: shortcut,
|
|
@@ -85,6 +89,9 @@ const PortaledPanelSplitter = ({
|
|
|
85
89
|
tooltipContent,
|
|
86
90
|
shortcut
|
|
87
91
|
}) => {
|
|
92
|
+
const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
|
|
93
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
94
|
+
useIsFhsEnabled() : fg('navx-full-height-sidebar');
|
|
88
95
|
const splitterRef = useRef(null);
|
|
89
96
|
const labelId = useId();
|
|
90
97
|
// Separate state used for the input range width to remove the UI's dependency on the "persisted" layout state value being updated
|
|
@@ -288,7 +295,7 @@ const PortaledPanelSplitter = ({
|
|
|
288
295
|
ref: splitterRef,
|
|
289
296
|
"data-testid": testId,
|
|
290
297
|
onDoubleClick: onDoubleClick,
|
|
291
|
-
className: ax([grabAreaStyles.root,
|
|
298
|
+
className: ax([grabAreaStyles.root, isFhsEnabled && grabAreaStyles.fullHeightSidebar])
|
|
292
299
|
}, /*#__PURE__*/React.createElement(VisuallyHidden, null, /*#__PURE__*/React.createElement("input", {
|
|
293
300
|
type: "range",
|
|
294
301
|
value: rangeInputValue,
|
|
@@ -4,6 +4,8 @@ import { ax, ix } from "@compiled/react/runtime";
|
|
|
4
4
|
import React, { forwardRef, useMemo, useRef } from 'react';
|
|
5
5
|
import mergeRefs from '@atlaskit/ds-lib/merge-refs';
|
|
6
6
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
7
|
+
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
8
|
+
|
|
7
9
|
/**
|
|
8
10
|
* The main content of the side nav, filling up the middle section. It acts as a scroll container.
|
|
9
11
|
*
|
|
@@ -36,12 +38,15 @@ function _SideNavContent({
|
|
|
36
38
|
children,
|
|
37
39
|
testId
|
|
38
40
|
}, forwardedRef) {
|
|
41
|
+
const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
|
|
42
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
43
|
+
useIsFhsEnabled() : fg('navx-full-height-sidebar');
|
|
39
44
|
const internalRef = useRef(null);
|
|
40
45
|
const mergedRef = useMemo(() => mergeRefs([internalRef, forwardedRef]), [forwardedRef]);
|
|
41
46
|
return /*#__PURE__*/React.createElement("div", {
|
|
42
|
-
ref:
|
|
47
|
+
ref: isFhsEnabled ? mergedRef : forwardedRef,
|
|
43
48
|
"data-testid": testId,
|
|
44
|
-
className: ax([styles.scrollContainer,
|
|
49
|
+
className: ax([styles.scrollContainer, isFhsEnabled && fullHeightSidebarStyles.scrollContainer])
|
|
45
50
|
}, /*#__PURE__*/React.createElement("div", {
|
|
46
51
|
className: ax([styles.paddingContainer])
|
|
47
52
|
}, children));
|
|
@@ -15,6 +15,7 @@ import { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/ad
|
|
|
15
15
|
import { media } from '@atlaskit/primitives/responsive';
|
|
16
16
|
import { useSkipLinkInternal } from '../../../context/skip-links/skip-links-context';
|
|
17
17
|
import { TopNavStartElement } from '../../../context/top-nav-start/top-nav-start-context';
|
|
18
|
+
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
18
19
|
import { bannerMountedVar, contentHeightWhenFixed, contentInsetBlockStart, localSlotLayers, sideNavLiveWidthVar, sideNavPanelSplitterId, sideNavVar, topNavMountedVar, UNSAFE_sideNavLayoutVar } from '../constants';
|
|
19
20
|
import { DangerouslyHoistSlotSizes } from '../hoist-slot-sizes-context';
|
|
20
21
|
import { DangerouslyHoistCssVarToDocumentRoot } from '../hoist-utils';
|
|
@@ -90,6 +91,9 @@ function SideNavInternal({
|
|
|
90
91
|
canToggleWithShortcut
|
|
91
92
|
}) {
|
|
92
93
|
var _sideNavState$lastTri;
|
|
94
|
+
const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
|
|
95
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
96
|
+
useIsFhsEnabled() : fg('navx-full-height-sidebar');
|
|
93
97
|
const id = useLayoutId({
|
|
94
98
|
providedId
|
|
95
99
|
});
|
|
@@ -701,13 +705,13 @@ function SideNavInternal({
|
|
|
701
705
|
// Otherwise, the `@starting-style` rule will cause the sidebar to slide in initially.
|
|
702
706
|
const isFirstRenderRef = useRef(true);
|
|
703
707
|
useEffect(() => {
|
|
704
|
-
if (!
|
|
708
|
+
if (!isFhsEnabled) {
|
|
705
709
|
return;
|
|
706
710
|
}
|
|
707
711
|
if (isFirstRenderRef.current) {
|
|
708
712
|
isFirstRenderRef.current = false;
|
|
709
713
|
}
|
|
710
|
-
}, []);
|
|
714
|
+
}, [isFhsEnabled]);
|
|
711
715
|
|
|
712
716
|
// This is only used for the regular expand and collapse animations, not the flyout animations.
|
|
713
717
|
const shouldShowSidebarToggleAnimation =
|
|
@@ -744,7 +748,7 @@ function SideNavInternal({
|
|
|
744
748
|
},
|
|
745
749
|
ref: mergedRef,
|
|
746
750
|
"data-testid": testId,
|
|
747
|
-
className: ax([styles.root, isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileOnly, !isExpandedOnDesktop && isExpandedOnMobile && !isFlyoutVisible && styles.hiddenDesktopOnly, !isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileAndDesktop,
|
|
751
|
+
className: ax([styles.root, isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileOnly, !isExpandedOnDesktop && isExpandedOnMobile && !isFlyoutVisible && styles.hiddenDesktopOnly, !isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileAndDesktop, isFhsEnabled && styles.animationRTLSupport, shouldShowSidebarToggleAnimation && isFhsEnabled && styles.animationBaseStyles, isExpandedOnMobile && shouldShowSidebarToggleAnimation && isFhsEnabled && styles.expandAnimationMobile, !isExpandedOnMobile && shouldShowSidebarToggleAnimation && isFhsEnabled && styles.collapseAnimationMobile, isExpandedOnDesktop && shouldShowSidebarToggleAnimation && isFhsEnabled && styles.expandAnimationDesktop, !isExpandedOnDesktop && shouldShowSidebarToggleAnimation && isFhsEnabled && styles.collapseAnimationDesktop, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' && !isFhsEnabled && styles.flyoutOpen, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && !isFhsEnabled && styles.flyoutAnimateClosed, ((sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' || (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close') && !isFirefox && isFhsEnabled && styles.flyoutBaseStylesFullHeightSidebar, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && !isFirefox && isFhsEnabled && styles.flyoutAnimateClosedFullHeightSidebar, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' && !isFirefox && isFhsEnabled && styles.flyoutOpenFullHeightSidebar, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && !isFirefox && isFhsEnabled && styles.flyoutAnimateClosedFullHeightSidebar, isFlyoutClosed && isFhsEnabled && styles.fullHeightSidebar])
|
|
748
752
|
}), /*#__PURE__*/React.createElement(DangerouslyHoistCssVarToDocumentRoot, {
|
|
749
753
|
variableName: sideNavLiveWidthVar,
|
|
750
754
|
value: "0px",
|
|
@@ -7,6 +7,7 @@ import { useAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
|
7
7
|
import SidebarCollapseIcon from '@atlaskit/icon/core/sidebar-collapse';
|
|
8
8
|
import SidebarExpandIcon from '@atlaskit/icon/core/sidebar-expand';
|
|
9
9
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
10
|
+
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
10
11
|
import { IconButton } from '../../top-nav-items/themed/migration';
|
|
11
12
|
import { useIsSideNavShortcutEnabled } from './is-side-nav-shortcut-enabled-context';
|
|
12
13
|
import { sideNavToggleTooltipKeyboardShortcut } from './side-nav-toggle-tooltip-keyboard-shortcut';
|
|
@@ -36,6 +37,9 @@ export const SideNavToggleButton = ({
|
|
|
36
37
|
interactionName,
|
|
37
38
|
onClick
|
|
38
39
|
}) => {
|
|
40
|
+
const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
|
|
41
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
42
|
+
useIsFhsEnabled() : fg('navx-full-height-sidebar');
|
|
39
43
|
const {
|
|
40
44
|
isExpandedOnDesktop: isSideNavExpandedOnDesktop,
|
|
41
45
|
isExpandedOnMobile: isSideNavExpandedOnMobile
|
|
@@ -140,14 +144,14 @@ export const SideNavToggleButton = ({
|
|
|
140
144
|
}, isSideNavExpanded ? /*#__PURE__*/React.createElement(SidebarCollapseIcon, props) : /*#__PURE__*/React.createElement(SidebarExpandIcon, props));
|
|
141
145
|
const isShortcutEnabled = useIsSideNavShortcutEnabled();
|
|
142
146
|
const tooltipProps = useMemo(() => {
|
|
143
|
-
if (
|
|
147
|
+
if (isFhsEnabled) {
|
|
144
148
|
return {
|
|
145
149
|
...toggleButtonTooltipOptions,
|
|
146
150
|
shortcut: isShortcutEnabled ? sideNavToggleTooltipKeyboardShortcut : undefined
|
|
147
151
|
};
|
|
148
152
|
}
|
|
149
153
|
return toggleButtonTooltipOptions;
|
|
150
|
-
}, [isShortcutEnabled]);
|
|
154
|
+
}, [isFhsEnabled, isShortcutEnabled]);
|
|
151
155
|
return /*#__PURE__*/React.createElement(IconButton, {
|
|
152
156
|
appearance: "subtle",
|
|
153
157
|
label: isSideNavExpanded ? collapseLabel : expandLabel,
|
|
@@ -3,6 +3,7 @@ import { bind } from 'bind-event-listener';
|
|
|
3
3
|
import useStableRef from '@atlaskit/ds-lib/use-stable-ref';
|
|
4
4
|
import { useOpenLayerObserver } from '@atlaskit/layering/experimental/open-layer-observer';
|
|
5
5
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
6
|
+
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
6
7
|
import { useIsSideNavShortcutEnabled } from './is-side-nav-shortcut-enabled-context';
|
|
7
8
|
import { useToggleSideNav } from './use-toggle-side-nav';
|
|
8
9
|
|
|
@@ -12,6 +13,9 @@ import { useToggleSideNav } from './use-toggle-side-nav';
|
|
|
12
13
|
export function useSideNavToggleKeyboardShortcut({
|
|
13
14
|
canToggleWithShortcut
|
|
14
15
|
}) {
|
|
16
|
+
const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
|
|
17
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
18
|
+
useIsFhsEnabled() : fg('navx-full-height-sidebar');
|
|
15
19
|
const openLayerObserver = useOpenLayerObserver();
|
|
16
20
|
const toggleVisibilityByShortcut = useToggleSideNav({
|
|
17
21
|
trigger: 'keyboard'
|
|
@@ -19,7 +23,7 @@ export function useSideNavToggleKeyboardShortcut({
|
|
|
19
23
|
const canToggleWithShortcutStableRef = useStableRef(canToggleWithShortcut);
|
|
20
24
|
const isSideNavShortcutEnabled = useIsSideNavShortcutEnabled();
|
|
21
25
|
useEffect(() => {
|
|
22
|
-
if (!
|
|
26
|
+
if (!isFhsEnabled) {
|
|
23
27
|
return;
|
|
24
28
|
}
|
|
25
29
|
if (!isSideNavShortcutEnabled) {
|
|
@@ -48,5 +52,5 @@ export function useSideNavToggleKeyboardShortcut({
|
|
|
48
52
|
}
|
|
49
53
|
}
|
|
50
54
|
});
|
|
51
|
-
}, [canToggleWithShortcutStableRef, openLayerObserver, toggleVisibilityByShortcut
|
|
55
|
+
}, [canToggleWithShortcutStableRef, isFhsEnabled, isSideNavShortcutEnabled, openLayerObserver, toggleVisibilityByShortcut]);
|
|
52
56
|
}
|
|
@@ -10,6 +10,7 @@ import { fg } from '@atlaskit/platform-feature-flags';
|
|
|
10
10
|
import Popup from '@atlaskit/popup';
|
|
11
11
|
import { UNSAFE_useMediaQuery as useMediaQuery } from '@atlaskit/primitives/compiled';
|
|
12
12
|
import { List } from '../../../components/list';
|
|
13
|
+
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
13
14
|
import { HasCustomThemeContext } from '../../top-nav-items/themed/has-custom-theme-context';
|
|
14
15
|
import { IconButton } from '../../top-nav-items/themed/migration';
|
|
15
16
|
const containerStyles = {
|
|
@@ -36,6 +37,9 @@ export function TopNavEnd({
|
|
|
36
37
|
label = 'Actions',
|
|
37
38
|
showMoreButtonLabel = 'Show more'
|
|
38
39
|
}) {
|
|
40
|
+
const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
|
|
41
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
42
|
+
useIsFhsEnabled() : fg('navx-full-height-sidebar');
|
|
39
43
|
const [isOpen, setIsOpen] = useState(false);
|
|
40
44
|
// Always setting to `false` for the initial render (will flip in an effect for mobile)
|
|
41
45
|
const [isMobile, setIsMobile] = useState(false);
|
|
@@ -54,7 +58,7 @@ export function TopNavEnd({
|
|
|
54
58
|
}, [query]);
|
|
55
59
|
return /*#__PURE__*/React.createElement("nav", {
|
|
56
60
|
"aria-label": label,
|
|
57
|
-
className: ax([containerStyles.root,
|
|
61
|
+
className: ax([containerStyles.root, isFhsEnabled && containerStyles.fullHeightSidebar, fg('team25-eu-jira-logo-updates-csm-jsm') && containerStyles.jiraProductLogoUpdate])
|
|
58
62
|
}, isMobile ? /*#__PURE__*/React.createElement(Popup, {
|
|
59
63
|
isOpen: isOpen,
|
|
60
64
|
onClose: () => setIsOpen(false),
|
|
@@ -3,6 +3,7 @@ import "./top-nav-middle.compiled.css";
|
|
|
3
3
|
import { ax, ix } from "@compiled/react/runtime";
|
|
4
4
|
import React from 'react';
|
|
5
5
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
6
|
+
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
6
7
|
const styles = {
|
|
7
8
|
root: "_zulpu2gc _yyhycs5v _1bsb1osq _4cvr1h6o _1e0c1txw _1bahh9n0 _181n11p5 _1j8b15b0 _lagd1bp4 _1t4c1ris _12e8h9n0",
|
|
8
9
|
fullHeightSidebar: "_lcxv1wug"
|
|
@@ -19,7 +20,10 @@ const styles = {
|
|
|
19
20
|
export function TopNavMiddle({
|
|
20
21
|
children
|
|
21
22
|
}) {
|
|
23
|
+
const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
|
|
24
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
25
|
+
useIsFhsEnabled() : fg('navx-full-height-sidebar');
|
|
22
26
|
return /*#__PURE__*/React.createElement("div", {
|
|
23
|
-
className: ax([styles.root,
|
|
27
|
+
className: ax([styles.root, isFhsEnabled && styles.fullHeightSidebar])
|
|
24
28
|
}, children);
|
|
25
29
|
}
|
|
@@ -6,6 +6,7 @@ import useStableRef from '@atlaskit/ds-lib/use-stable-ref';
|
|
|
6
6
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
7
7
|
import { UNSAFE_useMediaQuery } from '@atlaskit/primitives/compiled';
|
|
8
8
|
import { TopNavStartAttachRef } from '../../../context/top-nav-start/top-nav-start-context';
|
|
9
|
+
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
9
10
|
import { useSideNavVisibility } from '../side-nav/use-side-nav-visibility';
|
|
10
11
|
import { SideNavVisibilityState } from '../side-nav/visibility-context';
|
|
11
12
|
|
|
@@ -24,7 +25,7 @@ const flexGap = "var(--ds-space-050, 4px)";
|
|
|
24
25
|
/**
|
|
25
26
|
* Styles for the TopNavStart element.
|
|
26
27
|
*
|
|
27
|
-
* When `
|
|
28
|
+
* When `useIsFhsEnabled` is true this is the styling for the inner element,
|
|
28
29
|
* which re-enables pointer events.
|
|
29
30
|
*/
|
|
30
31
|
const innerStyles = {
|
|
@@ -38,7 +39,7 @@ const innerStyles = {
|
|
|
38
39
|
* Styles for the outer element, that does not have re-enabled pointer events and spans the entire
|
|
39
40
|
* width of the TopNavStart area.
|
|
40
41
|
*
|
|
41
|
-
* This wrapper element is only rendered when `
|
|
42
|
+
* This wrapper element is only rendered when `useIsFhsEnabled` is true.
|
|
42
43
|
*/
|
|
43
44
|
const wrapperStyles = {
|
|
44
45
|
root: "_vchhusvi _bozgutpp _4t3i1osq",
|
|
@@ -132,6 +133,9 @@ export function TopNavStart({
|
|
|
132
133
|
testId,
|
|
133
134
|
sideNavToggleButton
|
|
134
135
|
}) {
|
|
136
|
+
const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
|
|
137
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
138
|
+
useIsFhsEnabled() : fg('navx-full-height-sidebar');
|
|
135
139
|
const ref = useContext(TopNavStartAttachRef);
|
|
136
140
|
const elementRef = useRef(null);
|
|
137
141
|
|
|
@@ -173,7 +177,7 @@ export function TopNavStart({
|
|
|
173
177
|
const isFirstRenderRef = useRef(true);
|
|
174
178
|
const sideNavState = useContext(SideNavVisibilityState);
|
|
175
179
|
useEffect(() => {
|
|
176
|
-
if (!
|
|
180
|
+
if (!isFhsEnabled) {
|
|
177
181
|
return;
|
|
178
182
|
}
|
|
179
183
|
|
|
@@ -186,13 +190,13 @@ export function TopNavStart({
|
|
|
186
190
|
if (isFirstRenderRef.current) {
|
|
187
191
|
isFirstRenderRef.current = false;
|
|
188
192
|
}
|
|
189
|
-
}, [sideNavState]);
|
|
193
|
+
}, [isFhsEnabled, sideNavState]);
|
|
190
194
|
|
|
191
195
|
// Using a stable ref to avoid re-running the animation layout effect when the toggle button prop value changes, which
|
|
192
196
|
// can happen a lot (e.g. if the parent re-renders)
|
|
193
197
|
const sideNavToggleButtonStableRef = useStableRef(sideNavToggleButton);
|
|
194
198
|
useLayoutEffect(() => {
|
|
195
|
-
if (!
|
|
199
|
+
if (!isFhsEnabled) {
|
|
196
200
|
return;
|
|
197
201
|
}
|
|
198
202
|
|
|
@@ -229,19 +233,19 @@ export function TopNavStart({
|
|
|
229
233
|
});
|
|
230
234
|
|
|
231
235
|
// This layout effect is called when the sidebar's desktop expansion state changes.
|
|
232
|
-
}, [isExpandedOnDesktop, sideNavToggleButtonStableRef]);
|
|
233
|
-
const TopNavStartInner =
|
|
236
|
+
}, [isExpandedOnDesktop, isFhsEnabled, sideNavToggleButtonStableRef]);
|
|
237
|
+
const TopNavStartInner = isFhsEnabled ? TopNavStartInnerFHS : TopNavStartInnerOld;
|
|
234
238
|
return /*#__PURE__*/React.createElement(TopNavStartInner, {
|
|
235
239
|
ref: elementRef,
|
|
236
240
|
testId: testId
|
|
237
|
-
}, !
|
|
241
|
+
}, !isFhsEnabled && sideNavToggleButton, sideNavToggleButton && (!isDesktop || !isExpandedOnDesktop) && isFhsEnabled && /*#__PURE__*/React.createElement("div", {
|
|
238
242
|
key: sideNavToggleButtonKey,
|
|
239
243
|
className: ax([!isFirefox && toggleButtonWrapperStyles.root, !isFirefox && animationState.type === 'idle' && toggleButtonWrapperStyles.finalPosition, !isFirefox &&
|
|
240
244
|
// Timing function is applied when the browser animates to the idle position.
|
|
241
245
|
animationState.type === 'idle' && toggleButtonWrapperStyles.collapseAnimationTimingFunction, !isFirefox && animationState.type === 'collapse' && toggleButtonWrapperStyles.collapseAnimationStartPosition])
|
|
242
|
-
}, sideNavToggleButton),
|
|
246
|
+
}, sideNavToggleButton), isFhsEnabled ? /*#__PURE__*/React.createElement("div", {
|
|
243
247
|
className: ax([childrenWrapperStyles.root, !isFirefox && childrenWrapperStyles.animationBaseStyles, !isFirefox && animationState.type === 'idle' && childrenWrapperStyles.finalPosition, !isFirefox && animationState.type === 'expand' && childrenWrapperStyles.expandAnimationStartPosition, !isFirefox && animationState.type === 'collapse' && childrenWrapperStyles.collapseAnimationStartPosition])
|
|
244
|
-
}, children) : children, sideNavToggleButton && isDesktop && isExpandedOnDesktop &&
|
|
248
|
+
}, children) : children, sideNavToggleButton && isDesktop && isExpandedOnDesktop && isFhsEnabled && /*#__PURE__*/React.createElement("div", {
|
|
245
249
|
key: sideNavToggleButtonKey,
|
|
246
250
|
className: ax([!isFirefox && toggleButtonWrapperStyles.root, toggleButtonWrapperStyles.alignEnd, !isFirefox && animationState.type === 'idle' && toggleButtonWrapperStyles.finalPosition, !isFirefox &&
|
|
247
251
|
// Timing function is applied when the browser animates to the idle position.
|
|
@@ -5,6 +5,7 @@ import { ax, ix } from "@compiled/react/runtime";
|
|
|
5
5
|
import { useContext, useMemo } from 'react';
|
|
6
6
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
7
7
|
import { useSkipLink } from '../../../context/skip-links/skip-links-context';
|
|
8
|
+
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
8
9
|
import { HasCustomThemeContext } from '../../top-nav-items/themed/has-custom-theme-context';
|
|
9
10
|
import { useCustomTheme } from '../../top-nav-items/themed/use-custom-theme';
|
|
10
11
|
import { bannerMountedVar, localSlotLayers, topNavMountedVar, UNSAFE_topNavVar } from '../constants';
|
|
@@ -48,6 +49,9 @@ export function TopNav({
|
|
|
48
49
|
id: providedId,
|
|
49
50
|
UNSAFE_theme
|
|
50
51
|
}) {
|
|
52
|
+
const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
|
|
53
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
54
|
+
useIsFhsEnabled() : fg('navx-full-height-sidebar');
|
|
51
55
|
const dangerouslyHoistSlotSizes = useContext(DangerouslyHoistSlotSizes);
|
|
52
56
|
const id = useLayoutId({
|
|
53
57
|
providedId
|
|
@@ -88,21 +92,21 @@ export function TopNav({
|
|
|
88
92
|
} = useSideNavVisibility();
|
|
89
93
|
return /*#__PURE__*/React.createElement(HasCustomThemeContext.Provider, {
|
|
90
94
|
value: customTheme.isEnabled
|
|
91
|
-
},
|
|
95
|
+
}, isFhsEnabled && /*#__PURE__*/React.createElement("div", {
|
|
92
96
|
"data-layout-slot": true,
|
|
93
97
|
"aria-hidden": true
|
|
94
98
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
|
|
95
99
|
,
|
|
96
|
-
style:
|
|
100
|
+
style: isFhsEnabled ? backgroundStyle : undefined,
|
|
97
101
|
className: ax([backgroundStyles.root, isExpandedOnDesktop && backgroundStyles.sideNavExpanded])
|
|
98
102
|
}), /*#__PURE__*/React.createElement("header", {
|
|
99
103
|
id: id,
|
|
100
104
|
"data-layout-slot": true,
|
|
101
|
-
className: ax([styles.root,
|
|
105
|
+
className: ax([styles.root, isFhsEnabled && styles.fullHeightSidebar, isExpandedOnDesktop && isFhsEnabled && styles.fullHeightSidebarExpanded, xcss]),
|
|
102
106
|
"data-testid": testId
|
|
103
107
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
|
|
104
108
|
,
|
|
105
|
-
style:
|
|
109
|
+
style: isFhsEnabled ? foregroundStyle : customTheme.isEnabled ? customTheme.style : undefined
|
|
106
110
|
}, /*#__PURE__*/React.createElement(HoistCssVarToLocalGrid, {
|
|
107
111
|
variableName: topNavMountedVar,
|
|
108
112
|
value: height
|
|
@@ -6,6 +6,7 @@ import { cx } from '@compiled/react';
|
|
|
6
6
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
7
7
|
import { Anchor, Inline, Text } from '@atlaskit/primitives/compiled';
|
|
8
8
|
import Tooltip from '@atlaskit/tooltip';
|
|
9
|
+
import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
|
|
9
10
|
import { useHasCustomTheme } from '../themed/has-custom-theme-context';
|
|
10
11
|
import { LogoRenderer } from './logo-renderer';
|
|
11
12
|
const anchorStyles = {
|
|
@@ -45,6 +46,9 @@ export const AppLogo = ({
|
|
|
45
46
|
icon,
|
|
46
47
|
onClick
|
|
47
48
|
}) => {
|
|
49
|
+
const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
|
|
50
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
51
|
+
useIsFhsEnabled() : fg('navx-full-height-sidebar');
|
|
48
52
|
const ref = useRef(null);
|
|
49
53
|
const nameRef = useRef(null);
|
|
50
54
|
const hasCustomTheme = useHasCustomTheme();
|
|
@@ -63,14 +67,14 @@ export const AppLogo = ({
|
|
|
63
67
|
// @ts-expect-error - non-standard values for `borderRadius` and the custom theming interaction states
|
|
64
68
|
// eslint-disable-next-line @compiled/no-suppress-xcss
|
|
65
69
|
,
|
|
66
|
-
xcss: cx(anchorStyles.root, hasCustomTheme ? anchorStyles.interactionStatesCustomTheming : anchorStyles.interactionStates,
|
|
70
|
+
xcss: cx(anchorStyles.root, hasCustomTheme ? anchorStyles.interactionStatesCustomTheming : anchorStyles.interactionStates, isFhsEnabled && anchorStyles.fullHeightSidebar),
|
|
67
71
|
onClick: onClick
|
|
68
72
|
}, /*#__PURE__*/React.createElement(Inline, {
|
|
69
73
|
space: "space.075",
|
|
70
74
|
alignBlock: "center",
|
|
71
|
-
xcss: cx(logoWrapperStyles.root,
|
|
75
|
+
xcss: cx(logoWrapperStyles.root, isFhsEnabled && logoWrapperStyles.fullHeightSidebar)
|
|
72
76
|
}, /*#__PURE__*/React.createElement("div", {
|
|
73
|
-
className: ax([iconContainerStyles.root,
|
|
77
|
+
className: ax([iconContainerStyles.root, isFhsEnabled && iconContainerStyles.fullHeightSidebar])
|
|
74
78
|
}, /*#__PURE__*/React.createElement(LogoRenderer
|
|
75
79
|
// Top nav always uses the new logo design
|
|
76
80
|
, {
|
|
@@ -6,6 +6,7 @@ import { cx } from '@atlaskit/css';
|
|
|
6
6
|
import SearchIcon from '@atlaskit/icon/core/search';
|
|
7
7
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
8
8
|
import { Pressable, Show, Text } from '@atlaskit/primitives/compiled';
|
|
9
|
+
import { useIsFhsEnabled } from '../fhs-rollout/use-is-fhs-enabled';
|
|
9
10
|
import { IconButton } from './themed/migration';
|
|
10
11
|
const styles = {
|
|
11
12
|
root: "_2rko12b0 _1rjcze3t _18zr12x7 _yv0e1mfv _4cvr1h6o _bfhk1j9a _vchhusvi _80om1kdv _1e0cglyw _4t3izwfg _p12f1kvu _1bsb1osq _irr3l4ek _1di6r01l _114b11p5",
|
|
@@ -27,37 +28,42 @@ export const Search = ({
|
|
|
27
28
|
elemAfter,
|
|
28
29
|
interactionName,
|
|
29
30
|
'aria-haspopup': ariaHaspopup
|
|
30
|
-
}) =>
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
}, /*#__PURE__*/React.createElement(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
31
|
+
}) => {
|
|
32
|
+
const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
|
|
33
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
34
|
+
useIsFhsEnabled() : fg('navx-full-height-sidebar');
|
|
35
|
+
return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Pressable, {
|
|
36
|
+
style: {
|
|
37
|
+
// To win the specificity war against Emotion we move this into inline styles
|
|
38
|
+
// When Emotion has been stripped from the Design System move this to Compiled.
|
|
39
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
|
|
40
|
+
cursor: 'text',
|
|
41
|
+
border: `${"var(--ds-border-width, 1px)"} solid ${"var(--ds-border-input, #8C8F97)"}`
|
|
42
|
+
},
|
|
43
|
+
onClick: onClick,
|
|
44
|
+
xcss: cx(styles.root, isFhsEnabled && styles.fullHeightSidebar),
|
|
45
|
+
interactionName: interactionName,
|
|
46
|
+
"aria-haspopup": ariaHaspopup
|
|
47
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
48
|
+
className: ax([styles.iconBefore])
|
|
49
|
+
}, /*#__PURE__*/React.createElement(IconBefore, {
|
|
50
|
+
color: "var(--ds-icon-subtle, #505258)",
|
|
51
|
+
spacing: "spacious",
|
|
52
|
+
label: ""
|
|
53
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
54
|
+
className: ax([styles.buttonText])
|
|
55
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
56
|
+
color: "color.text.subtlest"
|
|
57
|
+
}, label)), elemAfter && /*#__PURE__*/React.createElement("span", {
|
|
58
|
+
className: ax([styles.elemAfter])
|
|
59
|
+
}, elemAfter)), /*#__PURE__*/React.createElement(Show, {
|
|
60
|
+
below: "xs"
|
|
61
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
62
|
+
label: label,
|
|
63
|
+
appearance: "subtle",
|
|
64
|
+
icon: SearchIcon,
|
|
65
|
+
onClick: onClick,
|
|
66
|
+
interactionName: interactionName,
|
|
67
|
+
"aria-haspopup": ariaHaspopup
|
|
68
|
+
})));
|
|
69
|
+
};
|
package/dist/esm/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export { IsFhsEnabledContext } from './ui/fhs-rollout/is-fhs-enabled-context';
|
|
2
|
+
export { IsFhsEnabledProvider } from './ui/fhs-rollout/is-fhs-enabled-provider';
|
|
3
|
+
export { useIsFhsEnabled } from './ui/fhs-rollout/use-is-fhs-enabled';
|
|
1
4
|
export { ExpandableMenuItem } from './ui/menu-item/expandable-menu-item/expandable-menu-item';
|
|
2
5
|
export { ExpandableMenuItemTrigger } from './ui/menu-item/expandable-menu-item/expandable-menu-item-trigger';
|
|
3
6
|
export { ExpandableMenuItemContent } from './ui/menu-item/expandable-menu-item/expandable-menu-item-content';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createContext } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* __Is custom is fhs enabled context__
|
|
5
|
+
*
|
|
6
|
+
* Tracks if a custom value has been provided for `IsFhsEnabledContext`.
|
|
7
|
+
* Used to prevent nesting of the `IsFhsEnabledProvider`.
|
|
8
|
+
*/
|
|
9
|
+
export var IsCustomIsFhsEnabledContext = /*#__PURE__*/createContext(false);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createContext } from 'react';
|
|
2
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
3
|
+
/**
|
|
4
|
+
* __Is fhs enabled context__
|
|
5
|
+
*
|
|
6
|
+
* Tracks is FHS enabled.
|
|
7
|
+
* Defaults to feature gate 'navx-full-height-sidebar'.
|
|
8
|
+
*/
|
|
9
|
+
export var IsFhsEnabledContext = /*#__PURE__*/createContext(function () {
|
|
10
|
+
return fg('navx-full-height-sidebar');
|
|
11
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React, { useContext } from 'react';
|
|
2
|
+
import { IsCustomIsFhsEnabledContext } from './is-custom-is-fhs-enabled-context';
|
|
3
|
+
import { IsFhsEnabledContext } from './is-fhs-enabled-context';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* __Is fhs enabled provider__
|
|
7
|
+
*
|
|
8
|
+
* Used to provide a custom value for is FHS enabled.
|
|
9
|
+
*/
|
|
10
|
+
export var IsFhsEnabledProvider = function IsFhsEnabledProvider(_ref) {
|
|
11
|
+
var children = _ref.children,
|
|
12
|
+
value = _ref.value;
|
|
13
|
+
var isCustomIsFhsEnabled = useContext(IsCustomIsFhsEnabledContext);
|
|
14
|
+
if (isCustomIsFhsEnabled) {
|
|
15
|
+
throw new Error('A custom value for IsFhsEnabledContext has already been provided');
|
|
16
|
+
}
|
|
17
|
+
return /*#__PURE__*/React.createElement(IsCustomIsFhsEnabledContext.Provider, {
|
|
18
|
+
value: true
|
|
19
|
+
}, /*#__PURE__*/React.createElement(IsFhsEnabledContext.Provider, {
|
|
20
|
+
value: value
|
|
21
|
+
}, children));
|
|
22
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { IsFhsEnabledContext } from './is-fhs-enabled-context';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* __Use is fhs enabled__
|
|
6
|
+
*
|
|
7
|
+
* Retrieves is FHS enabled.
|
|
8
|
+
*/
|
|
9
|
+
export var useIsFhsEnabled = function useIsFhsEnabled() {
|
|
10
|
+
var isFhsEnabled = useContext(IsFhsEnabledContext);
|
|
11
|
+
return typeof isFhsEnabled === 'boolean' ? isFhsEnabled : isFhsEnabled();
|
|
12
|
+
};
|