import { Observable } from '../Observable';
import { Operator } from '../Operator';
import { Subscriber } from '../Subscriber';
-import { OuterSubscriber } from '../OuterSubscriber';
-import { InnerSubscriber } from '../InnerSubscriber';
-import { subscribeToResult } from '../util/subscribeToResult';
import { MonoTypeOperatorFunction, TeardownLogic } from '../types';
+import { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';
/**
* Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from previous items.
}
class DistinctOperator<T, K> implements Operator<T, T> {
- constructor(private keySelector: (value: T) => K, private flushes: Observable<any>) {
+ constructor(private keySelector?: (value: T) => K, private flushes?: Observable<any>) {
}
call(subscriber: Subscriber<T>, source: any): TeardownLogic {
* @ignore
* @extends {Ignored}
*/
-export class DistinctSubscriber<T, K> extends OuterSubscriber<T, T> {
+export class DistinctSubscriber<T, K> extends SimpleOuterSubscriber<T, T> {
private values = new Set<K>();
- constructor(destination: Subscriber<T>, private keySelector: (value: T) => K, flushes: Observable<any>) {
+ constructor(destination: Subscriber<T>, private keySelector?: (value: T) => K, flushes?: Observable<any>) {
super(destination);
if (flushes) {
- this.add(subscribeToResult(this, flushes));
+ this.add(innerSubscribe(flushes, new SimpleInnerSubscriber(this)));
}
}
- notifyNext(outerValue: T, innerValue: T,
- outerIndex: number, innerIndex: number,
- innerSub: InnerSubscriber<T, T>): void {
+ notifyNext(): void {
this.values.clear();
}
- notifyError(error: any, innerSub: InnerSubscriber<T, T>): void {
+ notifyError(error: any): void {
this._error(error);
}
let key: K;
const { destination } = this;
try {
- key = this.keySelector(value);
+ key = this.keySelector!(value);
} catch (err) {
- destination.error(err);
+ destination.error!(err);
return;
}
this._finalizeNext(key, value);
const { values } = this;
if (!values.has(<K>key)) {
values.add(<K>key);
- this.destination.next(value);
+ this.destination.next!(value);
}
}