import { GroupedObservable, Observable, Subscription } from "rxjs" export const getGroupedObservable = ( source$: Observable>>, key: K, ) => { const result = new Observable((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 result.key = key return result }