/** * @copyright ngrx */ import { Observable, Observer, Operator } from 'rxjs'; import { distinctUntilChanged, map } from 'rxjs/operators'; import { Action, ActionReducer } from './index'; export class MiniStore extends Observable implements Observer { constructor( private _dispatcher: Observer, // eslint-disable-next-line @typescript-eslint/no-explicit-any private _reducer: ActionReducer, // eslint-disable-next-line @typescript-eslint/no-explicit-any state$: Observable ) { super(); this.source = state$; } select(pathOrMapFn: (state: T) => R): Observable { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const mapped$: Observable = this.source?.pipe(map(pathOrMapFn)) || new Observable().pipe(map(pathOrMapFn)); return mapped$.pipe(distinctUntilChanged()); } override 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); } // eslint-disable-next-line @typescript-eslint/no-explicit-any error(err: any) { this._dispatcher.error(err); } complete() { /*noop*/ } }