Skip to content

Commit 15b36c9

Browse files
committed
Updated docs and toggle logic
1 parent 37b018d commit 15b36c9

6 files changed

Lines changed: 53 additions & 17 deletions

File tree

packages/react-core/src/components/Compass/Compass.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ export interface CompassProps extends React.HTMLProps<HTMLDivElement> {
1414
dock?: React.ReactNode;
1515
/** @beta Flag indicating the docked nav is expanded on mobile. Only applies when dock content is passed. */
1616
isDockExpanded?: boolean;
17-
/** @beta Flag indicating the docked nav should display text on desktop. Only applies when dock content is passed, and will handle
18-
* setting isTextExpanded on individual isDocked components.
17+
/** @beta Flag indicating the docked nav should display text on desktop. Only applies when dock content is passed, and
18+
* will handle toggling the visibility of the text in individual isDocked components.
1919
*/
2020
isDockTextExpanded?: boolean;
2121
/** Content placed at the top of the compass layout */

packages/react-core/src/components/Page/Page.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ export interface PageProps extends React.HTMLProps<HTMLDivElement> {
2424
variant?: 'default' | 'docked';
2525
/** @beta Flag indicating the docked nav is expanded on mobile. Only applies when variant is docked. */
2626
isDockExpanded?: boolean;
27-
/** @beta Flag indicating the docked nav should display text on desktop. Only applies when variant is docked, and will handle
28-
* setting isTextExpanded on individual isDocked components.
29-
* */
27+
/** @beta Flag indicating the docked nav should display text on desktop. Only applies when variant is docked, and
28+
* will handle toggling the visibility of the text in individual isDocked components.
29+
*/
3030
isDockTextExpanded?: boolean;
3131
/** The horizontal masthead content (e.g. <Masthead />). When using the docked variant, this content will only render at mobile viewports. */
3232
masthead?: React.ReactNode;

packages/react-core/src/demos/Compass/Compass.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ section: AI
44
subsection: Generative UIs
55
---
66

7-
import { useRef, useState } from 'react';
7+
import { useRef, useState, useEffect } from 'react';
88
import PlayIcon from '@patternfly/react-icons/dist/esm/icons/play-icon';
99
import OutlinedPlusSquare from '@patternfly/react-icons/dist/esm/icons/outlined-plus-square-icon';
1010
import OutlinedCopy from '@patternfly/react-icons/dist/esm/icons/outlined-copy-icon';
@@ -18,6 +18,7 @@ import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
1818
import imgAvatar from '../assets/avatarImg.svg';
1919
import ThIcon from '@patternfly/react-icons/dist/esm/icons/th-icon';
2020
import pfLogo from '../assets/PF-IconLogo-color.svg';
21+
import globalBreakpointLg from '@patternfly/react-tokens/dist/esm/t_global_breakpoint_lg';
2122

2223
## Demos
2324

packages/react-core/src/demos/Compass/examples/CompassDockDemo.tsx

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useRef, useState } from 'react';
1+
import { useRef, useState, useEffect } from 'react';
22
import {
33
Compass,
44
CompassContent,
@@ -36,6 +36,7 @@ import CodeIcon from '@patternfly/react-icons/dist/esm/icons/code-icon';
3636
import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
3737
import pfLogo from '../../assets/PF-IconLogo-color.svg';
3838
import ThIcon from '@patternfly/react-icons/dist/esm/icons/th-icon';
39+
import globalBreakpointLg from '@patternfly/react-tokens/dist/esm/t_global_breakpoint_lg';
3940

4041
interface NavOnSelectProps {
4142
groupId: number | string;
@@ -47,6 +48,20 @@ export const CompassDockDemo: React.FunctionComponent = () => {
4748
const [activeItem, setActiveItem] = useState<number>(0);
4849
const [isDockExpanded, setIsDockExpanded] = useState(false);
4950
const [isDockTextExpanded, setIsDockTextExpanded] = useState(false);
51+
const [isMobile, setIsMobile] = useState(false);
52+
53+
useEffect(() => {
54+
const mobileBreakpoint = Number.parseInt(globalBreakpointLg.value) * 16;
55+
const mediaQuery = window.matchMedia(`(max-width: ${mobileBreakpoint}px)`);
56+
const handleResize = (e: MediaQueryListEvent | MediaQueryList) => {
57+
setIsMobile(e.matches);
58+
};
59+
60+
handleResize(mediaQuery);
61+
mediaQuery.addEventListener('change', handleResize);
62+
63+
return () => mediaQuery.removeEventListener('change', handleResize);
64+
}, []);
5065

5166
const onNavSelect = (_event: React.FormEvent<HTMLInputElement>, selectedItem: NavOnSelectProps) => {
5267
typeof selectedItem.itemId === 'number' && setActiveItem(selectedItem.itemId);
@@ -71,12 +86,14 @@ export const CompassDockDemo: React.FunctionComponent = () => {
7186
};
7287

7388
const onToggleDock = () => {
74-
if (isDockExpanded) {
89+
if (isMobile) {
7590
setIsDockExpanded(!isDockExpanded);
7691

77-
setTimeout(() => {
78-
mobileToggleRef.current?.focus();
79-
}, 200);
92+
if (isDockExpanded) {
93+
setTimeout(() => {
94+
mobileToggleRef.current?.focus();
95+
}, 200);
96+
}
8097
} else {
8198
setIsDockTextExpanded(!isDockTextExpanded);
8299
}

packages/react-core/src/demos/Nav.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ id: Navigation
33
section: components
44
---
55

6-
import { Fragment, useState, useRef } from 'react';
6+
import { Fragment, useState, useRef, useEffect } from 'react';
77
import RhUiSettingsFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-settings-fill-icon';
88
import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
99
import RhUiQuestionMarkCircleFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-question-mark-circle-fill-icon';
@@ -21,6 +21,7 @@ import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
2121
import pfIconLogo from '@patternfly/react-core/src/demos/assets/PF-IconLogo-color.svg';
2222
import { DashboardBreadcrumb } from '@patternfly/react-core/dist/js/demos/DashboardWrapper';
2323
import { DashboardHeader } from '@patternfly/react-core/dist/js/demos/DashboardHeader';
24+
import globalBreakpointXl from '@patternfly/react-tokens/dist/esm/t_global_breakpoint_xl';
2425

2526
## Demos
2627

packages/react-core/src/demos/examples/Nav/NavDockedNav.tsx

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useRef, useState } from 'react';
1+
import { useRef, useState, useEffect } from 'react';
22
import {
33
Brand,
44
Breadcrumb,
@@ -38,6 +38,7 @@ import CodeIcon from '@patternfly/react-icons/dist/esm/icons/code-icon';
3838
import ThIcon from '@patternfly/react-icons/dist/esm/icons/th-icon';
3939
import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
4040
import pfIconLogo from '@patternfly/react-core/src/demos/assets/PF-IconLogo-color.svg';
41+
import globalBreakpointXl from '@patternfly/react-tokens/dist/esm/t_global_breakpoint_xl';
4142

4243
interface NavOnSelectProps {
4344
groupId: number | string;
@@ -49,6 +50,20 @@ export const NavDockedNav: React.FunctionComponent = () => {
4950
const [activeItem, setActiveItem] = useState(1);
5051
const [isDockExpanded, setIsDockExpanded] = useState(false);
5152
const [isDockTextExpanded, setIsDockTextExpanded] = useState(false);
53+
const [isMobile, setIsMobile] = useState(false);
54+
55+
useEffect(() => {
56+
const mobileBreakpoint = Number.parseInt(globalBreakpointXl.value) * 16;
57+
const mediaQuery = window.matchMedia(`(max-width: ${mobileBreakpoint}px)`);
58+
const handleResize = (e: MediaQueryListEvent | MediaQueryList) => {
59+
setIsMobile(e.matches);
60+
};
61+
62+
handleResize(mediaQuery);
63+
mediaQuery.addEventListener('change', handleResize);
64+
65+
return () => mediaQuery.removeEventListener('change', handleResize);
66+
}, []);
5267

5368
const onNavSelect = (_event: React.FormEvent<HTMLInputElement>, selectedItem: NavOnSelectProps) => {
5469
typeof selectedItem.itemId === 'number' && setActiveItem(selectedItem.itemId);
@@ -180,12 +195,14 @@ export const NavDockedNav: React.FunctionComponent = () => {
180195
};
181196

182197
const onToggleDock = () => {
183-
if (isDockExpanded) {
198+
if (isMobile) {
184199
setIsDockExpanded(!isDockExpanded);
185200

186-
setTimeout(() => {
187-
mobileToggleRef.current?.focus();
188-
}, 200);
201+
if (isDockExpanded) {
202+
setTimeout(() => {
203+
mobileToggleRef.current?.focus();
204+
}, 200);
205+
}
189206
} else {
190207
setIsDockTextExpanded(!isDockTextExpanded);
191208
}

0 commit comments

Comments
 (0)