1 import { Component, ViewChild, OnInit } from "@angular/core";
2 import { Observable } from 'rxjs/Observable';
3 import { FormControl, FormGroup, Validators, FormBuilder } from '@angular/forms';
4 import { CollapseModule } from 'ngx-bootstrap/collapse';
6 import { ConfigService, IConfig } from "../services/config.service";
7 import { ProjectService, IProject } from "../services/project.service";
8 import { XDSAgentService, IAgentStatus, IXDSConfig } from "../services/xdsagent.service";
9 import { AlertService } from "../services/alert.service";
10 import { ProjectAddModalComponent } from "../projects/projectAddModal.component";
11 import { SdkService, ISdk } from "../services/sdk.service";
12 import { SdkAddModalComponent } from "../sdks/sdkAddModal.component";
15 templateUrl: './app/config/config.component.html',
16 styleUrls: ['./app/config/config.component.css']
19 // Inspired from https://embed.plnkr.co/jgDTXknPzAaqcg9XA9zq/
20 // and from http://plnkr.co/edit/vCdjZM?p=preview
22 export class ConfigComponent implements OnInit {
23 @ViewChild('childProjectModal') childProjectModal: ProjectAddModalComponent;
24 @ViewChild('childSdkModal') childSdkModal: SdkAddModalComponent;
26 config$: Observable<IConfig>;
27 projects$: Observable<IProject[]>;
28 sdks$: Observable<ISdk[]>;
29 agentStatus$: Observable<IAgentStatus>;
34 userEditedLabel: boolean = false;
36 gConfigIsCollapsed: boolean = true;
37 sdksIsCollapsed: boolean = true;
38 projectsIsCollapsed: boolean = false;
40 // TODO replace by reactive FormControl + add validation
41 xdsServerConnected: boolean = false;
43 xdsServerRetry: string;
44 projectsRootDir: string; // FIXME: should be remove when projectAddModal will always return full path
45 showApplyBtn = { // Used to show/hide Apply buttons
51 private configSvr: ConfigService,
52 private projectSvr: ProjectService,
53 private xdsAgentSvr: XDSAgentService,
54 private sdkSvr: SdkService,
55 private alert: AlertService,
60 this.config$ = this.configSvr.Conf$;
61 this.projects$ = this.projectSvr.Projects$;
62 this.sdks$ = this.sdkSvr.Sdks$;
63 this.agentStatus$ = this.xdsAgentSvr.Status$;
65 // FIXME support multiple servers
68 // Bind xdsServerUrl to baseURL
69 this.xdsAgentSvr.XdsConfig$.subscribe(cfg => {
70 if (!cfg || cfg.servers.length < 1) {
73 let svr = cfg.servers[this.curServer];
74 this.curServerID = svr.id;
75 this.xdsServerConnected = svr.connected;
76 this.xdsServerUrl = svr.url;
77 this.xdsServerRetry = String(svr.connRetry);
78 this.projectsRootDir = ''; // SEB FIXME: add in go config? cfg.projectsRootDir;
82 submitGlobConf(field: string) {
85 let re = new RegExp('^[0-9]+$');
86 let rr = parseInt(this.xdsServerRetry, 10);
87 if (re.test(this.xdsServerRetry) && rr >= 0) {
88 this.xdsAgentSvr.setServerRetry(this.curServerID, rr);
90 this.alert.warning("Not a valid number", true);
94 this.configSvr.projectsRootDir = this.projectsRootDir;
99 this.showApplyBtn[field] = false;
102 xdsAgentRestartConn() {
103 let url = this.xdsServerUrl;
104 this.xdsAgentSvr.setServerUrl(this.curServerID, url);