nope/lib/helpers/getSubject.ts

52 lines
1.0 KiB
TypeScript

/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
*/
import { BehaviorSubject, ReplaySubject, Subject } from "rxjs";
export interface TSubjectOptions {
/**
* Definitin whether to use the history or not.
*
* @author M.Karkowski
* @type {boolean}
* @memberof TSubjectOptions
*/
showCurrent?: boolean;
/**
* Definition, whether to playback the history every
* time or not.
*
* @author M.Karkowski
* @type {boolean}
* @memberof TSubjectOptions
*/
playHistory?: boolean;
}
/**
* Helper to define the correct RXJS Subject.
*
* @author M.Karkowski
* @export
* @template T
* @param {{
* useHistory?: boolean,
* playBackhistoryEveryTime?: boolean;
* }} [options={}]
* @return {*}
*/
export function getSubject<T>(
options: TSubjectOptions = {}
): Subject<T> | ReplaySubject<T> | BehaviorSubject<T> {
if (options.showCurrent) {
if (options.playHistory) {
return new ReplaySubject<T>();
}
return new BehaviorSubject<T>(undefined);
}
return new Subject<T>();
}