diff --git a/packages/react-core/src/components/Dropdown/InternalDropdownItem.tsx b/packages/react-core/src/components/Dropdown/InternalDropdownItem.tsx index 53840469a22..0043f642098 100644 --- a/packages/react-core/src/components/Dropdown/InternalDropdownItem.tsx +++ b/packages/react-core/src/components/Dropdown/InternalDropdownItem.tsx @@ -151,18 +151,15 @@ export class InternalDropdownItem extends React.Component @@ -202,9 +199,11 @@ export class InternalDropdownItem extends React.Component {renderWithTooltip( - isComponentReactElement ? ( - React.cloneElement(Component as React.ReactHTMLElement, { + isChildReactElement ? ( + React.cloneElement(children as React.ReactElement, { ...additionalProps, + ref: this.ref, + id, className: css(classes, itemClass, variant === 'icon' && styles.modifiers.icon) }) ) : ( diff --git a/packages/react-core/src/components/Dropdown/examples/Dropdown.md b/packages/react-core/src/components/Dropdown/examples/Dropdown.md index a19935a4788..fdd33f4b152 100644 --- a/packages/react-core/src/components/Dropdown/examples/Dropdown.md +++ b/packages/react-core/src/components/Dropdown/examples/Dropdown.md @@ -9,6 +9,7 @@ typescript: true import { Dropdown, DropdownToggle, DropdownToggleCheckbox, DropdownItem, DropdownItemIcon, DropdownSeparator, DropdownPosition, DropdownDirection, KebabToggle, DropdownGroup, DropdownToggleAction } from '@patternfly/react-core'; import { ThIcon, CaretDownIcon, CogIcon, BellIcon, CubesIcon } from '@patternfly/react-icons'; +import { Link } from '@reach/router'; ## Examples @@ -1105,26 +1106,64 @@ class DropdownPanel extends React.Component { } ``` -## React router link usage +```js title=React-Router-Link-Usage +import React from 'react'; +import { + Button, + Dropdown, + DropdownToggle, + DropdownItem, + DropdownSeparator, + DropdownPosition, + DropdownDirection, + KebabToggle +} from '@patternfly/react-core'; +import { Link } from '@reach/router'; +import { ThIcon, CaretDownIcon } from '@patternfly/react-icons'; -A react-router Link may be wrapped by DropdownItem or used directly within Dropdown. Here's some example JSX: +class RouterDropdown 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 + }); + this.onFocus(); + }; + this.onFocus = () => { + const element = document.getElementById('toggle-id'); + element.focus(); + }; + } - -```js noLive -/** Wrapped Link for DropdownItem list **/ - - Link - + render() { + const { isOpen } = this.state; + const dropdownItems = [ + + Link + + ]; -/** Direct child of Dropdown **/ - - Expanded Dropdown - + return ( + + Dropdown + + } + isOpen={isOpen} + dropdownItems={dropdownItems} + /> + ); } - isOpen={isOpen}> - Link - +} ```