2 Copyright 2020 TATA ELXSI
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
8 http://www.apache.org/licenses/LICENSE-2.0
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.
16 Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
19 * @file PDU Instance Component
21 import { Component, Injector, OnDestroy, OnInit } from '@angular/core';
22 import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
23 import { TranslateService } from '@ngx-translate/core';
24 import { AddPDUInstancesComponent } from 'AddPDUInstancesComponent';
25 import { ERRORDATA, MODALCLOSERESPONSEDATA } from 'CommonModel';
26 import { DataService } from 'DataService';
27 import { environment } from 'environment';
28 import { LocalDataSource } from 'ng2-smart-table';
29 import { PDUInstanceDetails } from 'PDUInstanceModel';
30 import { PDUInstancesActionComponent } from 'PDUInstancesActionComponent';
31 import { RestService } from 'RestService';
32 import { Subscription } from 'rxjs';
33 import { SharedService } from 'SharedService';
37 * @Component takes PDUInstancesComponent.html as template url
40 templateUrl: './PDUInstancesComponent.html',
41 styleUrls: ['./PDUInstancesComponent.scss']
43 /** Exporting a class @exports PDUInstancesComponent */
44 export class PDUInstancesComponent implements OnInit, OnDestroy {
45 /** Injector to invoke other services @public */
46 public injector: Injector;
48 /** NS Instance array @public */
49 public pduInstanceData: object[] = [];
51 /** Datasource instance @public */
52 public dataSource: LocalDataSource = new LocalDataSource();
54 /** SelectedRows array @public */
55 public selectedRows: object[] = [];
57 /** Selected list array @public */
58 public selectList: object[] = [];
60 /** Instance component are stored in settings @public */
61 public settings: {} = {};
63 /** Contains objects for menu settings @public */
64 public columnList: {} = {};
66 /** Check the loading results @public */
67 public isLoadingResults: boolean = true;
69 /** Give the message for the loading @public */
70 public message: string = 'PLEASEWAIT';
72 /** Class for empty and present data @public */
73 public checkDataClass: string;
75 /** Instance of the modal service @private */
76 private modalService: NgbModal;
78 /** dataService to pass the data from one component to another @private */
79 private dataService: DataService;
81 /** Utilizes rest service for any CRUD operations @private */
82 private restService: RestService;
84 /** Contains all methods related to shared @private */
85 private sharedService: SharedService;
87 /** Contains tranlsate instance @private */
88 private translateService: TranslateService;
90 /** Instance of subscriptions @private */
91 private generateDataSub: Subscription;
93 constructor(injector: Injector) {
94 this.injector = injector;
95 this.restService = this.injector.get(RestService);
96 this.dataService = this.injector.get(DataService);
97 this.sharedService = this.injector.get(SharedService);
98 this.translateService = this.injector.get(TranslateService);
99 this.modalService = this.injector.get(NgbModal);
103 * Lifecyle Hooks the trigger before component is instantiate
105 public ngOnInit(): void {
106 this.generateTableColumn();
107 this.generateTableSettings();
109 this.generateDataSub = this.sharedService.dataEvent.subscribe(() => { this.generateData(); });
112 /** Generate smart table row title and filters @public */
113 public generateTableSettings(): void {
115 columns: this.columnList,
116 actions: { add: false, edit: false, delete: false, position: 'right' },
117 attr: this.sharedService.tableClassConfig(),
118 pager: this.sharedService.paginationPagerConfig(),
119 noDataMessage: this.translateService.instant('NODATAMSG')
123 /** Generate smart table row title and filters @public */
124 public generateTableColumn(): void {
126 identifier: { title: this.translateService.instant('IDENTIFIER'), width: '25%' },
127 name: { title: this.translateService.instant('NAME'), width: '20%', sortDirection: 'asc' },
128 type: { title: this.translateService.instant('TYPE'), width: '15%' },
129 usageState: { title: this.translateService.instant('USAGESTATE'), width: '15%' },
130 CreatedAt: { title: this.translateService.instant('CREATEDAT'), width: '15%' },
132 name: 'Action', width: '10%', filter: false, sort: false, type: 'custom',
133 title: this.translateService.instant('ACTIONS'),
134 valuePrepareFunction: (cell: PDUInstanceDetails, row: PDUInstanceDetails): PDUInstanceDetails => row,
135 renderComponent: PDUInstancesActionComponent
140 /** generateData initiate the ns-instance list @public */
141 public generateData(): void {
142 this.pduInstanceData = [];
143 this.isLoadingResults = true;
144 this.restService.getResource(environment.PDUINSTANCE_URL).subscribe((pduInstancesData: PDUInstanceDetails[]) => {
145 pduInstancesData.forEach((pduInstanceData: PDUInstanceDetails) => {
146 const pduDataObj: {} = {
147 name: pduInstanceData.name,
148 identifier: pduInstanceData._id,
149 type: pduInstanceData.type,
150 usageState: pduInstanceData._admin.usageState,
151 CreatedAt: this.sharedService.convertEpochTime(Number(pduInstanceData._admin.created))
153 this.pduInstanceData.push(pduDataObj);
155 if (this.pduInstanceData.length > 0) {
156 this.checkDataClass = 'dataTables_present';
158 this.checkDataClass = 'dataTables_empty';
160 this.dataSource.load(this.pduInstanceData).then((data: {}) => {
161 this.isLoadingResults = false;
162 }).catch((): void => {
163 // Catch Navigation Error
165 }, (error: ERRORDATA) => {
166 this.restService.handleError(error, 'get');
167 this.isLoadingResults = false;
171 /** smart table listing manipulation @public */
172 public onChange(perPageValue: number): void {
173 this.dataSource.setPaging(1, perPageValue, true);
176 /** smart table listing manipulation @public */
177 public onUserRowSelect(event: MessageEvent): void {
178 Object.assign(event.data, { page: 'pdu-instances' });
179 this.dataService.changeMessage(event.data);
182 /** Add PDU Instance modal using modalservice @public */
183 public addPDUInstanceModal(): void {
184 // eslint-disable-next-line security/detect-non-literal-fs-filename
185 const modalRef: NgbModalRef = this.modalService.open(AddPDUInstancesComponent, { backdrop: 'static' });
186 modalRef.componentInstance.title = this.translateService.instant('PAGE.PDUINSTANCE.NEWPDUINSTANCE');
187 modalRef.result.then((result: MODALCLOSERESPONSEDATA) => {
191 }).catch((): void => {
192 // Catch Navigation Error
197 * Lifecyle hook which get trigger on component destruction
199 public ngOnDestroy(): void {
200 this.generateDataSub.unsubscribe();