/** * @copyright ngrx */ import { Observable } from 'rxjs/Observable'; import { Observer } from 'rxjs/Observer'; import { Operator } from 'rxjs/Operator'; import { distinctUntilChanged } from 'rxjs/operator/distinctUntilChanged'; import { map } from 'rxjs/operator/map'; import { Action, ActionReducer } from './index'; export class MiniStore extends Observable implements Observer { constructor( private _dispatcher: Observer, private _reducer: ActionReducer, state$: Observable ) { super(); this.source = state$; } select(pathOrMapFn: (state: T) => R): Observable { const mapped$: Observable = map.call(this, pathOrMapFn); return distinctUntilChanged.call(mapped$); } lift(operator: Operator): MiniStore { const store = new MiniStore(this._dispatcher, this._reducer, this); store.operator = operator; return store; } dispatch(action: Action) { this._dispatcher.next(action); } next(action: Action) { this._dispatcher.next(action); } error(err: any) { this._dispatcher.error(err); } complete() { /*noop*/ } }