MCPcopy
hub / github.com/rx-angular/rx-angular / select

Function select

libs/state/selections/src/lib/operators/select.ts:205–244  ·  view source on GitHub ↗
(
  ...opOrMapFn:
    | OperatorFunction<T, unknown>[]
    | string[]
    | [k: string, fn: (val: unknown) => unknown]
    | [
        keys: string[],
        fn?: (slice: unknown) => unknown,
        keyCompareMap?: KeyCompareMap<T>,
      ]
)

Source from the content-addressed store, hash-verified

203 * @internal
204 */
205export function select<T extends Record<string, unknown>>(
206 ...opOrMapFn:
207 | OperatorFunction<T, unknown>[]
208 | string[]
209 | [k: string, fn: (val: unknown) => unknown]
210 | [
211 keys: string[],
212 fn?: (slice: unknown) => unknown,
213 keyCompareMap?: KeyCompareMap<T>,
214 ]
215): OperatorFunction<T, unknown> {
216 return (state$: Observable<T>) => {
217 if (!opOrMapFn || opOrMapFn.length === 0) {
218 return state$.pipe(stateful());
219 } else if (isStringAndFunctionTupleGuard(opOrMapFn)) {
220 return state$.pipe(stateful(map((s) => opOrMapFn[1](s[opOrMapFn[0]]))));
221 } else if (isStringArrayFunctionAndOptionalObjectTupleGuard(opOrMapFn)) {
222 const selectedState$: Observable<PickSlice<T & object, keyof T>> =
223 state$.pipe(
224 selectSlice<T & object, keyof T>(
225 opOrMapFn[0] as (keyof T)[],
226 opOrMapFn[2] as KeyCompareMap<{ [P in keyof T]: (T & object)[P] }>,
227 ),
228 );
229 return typeof opOrMapFn[1] === 'undefined'
230 ? selectedState$
231 : selectedState$.pipe(stateful(map(opOrMapFn[1])));
232 } else if (isStringArrayGuard(opOrMapFn)) {
233 return state$.pipe(
234 stateful(
235 map((state) => opOrMapFn.reduce((acc, key) => acc?.[key], state)),
236 ),
237 );
238 } else if (isOperateFnArrayGuard(opOrMapFn)) {
239 return state$.pipe(stateful(pipeFromArray(opOrMapFn)));
240 } else {
241 throw new Error('wrong params passed to select');
242 }
243 };
244}

Callers 11

constructorMethod · 0.90
constructorMethod · 0.90
constructorMethod · 0.90
select.spec.tsFile · 0.90
selectMethod · 0.90
getFunction · 0.90
rx-state.spec.tsFile · 0.50

Calls 7

statefulFunction · 0.90
selectSliceFunction · 0.90
isStringArrayGuardFunction · 0.90
isOperateFnArrayGuardFunction · 0.90
pipeFromArrayFunction · 0.90

Tested by

no test coverage detected