1 import { Subject } from '../Subject';
2 import { OuterSubscriber } from '../OuterSubscriber';
3 import { subscribeToResult } from '../util/subscribeToResult';
4 export function windowWhen(closingSelector) {
5 return function windowWhenOperatorFunction(source) {
6 return source.lift(new WindowOperator(closingSelector));
10 constructor(closingSelector) {
11 this.closingSelector = closingSelector;
13 call(subscriber, source) {
14 return source.subscribe(new WindowSubscriber(subscriber, this.closingSelector));
17 class WindowSubscriber extends OuterSubscriber {
18 constructor(destination, closingSelector) {
20 this.destination = destination;
21 this.closingSelector = closingSelector;
24 notifyNext(_outerValue, _innerValue, _outerIndex, _innerIndex, innerSub) {
25 this.openWindow(innerSub);
30 notifyComplete(innerSub) {
31 this.openWindow(innerSub);
34 this.window.next(value);
37 this.window.error(err);
38 this.destination.error(err);
39 this.unsubscribeClosingNotification();
42 this.window.complete();
43 this.destination.complete();
44 this.unsubscribeClosingNotification();
46 unsubscribeClosingNotification() {
47 if (this.closingNotification) {
48 this.closingNotification.unsubscribe();
51 openWindow(innerSub = null) {
53 this.remove(innerSub);
54 innerSub.unsubscribe();
56 const prevWindow = this.window;
58 prevWindow.complete();
60 const window = this.window = new Subject();
61 this.destination.next(window);
64 const { closingSelector } = this;
65 closingNotifier = closingSelector();
68 this.destination.error(e);
72 this.add(this.closingNotification = subscribeToResult(this, closingNotifier));
75 //# sourceMappingURL=windowWhen.js.map