]> git.proxmox.com Git - ceph.git/blame - ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/services/ngzone-scheduler.service.ts
update ceph source to reef 18.2.0
[ceph.git] / ceph / src / pybind / mgr / dashboard / frontend / src / app / shared / services / ngzone-scheduler.service.ts
CommitLineData
9f95a23c 1import { Injectable, NgZone } from '@angular/core';
f67539c2 2
9f95a23c
TL
3import { asyncScheduler, SchedulerLike, Subscription } from 'rxjs';
4
5abstract class NgZoneScheduler implements SchedulerLike {
6 protected scheduler = asyncScheduler;
7
8 constructor(protected zone: NgZone) {}
9
10 abstract schedule(...args: any[]): Subscription;
11
12 now(): number {
13 return this.scheduler.now();
14 }
15}
16
17@Injectable({
18 providedIn: 'root'
19})
20export class LeaveNgZoneScheduler extends NgZoneScheduler {
21 constructor(zone: NgZone) {
22 super(zone);
23 }
24
25 schedule(...args: any[]): Subscription {
26 return this.zone.runOutsideAngular(() => this.scheduler.schedule.apply(this.scheduler, args));
27 }
28}
29
30@Injectable({
31 providedIn: 'root'
32})
33export class EnterNgZoneScheduler extends NgZoneScheduler {
34 constructor(zone: NgZone) {
35 super(zone);
36 }
37
38 schedule(...args: any[]): Subscription {
39 return this.zone.run(() => this.scheduler.schedule.apply(this.scheduler, args));
40 }
41}
42
43@Injectable({
44 providedIn: 'root'
45})
46export class NgZoneSchedulerService {
47 constructor(public leave: LeaveNgZoneScheduler, public enter: EnterNgZoneScheduler) {}
48}