]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/helpers/rxjs.ts
Translated using Weblate (Vietnamese)
[github/Chocobozzz/PeerTube.git] / client / src / app / helpers / rxjs.ts
CommitLineData
3da38d6e 1import { uniq } from 'lodash-es'
afb7d2d5
C
2import { Observable } from 'rxjs'
3import { bufferTime, distinctUntilChanged, filter, map, share, switchMap } from 'rxjs/operators'
3da38d6e 4
2cc276f9
C
5function buildBulkObservable <P extends number | string, R> (options: {
6 notifierObservable: Observable<P>
3da38d6e 7 time: number
2cc276f9 8 bulkGet: (params: P[]) => Observable<R>
3da38d6e 9}) {
afb7d2d5 10 const { notifierObservable, time, bulkGet } = options
3da38d6e
C
11
12 return notifierObservable.pipe(
13 distinctUntilChanged(),
afb7d2d5 14 bufferTime(time),
3da38d6e
C
15 filter(params => params.length !== 0),
16 map(params => uniq(params)),
2cc276f9
C
17 switchMap(params => {
18 return bulkGet(params)
19 .pipe(map(response => ({ params, response })))
20 }),
3da38d6e
C
21 share()
22 )
23}
24
25export {
26 buildBulkObservable
27}