6bc9c9df0e4c8bf80f1dbd2d67b2b18bc5fb0596
[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 { RestApiService } from "src/app/core/services/rest-api.service";
18 import { NgbModal } from "@ng-bootstrap/ng-bootstrap";
19 import { Template } 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: Template;
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: RestApiService,
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 Template();
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         topicName: data["topicName"],
105         designType: data["designType"],
106         designTypeName: data["designTypeName"],
107       };
108       t.push(feed);
109     }
110     return t;
111   }
112
113   newTemplateModal() {
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 Template();
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       this.dashboardApiService
125         .createNewTemplate(this.Template_Newbody)
126         .subscribe(
127           res => {
128             if (res.statusCode == 200) {
129               this.Template_New = res.returnBody;
130               this.template_list.push(this.Template_New);
131               this.template_list = [...this.template_list];
132               this.notificationService.success("SUCCESSFULLY_CREARED");
133             } else {
134               this.notificationService.error("FAILED_CREARED");
135             }
136             modalRef.close();
137           },
138           err => {
139             this.notificationService.error(err);
140             modalRef.close();
141           }
142         );
143     });
144   }
145
146   onActivate(event) {
147     const emitType = event.type;
148     if (emitType == "dblclick") {
149       let id = event.row.id;
150       this.editTemplateModal(id);
151     }
152
153   }
154
155   editTemplateModal(id) {
156     const index = this.template_list.findIndex(t => t.id === id);
157     const modalRef = this.modalService.open(EditTemplateModalComponent, {
158       windowClass: "dl-md-modal templatess",
159       centered: true
160     });
161     modalRef.componentInstance.edittemplate = this.template_list[index];
162     modalRef.componentInstance.passEntry.subscribe(receivedEntry => {
163       this.Template_New = receivedEntry;
164       this.dashboardApiService
165         .updateNewTemplate(this.Template_New)
166         .subscribe(
167           res => {
168             if (res.statusCode == 200) {
169               this.template_list[index] = this.Template_New;
170               this.template_list = [...this.template_list];
171               this.notificationService.success("SUCCESSFULLY_UPDATED");
172             } else {
173               this.notificationService.error("FAILED_UPDATED");
174             }
175             modalRef.close();
176           },
177           err => {
178             this.notificationService.error(err);
179             modalRef.close();
180           }
181         );
182     })
183   }
184
185   deleteTemplateModel(id: number) {
186     const index = this.template_list.findIndex(t => t.id === id);
187     const modalRef = this.modalService.open(AlertComponent, {
188       size: "sm",
189       centered: true
190     });
191     // modalRef.componentInstance.dashboardDeteleModelShow = this.dashboardDeteleModelShow;
192     modalRef.componentInstance.message = "ARE_YOU_SURE_DELETE";
193     modalRef.componentInstance.passEntry.subscribe(receivedEntry => {
194       // Delete database
195       this.dashboardApiService.DeleteTemplate(id).subscribe(
196         res => {
197           if (JSON.stringify(res).length <= 2) {
198             this.template_list.splice(index, 1);
199             this.template_list = [...this.template_list];
200             this.notificationService.success("SUCCESSFULLY_DELETED");
201           } else {
202             this.notificationService.error("FAILED_DELETED");
203           }
204
205           modalRef.close();
206         },
207         err => {
208           this.notificationService.error(err);
209           modalRef.close();
210         }
211       );
212     });
213
214   }
215
216   deployTemplate(id: number) {
217     const index = this.template_list.findIndex(t => t.id === id);
218     const body = this.template_list[index];
219     this.spinner.show();
220     this.dashboardApiService.deployTemplateKibana(id, body).subscribe(
221       res => {
222         this.spinner.hide();
223         if (JSON.stringify(res).length <= 2) {
224           this.notificationService.success("Deploy_SUCCESSFULLY");
225         } else {
226           this.notificationService.error("Deploy_FAILED");
227         }
228       },
229       err => {
230         this.spinner.hide();
231         this.notificationService.error(err);
232       }
233     );
234   }
235
236   updateFilter(searchValue) {
237     const val = searchValue.toLowerCase();
238     // filter our data
239     const temps = this.temps.filter(function (d) {
240       return d.name.toLowerCase().indexOf(val) !== -1 || !val;
241     });
242     // update the rows
243     this.template_list = temps;
244   }
245
246
247 }