Ohm-Management - Projektarbeit B-ME
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

distinct.js 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { OuterSubscriber } from '../OuterSubscriber';
  2. import { subscribeToResult } from '../util/subscribeToResult';
  3. export function distinct(keySelector, flushes) {
  4. return (source) => source.lift(new DistinctOperator(keySelector, flushes));
  5. }
  6. class DistinctOperator {
  7. constructor(keySelector, flushes) {
  8. this.keySelector = keySelector;
  9. this.flushes = flushes;
  10. }
  11. call(subscriber, source) {
  12. return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
  13. }
  14. }
  15. export class DistinctSubscriber extends OuterSubscriber {
  16. constructor(destination, keySelector, flushes) {
  17. super(destination);
  18. this.keySelector = keySelector;
  19. this.values = new Set();
  20. if (flushes) {
  21. this.add(subscribeToResult(this, flushes));
  22. }
  23. }
  24. notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  25. this.values.clear();
  26. }
  27. notifyError(error, innerSub) {
  28. this._error(error);
  29. }
  30. _next(value) {
  31. if (this.keySelector) {
  32. this._useKeySelector(value);
  33. }
  34. else {
  35. this._finalizeNext(value, value);
  36. }
  37. }
  38. _useKeySelector(value) {
  39. let key;
  40. const { destination } = this;
  41. try {
  42. key = this.keySelector(value);
  43. }
  44. catch (err) {
  45. destination.error(err);
  46. return;
  47. }
  48. this._finalizeNext(key, value);
  49. }
  50. _finalizeNext(key, value) {
  51. const { values } = this;
  52. if (!values.has(key)) {
  53. values.add(key);
  54. this.destination.next(value);
  55. }
  56. }
  57. }
  58. //# sourceMappingURL=distinct.js.map