Skip to content

Commit

Permalink
feat(effects): accept ObservableInput as concatLatestFrom argument (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
benlesh committed Apr 17, 2023
1 parent dc78447 commit 34dd28c
Showing 1 changed file with 12 additions and 14 deletions.
26 changes: 12 additions & 14 deletions modules/effects/src/concat_latest_from.ts
@@ -1,4 +1,4 @@
import { Observable, ObservedValueOf, of, OperatorFunction, pipe } from 'rxjs';
import { Observable, ObservableInput, of, ObservedValueOf, OperatorFunction } from 'rxjs';
import { concatMap, withLatestFrom } from 'rxjs/operators';

// The array overload is needed first because we want to maintain the proper order in the resulting tuple
Expand Down Expand Up @@ -38,24 +38,22 @@ export function concatLatestFrom<T extends Observable<unknown>, V>(
* ```
*/
export function concatLatestFrom<
T extends Observable<unknown>[] | Observable<unknown>,
T extends ObservableInput<unknown>[] | ObservableInput<unknown>,
V,
R = [
V,
...(T extends Observable<unknown>[]
...(T extends ObservableInput<unknown>[]
? { [i in keyof T]: ObservedValueOf<T[i]> }
: [ObservedValueOf<T>])
]
>(observablesFactory: (value: V) => T): OperatorFunction<V, R> {
return pipe(
concatMap((value) => {
const observables = observablesFactory(value);
const observablesAsArray = Array.isArray(observables)
? observables
: [observables];
return of(value).pipe(
withLatestFrom(...observablesAsArray)
) as unknown as Observable<R>;
})
);
return concatMap((value) => {
const observables = observablesFactory(value);
const observablesAsArray = Array.isArray(observables)
? observables
: [observables];
return of(value).pipe(
withLatestFrom(...observablesAsArray)
) as unknown as Observable<R>;
})
}

0 comments on commit 34dd28c

Please sign in to comment.