Skip to content

Commit 423dd67

Browse files
tlabajTitani
andauthored
fix(Dropdown next): Add support for forward ref and updated docs. (#8142)
* fix(Dropdown next): Add support for forward ref and updated docs. * hide inner ref prop * hide innerRef Co-authored-by: Titani <[email protected]>
1 parent 2f37a67 commit 423dd67

File tree

5 files changed

+9
-10
lines changed

5 files changed

+9
-10
lines changed

packages/react-core/src/next/components/Dropdown/Dropdown.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ export interface DropdownProps extends MenuProps {
2323
isScrollable?: boolean;
2424
/** Min width of the menu. */
2525
minWidth?: string;
26+
/** @hide Forwarded ref */
27+
innerRef?: React.Ref<any>;
2628
}
2729

28-
export const Dropdown: React.FunctionComponent<DropdownProps> = ({
30+
const DropdownBase: React.FunctionComponent<DropdownProps> = ({
2931
children,
3032
className,
3133
onSelect,
@@ -35,13 +37,14 @@ export const Dropdown: React.FunctionComponent<DropdownProps> = ({
3537
isPlain,
3638
isScrollable,
3739
minWidth,
40+
innerRef,
3841
...props
3942
}: DropdownProps) => {
4043
const localMenuRef = React.useRef<HTMLDivElement>();
4144
const toggleRef = React.useRef<HTMLButtonElement>();
4245
const containerRef = React.useRef<HTMLDivElement>();
4346

44-
const menuRef = (props.innerRef as React.RefObject<HTMLDivElement>) || localMenuRef;
47+
const menuRef = (innerRef as React.RefObject<HTMLDivElement>) || localMenuRef;
4548
React.useEffect(() => {
4649
const handleMenuKeys = (event: KeyboardEvent) => {
4750
if (!isOpen && toggleRef.current?.contains(event.target as Node)) {
@@ -112,4 +115,8 @@ export const Dropdown: React.FunctionComponent<DropdownProps> = ({
112115
</div>
113116
);
114117
};
118+
119+
export const Dropdown = React.forwardRef((props: DropdownProps, ref: React.Ref<any>) => (
120+
<DropdownBase innerRef={ref} {...props} />
121+
));
115122
Dropdown.displayName = 'Dropdown';

packages/react-core/src/next/components/Dropdown/examples/DropdownBasic.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { Divider, MenuToggle } from '@patternfly/react-core';
44

55
export const DropdownBasic: React.FunctionComponent = () => {
66
const [isOpen, setIsOpen] = React.useState(false);
7-
const menuRef = React.useRef<HTMLDivElement>(null);
87

98
const onToggleClick = () => {
109
setIsOpen(!isOpen);
@@ -18,7 +17,6 @@ export const DropdownBasic: React.FunctionComponent = () => {
1817

1918
return (
2019
<Dropdown
21-
innerRef={menuRef}
2220
isOpen={isOpen}
2321
onSelect={onSelect}
2422
onOpenChange={isOpen => setIsOpen(isOpen)}

packages/react-core/src/next/components/Dropdown/examples/DropdownWithDescriptions.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { MenuToggle } from '@patternfly/react-core';
44

55
export const DropdownWithDescriptions: React.FunctionComponent = () => {
66
const [isOpen, setIsOpen] = React.useState(false);
7-
const menuRef = React.useRef<HTMLDivElement>(null);
87

98
const onToggleClick = () => {
109
setIsOpen(!isOpen);
@@ -18,7 +17,6 @@ export const DropdownWithDescriptions: React.FunctionComponent = () => {
1817

1918
return (
2019
<Dropdown
21-
innerRef={menuRef}
2220
isOpen={isOpen}
2321
onSelect={onSelect}
2422
minWidth="150px"

packages/react-core/src/next/components/Dropdown/examples/DropdownWithGroups.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { MenuToggle, Divider } from '@patternfly/react-core';
44

55
export const DropdownWithGroups: React.FunctionComponent = () => {
66
const [isOpen, setIsOpen] = React.useState(false);
7-
const menuRef = React.useRef<HTMLDivElement>(null);
87

98
const onToggleClick = () => {
109
setIsOpen(!isOpen);
@@ -18,7 +17,6 @@ export const DropdownWithGroups: React.FunctionComponent = () => {
1817

1918
return (
2019
<Dropdown
21-
innerRef={menuRef}
2220
isOpen={isOpen}
2321
onSelect={onSelect}
2422
onOpenChange={isOpen => setIsOpen(isOpen)}

packages/react-core/src/next/components/Dropdown/examples/DropdownWithKebabToggle.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-ico
55

66
export const DropdownWithKebab: React.FunctionComponent = () => {
77
const [isOpen, setIsOpen] = React.useState(false);
8-
const menuRef = React.useRef<HTMLDivElement>(null);
98

109
const onToggleClick = () => {
1110
setIsOpen(!isOpen);
@@ -19,7 +18,6 @@ export const DropdownWithKebab: React.FunctionComponent = () => {
1918

2019
return (
2120
<Dropdown
22-
innerRef={menuRef}
2321
isOpen={isOpen}
2422
onSelect={onSelect}
2523
minWidth="150px"

0 commit comments

Comments
 (0)