rx-event-helper.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. */
  6. import { Subject, BehaviorSubject } from 'rxjs';
  7. export { RxEventHelper };
  8. interface RxEventHelper {
  9. <T>(): Subject<T>,
  10. behavior<T>(v: T): BehaviorSubject<T>,
  11. dispose(): void
  12. }
  13. namespace RxEventHelper {
  14. export function create(): RxEventHelper {
  15. const helper = new _RxEventHelper();
  16. const ret: RxEventHelper = (<T>() => helper.create<T>()) as RxEventHelper;
  17. ret.dispose = () => helper.dispose();
  18. ret.behavior = (v) => helper.behavior(v);
  19. return ret;
  20. }
  21. }
  22. class _RxEventHelper {
  23. private _eventList: Subject<any>[] = [];
  24. private _disposed = false;
  25. create<T>() {
  26. const s = new Subject<T>();
  27. this._eventList.push(s);
  28. return s;
  29. }
  30. behavior<T>(v: T) {
  31. const s = new BehaviorSubject<T>(v);
  32. this._eventList.push(s);
  33. return s;
  34. }
  35. dispose() {
  36. if (this._disposed) return;
  37. for (const e of this._eventList) e.complete();
  38. this._disposed = true;
  39. }
  40. }