Migration to AGL gerrit (update go import)
[src/xds/xds-agent.git] / webapp / src / app / pages / projects / project-card / project-card.component.ts
1 /**
2 * @license
3 * Copyright (C) 2017-2018 "IoT.bzh"
4 * Author Sebastien Douheret <sebastien@iot.bzh>
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 *   http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 import { Component, Input, Pipe, PipeTransform } from '@angular/core';
20 import { ProjectService, IProject, ProjectType, ProjectTypeEnum } from '../../../@core-xds/services/project.service';
21 import { AlertService } from '../../../@core-xds/services/alert.service';
22 import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
23 import { ConfirmModalComponent, EType } from '../../confirm/confirm-modal/confirm-modal.component';
24
25 @Component({
26   selector: 'xds-project-card',
27   styleUrls: ['./project-card.component.scss'],
28   templateUrl: './project-card.component.html',
29 })
30 export class ProjectCardComponent {
31
32   // FIXME workaround of https://github.com/angular/angular-cli/issues/2034
33   // should be removed with angular 5
34   // @Input() project: IProject;
35   @Input() project = <IProject>null;
36
37   constructor(
38     private alert: AlertService,
39     private projectSvr: ProjectService,
40     private modalService: NgbModal,
41   ) {
42   }
43
44   delete(prj: IProject) {
45
46     const modal = this.modalService.open(ConfirmModalComponent, {
47       size: 'lg',
48       backdrop: 'static',
49       container: 'nb-layout',
50     });
51     modal.componentInstance.title = 'Confirm SDK deletion';
52     modal.componentInstance.type = EType.YesNo;
53     modal.componentInstance.question = `
54       Do you <b>permanently delete '` + prj.label + `'</b> project ?
55       <br><br>
56       <i><small>(Project ID: ` + prj.id + ` )</small></i>`;
57
58     modal.result
59       .then(res => {
60         if (res === 'yes') {
61           this.projectSvr.delete(prj).subscribe(
62             r => { },
63             err => this.alert.error('ERROR delete: ' + err),
64           );
65         }
66       });
67
68   }
69
70   sync(prj: IProject) {
71     this.projectSvr.sync(prj).subscribe(
72       res => { },
73       err => this.alert.error('ERROR: ' + err),
74     );
75   }
76 }
77
78 // Make Project type human readable
79 @Pipe({
80   name: 'readableType',
81 })
82
83 export class ProjectReadableTypePipe implements PipeTransform {
84   transform(type: ProjectTypeEnum): string {
85     switch (type) {
86       case ProjectType.NATIVE_PATHMAP: return 'Native (path mapping)';
87       case ProjectType.SYNCTHING: return 'Cloud (Syncthing)';
88       default: return String(type);
89     }
90   }
91 }