import { uniq } from 'lodash-es'
-import { asyncScheduler, Observable } from 'rxjs'
-import { bufferTime, distinctUntilChanged, filter, map, observeOn, share, switchMap } from 'rxjs/operators'
-import { NgZone } from '@angular/core'
-import { enterZone, leaveZone } from './zone'
+import { Observable } from 'rxjs'
+import { bufferTime, distinctUntilChanged, filter, map, share, switchMap } from 'rxjs/operators'
-function buildBulkObservable <T extends number | string, R> (options: {
- ngZone: NgZone
- notifierObservable: Observable<T>
+function buildBulkObservable <P extends number | string, R> (options: {
+ notifierObservable: Observable<P>
time: number
- bulkGet: (params: T[]) => Observable<R>
+ bulkGet: (params: P[]) => Observable<R>
}) {
- const { ngZone, notifierObservable, time, bulkGet } = options
+ const { notifierObservable, time, bulkGet } = options
return notifierObservable.pipe(
distinctUntilChanged(),
- // We leave Angular zone so Protractor does not get stuck
- bufferTime(time, leaveZone(ngZone, asyncScheduler)),
+ bufferTime(time),
filter(params => params.length !== 0),
map(params => uniq(params)),
- observeOn(enterZone(ngZone, asyncScheduler)),
- switchMap(params => bulkGet(params)),
+ switchMap(params => {
+ return bulkGet(params)
+ .pipe(map(response => ({ params, response })))
+ }),
share()
)
}