@@ -114,47 +114,42 @@ function MenubarSubmenu({
114
114
const { activeIndex, menuItems, registerItem } = useContext ( MenubarContext ) ;
115
115
const [ submenuItems , setSubmenuItems ] = useState ( [ ] ) ;
116
116
const [ submenuActiveIndex , setSubmenuActiveIndex ] = useState ( - 1 ) ;
117
- const isActive = menuItems [ activeIndex ] === id ;
118
117
const buttonRef = useRef ( null ) ;
119
118
119
+ const isActive = menuItems [ activeIndex ] === id ;
120
120
const triggerRole = customTriggerRole || 'menuitem' ;
121
121
const listRole = customListRole || 'menu' ;
122
122
const hasPopup = listRole === 'listbox' ? 'listbox' : 'menu' ;
123
123
124
- const keyHandlers = useMemo ( ( ) => {
125
- // we only want to create the handlers if the menu is open,
126
- // otherwise return empty handlers
127
- if ( ! isOpen ) {
128
- return { } ;
129
- }
130
-
131
- return {
124
+ const keyHandlers = useMemo (
125
+ ( ) => ( {
126
+ // we only want to create the handlers if the menu is open,
127
+ // otherwise early return{
132
128
ArrowUp : ( e ) => {
129
+ if ( ! isOpen ) return ;
133
130
e . preventDefault ( ) ;
134
131
e . stopPropagation ( ) ;
135
132
136
- setSubmenuActiveIndex ( ( prev ) => {
137
- const newIndex =
138
- ( prev - 1 + submenuItems . length ) % submenuItems . length ;
139
- return newIndex ;
140
- } ) ;
133
+ setSubmenuActiveIndex (
134
+ ( prev ) => ( prev - 1 + submenuItems . length ) % submenuItems . length
135
+ ) ;
141
136
} ,
142
137
ArrowDown : ( e ) => {
138
+ if ( ! isOpen ) return ;
143
139
e . preventDefault ( ) ;
144
140
e . stopPropagation ( ) ;
145
141
146
- setSubmenuActiveIndex ( ( prev ) => {
147
- const newIndex = ( prev + 1 ) % submenuItems . length ;
148
- return newIndex ;
149
- } ) ;
142
+ setSubmenuActiveIndex ( ( prev ) => ( prev + 1 ) % submenuItems . length ) ;
150
143
} ,
151
144
Enter : ( e ) => {
145
+ if ( ! isOpen ) return ;
152
146
e . preventDefault ( ) ;
153
147
// if submenu is open, activate the focused item
154
148
// if submenu is closed, open it and focus the first item
155
149
} ,
156
150
' ' : ( e ) => {
157
151
// same as Enter
152
+ if ( ! isOpen ) return ;
158
153
e . preventDefault ( ) ;
159
154
} ,
160
155
Escape : ( e ) => {
@@ -163,10 +158,10 @@ function MenubarSubmenu({
163
158
Tab : ( e ) => {
164
159
// close
165
160
}
166
- } ;
167
-
168
- // support direct access keys
169
- } , [ isOpen , submenuItems . length , submenuActiveIndex ] ) ;
161
+ // support direct access keys
162
+ } ) ,
163
+ [ isOpen , submenuItems . length , submenuActiveIndex ]
164
+ ) ;
170
165
171
166
useKeyDownHandlers ( keyHandlers ) ;
172
167
0 commit comments