1 import { Subject } from '../Subject';
2 import { OuterSubscriber } from '../OuterSubscriber';
3 import { subscribeToResult } from '../util/subscribeToResult';
4 export function repeatWhen(notifier) {
5 return (source) => source.lift(new RepeatWhenOperator(notifier));
7 class RepeatWhenOperator {
8 constructor(notifier) {
9 this.notifier = notifier;
11 call(subscriber, source) {
12 return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
15 class RepeatWhenSubscriber extends OuterSubscriber {
16 constructor(destination, notifier, source) {
18 this.notifier = notifier;
20 this.sourceIsBeingSubscribedTo = true;
22 notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
23 this.sourceIsBeingSubscribedTo = true;
24 this.source.subscribe(this);
26 notifyComplete(innerSub) {
27 if (this.sourceIsBeingSubscribedTo === false) {
28 return super.complete();
32 this.sourceIsBeingSubscribedTo = false;
33 if (!this.isStopped) {
35 this.subscribeToRetries();
37 if (!this.retriesSubscription || this.retriesSubscription.closed) {
38 return super.complete();
40 this._unsubscribeAndRecycle();
41 this.notifications.next();
45 const { notifications, retriesSubscription } = this;
47 notifications.unsubscribe();
48 this.notifications = null;
50 if (retriesSubscription) {
51 retriesSubscription.unsubscribe();
52 this.retriesSubscription = null;
56 _unsubscribeAndRecycle() {
57 const { _unsubscribe } = this;
58 this._unsubscribe = null;
59 super._unsubscribeAndRecycle();
60 this._unsubscribe = _unsubscribe;
63 subscribeToRetries() {
64 this.notifications = new Subject();
67 const { notifier } = this;
68 retries = notifier(this.notifications);
71 return super.complete();
73 this.retries = retries;
74 this.retriesSubscription = subscribeToResult(this, retries);
77 //# sourceMappingURL=repeatWhen.js.map