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";
12 export class MembersTableService {
13 allMemberStatusMap : { [key:string]: MemberTableRowModel; };
14 filteredMembers : VnfMember[];
15 allCheckboxAreSelected : boolean;
16 numberOfNotHideVnfMembers : number;
17 numberOfSelectedVnfMembers : number;
18 numberOfSelectedAndNotHideVnfMembers : number;
20 constructor(private _store: NgRedux<AppState>, private dataFilter: DataFilterPipe){
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];
33 return _.flatMap(allMembersMap);
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;
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;
52 changeAllCheckboxStatus = (status : boolean) : void =>{
53 for(const member of this.filteredMembers){
54 this.allMemberStatusMap[member.instanceId].isSelected = status;
56 this.updateAmountsAndCheckAll();
59 changeCheckboxStatus = (vnfInstanceId : string ) : void =>{
60 this.allMemberStatusMap[vnfInstanceId].isSelected = !this.allMemberStatusMap[vnfInstanceId].isSelected;
61 this.updateAmountsAndCheckAll();
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]));
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();
87 /************************************
88 generate vnf member data for select/ unselect rows
89 ************************************/
90 static generateAllMembersStatus(tableData : VnfMember[]) : { [key:string]: MemberTableRowModel; }{
92 tableData.map((vnf) => {
93 vnf['isSelected'] = false
95 return _.keyBy(tableData as MemberTableRowModel[], 'instanceId');
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];})
107 /********************************
108 table columns headers and key's
109 ********************************/
110 static getHeaders() : CustomTableColumnDefinition[] {
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']}
122 static getDataKeys(): string[][]{
123 const headers = MembersTableService.getHeaders();
124 return headers.map((header)=> header.key).concat([['instanceId']],[['serviceInstanceId']]);
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;
136 /************************************************
137 calculate the number of display vnf members
138 @allMemberStatusMap: current vnf member status
139 ************************************************/
140 calculateNotHideVnfMembers() : number {
141 return this.filteredMembers.length;
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;