forked from patternfly/patternfly-react
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathJumpLinksWithDrawer.js
More file actions
131 lines (123 loc) · 5.83 KB
/
Copy pathJumpLinksWithDrawer.js
File metadata and controls
131 lines (123 loc) · 5.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import React from 'react';
import {
Button,
Drawer,
DrawerPanelContent,
DrawerContent,
DrawerContentBody,
DrawerHead,
DrawerActions,
DrawerCloseButton,
JumpLinks,
JumpLinksItem,
JumpLinksList,
PageSection,
PageSectionVariants,
Sidebar,
SidebarContent,
SidebarPanel,
TextContent,
getResizeObserver
} from '@patternfly/react-core';
import DashboardWrapper from '@patternfly/react-core/src/demos/examples/DashboardWrapper';
export const JumpLinksWithDrawer = () => {
const headings = ['First', 'Second', 'Third', 'Fourth', 'Fifth'];
const [offsetHeight, setOffsetHeight] = React.useState(0);
const [isExpanded, setIsExpanded] = React.useState(false);
const drawerRef = React.useRef();
React.useEffect(() => {
const masthead = document.getElementsByClassName('pf-c-masthead')[0];
const drawerToggleSection = document.getElementById('drawer-toggle');
getResizeObserver(masthead, () => {
setOffsetHeight(masthead.offsetHeight + drawerToggleSection.offsetHeight);
});
}, []);
const onCloseClick = () => {
setIsExpanded(false);
};
const onToggleClick = () => {
setIsExpanded(!isExpanded);
};
const panelContent = (
<DrawerPanelContent>
<DrawerHead>
<span tabIndex={isExpanded ? 0 : -1} ref={drawerRef}>
drawer-panel
</span>
<DrawerActions>
<DrawerCloseButton onClick={onCloseClick} />
</DrawerActions>
</DrawerHead>
</DrawerPanelContent>
);
return (
<DashboardWrapper breadcrumb={null} mainContainerId="scrollable-element">
<Drawer isExpanded={isExpanded}>
<DrawerContent panelContent={panelContent} id="jump-links-drawer-drawer-scrollable-container">
<DrawerContentBody>
<Sidebar>
<SidebarPanel variant="sticky">
<PageSection variant={PageSectionVariants.light}>
<JumpLinks
isVertical={true}
label="Jump to section"
scrollableSelector="#jump-links-drawer-drawer-scrollable-container"
offset={offsetHeight}
expandable={{ default: 'expandable', md: 'nonExpandable' }}
>
{headings.map(heading => (
<JumpLinksItem key={heading} href={`#jump-links-drawer-jump-links-${heading.toLowerCase()}`}>
{`${heading} section`}
<JumpLinksList></JumpLinksList>
</JumpLinksItem>
))}
</JumpLinks>
</PageSection>
</SidebarPanel>
<SidebarContent>
<PageSection id="drawer-toggle" stickyOnBreakpoint={{ default: 'top' }} variant="light">
<Button onClick={onToggleClick}>Toggle drawer</Button>
</PageSection>
<PageSection variant={PageSectionVariants.light}>
<TextContent>
{headings.map(heading => (
<div key={heading} style={{ maxWidth: '800px', marginBottom: '32px' }}>
<h2 id={`jump-links-drawer-jump-links-${heading.toLowerCase()}`} tabIndex={-1}>
{`${heading} section`}
</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed dui ullamcorper,
dignissim purus eu, mattis leo. Curabitur eleifend turpis ipsum, aliquam pretium risus
efficitur vel. Etiam eget enim vitae quam facilisis pharetra at eget diam. Suspendisse ut
vulputate magna. Nunc viverra posuere orci sit amet pulvinar. Quisque dui justo, egestas ac
accumsan suscipit, tristique eu risus. In aliquet libero ante, ac pulvinar lectus pretium in.
Ut enim tellus, vulputate et lorem et, hendrerit rutrum diam. Cras pharetra dapibus elit vitae
ullamcorper. Nulla facilisis euismod diam, at sodales sem laoreet hendrerit. Curabitur
porttitor ex nulla. Proin ligula leo, egestas ac nibh a, pellentesque mollis augue. Donec nec
augue vehicula eros pulvinar vehicula eget rutrum neque. Duis sit amet interdum lorem. Vivamus
porttitor nec quam a accumsan. Nam pretium vitae leo vitae rhoncus.
</p>
<p>
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium
voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati
cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est
laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero
tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime
placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus
autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et
voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis
doloribus asperiores repellat.
</p>
</div>
))}
</TextContent>
</PageSection>
</SidebarContent>
</Sidebar>
</DrawerContentBody>
</DrawerContent>
</Drawer>
</DashboardWrapper>
);
};