blob: 22644dcf20afaca0a0f9b03b9314052ba49568df (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import { fromEvent, Observable, partition } from 'rxjs';
import { repeatWhen, shareReplay, takeUntil } from 'rxjs/operators';
export function whenPageVisible() {
const visibilitychange$ = fromEvent(document, 'visibilitychange').pipe(
shareReplay({ refCount: true, bufferSize: 1 })
);
const [pageVisible$, pageHidden$] = partition(
visibilitychange$,
() => document.visibilityState === 'visible'
);
return function <T>(source: Observable<T>) {
return source.pipe(
takeUntil(pageHidden$),
repeatWhen(() => pageVisible$)
);
};
}
|