Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { BehaviorSubject, of } from 'rxjs';
- import { distinctUntilChanged, concatMap, map, take } from 'rxjs/operators';
- export class StateDef<T> extends BehaviorSubject<T> {
- setState(setter: (state: T) => T) {
- this.pipe(take(1)).subscribe(state => {
- super.next(setter(state));
- });
- }
- select<R>(selector: (state?: T) => R) {
- return this.pipe(map(selector), distinctUntilChanged());
- }
- selectOnce<R>(selector: (state?: T) => R) {
- return this.select(selector).pipe(take(1));
- }
- next() {
- throw new Error('Nice Try, Use setState instead of next.');
- }
- }
Add Comment
Please, Sign In to add comment