UNPKG

@angular-redux/store

Version:
45 lines (37 loc) 1.21 kB
import { Observable } from 'rxjs/Observable'; import { Selector, Comparator, Transformer } from '../components/selectors'; const toKey = (val?: Object | Array<any> | Function | String) => val ? val.toString() : ''; const computeKey = ( selector: Selector<any, any>, transformer?: Transformer<any, any>, comparator?: Comparator) => `s:${toKey(selector)}:t:${toKey(transformer)}:c:${toKey(comparator)}`; /** * Used to pool Observables created by @select and @select$. This * avoids memory leaks and improves efficiency. * @hidden */ export class SelectionMap { private _map: { [id: string]: Observable<any> } = {}; set( selection: Observable<any>, selector: Selector<any, any>, transformer?: Transformer<any, any>, comparator?: Comparator): void { const key = computeKey(selector, transformer, comparator); this._map[key] = selection; } get( selector: Selector<any, any>, transformer?: Transformer<any, any>, comparator?: Comparator): Observable<any> { const key = computeKey(selector, transformer, comparator); return this._map[key]; } reset() { this._map = {}; } } /** @hidden */ export const selectionMap = new SelectionMap();