diff --git a/utils/modal/click-outside-or-esc.directive.ts b/utils/modal/click-outside-or-esc.directive.ts index bd68361a..2e66c175 100644 --- a/utils/modal/click-outside-or-esc.directive.ts +++ b/utils/modal/click-outside-or-esc.directive.ts @@ -3,6 +3,7 @@ import {Observable} from 'rxjs/Observable'; import 'rxjs/add/observable/fromEvent'; import 'rxjs/add/operator/delay'; import 'rxjs/add/operator/do'; +import {Subscriber} from "rxjs"; @Directive({ selector: '[click-outside-or-esc]' @@ -10,8 +11,7 @@ import 'rxjs/add/operator/do'; export class ClickOutsideOrEsc implements OnInit, OnDestroy { private listening: boolean; - private globalClick: any; - private escClick: any; + private subscriptions: any[] = []; @Output('clickOutside') clickOutside: EventEmitter; @@ -21,32 +21,38 @@ export class ClickOutsideOrEsc implements OnInit, OnDestroy { } ngOnInit() { - this.globalClick = Observable - .fromEvent(document, 'click') - .delay(1) - .do(() => { - this.listening = true; - }).subscribe((event: MouseEvent) => { - this.onGlobalClick(event); - }); - this.escClick = Observable - .fromEvent(document, 'keydown') - .delay(1) - .do(() => { - this.listening = true; - }).subscribe((event: KeyboardEvent) => { - if(event.keyCode === 27) { - this.clickOutside.emit({ - target: (event.target || null), - value: true - }); - } - }); + if(typeof document !== 'undefined') { + this.subscriptions.push(Observable + .fromEvent(document, 'click') + .delay(1) + .do(() => { + this.listening = true; + }).subscribe((event: MouseEvent) => { + this.onGlobalClick(event); + })); + this.subscriptions.push(Observable + .fromEvent(document, 'keydown') + .delay(1) + .do(() => { + this.listening = true; + }).subscribe((event: KeyboardEvent) => { + if (event.keyCode === 27) { + this.clickOutside.emit({ + target: (event.target || null), + value: true + }); + } + })); + } } ngOnDestroy() { - this.globalClick.unsubscribe(); - this.escClick.unsubscribe(); + if (this.subscriptions) { + this.subscriptions.forEach((subscription: Subscriber) => { + subscription.unsubscribe(); + }); + } + this.subscriptions = []; } onGlobalClick(event: MouseEvent) {