/** PURE_IMPORTS_START .._Subject,.._util_tryCatch,.._util_errorObject,.._OuterSubscriber,.._util_subscribeToResult PURE_IMPORTS_END */ var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; import { Subject } from '../Subject'; import { tryCatch } from '../util/tryCatch'; import { errorObject } from '../util/errorObject'; import { OuterSubscriber } from '../OuterSubscriber'; import { subscribeToResult } from '../util/subscribeToResult'; /** * Returns an Observable that mirrors the source Observable with the exception of a `complete`. If the source * Observable calls `complete`, this method will emit to the Observable returned from `notifier`. If that Observable * calls `complete` or `error`, then this method will call `complete` or `error` on the child subscription. Otherwise * this method will resubscribe to the source Observable. * * * * @param {function(notifications: Observable): Observable} notifier - Receives an Observable of notifications with * which a user can `complete` or `error`, aborting the repetition. * @return {Observable} The source Observable modified with repeat logic. * @method repeatWhen * @owner Observable */ export function repeatWhen(notifier) { return function (source) { return source.lift(new RepeatWhenOperator(notifier)); }; } var RepeatWhenOperator = /*@__PURE__*/ (/*@__PURE__*/ function () { function RepeatWhenOperator(notifier) { this.notifier = notifier; } RepeatWhenOperator.prototype.call = function (subscriber, source) { return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source)); }; return RepeatWhenOperator; }()); /** * We need this JSDoc comment for affecting ESDoc. * @ignore * @extends {Ignored} */ var RepeatWhenSubscriber = /*@__PURE__*/ (/*@__PURE__*/ function (_super) { __extends(RepeatWhenSubscriber, _super); function RepeatWhenSubscriber(destination, notifier, source) { _super.call(this, destination); this.notifier = notifier; this.source = source; this.sourceIsBeingSubscribedTo = true; } RepeatWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { this.sourceIsBeingSubscribedTo = true; this.source.subscribe(this); }; RepeatWhenSubscriber.prototype.notifyComplete = function (innerSub) { if (this.sourceIsBeingSubscribedTo === false) { return _super.prototype.complete.call(this); } }; RepeatWhenSubscriber.prototype.complete = function () { this.sourceIsBeingSubscribedTo = false; if (!this.isStopped) { if (!this.retries) { this.subscribeToRetries(); } if (!this.retriesSubscription || this.retriesSubscription.closed) { return _super.prototype.complete.call(this); } this._unsubscribeAndRecycle(); this.notifications.next(); } }; /** @deprecated internal use only */ RepeatWhenSubscriber.prototype._unsubscribe = function () { var _a = this, notifications = _a.notifications, retriesSubscription = _a.retriesSubscription; if (notifications) { notifications.unsubscribe(); this.notifications = null; } if (retriesSubscription) { retriesSubscription.unsubscribe(); this.retriesSubscription = null; } this.retries = null; }; /** @deprecated internal use only */ RepeatWhenSubscriber.prototype._unsubscribeAndRecycle = function () { var _a = this, notifications = _a.notifications, retries = _a.retries, retriesSubscription = _a.retriesSubscription; this.notifications = null; this.retries = null; this.retriesSubscription = null; _super.prototype._unsubscribeAndRecycle.call(this); this.notifications = notifications; this.retries = retries; this.retriesSubscription = retriesSubscription; return this; }; RepeatWhenSubscriber.prototype.subscribeToRetries = function () { this.notifications = new Subject(); var retries = tryCatch(this.notifier)(this.notifications); if (retries === errorObject) { return _super.prototype.complete.call(this); } this.retries = retries; this.retriesSubscription = subscribeToResult(this, retries); }; return RepeatWhenSubscriber; }(OuterSubscriber)); //# sourceMappingURL=repeatWhen.js.map