@@ -7,39 +7,49 @@ import {
7
7
Divider ,
8
8
MenuToggleElement
9
9
} from '@patternfly/react-core' ;
10
+ import { useState } from 'react' ;
10
11
11
12
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 ) ;
17
15
18
16
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
+ }
21
23
} ;
22
24
23
25
const onSelect = ( ) => {
24
26
setIsOpen ( false ) ;
25
27
onFocus ( ) ;
26
28
} ;
27
29
30
+ const onToggleClick = ( ) => {
31
+ setIsOpen ( ! isOpen ) ;
32
+ } ;
33
+
28
34
return (
29
35
< Dropdown
30
36
onSelect = { onSelect }
31
37
onOpenChange = { ( isOpen : boolean ) => setIsOpen ( isOpen ) }
32
- toggle = { ( toggleRef : React . Ref < MenuToggleElement > ) => (
38
+ toggle = { ( toggleRefCallback : React . Ref < MenuToggleElement > ) => (
33
39
< 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
+ } }
34
49
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" />
40
51
] }
41
52
aria-label = "Dropdown with checkbox split button"
42
- ref = { toggleRef }
43
53
onClick = { onToggleClick }
44
54
isExpanded = { isOpen }
45
55
/>
0 commit comments