]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | import { HttpClient } from '@angular/common/http'; |
2 | import { Injectable } from '@angular/core'; | |
3 | ||
4 | import { Observable, timer } from 'rxjs'; | |
9f95a23c | 5 | import { observeOn, shareReplay, switchMap } from 'rxjs/operators'; |
11fdf7f2 | 6 | |
9f95a23c TL |
7 | import { NgZoneSchedulerService } from './ngzone-scheduler.service'; |
8 | ||
9 | export class FeatureTogglesMap { | |
10 | rbd = true; | |
11 | mirroring = true; | |
12 | iscsi = true; | |
13 | cephfs = true; | |
14 | rgw = true; | |
15 | nfs = true; | |
16 | } | |
17 | export type Features = keyof FeatureTogglesMap; | |
11fdf7f2 TL |
18 | export type FeatureTogglesMap$ = Observable<FeatureTogglesMap>; |
19 | ||
20 | @Injectable({ | |
81eedcae | 21 | providedIn: 'root' |
11fdf7f2 TL |
22 | }) |
23 | export class FeatureTogglesService { | |
24 | readonly API_URL: string = 'api/feature_toggles'; | |
9f95a23c | 25 | readonly REFRESH_INTERVAL: number = 30000; |
11fdf7f2 TL |
26 | private featureToggleMap$: FeatureTogglesMap$; |
27 | ||
9f95a23c TL |
28 | constructor(private http: HttpClient, protected ngZone: NgZoneSchedulerService) { |
29 | this.featureToggleMap$ = timer(0, this.REFRESH_INTERVAL, ngZone.leave).pipe( | |
30 | switchMap(() => this.http.get<FeatureTogglesMap>(this.API_URL)), | |
31 | shareReplay(1), | |
32 | observeOn(ngZone.enter) | |
11fdf7f2 TL |
33 | ); |
34 | } | |
35 | ||
36 | get(): FeatureTogglesMap$ { | |
37 | return this.featureToggleMap$; | |
38 | } | |
39 | } |