UNPKG

@patternfly/react-core

Version:

This library provides a set of common React components for use with the PatternFly reference implementation.

128 lines (119 loc) 5.38 kB
import { useContext, useRef, useState } from 'react'; import { Button, Content, Drawer, DrawerPanelContent, DrawerContent, DrawerContentBody, DrawerHead, DrawerActions, DrawerCloseButton, JumpLinks, JumpLinksItem, JumpLinksList, PageSection, Sidebar, SidebarContent, SidebarPanel, DrawerContext } from '@patternfly/react-core'; import { DashboardWrapper } from '@patternfly/react-core/dist/js/demos/DashboardWrapper'; const JumpLinksWrapper = ({ headings }) => { const { drawerContentRef } = useContext(DrawerContext); return ( <JumpLinks isVertical={true} label="Jump to section" scrollableRef={drawerContentRef} 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> ); }; export const JumpLinksWithDrawer = () => { const headings = ['First', 'Second', 'Third', 'Fourth', 'Fifth']; const [isExpanded, setIsExpanded] = useState(false); const drawerRef = useRef(undefined); 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}> <DrawerContentBody> <Sidebar> <SidebarPanel variant="sticky"> <PageSection> <JumpLinksWrapper headings={headings} /> </PageSection> </SidebarPanel> <SidebarContent> <PageSection id="drawer-toggle" stickyOnBreakpoint={{ default: 'top' }}> <Button onClick={onToggleClick}>Toggle drawer</Button> </PageSection> <PageSection hasOverflowScroll> <Content> {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> ))} </Content> </PageSection> </SidebarContent> </Sidebar> </DrawerContentBody> </DrawerContent> </Drawer> </DashboardWrapper> ); };