Skip to content

Commit 4834e6d

Browse files
committed
added focus logic
1 parent 1a51887 commit 4834e6d

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

packages/react-core/src/components/Dropdown/examples/DropdownWithSplit.tsx

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,49 @@ import {
77
Divider,
88
MenuToggleElement
99
} from '@patternfly/react-core';
10+
import { useState } from 'react';
1011

1112
export const DropdownSplitButtonText: React.FunctionComponent = () => {
12-
const [isOpen, setIsOpen] = React.useState(false);
13-
14-
const onToggleClick = () => {
15-
setIsOpen(!isOpen);
16-
};
13+
const [isOpen, setIsOpen] = useState(false);
14+
const toggleRef = React.useRef<MenuToggleElement>(null);
1715

1816
const onFocus = () => {
19-
const element = document.getElementById('toggle-split-button-text');
20-
element?.focus();
17+
if (toggleRef.current) {
18+
const toggleButton = toggleRef.current.querySelector('button[aria-expanded]');
19+
if (toggleButton) {
20+
(toggleButton as HTMLElement).focus();
21+
}
22+
}
2123
};
2224

2325
const onSelect = () => {
2426
setIsOpen(false);
2527
onFocus();
2628
};
2729

30+
const onToggleClick = () => {
31+
setIsOpen(!isOpen);
32+
};
33+
2834
return (
2935
<Dropdown
3036
onSelect={onSelect}
3137
onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}
32-
toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
38+
toggle={(toggleRefCallback: React.Ref<MenuToggleElement>) => (
3339
<MenuToggle
40+
ref={(node) => {
41+
// Handle both callback ref and useRef
42+
if (typeof toggleRefCallback === 'function') {
43+
toggleRefCallback(node);
44+
} else if (toggleRefCallback) {
45+
(toggleRefCallback as React.MutableRefObject<MenuToggleElement | null>).current = node;
46+
}
47+
(toggleRef as React.MutableRefObject<MenuToggleElement | null>).current = node;
48+
}}
3449
splitButtonItems={[
35-
<MenuToggleCheckbox
36-
id="split-button-checkbox-example"
37-
key="split-checkbox"
38-
aria-label="Select all"
39-
></MenuToggleCheckbox>
50+
<MenuToggleCheckbox id="split-button-checkbox-example" key="split-checkbox" aria-label="Select all" />
4051
]}
4152
aria-label="Dropdown with checkbox split button"
42-
ref={toggleRef}
4353
onClick={onToggleClick}
4454
isExpanded={isOpen}
4555
/>

0 commit comments

Comments
 (0)