react-rxjs/packages/utils/src/getGroupedObservable.ts
2021-02-28 20:05:03 +01:00

28 lines
691 B
TypeScript

import { GroupedObservable, Observable, Subscription } from "rxjs"
export const getGroupedObservable = <K, T>(
source$: Observable<Map<K, GroupedObservable<K, T>>>,
key: K,
) => {
const result = new Observable<T>((observer) => {
let innerSub: Subscription | undefined
let outterSub: Subscription = source$.subscribe(
(n) => {
innerSub = innerSub || n.get(key)?.subscribe(observer)
},
(e) => {
observer.error(e)
},
() => {
observer.complete()
},
)
return () => {
innerSub && innerSub.unsubscribe()
outterSub.unsubscribe()
}
}) as GroupedObservable<K, T>
result.key = key
return result
}