@patternfly/react-core 6.7.0-prerelease.1 → 6.7.0-prerelease.3
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 +12 -0
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/AboutModal/package.json +1 -1
- package/dist/dynamic/components/Accordion/package.json +1 -1
- package/dist/dynamic/components/ActionList/package.json +1 -1
- package/dist/dynamic/components/Alert/package.json +1 -1
- package/dist/dynamic/components/Avatar/package.json +1 -1
- package/dist/dynamic/components/BackToTop/package.json +1 -1
- package/dist/dynamic/components/Backdrop/package.json +1 -1
- package/dist/dynamic/components/BackgroundImage/package.json +1 -1
- package/dist/dynamic/components/Badge/package.json +1 -1
- package/dist/dynamic/components/Banner/package.json +1 -1
- package/dist/dynamic/components/Brand/package.json +1 -1
- package/dist/dynamic/components/Breadcrumb/package.json +1 -1
- package/dist/dynamic/components/Button/package.json +1 -1
- package/dist/dynamic/components/CalendarMonth/package.json +1 -1
- package/dist/dynamic/components/Card/package.json +1 -1
- package/dist/dynamic/components/Checkbox/package.json +1 -1
- package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
- package/dist/dynamic/components/CodeBlock/package.json +1 -1
- package/dist/dynamic/components/Compass/package.json +1 -1
- package/dist/dynamic/components/Content/package.json +1 -1
- package/dist/dynamic/components/DataList/package.json +1 -1
- package/dist/dynamic/components/DatePicker/package.json +1 -1
- package/dist/dynamic/components/DescriptionList/package.json +1 -1
- package/dist/dynamic/components/Divider/package.json +1 -1
- package/dist/dynamic/components/Drawer/package.json +1 -1
- package/dist/dynamic/components/Dropdown/package.json +1 -1
- package/dist/dynamic/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/components/EmptyState/package.json +1 -1
- package/dist/dynamic/components/ExpandableSection/package.json +1 -1
- package/dist/dynamic/components/FileUpload/package.json +1 -1
- package/dist/dynamic/components/Form/package.json +1 -1
- package/dist/dynamic/components/FormSelect/package.json +1 -1
- package/dist/dynamic/components/HelperText/package.json +1 -1
- package/dist/dynamic/components/Hero/package.json +1 -1
- package/dist/dynamic/components/Hint/package.json +1 -1
- package/dist/dynamic/components/Icon/package.json +1 -1
- package/dist/dynamic/components/InputGroup/package.json +1 -1
- package/dist/dynamic/components/JumpLinks/package.json +1 -1
- package/dist/dynamic/components/Label/package.json +1 -1
- package/dist/dynamic/components/List/package.json +1 -1
- package/dist/dynamic/components/LoginPage/package.json +1 -1
- package/dist/dynamic/components/Masthead/package.json +1 -1
- package/dist/dynamic/components/Menu/package.json +1 -1
- package/dist/dynamic/components/MenuToggle/package.json +1 -1
- package/dist/dynamic/components/Modal/package.json +1 -1
- package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
- package/dist/dynamic/components/Nav/package.json +1 -1
- package/dist/dynamic/components/NotificationBadge/package.json +1 -1
- package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
- package/dist/dynamic/components/NumberInput/package.json +1 -1
- package/dist/dynamic/components/OverflowMenu/package.json +1 -1
- package/dist/dynamic/components/Page/package.json +1 -1
- package/dist/dynamic/components/Pagination/package.json +1 -1
- package/dist/dynamic/components/Panel/package.json +1 -1
- package/dist/dynamic/components/Popover/package.json +1 -1
- package/dist/dynamic/components/Progress/package.json +1 -1
- package/dist/dynamic/components/ProgressStepper/package.json +1 -1
- package/dist/dynamic/components/Radio/package.json +1 -1
- package/dist/dynamic/components/SearchInput/package.json +1 -1
- package/dist/dynamic/components/Select/package.json +1 -1
- package/dist/dynamic/components/Sidebar/package.json +1 -1
- package/dist/dynamic/components/SimpleList/package.json +1 -1
- package/dist/dynamic/components/Skeleton/package.json +1 -1
- package/dist/dynamic/components/SkipToContent/package.json +1 -1
- package/dist/dynamic/components/Slider/package.json +1 -1
- package/dist/dynamic/components/Spinner/package.json +1 -1
- package/dist/dynamic/components/Switch/package.json +1 -1
- package/dist/dynamic/components/Tabs/package.json +1 -1
- package/dist/dynamic/components/TextArea/package.json +1 -1
- package/dist/dynamic/components/TextInput/package.json +1 -1
- package/dist/dynamic/components/TextInputGroup/package.json +1 -1
- package/dist/dynamic/components/TimePicker/package.json +1 -1
- package/dist/dynamic/components/Timestamp/package.json +1 -1
- package/dist/dynamic/components/Title/package.json +1 -1
- package/dist/dynamic/components/ToggleGroup/package.json +1 -1
- package/dist/dynamic/components/Toolbar/package.json +1 -1
- package/dist/dynamic/components/Tooltip/package.json +1 -1
- package/dist/dynamic/components/TreeView/package.json +1 -1
- package/dist/dynamic/components/Truncate/package.json +1 -1
- package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
- package/dist/dynamic/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
- package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
- package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
- package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
- package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/package.json +1 -1
- package/dist/dynamic/helpers/AnimationsProvider/AnimationsProvider/package.json +1 -1
- package/dist/dynamic/helpers/AnimationsProvider/package.json +1 -1
- package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
- package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
- package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
- package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
- package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
- package/dist/dynamic/helpers/SSRSafeIds/SSRSafeIds/package.json +1 -1
- package/dist/dynamic/helpers/constants/package.json +1 -1
- package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
- package/dist/dynamic/helpers/fileUtils/package.json +1 -1
- package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
- package/dist/dynamic/helpers/inert/package.json +1 -1
- package/dist/dynamic/helpers/package.json +1 -1
- package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
- package/dist/dynamic/helpers/typeUtils/package.json +1 -1
- package/dist/dynamic/helpers/useInterval/package.json +1 -1
- package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
- package/dist/dynamic/helpers/useSSRSafeId/package.json +1 -1
- package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
- package/dist/dynamic/helpers/util/package.json +1 -1
- package/dist/dynamic/layouts/Bullseye/package.json +1 -1
- package/dist/dynamic/layouts/Flex/package.json +1 -1
- package/dist/dynamic/layouts/Gallery/package.json +1 -1
- package/dist/dynamic/layouts/Grid/package.json +1 -1
- package/dist/dynamic/layouts/Level/package.json +1 -1
- package/dist/dynamic/layouts/Split/package.json +1 -1
- package/dist/dynamic/layouts/Stack/package.json +1 -1
- package/dist/dynamic/styles/package.json +1 -1
- package/dist/esm/components/Backdrop/Backdrop.d.ts +4 -0
- package/dist/esm/components/Backdrop/Backdrop.d.ts.map +1 -1
- package/dist/esm/components/Backdrop/Backdrop.js +4 -2
- package/dist/esm/components/Backdrop/Backdrop.js.map +1 -1
- package/dist/esm/components/Button/Button.d.ts +1 -3
- package/dist/esm/components/Button/Button.d.ts.map +1 -1
- package/dist/esm/components/Button/Button.js +2 -2
- package/dist/esm/components/Button/Button.js.map +1 -1
- package/dist/esm/components/Compass/Compass.d.ts +3 -7
- package/dist/esm/components/Compass/Compass.d.ts.map +1 -1
- package/dist/esm/components/Compass/Compass.js +2 -2
- package/dist/esm/components/Compass/Compass.js.map +1 -1
- package/dist/esm/components/MenuToggle/MenuToggle.d.ts +0 -2
- package/dist/esm/components/MenuToggle/MenuToggle.d.ts.map +1 -1
- package/dist/esm/components/MenuToggle/MenuToggle.js +2 -3
- package/dist/esm/components/MenuToggle/MenuToggle.js.map +1 -1
- package/dist/esm/components/Modal/Modal.d.ts +2 -0
- package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
- package/dist/esm/components/Modal/Modal.js +2 -1
- package/dist/esm/components/Modal/Modal.js.map +1 -1
- package/dist/esm/components/Modal/ModalBox.d.ts +4 -0
- package/dist/esm/components/Modal/ModalBox.d.ts.map +1 -1
- package/dist/esm/components/Modal/ModalBox.js +2 -2
- package/dist/esm/components/Modal/ModalBox.js.map +1 -1
- package/dist/esm/components/Modal/ModalContent.d.ts +2 -0
- package/dist/esm/components/Modal/ModalContent.d.ts.map +1 -1
- package/dist/esm/components/Modal/ModalContent.js +40 -5
- package/dist/esm/components/Modal/ModalContent.js.map +1 -1
- package/dist/esm/components/Nav/Nav.d.ts +1 -1
- package/dist/esm/components/Nav/Nav.d.ts.map +1 -1
- package/dist/esm/components/Nav/Nav.js +2 -2
- package/dist/esm/components/Nav/Nav.js.map +1 -1
- package/dist/esm/components/Page/Page.d.ts +3 -7
- package/dist/esm/components/Page/Page.d.ts.map +1 -1
- package/dist/esm/components/Page/Page.js +3 -4
- package/dist/esm/components/Page/Page.js.map +1 -1
- package/dist/js/components/Backdrop/Backdrop.d.ts +4 -0
- package/dist/js/components/Backdrop/Backdrop.d.ts.map +1 -1
- package/dist/js/components/Backdrop/Backdrop.js +4 -2
- package/dist/js/components/Backdrop/Backdrop.js.map +1 -1
- package/dist/js/components/Button/Button.d.ts +1 -3
- package/dist/js/components/Button/Button.d.ts.map +1 -1
- package/dist/js/components/Button/Button.js +2 -2
- package/dist/js/components/Button/Button.js.map +1 -1
- package/dist/js/components/Compass/Compass.d.ts +3 -7
- package/dist/js/components/Compass/Compass.d.ts.map +1 -1
- package/dist/js/components/Compass/Compass.js +2 -2
- package/dist/js/components/Compass/Compass.js.map +1 -1
- package/dist/js/components/MenuToggle/MenuToggle.d.ts +0 -2
- package/dist/js/components/MenuToggle/MenuToggle.d.ts.map +1 -1
- package/dist/js/components/MenuToggle/MenuToggle.js +2 -3
- package/dist/js/components/MenuToggle/MenuToggle.js.map +1 -1
- package/dist/js/components/Modal/Modal.d.ts +2 -0
- package/dist/js/components/Modal/Modal.d.ts.map +1 -1
- package/dist/js/components/Modal/Modal.js +2 -1
- package/dist/js/components/Modal/Modal.js.map +1 -1
- package/dist/js/components/Modal/ModalBox.d.ts +4 -0
- package/dist/js/components/Modal/ModalBox.d.ts.map +1 -1
- package/dist/js/components/Modal/ModalBox.js +2 -2
- package/dist/js/components/Modal/ModalBox.js.map +1 -1
- package/dist/js/components/Modal/ModalContent.d.ts +2 -0
- package/dist/js/components/Modal/ModalContent.d.ts.map +1 -1
- package/dist/js/components/Modal/ModalContent.js +39 -4
- package/dist/js/components/Modal/ModalContent.js.map +1 -1
- package/dist/js/components/Nav/Nav.d.ts +1 -1
- package/dist/js/components/Nav/Nav.d.ts.map +1 -1
- package/dist/js/components/Nav/Nav.js +2 -2
- package/dist/js/components/Nav/Nav.js.map +1 -1
- package/dist/js/components/Page/Page.d.ts +3 -7
- package/dist/js/components/Page/Page.d.ts.map +1 -1
- package/dist/js/components/Page/Page.js +3 -4
- package/dist/js/components/Page/Page.js.map +1 -1
- package/dist/umd/assets/{output-Doo5KfbL.css → output-DjqlL2o3.css} +17550 -17557
- package/dist/umd/react-core.min.js +3 -3
- package/helpers/package.json +1 -1
- package/layouts/package.json +1 -1
- package/next/package.json +1 -1
- package/package.json +6 -6
- package/src/components/Backdrop/Backdrop.tsx +24 -5
- package/src/components/Backdrop/__tests__/Backdrop.test.tsx +35 -1
- package/src/components/Backdrop/__tests__/__snapshots__/Backdrop.test.tsx.snap +1 -1
- package/src/components/Button/Button.tsx +2 -5
- package/src/components/Button/__tests__/Button.test.tsx +8 -19
- package/src/components/Button/__tests__/__snapshots__/Button.test.tsx.snap +1 -1
- package/src/components/Compass/Compass.tsx +5 -11
- package/src/components/Compass/__tests__/Compass.test.tsx +3 -23
- package/src/components/MenuToggle/MenuToggle.tsx +0 -5
- package/src/components/MenuToggle/__tests__/MenuToggle.test.tsx +8 -19
- package/src/components/Modal/Modal.tsx +4 -1
- package/src/components/Modal/ModalBox.tsx +8 -0
- package/src/components/Modal/ModalContent.tsx +54 -4
- package/src/components/Modal/__tests__/Modal.test.tsx +14 -0
- package/src/components/Modal/__tests__/ModalContent.test.tsx +75 -1
- package/src/components/Modal/examples/Modal.md +12 -0
- package/src/components/Modal/examples/ModalNotAnimated.tsx +44 -0
- package/src/components/Nav/Nav.tsx +3 -3
- package/src/components/Nav/__tests__/Nav.test.tsx +8 -8
- package/src/components/Nav/examples/Nav.md +1 -1
- package/src/components/Page/Page.tsx +5 -12
- package/src/components/Page/__tests__/Page.test.tsx +4 -30
- package/src/demos/Compass/examples/CompassDockDemo.tsx +25 -43
- package/src/demos/Nav.md +3 -3
- package/src/demos/examples/Nav/NavDockedNav.tsx +25 -43
- package/src/deprecated/components/Modal/__tests__/__snapshots__/ModalContent.test.tsx.snap +8 -8
|
@@ -12,6 +12,10 @@ import RhUiAttentionBellFillIcon from '@patternfly/react-icons/dist/esm/icons/rh
|
|
|
12
12
|
import RhUiQuestionMarkCircleIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-question-mark-circle-icon';
|
|
13
13
|
import formStyles from '@patternfly/react-styles/css/components/Form/form';
|
|
14
14
|
|
|
15
|
+
When using the Modal component, it is recommended to control it via the `isOpen` property rather than conditionally rendering the Modal.
|
|
16
|
+
|
|
17
|
+
Conditional rendering can potentially lead to unforeseen issues, especially with animations enabled.
|
|
18
|
+
|
|
15
19
|
## Examples
|
|
16
20
|
|
|
17
21
|
### Basic modals
|
|
@@ -154,3 +158,11 @@ To customize which element inside the modal receives focus when initially opened
|
|
|
154
158
|
```ts file="./ModalCustomFocus.tsx"
|
|
155
159
|
|
|
156
160
|
```
|
|
161
|
+
|
|
162
|
+
### Non animated modal
|
|
163
|
+
|
|
164
|
+
To explicitly disable animations, set the `hasAnimations` property to `false` on the modal.
|
|
165
|
+
|
|
166
|
+
```ts file="./ModalNotAnimated.tsx"
|
|
167
|
+
|
|
168
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Fragment, useState } from 'react';
|
|
2
|
+
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, ModalVariant } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const ModalNotAnimated: React.FunctionComponent = () => {
|
|
5
|
+
const [isModalOpen, setIsModalOpen] = useState(false);
|
|
6
|
+
|
|
7
|
+
const handleModalToggle = (_event: KeyboardEvent | React.MouseEvent) => {
|
|
8
|
+
setIsModalOpen((prevIsModalOpen) => !prevIsModalOpen);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<Fragment>
|
|
13
|
+
<Button variant="primary" onClick={handleModalToggle}>
|
|
14
|
+
Show no animations modal
|
|
15
|
+
</Button>
|
|
16
|
+
<Modal
|
|
17
|
+
hasAnimations={false}
|
|
18
|
+
variant={ModalVariant.large}
|
|
19
|
+
isOpen={isModalOpen}
|
|
20
|
+
onClose={handleModalToggle}
|
|
21
|
+
aria-labelledby="modal-not-animated-label"
|
|
22
|
+
aria-describedby="modal-not-animated-description"
|
|
23
|
+
elementToFocus="#modal-not-animated-confirm-button"
|
|
24
|
+
>
|
|
25
|
+
<ModalHeader title="Not Animated Modal Header" labelId="modal-not-animated-label" />
|
|
26
|
+
<ModalBody id="modal-not-animated-description">
|
|
27
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
|
|
28
|
+
magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
|
|
29
|
+
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
|
|
30
|
+
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
|
|
31
|
+
est laborum.
|
|
32
|
+
</ModalBody>
|
|
33
|
+
<ModalFooter>
|
|
34
|
+
<Button id="modal-not-animated-confirm-button" key="confirm" variant="primary" onClick={handleModalToggle}>
|
|
35
|
+
Confirm
|
|
36
|
+
</Button>
|
|
37
|
+
<Button key="cancel" variant="link" onClick={handleModalToggle}>
|
|
38
|
+
Cancel
|
|
39
|
+
</Button>
|
|
40
|
+
</ModalFooter>
|
|
41
|
+
</Modal>
|
|
42
|
+
</Fragment>
|
|
43
|
+
);
|
|
44
|
+
};
|
|
@@ -40,7 +40,7 @@ export interface NavProps
|
|
|
40
40
|
/** The nav variant to use. Docked is in beta. */
|
|
41
41
|
variant?: 'default' | 'horizontal' | 'horizontal-subnav' | 'docked';
|
|
42
42
|
/** @beta Flag indicating the docked nav should display text. Only applies when variant is docked. */
|
|
43
|
-
|
|
43
|
+
isExpanded?: boolean;
|
|
44
44
|
/** Value to overwrite the randomly generated data-ouia-component-id.*/
|
|
45
45
|
ouiaId?: number | string;
|
|
46
46
|
/** Set the value of data-ouia-safe. Only set to true when the component is in a static state, i.e. no animations are occurring. At all other times, this value must be false. */
|
|
@@ -121,7 +121,7 @@ class Nav extends Component<NavProps, { isScrollable: boolean; flyoutRef: React.
|
|
|
121
121
|
ouiaId,
|
|
122
122
|
ouiaSafe,
|
|
123
123
|
variant,
|
|
124
|
-
|
|
124
|
+
isExpanded = false,
|
|
125
125
|
...props
|
|
126
126
|
} = this.props;
|
|
127
127
|
const isHorizontal = ['horizontal', 'horizontal-subnav'].includes(variant);
|
|
@@ -159,7 +159,7 @@ class Nav extends Component<NavProps, { isScrollable: boolean; flyoutRef: React.
|
|
|
159
159
|
isHorizontal && styles.modifiers.horizontal,
|
|
160
160
|
isDocked && styles.modifiers.docked,
|
|
161
161
|
variant === 'horizontal-subnav' && styles.modifiers.subnav,
|
|
162
|
-
isDocked &&
|
|
162
|
+
isDocked && isExpanded && styles.modifiers.expanded,
|
|
163
163
|
this.state.isScrollable && styles.modifiers.scrollable,
|
|
164
164
|
className
|
|
165
165
|
)}
|
|
@@ -275,9 +275,9 @@ describe('Nav', () => {
|
|
|
275
275
|
expect(screen.getByTestId('docked-nav')).toHaveClass(styles.modifiers.docked);
|
|
276
276
|
});
|
|
277
277
|
|
|
278
|
-
test(`Renders with ${styles.modifiers.
|
|
278
|
+
test(`Renders with ${styles.modifiers.expanded} class when isExpanded is true and variant is docked`, () => {
|
|
279
279
|
renderNav(
|
|
280
|
-
<Nav
|
|
280
|
+
<Nav isExpanded variant="docked" data-testid="expanded-nav">
|
|
281
281
|
<NavList>
|
|
282
282
|
{props.items.map((item) => (
|
|
283
283
|
<NavItem to={item.to} key={item.to}>
|
|
@@ -287,10 +287,10 @@ describe('Nav', () => {
|
|
|
287
287
|
</NavList>
|
|
288
288
|
</Nav>
|
|
289
289
|
);
|
|
290
|
-
expect(screen.getByTestId('
|
|
290
|
+
expect(screen.getByTestId('expanded-nav')).toHaveClass(styles.modifiers.expanded);
|
|
291
291
|
});
|
|
292
292
|
|
|
293
|
-
test(`Does not render with ${styles.modifiers.
|
|
293
|
+
test(`Does not render with ${styles.modifiers.expanded} class when isExpanded is not passed`, () => {
|
|
294
294
|
renderNav(
|
|
295
295
|
<Nav data-testid="nav">
|
|
296
296
|
<NavList>
|
|
@@ -302,12 +302,12 @@ describe('Nav', () => {
|
|
|
302
302
|
</NavList>
|
|
303
303
|
</Nav>
|
|
304
304
|
);
|
|
305
|
-
expect(screen.getByTestId('nav')).not.toHaveClass(styles.modifiers.
|
|
305
|
+
expect(screen.getByTestId('nav')).not.toHaveClass(styles.modifiers.expanded);
|
|
306
306
|
});
|
|
307
307
|
|
|
308
|
-
test(`Does not render with ${styles.modifiers.
|
|
308
|
+
test(`Does not render with ${styles.modifiers.expanded} class when isExpanded is true but variant is not docked`, () => {
|
|
309
309
|
renderNav(
|
|
310
|
-
<Nav
|
|
310
|
+
<Nav isExpanded data-testid="nav">
|
|
311
311
|
<NavList>
|
|
312
312
|
{props.items.map((item) => (
|
|
313
313
|
<NavItem to={item.to} key={item.to}>
|
|
@@ -317,6 +317,6 @@ describe('Nav', () => {
|
|
|
317
317
|
</NavList>
|
|
318
318
|
</Nav>
|
|
319
319
|
);
|
|
320
|
-
expect(screen.getByTestId('nav')).not.toHaveClass(styles.modifiers.
|
|
320
|
+
expect(screen.getByTestId('nav')).not.toHaveClass(styles.modifiers.expanded);
|
|
321
321
|
});
|
|
322
322
|
});
|
|
@@ -84,7 +84,7 @@ A flyout should be a `Menu` component. Press `space` or `right arrow` to open a
|
|
|
84
84
|
|
|
85
85
|
### Docked
|
|
86
86
|
|
|
87
|
-
The docked variant of `Navigation` displays only icons passed to child `NavItems` or `NavExpandable`. Text becomes visible when `
|
|
87
|
+
The docked variant of `Navigation` displays only icons passed to child `NavItems` or `NavExpandable`. Text becomes visible when `isDockExpanded` is applied to an outer page or compass dock.
|
|
88
88
|
|
|
89
89
|
`NavExpandable` items should include the `hasExpandableIcon` prop to indicate their expandable nature while in the collapsed state of the docked nav as the caret will not be rendered.
|
|
90
90
|
|
|
@@ -22,14 +22,10 @@ export interface PageProps extends React.HTMLProps<HTMLDivElement> {
|
|
|
22
22
|
className?: string;
|
|
23
23
|
/** @beta Indicates the layout variant */
|
|
24
24
|
variant?: 'default' | 'docked';
|
|
25
|
-
/** @beta Flag indicating the docked nav is expanded
|
|
25
|
+
/** @beta Flag indicating the docked nav is expanded. Only applies when variant is docked. */
|
|
26
26
|
isDockExpanded?: boolean;
|
|
27
|
-
/** @beta Flag indicating
|
|
28
|
-
|
|
29
|
-
/** @beta Flag indicating the docked nav should display text on desktop. Only applies when variant is docked, and
|
|
30
|
-
* will handle toggling the visibility of the text in individual isDocked components.
|
|
31
|
-
*/
|
|
32
|
-
isDockTextExpanded?: boolean;
|
|
27
|
+
/** @beta Flag indicating the docked nav should expand as an overlay instead of the default inline. */
|
|
28
|
+
isDockOverlay?: boolean;
|
|
33
29
|
/** The horizontal masthead content (e.g. <Masthead /> or <PageHeader />). PageHeader is an alternative to Masthead
|
|
34
30
|
* and should only be used to wrap custom header content. When using the docked variant, this content will only render at
|
|
35
31
|
* mobile viewports.
|
|
@@ -140,7 +136,6 @@ class Page extends Component<PageProps, PageState> {
|
|
|
140
136
|
defaultManagedSidebarIsOpen: true,
|
|
141
137
|
mainTabIndex: -1,
|
|
142
138
|
isNotificationDrawerExpanded: false,
|
|
143
|
-
isDockExpandableExpanded: false,
|
|
144
139
|
onNotificationDrawerExpand: () => null,
|
|
145
140
|
mainComponent: 'main',
|
|
146
141
|
getBreakpoint,
|
|
@@ -255,8 +250,7 @@ class Page extends Component<PageProps, PageState> {
|
|
|
255
250
|
children,
|
|
256
251
|
variant,
|
|
257
252
|
isDockExpanded = false,
|
|
258
|
-
|
|
259
|
-
isDockExpandableExpanded = false,
|
|
253
|
+
isDockOverlay = false,
|
|
260
254
|
masthead,
|
|
261
255
|
dockContent,
|
|
262
256
|
sidebar,
|
|
@@ -386,8 +380,7 @@ class Page extends Component<PageProps, PageState> {
|
|
|
386
380
|
className={css(
|
|
387
381
|
styles.pageDock,
|
|
388
382
|
isDockExpanded && styles.modifiers.expanded,
|
|
389
|
-
|
|
390
|
-
isDockTextExpanded && styles.modifiers.textExpanded
|
|
383
|
+
isDockOverlay && styles.modifiers.overlay
|
|
391
384
|
)}
|
|
392
385
|
>
|
|
393
386
|
<div className={css(styles.pageDockMain)}>{dockContent}</div>
|
|
@@ -446,13 +446,6 @@ describe('Page docked variant', () => {
|
|
|
446
446
|
expect(pageDock).not.toHaveClass(styles.modifiers.expanded);
|
|
447
447
|
});
|
|
448
448
|
|
|
449
|
-
test(`Does not render with ${styles.modifiers.textExpanded} by default when variant is docked`, () => {
|
|
450
|
-
render(<Page variant="docked" dockContent={<>Dock content</>} masthead={<>Masthead</>} data-testid="page"></Page>);
|
|
451
|
-
|
|
452
|
-
const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
|
|
453
|
-
expect(pageDock).not.toHaveClass(styles.modifiers.textExpanded);
|
|
454
|
-
});
|
|
455
|
-
|
|
456
449
|
test(`Renders with ${styles.modifiers.expanded} when isDockExpanded is true and variant is docked`, () => {
|
|
457
450
|
render(
|
|
458
451
|
<Page
|
|
@@ -468,11 +461,12 @@ describe('Page docked variant', () => {
|
|
|
468
461
|
expect(pageDock).toHaveClass(styles.modifiers.expanded);
|
|
469
462
|
});
|
|
470
463
|
|
|
471
|
-
test(`Renders with ${styles.modifiers.
|
|
464
|
+
test(`Renders with ${styles.modifiers.overlay} when isDockOverlay is true and variant is docked`, () => {
|
|
472
465
|
render(
|
|
473
466
|
<Page
|
|
474
467
|
variant="docked"
|
|
475
|
-
|
|
468
|
+
isDockExpanded
|
|
469
|
+
isDockOverlay
|
|
476
470
|
dockContent={<>Dock content</>}
|
|
477
471
|
masthead={<>Masthead</>}
|
|
478
472
|
data-testid="page"
|
|
@@ -480,27 +474,7 @@ describe('Page docked variant', () => {
|
|
|
480
474
|
);
|
|
481
475
|
|
|
482
476
|
const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
|
|
483
|
-
expect(pageDock).toHaveClass(styles.modifiers.
|
|
484
|
-
});
|
|
485
|
-
|
|
486
|
-
test(`Does not render with ${styles.modifiers.expandableExpanded} when by default and variant is docked`, () => {
|
|
487
|
-
render(<Page variant="docked" dockContent={<>Dock content</>} masthead={<>Masthead</>} data-testid="page"></Page>);
|
|
488
|
-
const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
|
|
489
|
-
expect(pageDock).not.toHaveClass(styles.modifiers.expandableExpanded);
|
|
490
|
-
});
|
|
491
|
-
|
|
492
|
-
test(`Renders with ${styles.modifiers.expandableExpanded} when isDockExpandableExpanded is true and variant is docked`, () => {
|
|
493
|
-
render(
|
|
494
|
-
<Page
|
|
495
|
-
variant="docked"
|
|
496
|
-
isDockExpandableExpanded
|
|
497
|
-
dockContent={<>Dock content</>}
|
|
498
|
-
masthead={<>Masthead</>}
|
|
499
|
-
data-testid="page"
|
|
500
|
-
></Page>
|
|
501
|
-
);
|
|
502
|
-
const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
|
|
503
|
-
expect(pageDock).toHaveClass(styles.modifiers.expandableExpanded);
|
|
477
|
+
expect(pageDock).toHaveClass(styles.modifiers.overlay);
|
|
504
478
|
});
|
|
505
479
|
|
|
506
480
|
test(`Renders with ${styles.pageDockMain} wrapper when variant is docked`, () => {
|
|
@@ -51,8 +51,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
|
|
|
51
51
|
const [activeItem, setActiveItem] = useState<number>(0);
|
|
52
52
|
const [isNavGroupExpanded, setIsNavGroupExpanded] = useState(false);
|
|
53
53
|
const [isDockExpanded, setIsDockExpanded] = useState(false);
|
|
54
|
-
const [
|
|
55
|
-
const [isDockExpandableExpanded, setIsDockExpandableExpanded] = useState(false);
|
|
54
|
+
const [isDockOverlay, setIsDockOverlay] = useState(false);
|
|
56
55
|
const [isMobile, setIsMobile] = useState(false);
|
|
57
56
|
|
|
58
57
|
useEffect(() => {
|
|
@@ -69,7 +68,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
|
|
|
69
68
|
}, []);
|
|
70
69
|
|
|
71
70
|
const handleDockClickOutside = (event: MouseEvent) => {
|
|
72
|
-
if (
|
|
71
|
+
if (!isDockExpanded) {
|
|
73
72
|
return;
|
|
74
73
|
}
|
|
75
74
|
|
|
@@ -80,21 +79,22 @@ export const CompassDockDemo: React.FunctionComponent = () => {
|
|
|
80
79
|
dockedMastheadElement &&
|
|
81
80
|
!dockedMastheadElement.contains(event.target as Node) &&
|
|
82
81
|
!dockedMobileMastheadToggle?.contains(event.target as Node) &&
|
|
83
|
-
|
|
82
|
+
isDockExpanded &&
|
|
83
|
+
(isDockOverlay || isMobile)
|
|
84
84
|
) {
|
|
85
|
-
setIsDockExpandableExpanded(false);
|
|
86
85
|
setIsDockExpanded(false);
|
|
86
|
+
setIsDockOverlay(false);
|
|
87
87
|
}
|
|
88
88
|
};
|
|
89
89
|
|
|
90
90
|
const handleDockKeydown = (_event: KeyboardEvent) => {
|
|
91
|
-
if (
|
|
91
|
+
if (!isDockExpanded) {
|
|
92
92
|
return;
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
if (_event.key === 'Escape') {
|
|
96
|
-
setIsDockExpandableExpanded(false);
|
|
97
96
|
setIsDockExpanded(false);
|
|
97
|
+
setIsDockOverlay(false);
|
|
98
98
|
}
|
|
99
99
|
};
|
|
100
100
|
|
|
@@ -106,18 +106,17 @@ export const CompassDockDemo: React.FunctionComponent = () => {
|
|
|
106
106
|
window.removeEventListener('click', handleDockClickOutside);
|
|
107
107
|
window.removeEventListener('keydown', handleDockKeydown);
|
|
108
108
|
};
|
|
109
|
-
}, [
|
|
109
|
+
}, [isDockOverlay, isDockExpanded, isMobile]);
|
|
110
110
|
|
|
111
111
|
const onNavSelect = (_event: React.FormEvent<HTMLInputElement>, selectedItem: NavOnSelectProps) => {
|
|
112
112
|
typeof selectedItem.itemId === 'number' && setActiveItem(selectedItem.itemId);
|
|
113
113
|
|
|
114
|
-
if (!
|
|
114
|
+
if (isDockExpanded && !isDockOverlay && !isMobile) {
|
|
115
115
|
return;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
setIsDockExpandableExpanded(false);
|
|
119
|
-
setIsDockTextExpanded(false);
|
|
120
118
|
setIsDockExpanded(false);
|
|
119
|
+
setIsDockOverlay(false);
|
|
121
120
|
};
|
|
122
121
|
|
|
123
122
|
const navItem1Ref = useRef<HTMLAnchorElement>(null);
|
|
@@ -141,45 +140,29 @@ export const CompassDockDemo: React.FunctionComponent = () => {
|
|
|
141
140
|
};
|
|
142
141
|
|
|
143
142
|
const onToggleDock = () => {
|
|
144
|
-
|
|
145
|
-
|
|
143
|
+
const nextState = !isDockExpanded;
|
|
144
|
+
if (!nextState) {
|
|
145
|
+
setIsDockOverlay(false);
|
|
146
|
+
}
|
|
147
|
+
setIsDockExpanded(nextState);
|
|
146
148
|
|
|
149
|
+
if (isMobile) {
|
|
147
150
|
if (isDockExpanded) {
|
|
148
151
|
setTimeout(() => {
|
|
149
152
|
mobileToggleRef.current?.focus();
|
|
150
153
|
}, 200);
|
|
151
154
|
}
|
|
152
|
-
} else {
|
|
153
|
-
const nextDockTextExpanded = !isDockTextExpanded;
|
|
154
|
-
setIsDockTextExpanded(nextDockTextExpanded);
|
|
155
|
-
|
|
156
|
-
if (!nextDockTextExpanded) {
|
|
157
|
-
setIsDockExpandableExpanded(false);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (isDockExpandableExpanded) {
|
|
161
|
-
setIsDockExpandableExpanded(false);
|
|
162
|
-
setIsDockTextExpanded(false);
|
|
163
|
-
}
|
|
164
155
|
}
|
|
165
156
|
};
|
|
166
157
|
|
|
167
158
|
const onToggleNavGroup = (_event: React.MouseEvent<HTMLButtonElement>, isExpanded: boolean) => {
|
|
168
|
-
if (!
|
|
159
|
+
if (!isDockExpanded) {
|
|
169
160
|
setIsNavGroupExpanded(true);
|
|
161
|
+
setIsDockOverlay(true);
|
|
162
|
+
setIsDockExpanded(true);
|
|
170
163
|
} else {
|
|
171
164
|
setIsNavGroupExpanded(isExpanded);
|
|
172
165
|
}
|
|
173
|
-
|
|
174
|
-
if (!isMobile) {
|
|
175
|
-
if (!isDockExpandableExpanded && !isDockTextExpanded) {
|
|
176
|
-
setIsDockExpandableExpanded(true);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
if (!isDockTextExpanded) {
|
|
180
|
-
setIsDockTextExpanded(false);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
166
|
};
|
|
184
167
|
|
|
185
168
|
const mobileTextLogo = (
|
|
@@ -315,7 +298,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
|
|
|
315
298
|
isHamburger
|
|
316
299
|
onClick={onToggleDock}
|
|
317
300
|
aria-label="Global navigation"
|
|
318
|
-
isExpanded={
|
|
301
|
+
isExpanded={isDockExpanded}
|
|
319
302
|
/>
|
|
320
303
|
</MastheadToggle>
|
|
321
304
|
<MastheadBrand>
|
|
@@ -409,7 +392,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
|
|
|
409
392
|
</NavItem>
|
|
410
393
|
</NavList>
|
|
411
394
|
</Nav>
|
|
412
|
-
{!
|
|
395
|
+
{!isDockExpanded && (
|
|
413
396
|
<>
|
|
414
397
|
<Tooltip aria="none" aria-live="off" triggerRef={navItem1Ref} content="System panel"></Tooltip>
|
|
415
398
|
<Tooltip aria="none" aria-live="off" triggerRef={navItem2Ref} content="Policy"></Tooltip>
|
|
@@ -426,7 +409,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
|
|
|
426
409
|
gap={{ default: 'gapNone', md: 'gapMd' }}
|
|
427
410
|
>
|
|
428
411
|
<ToolbarItem>
|
|
429
|
-
{
|
|
412
|
+
{isDockExpanded ? (
|
|
430
413
|
<MenuToggle
|
|
431
414
|
ref={appsRef}
|
|
432
415
|
variant="plain"
|
|
@@ -451,7 +434,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
|
|
|
451
434
|
)}
|
|
452
435
|
</ToolbarItem>
|
|
453
436
|
<ToolbarItem>
|
|
454
|
-
{
|
|
437
|
+
{isDockExpanded ? (
|
|
455
438
|
<Button ref={settingsRef} aria-label="Settings" isSettings variant="plain" isDocked>
|
|
456
439
|
Settings
|
|
457
440
|
</Button>
|
|
@@ -464,7 +447,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
|
|
|
464
447
|
)}
|
|
465
448
|
</ToolbarItem>
|
|
466
449
|
<ToolbarItem>
|
|
467
|
-
{
|
|
450
|
+
{isDockExpanded ? (
|
|
468
451
|
<MenuToggle
|
|
469
452
|
ref={helpRef}
|
|
470
453
|
variant="plain"
|
|
@@ -514,8 +497,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
|
|
|
514
497
|
masthead={mobileMasthead}
|
|
515
498
|
dock={dockContent}
|
|
516
499
|
isDockExpanded={isDockExpanded}
|
|
517
|
-
|
|
518
|
-
isDockTextExpanded={isDockTextExpanded}
|
|
500
|
+
isDockOverlay={isDockOverlay}
|
|
519
501
|
main={mainContent}
|
|
520
502
|
backgroundSrcDark="/assets/images/pf-background.svg"
|
|
521
503
|
backgroundSrcLight="/assets/images/pf-background.svg"
|
package/src/demos/Nav.md
CHANGED
|
@@ -87,15 +87,15 @@ To save space in the UI, you can use docked navigation to replace text-labeled n
|
|
|
87
87
|
|
|
88
88
|
This demo includes the following features:
|
|
89
89
|
|
|
90
|
-
1. A [page](/components/page) component with a docked layout, enabled via `variant="docked"`. Control the
|
|
90
|
+
1. A [page](/components/page) component with a docked layout, enabled via `variant="docked"`. Control the expanded state of the dock with `isDockExpanded` and the set whether the dock is an overlay with `isDockOverlay`. The expanded docked nav is automatically an overlay in mobile.
|
|
91
91
|
|
|
92
92
|
2. Two separate [masthead](/components/masthead) components:
|
|
93
93
|
- **Horizontal mobile masthead**: Shown on small viewports using `display={{ default: 'inline' }}`, with a hamburger menu toggle button, brand logo, and action buttons that should be immediately visible to users.
|
|
94
94
|
- **Vertical docked masthead**: Uses `variant="docked"` to create a thinner navigation sidebar with a hamburger menu toggle button, nav items, and action buttons.
|
|
95
95
|
|
|
96
|
-
3. A [navigation](/components/navigation) component with `variant="docked"` and multiple `<NavItem>` components that must include both icons and text labels. To control text visibility, `
|
|
96
|
+
3. A [navigation](/components/navigation) component with `variant="docked"` and multiple `<NavItem>` components that must include both icons and text labels. To control text visibility, `isExpanded={isDockExpanded}` is passed to the `<Nav>` component.
|
|
97
97
|
|
|
98
|
-
4. [Button](/components/button) and [menu toggle](/components/menus/menu-toggle) components, which use `isDocked` and `
|
|
98
|
+
4. [Button](/components/button) and [menu toggle](/components/menus/menu-toggle) components, which use `isDocked` and `isExpanded` to toggle between icon-only and text+icon styles. When the nav is docked, and only icons are shown, [tooltips](/components/tooltip) must provide full text labels for the navigation items, buttons, and menu toggles.
|
|
99
99
|
|
|
100
100
|
5. A `<MastheadLogo>` component that uses `isCompact` to show an icon-only logo when the dock is collapsed, and a full logo with text when expanded.
|
|
101
101
|
|
|
@@ -54,8 +54,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
|
|
|
54
54
|
const [activeItem, setActiveItem] = useState(1);
|
|
55
55
|
const [isNavGroupExpanded, setIsNavGroupExpanded] = useState(false);
|
|
56
56
|
const [isDockExpanded, setIsDockExpanded] = useState(false);
|
|
57
|
-
const [
|
|
58
|
-
const [isDockExpandableExpanded, setIsDockExpandableExpanded] = useState(false);
|
|
57
|
+
const [isDockOverlay, setIsDockOverlay] = useState(false);
|
|
59
58
|
const [isMobile, setIsMobile] = useState(false);
|
|
60
59
|
|
|
61
60
|
useEffect(() => {
|
|
@@ -72,7 +71,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
|
|
|
72
71
|
}, []);
|
|
73
72
|
|
|
74
73
|
const handleDockClickOutside = (event: MouseEvent) => {
|
|
75
|
-
if (
|
|
74
|
+
if (!isDockExpanded) {
|
|
76
75
|
return;
|
|
77
76
|
}
|
|
78
77
|
|
|
@@ -83,21 +82,22 @@ export const NavDockedNav: React.FunctionComponent = () => {
|
|
|
83
82
|
dockedMastheadElement &&
|
|
84
83
|
!dockedMastheadElement.contains(event.target as Node) &&
|
|
85
84
|
!dockedMobileMastheadToggle?.contains(event.target as Node) &&
|
|
86
|
-
|
|
85
|
+
isDockExpanded &&
|
|
86
|
+
(isDockOverlay || isMobile)
|
|
87
87
|
) {
|
|
88
|
-
setIsDockExpandableExpanded(false);
|
|
89
88
|
setIsDockExpanded(false);
|
|
89
|
+
setIsDockOverlay(false);
|
|
90
90
|
}
|
|
91
91
|
};
|
|
92
92
|
|
|
93
93
|
const handleDockKeydown = (_event: KeyboardEvent) => {
|
|
94
|
-
if (
|
|
94
|
+
if (!isDockExpanded) {
|
|
95
95
|
return;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
if (_event.key === 'Escape') {
|
|
99
|
-
setIsDockExpandableExpanded(false);
|
|
100
99
|
setIsDockExpanded(false);
|
|
100
|
+
setIsDockOverlay(false);
|
|
101
101
|
}
|
|
102
102
|
};
|
|
103
103
|
|
|
@@ -109,18 +109,17 @@ export const NavDockedNav: React.FunctionComponent = () => {
|
|
|
109
109
|
window.removeEventListener('click', handleDockClickOutside);
|
|
110
110
|
window.removeEventListener('keydown', handleDockKeydown);
|
|
111
111
|
};
|
|
112
|
-
}, [
|
|
112
|
+
}, [isDockOverlay, isDockExpanded, isMobile]);
|
|
113
113
|
|
|
114
114
|
const onNavSelect = (_event: React.FormEvent<HTMLInputElement>, selectedItem: NavOnSelectProps) => {
|
|
115
115
|
typeof selectedItem.itemId === 'number' && setActiveItem(selectedItem.itemId);
|
|
116
116
|
|
|
117
|
-
if (!
|
|
117
|
+
if (isDockExpanded && !isDockOverlay && !isMobile) {
|
|
118
118
|
return;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
setIsDockExpandableExpanded(false);
|
|
122
|
-
setIsDockTextExpanded(false);
|
|
123
121
|
setIsDockExpanded(false);
|
|
122
|
+
setIsDockOverlay(false);
|
|
124
123
|
};
|
|
125
124
|
|
|
126
125
|
const mobileTextLogo = (
|
|
@@ -251,45 +250,29 @@ export const NavDockedNav: React.FunctionComponent = () => {
|
|
|
251
250
|
};
|
|
252
251
|
|
|
253
252
|
const onToggleDock = () => {
|
|
254
|
-
|
|
255
|
-
|
|
253
|
+
const nextState = !isDockExpanded;
|
|
254
|
+
if (!nextState) {
|
|
255
|
+
setIsDockOverlay(false);
|
|
256
|
+
}
|
|
257
|
+
setIsDockExpanded(nextState);
|
|
256
258
|
|
|
259
|
+
if (isMobile) {
|
|
257
260
|
if (isDockExpanded) {
|
|
258
261
|
setTimeout(() => {
|
|
259
262
|
mobileToggleRef.current?.focus();
|
|
260
263
|
}, 200);
|
|
261
264
|
}
|
|
262
|
-
} else {
|
|
263
|
-
const nextDockTextExpanded = !isDockTextExpanded;
|
|
264
|
-
setIsDockTextExpanded(nextDockTextExpanded);
|
|
265
|
-
|
|
266
|
-
if (!nextDockTextExpanded) {
|
|
267
|
-
setIsDockExpandableExpanded(false);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
if (isDockExpandableExpanded) {
|
|
271
|
-
setIsDockExpandableExpanded(false);
|
|
272
|
-
setIsDockTextExpanded(false);
|
|
273
|
-
}
|
|
274
265
|
}
|
|
275
266
|
};
|
|
276
267
|
|
|
277
268
|
const onToggleNavGroup = (_event: React.MouseEvent<HTMLButtonElement>, isExpanded: boolean) => {
|
|
278
|
-
if (!
|
|
269
|
+
if (!isDockExpanded) {
|
|
279
270
|
setIsNavGroupExpanded(true);
|
|
271
|
+
setIsDockOverlay(true);
|
|
272
|
+
setIsDockExpanded(true);
|
|
280
273
|
} else {
|
|
281
274
|
setIsNavGroupExpanded(isExpanded);
|
|
282
275
|
}
|
|
283
|
-
|
|
284
|
-
if (!isMobile) {
|
|
285
|
-
if (!isDockExpandableExpanded && !isDockTextExpanded) {
|
|
286
|
-
setIsDockExpandableExpanded(true);
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
if (!isDockTextExpanded) {
|
|
290
|
-
setIsDockTextExpanded(false);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
276
|
};
|
|
294
277
|
|
|
295
278
|
// Mobile masthead - shown on mobile viewports only, hidden on desktop
|
|
@@ -339,7 +322,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
|
|
|
339
322
|
isHamburger
|
|
340
323
|
onClick={onToggleDock}
|
|
341
324
|
aria-label="Global navigation"
|
|
342
|
-
isExpanded={
|
|
325
|
+
isExpanded={isDockExpanded}
|
|
343
326
|
/>
|
|
344
327
|
</MastheadToggle>
|
|
345
328
|
<MastheadBrand>
|
|
@@ -429,7 +412,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
|
|
|
429
412
|
</NavItem>
|
|
430
413
|
</NavList>
|
|
431
414
|
</Nav>
|
|
432
|
-
{!
|
|
415
|
+
{!isDockExpanded && (
|
|
433
416
|
<>
|
|
434
417
|
<Tooltip aria="none" aria-live="off" triggerRef={navItem1Ref} content="System panel"></Tooltip>
|
|
435
418
|
<Tooltip aria="none" aria-live="off" triggerRef={navItem2Ref} content="Policy"></Tooltip>
|
|
@@ -446,7 +429,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
|
|
|
446
429
|
gap={{ default: 'gapNone', md: 'gapMd' }}
|
|
447
430
|
>
|
|
448
431
|
<ToolbarItem>
|
|
449
|
-
{
|
|
432
|
+
{isDockExpanded ? (
|
|
450
433
|
<MenuToggle
|
|
451
434
|
ref={appsRef}
|
|
452
435
|
variant="plain"
|
|
@@ -471,7 +454,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
|
|
|
471
454
|
)}
|
|
472
455
|
</ToolbarItem>
|
|
473
456
|
<ToolbarItem>
|
|
474
|
-
{
|
|
457
|
+
{isDockExpanded ? (
|
|
475
458
|
<Button ref={settingsRef} aria-label="Settings" isSettings variant="plain" isDocked>
|
|
476
459
|
Settings
|
|
477
460
|
</Button>
|
|
@@ -484,7 +467,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
|
|
|
484
467
|
)}
|
|
485
468
|
</ToolbarItem>
|
|
486
469
|
<ToolbarItem>
|
|
487
|
-
{
|
|
470
|
+
{isDockExpanded ? (
|
|
488
471
|
<MenuToggle
|
|
489
472
|
ref={helpRef}
|
|
490
473
|
variant="plain"
|
|
@@ -537,8 +520,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
|
|
|
537
520
|
<Page
|
|
538
521
|
variant="docked"
|
|
539
522
|
isDockExpanded={isDockExpanded}
|
|
540
|
-
|
|
541
|
-
isDockTextExpanded={isDockTextExpanded}
|
|
523
|
+
isDockOverlay={isDockOverlay}
|
|
542
524
|
masthead={mobileMasthead}
|
|
543
525
|
dockContent={dockedMasthead}
|
|
544
526
|
skipToContent={pageSkipToContent}
|