1 /** PURE_IMPORTS_START tslib,_Subscriber,_Observable,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
2 import * as tslib_1 from "tslib";
3 import { Subscriber } from '../Subscriber';
4 import { Observable } from '../Observable';
5 import { OuterSubscriber } from '../OuterSubscriber';
6 import { subscribeToResult } from '../util/subscribeToResult';
7 export function delayWhen(delayDurationSelector, subscriptionDelay) {
8 if (subscriptionDelay) {
9 return function (source) {
10 return new SubscriptionDelayObservable(source, subscriptionDelay)
11 .lift(new DelayWhenOperator(delayDurationSelector));
14 return function (source) { return source.lift(new DelayWhenOperator(delayDurationSelector)); };
16 var DelayWhenOperator = /*@__PURE__*/ (function () {
17 function DelayWhenOperator(delayDurationSelector) {
18 this.delayDurationSelector = delayDurationSelector;
20 DelayWhenOperator.prototype.call = function (subscriber, source) {
21 return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector));
23 return DelayWhenOperator;
25 var DelayWhenSubscriber = /*@__PURE__*/ (function (_super) {
26 tslib_1.__extends(DelayWhenSubscriber, _super);
27 function DelayWhenSubscriber(destination, delayDurationSelector) {
28 var _this = _super.call(this, destination) || this;
29 _this.delayDurationSelector = delayDurationSelector;
30 _this.completed = false;
31 _this.delayNotifierSubscriptions = [];
35 DelayWhenSubscriber.prototype.notifyNext = function (outerValue, _innerValue, _outerIndex, _innerIndex, innerSub) {
36 this.destination.next(outerValue);
37 this.removeSubscription(innerSub);
40 DelayWhenSubscriber.prototype.notifyError = function (error, innerSub) {
43 DelayWhenSubscriber.prototype.notifyComplete = function (innerSub) {
44 var value = this.removeSubscription(innerSub);
46 this.destination.next(value);
50 DelayWhenSubscriber.prototype._next = function (value) {
51 var index = this.index++;
53 var delayNotifier = this.delayDurationSelector(value, index);
55 this.tryDelay(delayNotifier, value);
59 this.destination.error(err);
62 DelayWhenSubscriber.prototype._complete = function () {
63 this.completed = true;
67 DelayWhenSubscriber.prototype.removeSubscription = function (subscription) {
68 subscription.unsubscribe();
69 var subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription);
70 if (subscriptionIdx !== -1) {
71 this.delayNotifierSubscriptions.splice(subscriptionIdx, 1);
73 return subscription.outerValue;
75 DelayWhenSubscriber.prototype.tryDelay = function (delayNotifier, value) {
76 var notifierSubscription = subscribeToResult(this, delayNotifier, value);
77 if (notifierSubscription && !notifierSubscription.closed) {
78 var destination = this.destination;
79 destination.add(notifierSubscription);
80 this.delayNotifierSubscriptions.push(notifierSubscription);
83 DelayWhenSubscriber.prototype.tryComplete = function () {
84 if (this.completed && this.delayNotifierSubscriptions.length === 0) {
85 this.destination.complete();
88 return DelayWhenSubscriber;
90 var SubscriptionDelayObservable = /*@__PURE__*/ (function (_super) {
91 tslib_1.__extends(SubscriptionDelayObservable, _super);
92 function SubscriptionDelayObservable(source, subscriptionDelay) {
93 var _this = _super.call(this) || this;
94 _this.source = source;
95 _this.subscriptionDelay = subscriptionDelay;
98 SubscriptionDelayObservable.prototype._subscribe = function (subscriber) {
99 this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source));
101 return SubscriptionDelayObservable;
103 var SubscriptionDelaySubscriber = /*@__PURE__*/ (function (_super) {
104 tslib_1.__extends(SubscriptionDelaySubscriber, _super);
105 function SubscriptionDelaySubscriber(parent, source) {
106 var _this = _super.call(this) || this;
107 _this.parent = parent;
108 _this.source = source;
109 _this.sourceSubscribed = false;
112 SubscriptionDelaySubscriber.prototype._next = function (unused) {
113 this.subscribeToSource();
115 SubscriptionDelaySubscriber.prototype._error = function (err) {
117 this.parent.error(err);
119 SubscriptionDelaySubscriber.prototype._complete = function () {
121 this.subscribeToSource();
123 SubscriptionDelaySubscriber.prototype.subscribeToSource = function () {
124 if (!this.sourceSubscribed) {
125 this.sourceSubscribed = true;
127 this.source.subscribe(this.parent);
130 return SubscriptionDelaySubscriber;
132 //# sourceMappingURL=delayWhen.js.map