import { EVENT_CODE, triggerEvent } from '../aria' import SubMenu from './submenu' class MenuItem { public submenu: SubMenu = null constructor(public domNode: HTMLElement) { this.submenu = null this.init() } init(): void { this.domNode.setAttribute('tabindex', '0') const menuChild = this.domNode.querySelector('.el-menu') if (menuChild) { this.submenu = new SubMenu(this, menuChild) } this.addListeners() } addListeners(): void { this.domNode.addEventListener('keydown', (event: KeyboardEvent) => { let prevDef = false switch (event.code) { case EVENT_CODE.down: { triggerEvent( event.currentTarget as HTMLElement, 'mouseenter', ) this.submenu && this.submenu.gotoSubIndex(0) prevDef = true break } case EVENT_CODE.up: { triggerEvent( event.currentTarget as HTMLElement, 'mouseenter', ) this.submenu && this.submenu.gotoSubIndex( this.submenu.subMenuItems.length - 1, ) prevDef = true break } case EVENT_CODE.tab: { triggerEvent( event.currentTarget as HTMLElement, 'mouseleave', ) break } case EVENT_CODE.enter: case EVENT_CODE.space: { prevDef = true ;(event.currentTarget as HTMLElement).click() break } } if (prevDef) { event.preventDefault() } }) } } export default MenuItem