1
1
import { KeyCompareMap } from '../interfaces' ;
2
2
import { Observable , OperatorFunction } from 'rxjs' ;
3
- import { filter , map } from 'rxjs/operators' ;
3
+ import { filter , map , tap } from 'rxjs/operators' ;
4
4
import { distinctUntilSomeChanged } from './distinctUntilSomeChanged' ;
5
+ import { isDevMode } from '@angular/core' ;
5
6
6
7
/**
7
8
* @description
@@ -82,6 +83,13 @@ export function selectSlice<T extends object, K extends keyof T>(
82
83
) : OperatorFunction < T , PickSlice < T , K > > {
83
84
return ( o$ : Observable < T > ) : Observable < PickSlice < T , K > > =>
84
85
o$ . pipe (
86
+ tap ( ( state ) => {
87
+ if ( isDevMode ( ) && state === undefined ) {
88
+ console . warn (
89
+ '@rx-angular/state#selectSlice WARNING: state is undefined'
90
+ ) ;
91
+ }
92
+ } ) ,
85
93
filter ( ( state ) => state !== undefined ) ,
86
94
map ( ( state ) => {
87
95
// forward null
@@ -104,20 +112,29 @@ export function selectSlice<T extends object, K extends keyof T>(
104
112
// {str: undefined} => state.select(selectSlice(['str'])) => no emission
105
113
// {str: 'test', foo: undefined } => state.select(selectSlice(['foo'])) => no emission
106
114
if ( definedKeys . length < keys . length ) {
115
+ if ( isDevMode ( ) ) {
116
+ const undefinedKeys = keys . filter ( ( k ) => ! definedKeys . includes ( k ) ) ;
117
+ console . warn (
118
+ `@rx-angular/state#selectSlice WARNING: undefined value(s) of selected key(s): "${ undefinedKeys . join (
119
+ '", "'
120
+ ) } " selectSlice operator will return undefined`
121
+ ) ;
122
+ }
107
123
return undefined ;
108
124
}
109
125
110
126
// create the selected slice
111
- return definedKeys
112
- . reduce ( ( vm , key ) => {
113
- vm [ key ] = state [ key ] ;
114
- return vm ;
115
- } , { } as PickSlice < T , K > ) ;
127
+ return definedKeys . reduce ( ( vm , key ) => {
128
+ vm [ key ] = state [ key ] ;
129
+ return vm ;
130
+ } , { } as PickSlice < T , K > ) ;
116
131
} ) ,
117
132
filter ( ( v ) => v !== undefined ) ,
118
133
distinctUntilSomeChanged ( keys , keyCompareMap )
119
134
) ;
120
135
}
121
136
122
- type PickSlice < T extends object , K extends keyof T > = Pick < T ,
123
- { [ I in K ] : I } [ K ] > ;
137
+ type PickSlice < T extends object , K extends keyof T > = Pick <
138
+ T ,
139
+ { [ I in K ] : I } [ K ]
140
+ > ;
0 commit comments