Added Grafana url setting in config panel
[src/xds/xds-agent.git] / webapp / src / app / @core-xds / services / config.service.ts
index 168b278..beeeea8 100644 (file)
@@ -26,6 +26,7 @@ import { BehaviorSubject } from 'rxjs/BehaviorSubject';
 export interface IConfig {
   language: string;
   theme: string;
+  grafanaDashboardUrl: string;
 }
 
 @Injectable()
@@ -36,6 +37,12 @@ export class ConfigService {
   private confSubject: BehaviorSubject<IConfig>;
   private confStore: IConfig;
 
+  private confDefault: IConfig = {
+    language: 'ENG',
+    theme: 'default',
+    grafanaDashboardUrl: 'http://localhost:3000',
+  };
+
   constructor(
     private cookie: CookieService,
     private themeService: NbThemeService,
@@ -43,17 +50,20 @@ export class ConfigService {
     this.confSubject = <BehaviorSubject<IConfig>>new BehaviorSubject(this.confStore);
     this.Conf$ = this.confSubject.asObservable();
 
-    // Load initial config and apply it
-    this.load();
-    this.themeService.changeTheme(this.confStore.theme);
-
     // Save selected theme in cookie
     this.themeService.onThemeChange().subscribe(tm => {
+      if (typeof this.confStore === 'undefined') {
+        return;
+      }
       if (tm.name !== this.confStore.theme) {
         this.confStore.theme = tm.name;
         this.save();
       }
     });
+
+    // Load initial config and apply it
+    this.load();
+    this.themeService.changeTheme(this.confStore.theme);
   }
 
   // Load config
@@ -62,17 +72,20 @@ export class ConfigService {
     const cookConf = this.cookie.getObject('xds-config');
     if (cookConf != null) {
       this.confStore = <IConfig>cookConf;
+      this.confSubject.next(Object.assign({}, this.confStore));
     } else {
       // Set default config
-      this.confStore = {
-        language: 'ENG',
-        theme: 'default',
-      };
+      this.confStore = this.confDefault;
+      this.save();
     }
   }
 
   // Save config into cookie
-  save() {
+  save(cfg?: IConfig) {
+    if (typeof cfg !== 'undefined') {
+      this.confStore = this.confDefault;
+    }
+
     // Notify subscribers
     this.confSubject.next(Object.assign({}, this.confStore));