diff --git a/libs/state/src/lib/rxjs/operators/selectSlice.ts b/libs/state/src/lib/rxjs/operators/selectSlice.ts index 0231776aae..4368a58c49 100644 --- a/libs/state/src/lib/rxjs/operators/selectSlice.ts +++ b/libs/state/src/lib/rxjs/operators/selectSlice.ts @@ -1,7 +1,8 @@ import { Observable, OperatorFunction } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; +import { filter, map, tap } from 'rxjs/operators'; import { KeyCompareMap, PickSlice } from '../interfaces'; import { distinctUntilSomeChanged } from './distinctUntilSomeChanged'; +import { isDevMode } from '@angular/core'; /** * @description @@ -82,6 +83,13 @@ export function selectSlice( ): OperatorFunction> { return (o$: Observable): Observable> => o$.pipe( + tap((state) => { + if (isDevMode() && state === undefined) { + console.warn( + '@rx-angular/state#selectSlice WARNING: state is undefined' + ); + } + }), filter((state) => state !== undefined), map((state) => { // forward null @@ -104,18 +112,24 @@ export function selectSlice( // {str: undefined} => state.select(selectSlice(['str'])) => no emission // {str: 'test', foo: undefined } => state.select(selectSlice(['foo'])) => no emission if (definedKeys.length < keys.length) { + if (isDevMode()) { + const undefinedKeys = keys.filter((k) => !definedKeys.includes(k)); + console.warn( + `@rx-angular/state#selectSlice WARNING: undefined value(s) of selected key(s): "${undefinedKeys.join( + '", "' + )}" selectSlice operator will return undefined` + ); + } return undefined; } // create the selected slice - return definedKeys - .reduce((vm, key) => { - vm[key] = state[key]; - return vm; - }, {} as PickSlice); + return definedKeys.reduce((vm, key) => { + vm[key] = state[key]; + return vm; + }, {} as PickSlice); }), filter((v) => v !== undefined), distinctUntilSomeChanged(keys, keyCompareMap) ); -} - +} \ No newline at end of file