1 /** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
2 import * as tslib_1 from "tslib";
3 import { Subject } from '../Subject';
4 import { OuterSubscriber } from '../OuterSubscriber';
5 import { subscribeToResult } from '../util/subscribeToResult';
6 export function repeatWhen(notifier) {
7 return function (source) { return source.lift(new RepeatWhenOperator(notifier)); };
9 var RepeatWhenOperator = /*@__PURE__*/ (function () {
10 function RepeatWhenOperator(notifier) {
11 this.notifier = notifier;
13 RepeatWhenOperator.prototype.call = function (subscriber, source) {
14 return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
16 return RepeatWhenOperator;
18 var RepeatWhenSubscriber = /*@__PURE__*/ (function (_super) {
19 tslib_1.__extends(RepeatWhenSubscriber, _super);
20 function RepeatWhenSubscriber(destination, notifier, source) {
21 var _this = _super.call(this, destination) || this;
22 _this.notifier = notifier;
23 _this.source = source;
24 _this.sourceIsBeingSubscribedTo = true;
27 RepeatWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
28 this.sourceIsBeingSubscribedTo = true;
29 this.source.subscribe(this);
31 RepeatWhenSubscriber.prototype.notifyComplete = function (innerSub) {
32 if (this.sourceIsBeingSubscribedTo === false) {
33 return _super.prototype.complete.call(this);
36 RepeatWhenSubscriber.prototype.complete = function () {
37 this.sourceIsBeingSubscribedTo = false;
38 if (!this.isStopped) {
40 this.subscribeToRetries();
42 if (!this.retriesSubscription || this.retriesSubscription.closed) {
43 return _super.prototype.complete.call(this);
45 this._unsubscribeAndRecycle();
46 this.notifications.next();
49 RepeatWhenSubscriber.prototype._unsubscribe = function () {
50 var _a = this, notifications = _a.notifications, retriesSubscription = _a.retriesSubscription;
52 notifications.unsubscribe();
53 this.notifications = null;
55 if (retriesSubscription) {
56 retriesSubscription.unsubscribe();
57 this.retriesSubscription = null;
61 RepeatWhenSubscriber.prototype._unsubscribeAndRecycle = function () {
62 var _unsubscribe = this._unsubscribe;
63 this._unsubscribe = null;
64 _super.prototype._unsubscribeAndRecycle.call(this);
65 this._unsubscribe = _unsubscribe;
68 RepeatWhenSubscriber.prototype.subscribeToRetries = function () {
69 this.notifications = new Subject();
72 var notifier = this.notifier;
73 retries = notifier(this.notifications);
76 return _super.prototype.complete.call(this);
78 this.retries = retries;
79 this.retriesSubscription = subscribeToResult(this, retries);
81 return RepeatWhenSubscriber;
83 //# sourceMappingURL=repeatWhen.js.map