Guest User

Untitled

a guest
May 20th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.58 KB | None | 0 0
  1. import { BehaviorSubject, of } from 'rxjs';
  2. import { distinctUntilChanged, concatMap, map, take } from 'rxjs/operators';
  3.  
  4. export class StateDef<T> extends BehaviorSubject<T> {
  5. setState(setter: (state: T) => T) {
  6. this.pipe(take(1)).subscribe(state => {
  7. super.next(setter(state));
  8. });
  9. }
  10.  
  11. select<R>(selector: (state?: T) => R) {
  12. return this.pipe(map(selector), distinctUntilChanged());
  13. }
  14.  
  15. selectOnce<R>(selector: (state?: T) => R) {
  16. return this.select(selector).pipe(take(1));
  17. }
  18.  
  19. next() {
  20. throw new Error('Nice Try, Use setState instead of next.');
  21. }
  22. }
Add Comment
Please, Sign In to add comment