1- import { Component , ViewChild , HostListener , ElementRef } from "@angular/core" ;
1+ import { OverflowMenuOption } from "./overflow-menu-option.component" ;
2+ import { Component , HostListener , ElementRef , QueryList , AfterViewInit } from "@angular/core" ;
23import { Dialog } from "../dialog.component" ;
34import { position } from "../../utils/position" ;
45import { isFocusInLastItem , isFocusInFirstItem } from "./../../common/tab.service" ;
@@ -13,19 +14,18 @@ import { I18n } from "./../../i18n/i18n.module";
1314 selector : "ibm-overflow-menu-pane" ,
1415 template : `
1516 <ul
17+ class="bx--overflow-menu-options bx--overflow-menu-options--open"
1618 role="menu"
17- [attr.aria-label]="dialogConfig.menuLabel"
18- #dialog
19- class="bx--overflow-menu-options bx--overflow-menu-options--open">
19+ (focusout)="clickClose($event)"
20+ [attr.aria-label]="dialogConfig.menuLabel">
2021 <ng-template
2122 [ngTemplateOutlet]="dialogConfig.content"
2223 [ngTemplateOutletContext]="{overflowMenu: this}">
2324 </ng-template>
2425 </ul>
2526 `
2627} )
27- export class OverflowMenuPane extends Dialog {
28- @ViewChild ( "dialog" ) dialog ;
28+ export class OverflowMenuPane extends Dialog implements AfterViewInit {
2929
3030 constructor ( protected elementRef : ElementRef , protected i18n : I18n ) {
3131 super ( elementRef ) ;
@@ -86,10 +86,22 @@ export class OverflowMenuPane extends Dialog {
8686 event . preventDefault ( ) ;
8787 listItems [ listItems . length - 1 ] . focus ( ) ;
8888 break ;
89+
90+ case "Tab" :
91+ this . doClose ( ) ;
92+ }
93+ }
94+
95+ clickClose ( event ) {
96+ if ( event . target === this . dialogConfig . parentRef . nativeElement . firstChild ||
97+ this . listItems ( ) . some ( button => button === ( event . relatedTarget ) ) ||
98+ ( event . type === "focusout" && event . relatedTarget === this . dialogConfig . parentRef . nativeElement ) ) {
99+ return ;
89100 }
101+ this . doClose ( ) ;
90102 }
91103
92104 private listItems ( ) {
93- return Array . from < any > ( this . dialog . nativeElement . querySelectorAll ( ".bx--overflow-menu-options__btn:not([disabled])" ) ) ;
105+ return Array . from < any > ( this . elementRef . nativeElement . querySelectorAll ( ".bx--overflow-menu-options__btn:not([disabled])" ) ) ;
94106 }
95107}
0 commit comments