@@ -319,7 +319,7 @@ export class IgxOverlayService implements OnDestroy {
319
319
320
320
this . addOutsideClickListener ( info ) ;
321
321
this . addResizeHandler ( ) ;
322
- this . addCloseOnEscapeListener ( ) ;
322
+ this . addCloseOnEscapeListener ( info ) ;
323
323
324
324
if ( info . settings . modal ) {
325
325
const wrapperElement = info . elementRef . nativeElement . parentElement . parentElement ;
@@ -723,10 +723,8 @@ export class IgxOverlayService implements OnDestroy {
723
723
}
724
724
}
725
725
726
- private addCloseOnEscapeListener ( ) {
727
- // if all overlays minus closing overlays equals one add the handler
728
- if ( this . _overlayInfos . length - this . _overlayInfos . filter ( x => x . closeAnimationPlayer
729
- && x . closeAnimationPlayer . hasStarted ( ) ) . length === 1 ) {
726
+ private addCloseOnEscapeListener ( info : OverlayInfo ) {
727
+ if ( info . settings . closeOnEscape && ! this . _keyPressEventListener ) {
730
728
this . _keyPressEventListener = fromEvent ( this . _document , 'keydown' ) . pipe (
731
729
filter ( ( ev : KeyboardEvent ) => ev . key === 'Escape' || ev . key === 'Esc' )
732
730
) . subscribe ( ( ) => {
@@ -740,11 +738,12 @@ export class IgxOverlayService implements OnDestroy {
740
738
741
739
private removeCloseOnEscapeListener ( ) {
742
740
const closingOverlaysCount =
743
- this . _overlayInfos
744
- . filter ( o => o . closeAnimationPlayer && o . closeAnimationPlayer . hasStarted ( ) )
745
- . length ;
746
- if ( this . _overlayInfos . length - closingOverlaysCount === 1 && ! this . _keyPressEventListener . closed ) {
741
+ this . _overlayInfos
742
+ . filter ( o => o . closeAnimationPlayer && o . closeAnimationPlayer . hasStarted ( ) )
743
+ . length ;
744
+ if ( this . _overlayInfos . length - closingOverlaysCount === 1 && this . _keyPressEventListener && ! this . _keyPressEventListener . closed ) {
747
745
this . _keyPressEventListener . unsubscribe ( ) ;
746
+ this . _keyPressEventListener = null ;
748
747
}
749
748
}
750
749
0 commit comments