/** * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal */ import { Subject, BehaviorSubject } from 'rxjs'; export { RxEventHelper }; interface RxEventHelper { (): Subject, behavior(v: T): BehaviorSubject, dispose(): void } namespace RxEventHelper { export function create(): RxEventHelper { const helper = new _RxEventHelper(); const ret: RxEventHelper = (() => helper.create()) as RxEventHelper; ret.dispose = () => helper.dispose(); ret.behavior = (v) => helper.behavior(v); return ret; } } class _RxEventHelper { private _eventList: Subject[] = []; private _disposed = false; create() { const s = new Subject(); this._eventList.push(s); return s; } behavior(v: T) { const s = new BehaviorSubject(v); this._eventList.push(s); return s; } dispose() { if (this._disposed) return; for (const e of this._eventList) e.complete(); this._disposed = true; } }