diff options
Diffstat (limited to 'src/pybind/mgr/dashboard/frontend/src/app/shared/rxjs/operators/page-visibilty.operator.ts')
-rw-r--r-- | src/pybind/mgr/dashboard/frontend/src/app/shared/rxjs/operators/page-visibilty.operator.ts | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/rxjs/operators/page-visibilty.operator.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/rxjs/operators/page-visibilty.operator.ts new file mode 100644 index 000000000..22644dcf2 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/rxjs/operators/page-visibilty.operator.ts @@ -0,0 +1,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$) + ); + }; +} |