@@ -51,28 +51,27 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
5151 const menuRef = ( innerRef as React . RefObject < HTMLDivElement > ) || localMenuRef ;
5252 React . useEffect ( ( ) => {
5353 const handleMenuKeys = ( event : KeyboardEvent ) => {
54- if ( ! isOpen && toggleRef . current ?. contains ( event . target as Node ) ) {
55- // toggle was clicked open, focus on first menu item
56- if ( event . key === 'Enter' || event . key === 'Space' ) {
57- setTimeout ( ( ) => {
58- const firstElement = menuRef ?. current ?. querySelector ( 'li button:not(:disabled),li input:not(:disabled)' ) ;
59- firstElement && ( firstElement as HTMLElement ) . focus ( ) ;
60- } , 0 ) ;
61- }
62- }
6354 // Close the menu on tab or escape if onOpenChange is provided
6455 if (
6556 ( isOpen && onOpenChange && menuRef . current ?. contains ( event . target as Node ) ) ||
6657 toggleRef . current ?. contains ( event . target as Node )
6758 ) {
6859 if ( event . key === 'Escape' || event . key === 'Tab' ) {
69- onOpenChange ( ! isOpen ) ;
60+ onOpenChange ( false ) ;
7061 toggleRef . current ?. focus ( ) ;
7162 }
7263 }
7364 } ;
7465
75- const handleClickOutside = ( event : MouseEvent ) => {
66+ const handleClick = ( event : MouseEvent ) => {
67+ // toggle was clicked open via keyboard, focus on first menu item
68+ if ( isOpen && toggleRef . current ?. contains ( event . target as Node ) && event . detail === 0 ) {
69+ setTimeout ( ( ) => {
70+ const firstElement = menuRef ?. current ?. querySelector ( 'li button:not(:disabled),li input:not(:disabled)' ) ;
71+ firstElement && ( firstElement as HTMLElement ) . focus ( ) ;
72+ } , 0 ) ;
73+ }
74+
7675 // If the event is not on the toggle and onOpenChange callback is provided, close the menu
7776 if ( isOpen && onOpenChange && ! toggleRef ?. current ?. contains ( event . target as Node ) ) {
7877 if ( isOpen && ! menuRef . current ?. contains ( event . target as Node ) ) {
@@ -82,11 +81,11 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
8281 } ;
8382
8483 window . addEventListener ( 'keydown' , handleMenuKeys ) ;
85- window . addEventListener ( 'click' , handleClickOutside ) ;
84+ window . addEventListener ( 'click' , handleClick ) ;
8685
8786 return ( ) => {
8887 window . removeEventListener ( 'keydown' , handleMenuKeys ) ;
89- window . removeEventListener ( 'click' , handleClickOutside ) ;
88+ window . removeEventListener ( 'click' , handleClick ) ;
9089 } ;
9190 } , [ isOpen , menuRef , onOpenChange ] ) ;
9291
0 commit comments