Improved and fixed connection to XDS Server
[src/xds/xds-agent.git] / webapp / src / app / pages / config / config-xds / config-xds.component.ts
1 import { Component, OnInit } from '@angular/core';
2 import { Observable } from 'rxjs/Observable';
3
4 import { XDSConfigService } from '../../../@core-xds/services/xds-config.service';
5 import { IXDServerCfg } from '../../../@core-xds/services/xdsagent.service';
6 import { AlertService, IAlert } from '../../../@core-xds/services/alert.service';
7 import { NotificationsComponent } from '../../notifications/notifications.component';
8
9 // Import RxJs required methods
10 import 'rxjs/add/operator/map';
11 import 'rxjs/add/operator/catch';
12
13 @Component({
14   selector: 'xds-config-xds',
15   styleUrls: ['./config-xds.component.scss'],
16   templateUrl: './config-xds.component.html',
17 })
18 export class ConfigXdsComponent {
19
20   // TODO: cleanup agentStatus$: Observable<IAgentStatus>;
21   applying = false;
22   xdsServerUrl = '';
23   server: IXDServerCfg;
24
25   configFormChanged = false;
26
27   constructor(
28     private XdsConfigSvr: XDSConfigService,
29     private alert: AlertService,
30   ) {
31     // FIXME support multiple servers
32     this.XdsConfigSvr.onCurServer().subscribe(svr => {
33       this.xdsServerUrl = svr.url;
34       this.server = Object.assign({}, svr);
35     });
36   }
37
38   onSubmit() {
39     if (!this.configFormChanged && this.server.connected) {
40       return;
41     }
42     this.configFormChanged = false;
43     this.applying = true;
44     this.server.url = this.xdsServerUrl;
45     this.XdsConfigSvr.setCurServer(this.server)
46       .subscribe(cfg => {
47         this.alert.info('XDS Server successfully connected (' + cfg.url + ')');
48         this.server = Object.assign({}, cfg);
49         this.applying = false;
50       },
51       err => {
52         this.applying = false;
53         this.alert.error(err);
54       });
55   }
56
57 }
58