react-rxjs/packages/utils/src/switchMapSuspended.ts
2020-10-02 12:19:19 +02:00

16 lines
575 B
TypeScript

import { ObservableInput, OperatorFunction, ObservedValueOf, pipe } from "rxjs"
import { switchMap } from "rxjs/operators"
import { suspend } from "./suspend"
import { SUSPENSE } from "@react-rxjs/core"
/**
* Same behaviour as rxjs' `switchMap`, but prepending every new event with
* SUSPENSE.
*
* @param fn Projection function
*/
export const switchMapSuspended = <T, O extends ObservableInput<any>>(
project: (value: T, index: number) => O,
): OperatorFunction<T, ObservedValueOf<O> | typeof SUSPENSE> =>
pipe(switchMap((x, index) => suspend(project(x, index))))