]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/dashboard: run feature toggle service outside of Angular zone
authorPatrick Seidensal <pseidensal@suse.com>
Fri, 16 Aug 2019 12:35:32 +0000 (14:35 +0200)
committerPatrick Seidensal <pseidensal@suse.com>
Wed, 28 Aug 2019 07:38:48 +0000 (09:38 +0200)
to prevent Proctator from hanging indefinitely when testing pages where
the feature toggles are retrieved.

Fixes: mgr/dashboard: Switch to async/await for E2E tests
Signed-off-by: Patrick Seidensal <pseidensal@suse.com>
src/pybind/mgr/dashboard/frontend/src/app/shared/services/feature-toggles.service.ts

index 9104e0b420137114a10f931c7de1aebd27845920..2b9885aa8672cb2555bcc855adb46ecb8e892dcd 100644 (file)
@@ -1,8 +1,8 @@
 import { HttpClient } from '@angular/common/http';
-import { Injectable } from '@angular/core';
+import { Injectable, NgZone } from '@angular/core';
 
-import { Observable, timer } from 'rxjs';
-import { flatMap, shareReplay } from 'rxjs/operators';
+import { Observable } from 'rxjs';
+import { shareReplay } from 'rxjs/operators';
 
 export type FeatureTogglesMap = Map<string, boolean>;
 export type FeatureTogglesMap$ = Observable<FeatureTogglesMap>;
@@ -15,11 +15,17 @@ export class FeatureTogglesService {
   readonly REFRESH_INTERVAL: number = 20000;
   private featureToggleMap$: FeatureTogglesMap$;
 
-  constructor(private http: HttpClient) {
-    this.featureToggleMap$ = timer(0, this.REFRESH_INTERVAL).pipe(
-      flatMap(() => this.http.get<FeatureTogglesMap>(this.API_URL)),
-      shareReplay(1)
-    );
+  constructor(private http: HttpClient, private zone: NgZone) {
+    this.featureToggleMap$ = this.http.get<FeatureTogglesMap>(this.API_URL).pipe(shareReplay(1));
+    this.zone.runOutsideAngular(() => {
+      window.setInterval(() => {
+        this.zone.run(() => {
+          this.featureToggleMap$ = this.http
+            .get<FeatureTogglesMap>(this.API_URL)
+            .pipe(shareReplay(1));
+        });
+      }, this.REFRESH_INTERVAL);
+    });
   }
 
   get(): FeatureTogglesMap$ {