merge from ecomp a88f0072 - Modern UI
[vid.git] / vid-webpack-master / src / app / shared / components / searchMembersModal / members-table / members-table.service.ts
1 import {Injectable} from "@angular/core";
2 import {VnfMember} from "../../../models/VnfMember";
3 import {CustomTableColumnDefinition} from "./members-table.component";
4 import {NgRedux} from "@angular-redux/store";
5 import {AppState} from "../../../store/reducers";
6 import {createRelatedVnfMemberInstance} from "../../../storeUtil/utils/relatedVnfMember/relatedVnfMember.actions";
7 import * as _ from 'lodash';
8 import {DataFilterPipe} from "../../../pipes/dataFilter/data-filter.pipe";
9 import {MemberTableRowModel} from "./member-table-row.model";
10
11 @Injectable()
12 export class MembersTableService {
13   allMemberStatusMap : { [key:string]: MemberTableRowModel; };
14   filteredMembers :  VnfMember[];
15   allCheckboxAreSelected : boolean;
16   numberOfNotHideVnfMembers : number;
17   numberOfSelectedVnfMembers : number;
18   numberOfSelectedAndNotHideVnfMembers : number;
19
20   constructor(private _store: NgRedux<AppState>, private dataFilter: DataFilterPipe){
21     this.resetAll();
22   }
23
24    filterUsedVnfMembers = (serviceModelId: string, result: VnfMember[]): VnfMember[] => {
25     const allMembersMap =  _.keyBy(result as VnfMember[], 'instanceId');
26     const vnfGroupsData = this._store.getState().service.serviceInstance[serviceModelId].vnfGroups;
27     const vnfMembersArr = _.flatMap(vnfGroupsData).map((vnfGroup) =>vnfGroup.vnfs );
28     for( let vnf of vnfMembersArr ){
29       for(let member in vnf){
30         delete allMembersMap[member];
31       }
32     }
33     return _.flatMap(allMembersMap);
34   };
35
36   updateAmountsAndCheckAll = () : void => {
37     this.numberOfSelectedVnfMembers = this.calculateSelectedVnfMembers();
38     this.numberOfNotHideVnfMembers = this.calculateNotHideVnfMembers();
39     this.numberOfSelectedAndNotHideVnfMembers = this.calculateSelectedAndNotHide();
40     this.allCheckboxAreSelected = this.numberOfNotHideVnfMembers > 0 && this.numberOfNotHideVnfMembers === this.numberOfSelectedAndNotHideVnfMembers;
41   };
42
43   resetAll = () : void => {
44     this.allMemberStatusMap = {};
45     this.filteredMembers = [];
46     this.numberOfSelectedVnfMembers = 0;
47     this.numberOfNotHideVnfMembers = 0;
48     this.numberOfSelectedAndNotHideVnfMembers = 0;
49     this.allCheckboxAreSelected = false;
50   };
51
52   changeAllCheckboxStatus = (status : boolean) : void =>{
53     for(const member of this.filteredMembers){
54         this.allMemberStatusMap[member.instanceId].isSelected = status;
55       }
56     this.updateAmountsAndCheckAll();
57   };
58
59   changeCheckboxStatus = (vnfInstanceId : string ) : void =>{
60     this.allMemberStatusMap[vnfInstanceId].isSelected = !this.allMemberStatusMap[vnfInstanceId].isSelected;
61     this.updateAmountsAndCheckAll();
62   };
63
64   /************************************************
65    iterate over all current vnf members:
66    1) if vnf member is selected then update REDUX store
67    2) if vnf member is not selected then delete member
68    @allMemberStatusMap: current vnf member status
69    @vnfGroupStoreKey: vnf group store key
70    @serviceId: service model id
71    ************************************************/
72   setMembers = (data : {serviceId : string, vnfGroupStoreKey : string}) : void =>{
73     let tmpMembers = this.allMemberStatusMap;
74     for(let key in tmpMembers){
75       if(tmpMembers[key].isSelected){
76         this._store.dispatch(createRelatedVnfMemberInstance( data.vnfGroupStoreKey, data.serviceId, tmpMembers[key]));
77       }
78     }
79   };
80
81   filterMembers(searchStr: string): void {
82     const keys: string[][] =  MembersTableService.getDataKeys();
83     this.filteredMembers = this.dataFilter.transform(_.values(this.allMemberStatusMap), searchStr || '', keys);
84     this.updateAmountsAndCheckAll();
85   }
86
87   /************************************
88    generate  vnf member data for select/ unselect rows
89    ************************************/
90   static generateAllMembersStatus(tableData : VnfMember[]) : { [key:string]: MemberTableRowModel; }{
91
92     tableData.map((vnf) => {
93       vnf['isSelected'] = false
94     });
95     return _.keyBy(tableData as MemberTableRowModel[], 'instanceId');
96   }
97
98
99   static sortVnfMembersByName(list : VnfMember[], keyName : string) :VnfMember[]{
100     if(!_.isNil(list) && !_.isNil(keyName)) {
101       return list.sort(function(itemA, itemB) { return itemA[keyName]- itemB[keyName];})
102     }
103     return [];
104
105   }
106
107   /********************************
108    table columns headers and key's
109    ********************************/
110   static getHeaders() : CustomTableColumnDefinition[] {
111     return  [
112       {displayName: 'VNF instance name', key: ['instanceName']},
113       {displayName: 'VNF version', key: ['modelInfo', 'modelVersion']},
114       {displayName: 'VNF model name', key: ['modelInfo', 'modelName']},
115       {displayName: 'Prov Status', key: ['provStatus']},
116       {displayName: 'Service instance name', key: ['serviceInstanceName']},
117       {displayName: 'Cloud Region', key: ['lcpCloudRegionId']},
118       {displayName: 'Tenant Name', key: ['tenantName']}
119     ];
120   }
121
122   static getDataKeys(): string[][]{
123     const headers = MembersTableService.getHeaders();
124     return headers.map((header)=> header.key).concat([['instanceId']],[['serviceInstanceId']]);
125   }
126
127   /*************************************************************************************
128    calculate the number of selected vnf members - include not visible and visible rows
129    @allMemberStatusMap: current vnf member status
130    *************************************************************************************/
131   calculateSelectedVnfMembers() : number {
132     const flatObject = _.values(this.allMemberStatusMap);
133     return  _.filter(flatObject, (item) => { if (item.isSelected) return item }).length;
134   }
135
136   /************************************************
137    calculate the number of display vnf members
138    @allMemberStatusMap: current vnf member status
139    ************************************************/
140   calculateNotHideVnfMembers() : number {
141     return this.filteredMembers.length;
142   }
143
144   /************************************************
145    calculate the number of display vnf members
146    @allMemberStatusMap: current vnf member status
147    ************************************************/
148   calculateSelectedAndNotHide() : number {
149     return  _.filter(this.filteredMembers, (item) => { if ( this.allMemberStatusMap[item.instanceId].isSelected) return item }).length;
150   }
151
152
153 }