Webapp: Fixed SDKs installation
authorSebastien Douheret <sebastien.douheret@iot.bzh>
Thu, 4 Jan 2018 23:17:45 +0000 (00:17 +0100)
committerSebastien Douheret <sebastien.douheret@iot.bzh>
Thu, 4 Jan 2018 23:17:45 +0000 (00:17 +0100)
Signed-off-by: Sebastien Douheret <sebastien.douheret@iot.bzh>
webapp/src/app/@core-xds/services/sdk.service.ts
webapp/src/app/pages/sdks/sdk-card/sdk-card.component.html
webapp/src/app/pages/sdks/sdk-card/sdk-card.component.ts
webapp/src/app/pages/sdks/sdk-management/sdk-management.component.ts
webapp/src/app/pages/sdks/sdks.component.ts

index 8fa6ad2..181ad6f 100644 (file)
@@ -24,6 +24,24 @@ import { XDSAgentService } from '../services/xdsagent.service';
 
 import 'rxjs/add/observable/throw';
 
+/* FIXME: syntax only compatible with TS>2.4.0
+export enum StatusType {
+  DISABLE = 'Disable',
+  NOT_INSTALLED = 'Not Installed',
+  INSTALLING = 'Installing',
+  UNINSTALLING = 'Un-installing',
+  INSTALLED = 'Installed'
+}
+*/
+export type StatusTypeEnum = 'Disable' | 'Not Installed' | 'Installing' | 'Un-installing' | 'Installed';
+export const StatusType = {
+  DISABLE: 'Disable',
+  NOT_INSTALLED: 'Not Installed',
+  INSTALLING: 'Installing',
+  UNINSTALLING: 'Un-installing',
+  INSTALLED: 'Installed',
+};
+
 export interface ISdk {
   id: string;
   name: string;
@@ -97,7 +115,7 @@ export class SdkService {
       this._addSdk(evMgt.sdk);
     });
     this.xdsSvr.onSdkRemove().subscribe(evMgt => {
-      if (evMgt.sdk.status !== 'Not Installed') {
+      if (evMgt.sdk.status !== StatusType.NOT_INSTALLED) {
         /* tslint:disable:no-console */
         console.log('Error: received event:sdk-remove with invalid status: evMgt=', evMgt);
         return;
@@ -142,8 +160,14 @@ export class SdkService {
 
   private _addSdk(sdk: ISdk, noNext?: boolean): ISdk {
 
-    // add new sdk
-    this._sdksList.push(sdk);
+    // check if sdk already exists
+    const idx = this._sdksList.findIndex(s => s.id === sdk.id);
+    if (idx >= 0) {
+      this._sdksList[idx] = sdk;
+    } else {
+      // add new sdk
+      this._sdksList.push(sdk);
+    }
 
     // sort sdk array
     this._sdksList.sort((a, b) => {
index 2edc0d3..ba878ba 100644 (file)
@@ -6,7 +6,7 @@
         {{ sdk.name }}
       </div>
       <div class="col-6 col-md-4 text-right" role="group">
-        <button class="btn btn-outline-danger btn-tn btn-xds" (click)="remove(sdk)">
+        <button class="btn btn-outline-danger btn-tn btn-xds" [disabled]="!canRemove(sdk)" (click)="remove(sdk)">
           <span class="fa fa-trash fa-size-x2"></span>
         </button>
       </div>
index 997f01d..ffb0852 100644 (file)
@@ -17,7 +17,7 @@
 */
 
 import { Component, Input, Pipe, PipeTransform } from '@angular/core';
-import { SdkService, ISdk } from '../../../@core-xds/services/sdk.service';
+import { SdkService, ISdk, StatusType } from '../../../@core-xds/services/sdk.service';
 import { AlertService } from '../../../@core-xds/services/alert.service';
 
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
@@ -42,6 +42,10 @@ export class SdkCardComponent {
   ) {
   }
 
+  canRemove(sdk: ISdk) {
+    return sdk.status === StatusType.INSTALLED;
+  }
+
   remove(sdk: ISdk) {
     const modal = this.modalService.open(ConfirmModalComponent, {
       size: 'lg',
index c885238..68620a1 100644 (file)
@@ -24,7 +24,7 @@ import { ConfirmModalComponent, EType } from '../../confirm/confirm-modal/confir
 import { SdkInstallComponent } from './sdk-install.component';
 
 import { AlertService } from '../../../@core-xds/services/alert.service';
-import { SdkService, ISdk } from '../../../@core-xds/services/sdk.service';
+import { SdkService, ISdk, StatusType } from '../../../@core-xds/services/sdk.service';
 import { ISdkMessage } from '../../../@core-xds/services/xdsagent.service';
 
 interface ISdkMgt extends ISdk {
@@ -90,7 +90,7 @@ export class SdkManagementComponent implements OnInit {
       this.sdks = [];
       sdks.forEach(s => {
         // only display not installed SDK
-        if (s.status !== 'Not Installed') {
+        if (s.status !== StatusType.NOT_INSTALLED) {
           return;
         }
         profMap[s.profile] = s.profile;
index 12d2f71..d0679e9 100644 (file)
@@ -21,7 +21,7 @@ import { Observable } from 'rxjs/Observable';
 
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
 
-import { SdkService, ISdk } from '../../@core-xds/services/sdk.service';
+import { SdkService, ISdk, StatusType } from '../../@core-xds/services/sdk.service';
 
 @Component({
   selector: 'xds-sdks',
@@ -44,6 +44,6 @@ export class SdksComponent implements OnInit {
   }
 
   isVisible(sdk: ISdk) {
-    return sdk.status === 'Installed' || sdk.status === 'Installing';
+    return sdk.status === StatusType.INSTALLED || sdk.status === StatusType.INSTALLING;
   }
 }