@@ -266,61 +266,54 @@ export class CalciteMenuItem implements LoadableComponent, T9nComponent, Localiz
266
266
} ;
267
267
268
268
private keyDownHandler = async ( event : KeyboardEvent ) : Promise < void > => {
269
- // opening and closing of submenu is handled here. Any other functionality is bubbled to parent menu.
270
- if ( event . key === " " || event . key === "Enter" ) {
271
- this . selectMenuItem ( event ) ;
272
- if (
273
- this . hasSubmenu &&
274
- ( ! this . href || ( this . href && event . target === this . dropdownActionEl ) )
275
- ) {
276
- this . open = ! this . open ;
269
+ const { hasSubmenu, href, layout, open, submenuItems } = this ;
270
+ const key = event . key ;
271
+ const targetIsDropdown = event . target === this . dropdownActionEl ;
272
+ if ( key === " " || key === "Enter" ) {
273
+ if ( hasSubmenu && ( ! href || ( href && targetIsDropdown ) ) ) {
274
+ this . open = ! open ;
277
275
}
278
- event . preventDefault ( ) ;
279
- } else if ( event . key === "Escape" ) {
280
- if ( this . open ) {
276
+ if ( ! ( href && targetIsDropdown ) && key !== "Enter" ) {
277
+ this . selectMenuItem ( event ) ;
278
+ }
279
+ if ( key === " " || ( href && targetIsDropdown ) ) {
280
+ event . preventDefault ( ) ;
281
+ }
282
+ } else if ( key === "Escape" ) {
283
+ if ( open ) {
281
284
this . open = false ;
282
285
return ;
283
286
}
284
287
this . calciteInternalMenuItemKeyEvent . emit ( { event } ) ;
285
288
event . preventDefault ( ) ;
286
- } else if ( event . key === "ArrowDown" || event . key === "ArrowUp" ) {
289
+ } else if ( key === "ArrowDown" || key === "ArrowUp" ) {
287
290
event . preventDefault ( ) ;
288
- if (
289
- ( event . target === this . dropdownActionEl || ! this . href ) &&
290
- this . hasSubmenu &&
291
- ! this . open &&
292
- this . layout === "horizontal"
293
- ) {
291
+ if ( ( targetIsDropdown || ! href ) && hasSubmenu && ! open && layout === "horizontal" ) {
294
292
this . open = true ;
295
293
return ;
296
294
}
297
295
this . calciteInternalMenuItemKeyEvent . emit ( {
298
296
event,
299
- children : this . submenuItems ,
300
- isSubmenuOpen : this . open && this . hasSubmenu ,
297
+ children : submenuItems ,
298
+ isSubmenuOpen : open && hasSubmenu ,
301
299
} ) ;
302
- } else if ( event . key === "ArrowLeft" ) {
300
+ } else if ( key === "ArrowLeft" ) {
303
301
event . preventDefault ( ) ;
304
302
this . calciteInternalMenuItemKeyEvent . emit ( {
305
303
event,
306
- children : this . submenuItems ,
304
+ children : submenuItems ,
307
305
isSubmenuOpen : true ,
308
306
} ) ;
309
- } else if ( event . key === "ArrowRight" ) {
307
+ } else if ( key === "ArrowRight" ) {
310
308
event . preventDefault ( ) ;
311
- if (
312
- ( event . target === this . dropdownActionEl || ! this . href ) &&
313
- this . hasSubmenu &&
314
- ! this . open &&
315
- this . layout === "vertical"
316
- ) {
309
+ if ( ( targetIsDropdown || ! href ) && hasSubmenu && ! open && layout === "vertical" ) {
317
310
this . open = true ;
318
311
return ;
319
312
}
320
313
this . calciteInternalMenuItemKeyEvent . emit ( {
321
314
event,
322
- children : this . submenuItems ,
323
- isSubmenuOpen : this . open && this . hasSubmenu ,
315
+ children : submenuItems ,
316
+ isSubmenuOpen : open && hasSubmenu ,
324
317
} ) ;
325
318
}
326
319
} ;
0 commit comments