/** * @copyright ngrx */ import { BehaviorSubject } from 'rxjs/BehaviorSubject'; import { Observable } from 'rxjs/Observable'; import { Action, ActionReducer } from './index'; import { observeOn } from 'rxjs/operator/observeOn'; import { queue } from 'rxjs/scheduler/queue'; import { scan } from 'rxjs/operator/scan'; export class MiniState extends BehaviorSubject { constructor( _initialState: T, actionsDispatcher$: Observable, reducer: ActionReducer ) { super(_initialState); const actionInQueue$ = observeOn.call(actionsDispatcher$, queue); const state$ = scan.call( actionInQueue$, (state: T, action: Action) => { if (!action) { return state; } return reducer(state, action); }, _initialState ); state$.subscribe((value: T) => this.next(value)); } }