From 4843a485f2b38d54c4bdfa1a930c17e01996d812 Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 21 Mar 2018 14:39:18 +0100 Subject: [PATCH 1/2] fix(Select$): Correct Typings when using Typed-Selectors --- src/decorators/select.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/decorators/select.ts b/src/decorators/select.ts index 413a3c2..089ece9 100644 --- a/src/decorators/select.ts +++ b/src/decorators/select.ts @@ -57,9 +57,9 @@ export function select( * } * ``` */ -export function select$( - selector: Selector, - transformer: Transformer, +export function select$( + selector: Selector, + transformer: Transformer, comparator?: Comparator ): PropertyDecorator { return decorate(selector, transformer, comparator); From c172785f618009c5b5a0c2aef3f8416b04e68222 Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 21 Mar 2018 15:01:46 +0100 Subject: [PATCH 2/2] test(select$): Correct Typings --- src/decorators/select.spec.ts | 54 ++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/src/decorators/select.spec.ts b/src/decorators/select.spec.ts index 21af0f9..1ba2f40 100644 --- a/src/decorators/select.spec.ts +++ b/src/decorators/select.spec.ts @@ -9,6 +9,7 @@ import 'rxjs/add/operator/map'; import { NgRedux } from '../components/ng-redux'; import { RootStore } from '../components/root-store'; import { select, select$ } from './select'; +import { map } from 'rxjs/operators'; interface IAppState { foo: string; @@ -158,18 +159,49 @@ describe('Select decorators', () => { describe('@select$', () => { const transformer = (baz$: Observable) => baz$.map(baz => 2 * baz); - it('applies a transformer to the observable', done => { - class MockClass { - @select$('baz', transformer) - baz$: Observable; - } - const mockInstance = new MockClass(); + describe('when passed a string', () => { + it('applies a transformer to the observable', done => { + class MockClass { + @select$('baz', transformer) + baz$: Observable; + } + const mockInstance = new MockClass(); + + mockInstance.baz$ + .take(2) + .toArray() + .subscribe( + values => expect(values).toEqual([-2, 10]), undefined, done); + ngRedux.dispatch({ type: 'nvm', payload: 5 }); + }); + }); + + describe('when passed a function', () => { + + const toStringTrans = (baz$: Observable): Observable => + baz$.pipe( + map((baz: number) => 2 * baz), + map((baz: number) => '' + baz) + ); - mockInstance.baz$ - .take(2) - .toArray() - .subscribe(values => expect(values).toEqual([-2, 10]), undefined, done); - ngRedux.dispatch({ type: 'nvm', payload: 5 }); + const selector = function (state: IAppState): number { + return state.baz; + }; + + it('applies a transformer to the observable', done => { + class MockClass { + @select$(selector, toStringTrans) + baz$: Observable; + } + const mockInstance = new MockClass(); + + mockInstance.baz$ + .take(2) + .toArray() + .subscribe( + values => expect(values).toEqual(['-2', '10']), undefined, done); + ngRedux.dispatch({ type: 'nvm', payload: 5 }); + }); }); describe('when passed a comparator', () => {