55 lines
1.1 KiB
TypeScript
55 lines
1.1 KiB
TypeScript
/**
|
|
* @author Martin Karkowski
|
|
* @email m.karkowski@zema.de
|
|
* @create date 2021-11-13 14:13:06
|
|
* @modify date 2021-11-13 14:13:06
|
|
* @desc [description]
|
|
*/
|
|
|
|
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>();
|
|
}
|