@@ -7,39 +7,49 @@ import {
77 Divider ,
88 MenuToggleElement
99} from '@patternfly/react-core' ;
10+ import { useState } from 'react' ;
1011
1112export 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