UNPKG

@patternfly/react-core

Version:

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

311 lines (295 loc) • 11.2 kB
--- id: Overflow menu section: components cssPrefix: pf-c-overflow-menu propComponents: ['OverflowMenu', 'OverflowMenuContent', 'OverflowMenuControl', 'OverflowMenuDropdownItem', 'OverflowMenuGroup', 'OverflowMenuItem'] --- import AlignLeftIcon from '@patternfly/react-icons/dist/esm/icons/align-left-icon'; import AlignCenterIcon from '@patternfly/react-icons/dist/esm/icons/align-center-icon'; import AlignRightIcon from '@patternfly/react-icons/dist/esm/icons/align-right-icon'; ## Examples ### Simple (responsive) ```js import React from 'react'; import { OverflowMenu, OverflowMenuControl, OverflowMenuContent, OverflowMenuGroup, OverflowMenuItem, OverflowMenuDropdownItem } from '@patternfly/react-core'; import { Dropdown, KebabToggle } from '@patternfly/react-core'; class SimpleOverflowMenu extends React.Component { constructor(props) { super(props); this.state = { isOpen: false }; this.onToggle = isOpen => { this.setState({ isOpen }); }; this.onSelect = event => { this.setState({ isOpen: !this.state.isOpen }); }; } render() { const { isOpen } = this.state; const dropdownItems = [ <OverflowMenuDropdownItem key="item1" isShared>Item 1</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="item2" isShared>Item 2</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="item3" isShared>Item 3</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="item4" isShared>Item 4</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="item5" isShared>Item 5</OverflowMenuDropdownItem> ] return ( <OverflowMenu breakpoint="lg"> <OverflowMenuContent> <OverflowMenuItem>Item</OverflowMenuItem> <OverflowMenuItem>Item</OverflowMenuItem> <OverflowMenuGroup> <OverflowMenuItem>Item</OverflowMenuItem> <OverflowMenuItem>Item</OverflowMenuItem> <OverflowMenuItem>Item</OverflowMenuItem> </OverflowMenuGroup> </OverflowMenuContent> <OverflowMenuControl> <Dropdown onSelect={this.onSelect} toggle={<KebabToggle onToggle={this.onToggle} />} isOpen={isOpen} isPlain dropdownItems={dropdownItems} /> </OverflowMenuControl> </OverflowMenu> ) } } ``` ### Group types ```js import React from 'react'; import { OverflowMenu, OverflowMenuControl, OverflowMenuContent, OverflowMenuGroup, OverflowMenuItem, OverflowMenuDropdownItem } from '@patternfly/react-core'; import { Dropdown, KebabToggle, Button, ButtonVariant } from '@patternfly/react-core'; import AlignLeftIcon from '@patternfly/react-icons/dist/esm/icons/align-left-icon'; import AlignCenterIcon from '@patternfly/react-icons/dist/esm/icons/align-center-icon'; import AlignRightIcon from '@patternfly/react-icons/dist/esm/icons/align-right-icon'; class OverflowMenuGroupTypes extends React.Component { constructor(props) { super(props); this.state = { isOpen: false }; this.onToggle = isOpen => { this.setState({ isOpen }); }; this.onSelect = event => { this.setState({ isOpen: !this.state.isOpen }); }; } render() { const { isOpen } = this.state; const dropdownItems = [ <OverflowMenuDropdownItem key="item1" isShared>Item 1</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="item2" isShared>Item 2</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="item3" isShared>Item 3</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="primary" isShared>Primary</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="secondary" isShared>Secondary</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="tertiary" isShared>Tertiary</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="action1" isShared>Action 1</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="action2" isShared>Action 2</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="action3" isShared>Action 3</OverflowMenuDropdownItem>, ]; return ( <OverflowMenu breakpoint="lg"> <OverflowMenuContent> <OverflowMenuGroup> <OverflowMenuItem>Item</OverflowMenuItem> <OverflowMenuItem>Item</OverflowMenuItem> <OverflowMenuItem>Item</OverflowMenuItem> </OverflowMenuGroup> <OverflowMenuGroup groupType="button"> <OverflowMenuItem> <Button variant={ButtonVariant.primary}>Primary</Button> </OverflowMenuItem> <OverflowMenuItem> <Button variant={ButtonVariant.secondary}>Secondary</Button> </OverflowMenuItem> <OverflowMenuItem> <Button variant={ButtonVariant.tertiary}>Tertiary</Button> </OverflowMenuItem> </OverflowMenuGroup> <OverflowMenuGroup groupType="icon"> <OverflowMenuItem> <Button variant={ButtonVariant.plain} aria-label="Align left"> <AlignLeftIcon /> </Button> </OverflowMenuItem> <OverflowMenuItem> <Button variant={ButtonVariant.plain} aria-label="Align center"> <AlignCenterIcon /> </Button> </OverflowMenuItem> <OverflowMenuItem> <Button variant={ButtonVariant.plain} aria-label="Align right"> <AlignRightIcon /> </Button> </OverflowMenuItem> </OverflowMenuGroup> </OverflowMenuContent> <OverflowMenuControl> <Dropdown onSelect={this.onSelect} toggle={<KebabToggle onToggle={this.onToggle} />} isOpen={isOpen} isPlain dropdownItems={dropdownItems} /> </OverflowMenuControl> </OverflowMenu> ) } } ``` ### Multiple groups ```js import React from 'react'; import { OverflowMenu, OverflowMenuControl, OverflowMenuContent, OverflowMenuGroup, OverflowMenuItem, OverflowMenuDropdownItem } from '@patternfly/react-core'; import { Dropdown, KebabToggle, Button, ButtonVariant } from '@patternfly/react-core'; import AlignLeftIcon from '@patternfly/react-icons/dist/esm/icons/align-left-icon'; import AlignCenterIcon from '@patternfly/react-icons/dist/esm/icons/align-center-icon'; import AlignRightIcon from '@patternfly/react-icons/dist/esm/icons/align-right-icon'; class OverflowMenuAdditionalOptions extends React.Component { constructor(props) { super(props); this.state = { isOpen: false }; this.onToggle = isOpen => { this.setState({ isOpen }); }; this.onSelect = event => { this.setState({ isOpen: !this.state.isOpen }); }; } render() { const { isOpen } = this.state; const dropdownItems = [ <OverflowMenuDropdownItem key="1" isShared>Primary</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="2" isShared>Secondary</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="3" isShared>Tertiary</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="4" isShared>Action 4</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="5" isShared>Action 5</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="6" isShared>Action 6</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="7">Action 7</OverflowMenuDropdownItem>, ]; return ( <OverflowMenu breakpoint="lg"> <OverflowMenuContent> <OverflowMenuGroup groupType="button"> <OverflowMenuItem> <Button variant={ButtonVariant.primary}>Primary</Button> </OverflowMenuItem> <OverflowMenuItem> <Button variant={ButtonVariant.secondary}>Secondary</Button> </OverflowMenuItem> <OverflowMenuItem> <Button variant={ButtonVariant.tertiary}>Tertiary</Button> </OverflowMenuItem> </OverflowMenuGroup> <OverflowMenuGroup groupType="icon"> <OverflowMenuItem> <Button variant={ButtonVariant.plain} aria-label="Align left"> <AlignLeftIcon /> </Button> </OverflowMenuItem> <OverflowMenuItem> <Button variant={ButtonVariant.plain} aria-label="Align center"> <AlignCenterIcon /> </Button> </OverflowMenuItem> <OverflowMenuItem> <Button variant={ButtonVariant.plain} aria-label="Align right"> <AlignRightIcon /> </Button> </OverflowMenuItem> </OverflowMenuGroup> </OverflowMenuContent> <OverflowMenuControl hasAdditionalOptions> <Dropdown onSelect={this.onSelect} toggle={<KebabToggle onToggle={this.onToggle} />} isOpen={isOpen} isPlain dropdownItems={dropdownItems} /> </OverflowMenuControl> </OverflowMenu> ) } } ``` ### Persistent ```js import React from 'react'; import { OverflowMenu, OverflowMenuControl, OverflowMenuContent, OverflowMenuGroup, OverflowMenuItem, OverflowMenuDropdownItem } from '@patternfly/react-core'; import { Dropdown, KebabToggle, Button, ButtonVariant } from '@patternfly/react-core'; class OverflowMenuPersist extends React.Component { constructor(props) { super(props); this.state = { isOpen: false }; this.onToggle = isOpen => { this.setState({ isOpen }); }; this.onSelect = event => { this.setState({ isOpen: !this.state.isOpen }); }; } render() { const { isOpen } = this.state; const dropdownItems = [ <OverflowMenuDropdownItem key="secondary" isShared>Secondary</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="tertiary" isShared>Tertiary</OverflowMenuDropdownItem>, <OverflowMenuDropdownItem key="action">Action 4</OverflowMenuDropdownItem> ]; return ( <OverflowMenu breakpoint="lg"> <OverflowMenuContent isPersistent> <OverflowMenuGroup groupType="button" isPersistent> <OverflowMenuItem isPersistent> <Button variant={ButtonVariant.primary}>Primary</Button> </OverflowMenuItem> <OverflowMenuItem> <Button variant={ButtonVariant.secondary}>Secondary</Button> </OverflowMenuItem> <OverflowMenuItem> <Button variant={ButtonVariant.tertiary}>Tertiary</Button> </OverflowMenuItem> </OverflowMenuGroup> </OverflowMenuContent> <OverflowMenuControl hasAdditionalOptions> <Dropdown onSelect={this.onSelect} toggle={<KebabToggle onToggle={this.onToggle} />} isOpen={isOpen} isPlain dropdownItems={dropdownItems} /> </OverflowMenuControl> </OverflowMenu> ) } } ```