cfe43000fb5fbcc43aa47a87aa91e541279cc642
[dcaegen2/services.git] /
1 /*
2     Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.
3
4     Licensed under the Apache License, Version 2.0 (the "License");
5     you may not use this file except in compliance with the License.
6     You may obtain a copy of the License at
7
8             http://www.apache.org/licenses/LICENSE-2.0
9
10     Unless required by applicable law or agreed to in writing, software
11     distributed under the License is distributed on an "AS IS" BASIS,
12     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13     See the License for the specific language governing permissions and
14     limitations under the License.
15 */
16 import {Component, OnInit, ViewChild, ElementRef} from '@angular/core';
17 import {DashboardApiService} from "src/app/core/services/dashboard-api.service";
18 import {NgbModal} from "@ng-bootstrap/ng-bootstrap";
19 import {Template,newTemplate} from "src/app/core/models/template.model";
20 // Loading spinner
21 import {NgxSpinnerService} from "ngx-spinner";
22
23 // modal
24 import {NewTemplateModalComponent} from "./new-template-modal/new-template-modal.component";
25 import {EditTemplateModalComponent} from "./edit-template-modal/edit-template-modal.component";
26 import {AlertComponent} from "src/app/core/alert/alert.component";
27 // notify
28 import {ToastrNotificationService} from "src/app/core/services/toastr-notification.service";
29
30 @Component({
31   selector: 'app-template-list',
32   templateUrl: './template-list.component.html',
33   styleUrls: ['./template-list.component.css']
34 })
35 export class TemplateListComponent {
36   template_list: any = [];
37   templates: Template[] = [];
38   temps: Template[] = [];
39   Template_New: Template;
40   Template_Newbody: newTemplate;
41   dashboardDeteleModelShow = true;
42   loadingIndicator: boolean = true;
43   mesgNoData = {
44     emptyMessage: `
45       <div class="d-flex justify-content-center">
46         <div class="p-2">
47           <label class="dl-nodata">No Data</label>
48         </div>
49       </div>
50     `
51   };
52   @ViewChild("searchText") searchText: ElementRef;
53   constructor(
54     private modalService: NgbModal,
55     private dashboardApiService: DashboardApiService,
56     private spinner: NgxSpinnerService,
57     private notificationService: ToastrNotificationService,
58   ) {
59     setTimeout(() => {
60       this.loadingIndicator = false;
61     }, 5000);
62
63     this.initData().then(data => {
64       this.initTemplateList(this.template_list).then(
65         data => {
66           // for cache of datatable
67           this.temps = [...data];
68           this.templates = data;
69           setTimeout(() => {
70             this.spinner.hide();
71           }, 500);
72         }
73       );
74     });
75   }
76
77   ngOnInit() {
78     this.spinner.show();
79   }
80
81   async initData() {
82     this.template_list = [];
83     this.template_list = await this.getTemplateList();
84     this.Template_New = new Template();
85     this.Template_Newbody = new newTemplate();
86     return true;
87   }
88
89
90   getTemplateList() {
91     return this.dashboardApiService.getTemplateAll().toPromise();
92   }
93
94   async initTemplateList(template_list: []) {
95     var t: Template[] = [];
96     for (var i = 0; i < template_list.length; i++) {
97       let data = template_list[i];
98       let feed = {
99         id: data["id"],
100         name: data["name"],
101         submitted: data["submitted"],
102         body: data["body"],
103         note: data["note"],
104         topic: data["topic"],
105         designType: data["designType"],
106       };
107       t.push(feed);
108     }
109     return t;
110   }
111
112   newTemplateModal() {
113     let tips = "";
114     const modalRef = this.modalService.open(NewTemplateModalComponent, {
115       windowClass: "dl-md-modal templatess",
116       centered: true
117     });
118     this.Template_New = new Template();
119     this.Template_Newbody = new newTemplate();
120     modalRef.componentInstance.template = this.Template_Newbody;
121     modalRef.componentInstance.templatelist_length = this.template_list.length;
122     modalRef.componentInstance.passEntry.subscribe(receivedEntry => {
123       this.Template_Newbody = receivedEntry;
124       let name = this.Template_Newbody.name;
125       this.dashboardApiService
126         .createNewTemplate(this.Template_Newbody)
127         .subscribe(
128           res => {
129             if (res.statusCode == 200) {
130               this.Template_New = res.returnBody;
131               console.log(this.Template_New,"this.Template_New add Success");
132               this.template_list.push(this.Template_New);
133               this.template_list = [...this.template_list];
134               console.log(this.template_list, "this.template_list,inserted");
135               this.notificationService.success("SUCCESSFULLY_CREARED");
136             } else {
137               this.notificationService.error("FAILED_CREARED");
138             }
139             modalRef.close();
140           },
141           err => {
142             this.notificationService.error(err);
143             modalRef.close();
144           }
145         );
146     });
147   }
148
149   onActivate(event) {
150     const emitType = event.type;
151     if(emitType == "dblclick"){
152       console.log('Activate Event', event);
153       let id = event.row.id;
154       this.editTemplateModal(id);
155     }
156
157   }
158
159   editTemplateModal(id) {
160     const index = this.template_list.findIndex(t => t.id === id);
161     // const name = this.template_list[index].name;
162     const modalRef = this.modalService.open(EditTemplateModalComponent, {
163       windowClass: "dl-md-modal templatess",
164       centered: true
165     });
166     modalRef.componentInstance.edittemplate = this.template_list[index];
167     modalRef.componentInstance.passEntry.subscribe(receivedEntry => {
168       const name = receivedEntry.name;
169       this.Template_New = receivedEntry;
170       this.dashboardApiService
171         .updateNewTemplate(this.Template_New)
172         .subscribe(
173           res => {
174
175             if (res.statusCode == 200) {
176               this.template_list[index] = this.Template_New;
177               this.template_list = [...this.template_list];
178               console.log(this.template_list, "this.template_list,update");
179               this.notificationService.success("SUCCESSFULLY_UPDATED");
180             } else {
181               this.notificationService.error("FAILED_UPDATED");
182             }
183             modalRef.close();
184           },
185           err => {
186             this.notificationService.error(err);
187             modalRef.close();
188           }
189         );
190     })
191   }
192
193   deleteTemplateModel(id: number) {
194     const index = this.template_list.findIndex(t => t.id === id);
195     const modalRef = this.modalService.open(AlertComponent, {
196       size: "sm",
197       centered: true
198     });
199     const name = this.template_list[index].name;
200     // modalRef.componentInstance.dashboardDeteleModelShow = this.dashboardDeteleModelShow;
201     modalRef.componentInstance.message = "ARE_YOU_SURE_DELETE";
202     modalRef.componentInstance.passEntry.subscribe(receivedEntry => {
203       // Delete database
204       this.dashboardApiService.DeleteTemplate(id).subscribe(
205         res => {
206           console.log(res,"template detele res");
207           console.log(JSON.stringify(res).length,"JSON.stringify(res).length");
208           if (JSON.stringify(res).length<=2) {
209             console.log("Success deleted template");
210             this.template_list.splice(index, 1);
211             this.template_list = [...this.template_list];
212             this.notificationService.success("SUCCESSFULLY_DELETED");
213           } else {
214             console.log("Fail deleted template");
215             this.notificationService.error("FAILED_DELETED");
216           }
217
218           modalRef.close();
219         },
220         err => {
221           this.notificationService.error(err);
222           modalRef.close();
223         }
224       );
225     });
226
227   }
228
229   deployTemplate(id: number) {
230     const index = this.template_list.findIndex(t => t.id === id);
231     const name = this.template_list[index].name;
232     const body = this.template_list[index];
233     this.spinner.show();
234     this.dashboardApiService.deployTemplateKibana(id, body).subscribe(
235       res => {
236         this.spinner.hide();
237         console.log(res,"template deploy res");
238         console.log(JSON.stringify(res).length,"JSON.stringify(res).length");
239         if (JSON.stringify(res).length<=2) {
240           this.notificationService.success("Deploy_SUCCESSFULLY");
241         } else {
242           this.notificationService.error("Deploy_FAILED");
243         }
244       },
245       err => {
246         this.spinner.hide();
247         this.notificationService.error(err);
248       }
249     );
250   }
251
252   updateFilter(searchValue) {
253     const val = searchValue.toLowerCase();
254     // filter our data
255     const temps = this.temps.filter(function (d) {
256       return d.name.toLowerCase().indexOf(val) !== -1 || !val;
257     });
258     // update the rows
259     this.template_list = temps;
260   }
261
262
263 }