/**
* @license
-* Copyright (C) 2017 "IoT.bzh"
+* Copyright (C) 2017-2018 "IoT.bzh"
* Author Sebastien Douheret <sebastien@iot.bzh>
*
* Licensed under the Apache License, Version 2.0 (the "License");
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 {
export class SdkManagementComponent implements OnInit {
- sdks$: Observable<ISdk[]>;
sdks: ISdkMgt[];
source: LocalDataSource = new LocalDataSource();
add: false,
edit: false,
delete: false, // TODO, add delete == uninstall
+ position: 'right',
custom: [
- { name: 'install', title: '<i class="nb-plus"></i>' },
+ { name: 'install', title: '<button type="button">Install</button>' },
],
},
delete: {
},
columns: {
name: { title: 'Name', editable: false },
- profile: { title: 'Profile', editable: false, filter: {} },
- arch: { title: 'Architecture', editable: false, filter: {} },
+ profile: { title: 'Profile', editable: false, filter: { type: 'list', config: {} } },
+ arch: { title: 'Architecture', editable: false, filter: { type: 'list', config: {} } },
version: { title: 'Version', editable: false },
// TODO: add status when delete supported:
// status: { title: 'Status', editable: false },
) { }
ngOnInit() {
+
this.sdkSvr.Sdks$.subscribe(sdks => {
const profMap = {};
const archMap = {};
this.sdks = [];
+
+ if (sdks.length === 0) {
+ return;
+ }
+
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;
});
+ // Create new reference of settings object to trig ngOnChanges event in ng2-smart-table
+ // and consequently rebuild settings grid
+ this.settings = Object.assign({}, this.settings);
+
// Add text box filter for Profile and Arch columns
- const profList = []; Object.keys(profMap).forEach(a => profList.push({ value: a, title: a }));
+ const profList = [];
+ Object.keys(profMap).forEach(a => profList.push({ value: a, title: a }));
+
this.settings.columns.profile.filter = {
type: 'list',
config: { selectText: 'Select...', list: profList },
};
- const archList = []; Object.keys(archMap).forEach(a => archList.push({ value: a, title: a }));
+ const archList = [];
+ Object.keys(archMap).forEach(a => archList.push({ value: a, title: a }));
+
this.settings.columns.arch.filter = {
type: 'list',
config: { selectText: 'Select...', list: archList },
modal.result.then(res => {
if (res === 'yes') {
- // Request installation
- this.sdkSvr.install(sdk).subscribe(r => { }, err => this.alert.error(err));
-
const modalInstall = this.modalService.open(SdkInstallComponent, {
size: 'lg',
backdrop: 'static',
container: 'nb-layout',
});
modalInstall.componentInstance.sdk = sdk;
+
+ // Request installation
+ this.sdkSvr.install(sdk).subscribe(
+ r => { },
+ err => {
+ modalInstall.dismiss('SDK install failure');
+ this.alert.error(err);
+ });
}
});