1 import { Subject } from '../Subject';
2 import { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';
3 export function repeatWhen(notifier) {
4 return (source) => source.lift(new RepeatWhenOperator(notifier));
6 class RepeatWhenOperator {
7 constructor(notifier) {
8 this.notifier = notifier;
10 call(subscriber, source) {
11 return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
14 class RepeatWhenSubscriber extends SimpleOuterSubscriber {
15 constructor(destination, notifier, source) {
17 this.notifier = notifier;
19 this.sourceIsBeingSubscribedTo = true;
22 this.sourceIsBeingSubscribedTo = true;
23 this.source.subscribe(this);
26 if (this.sourceIsBeingSubscribedTo === false) {
27 return super.complete();
31 this.sourceIsBeingSubscribedTo = false;
32 if (!this.isStopped) {
34 this.subscribeToRetries();
36 if (!this.retriesSubscription || this.retriesSubscription.closed) {
37 return super.complete();
39 this._unsubscribeAndRecycle();
40 this.notifications.next(undefined);
44 const { notifications, retriesSubscription } = this;
46 notifications.unsubscribe();
47 this.notifications = undefined;
49 if (retriesSubscription) {
50 retriesSubscription.unsubscribe();
51 this.retriesSubscription = undefined;
53 this.retries = undefined;
55 _unsubscribeAndRecycle() {
56 const { _unsubscribe } = this;
57 this._unsubscribe = null;
58 super._unsubscribeAndRecycle();
59 this._unsubscribe = _unsubscribe;
62 subscribeToRetries() {
63 this.notifications = new Subject();
66 const { notifier } = this;
67 retries = notifier(this.notifications);
70 return super.complete();
72 this.retries = retries;
73 this.retriesSubscription = innerSubscribe(retries, new SimpleInnerSubscriber(this));
76 //# sourceMappingURL=repeatWhen.js.map