UNPKG

rxjs

Version:

Reactive Extensions for modern JavaScript

53 lines 1.73 kB
import { Subscriber } from '../Subscriber'; import { tryCatch } from '../util/tryCatch'; import { errorObject } from '../util/errorObject'; export function distinctUntilChanged(compare, keySelector) { return (source) => source.lift(new DistinctUntilChangedOperator(compare, keySelector)); } class DistinctUntilChangedOperator { constructor(compare, keySelector) { this.compare = compare; this.keySelector = keySelector; } call(subscriber, source) { return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector)); } } class DistinctUntilChangedSubscriber extends Subscriber { constructor(destination, compare, keySelector) { super(destination); this.keySelector = keySelector; this.hasKey = false; if (typeof compare === 'function') { this.compare = compare; } } compare(x, y) { return x === y; } _next(value) { const keySelector = this.keySelector; let key = value; if (keySelector) { key = tryCatch(this.keySelector)(value); if (key === errorObject) { return this.destination.error(errorObject.e); } } let result = false; if (this.hasKey) { result = tryCatch(this.compare)(this.key, key); if (result === errorObject) { return this.destination.error(errorObject.e); } } else { this.hasKey = true; } if (Boolean(result) === false) { this.key = key; this.destination.next(value); } } } //# sourceMappingURL=distinctUntilChanged.js.map