summaryrefslogtreecommitdiffstats
path: root/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.ts')
-rw-r--r--vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.ts153
1 files changed, 153 insertions, 0 deletions
diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.ts
new file mode 100644
index 000000000..5b9cd39a2
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.ts
@@ -0,0 +1,153 @@
+import {Injectable} from "@angular/core";
+import {VnfMember} from "../../../models/VnfMember";
+import {CustomTableColumnDefinition} from "./members-table.component";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../../store/reducers";
+import {createRelatedVnfMemberInstance} from "../../../storeUtil/utils/relatedVnfMember/relatedVnfMember.actions";
+import * as _ from 'lodash';
+import {DataFilterPipe} from "../../../pipes/dataFilter/data-filter.pipe";
+import {MemberTableRowModel} from "./member-table-row.model";
+
+@Injectable()
+export class MembersTableService {
+ allMemberStatusMap : { [key:string]: MemberTableRowModel; };
+ filteredMembers : VnfMember[];
+ allCheckboxAreSelected : boolean;
+ numberOfNotHideVnfMembers : number;
+ numberOfSelectedVnfMembers : number;
+ numberOfSelectedAndNotHideVnfMembers : number;
+
+ constructor(private _store: NgRedux<AppState>, private dataFilter: DataFilterPipe){
+ this.resetAll();
+ }
+
+ filterUsedVnfMembers = (serviceModelId: string, result: VnfMember[]): VnfMember[] => {
+ const allMembersMap = _.keyBy(result as VnfMember[], 'instanceId');
+ const vnfGroupsData = this._store.getState().service.serviceInstance[serviceModelId].vnfGroups;
+ const vnfMembersArr = _.flatMap(vnfGroupsData).map((vnfGroup) =>vnfGroup.vnfs );
+ for( let vnf of vnfMembersArr ){
+ for(let member in vnf){
+ delete allMembersMap[member];
+ }
+ }
+ return _.flatMap(allMembersMap);
+ };
+
+ updateAmountsAndCheckAll = () : void => {
+ this.numberOfSelectedVnfMembers = this.calculateSelectedVnfMembers();
+ this.numberOfNotHideVnfMembers = this.calculateNotHideVnfMembers();
+ this.numberOfSelectedAndNotHideVnfMembers = this.calculateSelectedAndNotHide();
+ this.allCheckboxAreSelected = this.numberOfNotHideVnfMembers > 0 && this.numberOfNotHideVnfMembers === this.numberOfSelectedAndNotHideVnfMembers;
+ };
+
+ resetAll = () : void => {
+ this.allMemberStatusMap = {};
+ this.filteredMembers = [];
+ this.numberOfSelectedVnfMembers = 0;
+ this.numberOfNotHideVnfMembers = 0;
+ this.numberOfSelectedAndNotHideVnfMembers = 0;
+ this.allCheckboxAreSelected = false;
+ };
+
+ changeAllCheckboxStatus = (status : boolean) : void =>{
+ for(const member of this.filteredMembers){
+ this.allMemberStatusMap[member.instanceId].isSelected = status;
+ }
+ this.updateAmountsAndCheckAll();
+ };
+
+ changeCheckboxStatus = (vnfInstanceId : string ) : void =>{
+ this.allMemberStatusMap[vnfInstanceId].isSelected = !this.allMemberStatusMap[vnfInstanceId].isSelected;
+ this.updateAmountsAndCheckAll();
+ };
+
+ /************************************************
+ iterate over all current vnf members:
+ 1) if vnf member is selected then update REDUX store
+ 2) if vnf member is not selected then delete member
+ @allMemberStatusMap: current vnf member status
+ @vnfGroupStoreKey: vnf group store key
+ @serviceId: service model id
+ ************************************************/
+ setMembers = (data : {serviceId : string, vnfGroupStoreKey : string}) : void =>{
+ let tmpMembers = this.allMemberStatusMap;
+ for(let key in tmpMembers){
+ if(tmpMembers[key].isSelected){
+ this._store.dispatch(createRelatedVnfMemberInstance( data.vnfGroupStoreKey, data.serviceId, tmpMembers[key]));
+ }
+ }
+ };
+
+ filterMembers(searchStr: string): void {
+ const keys: string[][] = MembersTableService.getDataKeys();
+ this.filteredMembers = this.dataFilter.transform(_.values(this.allMemberStatusMap), searchStr || '', keys);
+ this.updateAmountsAndCheckAll();
+ }
+
+ /************************************
+ generate vnf member data for select/ unselect rows
+ ************************************/
+ static generateAllMembersStatus(tableData : VnfMember[]) : { [key:string]: MemberTableRowModel; }{
+
+ tableData.map((vnf) => {
+ vnf['isSelected'] = false
+ });
+ return _.keyBy(tableData as MemberTableRowModel[], 'instanceId');
+ }
+
+
+ static sortVnfMembersByName(list : VnfMember[], keyName : string) :VnfMember[]{
+ if(!_.isNil(list) && !_.isNil(keyName)) {
+ return list.sort(function(itemA, itemB) { return itemA[keyName]- itemB[keyName];})
+ }
+ return [];
+
+ }
+
+ /********************************
+ table columns headers and key's
+ ********************************/
+ static getHeaders() : CustomTableColumnDefinition[] {
+ return [
+ {displayName: 'VNF instance name', key: ['instanceName']},
+ {displayName: 'VNF version', key: ['modelInfo', 'modelVersion']},
+ {displayName: 'VNF model name', key: ['modelInfo', 'modelName']},
+ {displayName: 'Prov Status', key: ['provStatus']},
+ {displayName: 'Service instance name', key: ['serviceInstanceName']},
+ {displayName: 'Cloud Region', key: ['lcpCloudRegionId']},
+ {displayName: 'Tenant Name', key: ['tenantName']}
+ ];
+ }
+
+ static getDataKeys(): string[][]{
+ const headers = MembersTableService.getHeaders();
+ return headers.map((header)=> header.key).concat([['instanceId']],[['serviceInstanceId']]);
+ }
+
+ /*************************************************************************************
+ calculate the number of selected vnf members - include not visible and visible rows
+ @allMemberStatusMap: current vnf member status
+ *************************************************************************************/
+ calculateSelectedVnfMembers() : number {
+ const flatObject = _.values(this.allMemberStatusMap);
+ return _.filter(flatObject, (item) => { if (item.isSelected) return item }).length;
+ }
+
+ /************************************************
+ calculate the number of display vnf members
+ @allMemberStatusMap: current vnf member status
+ ************************************************/
+ calculateNotHideVnfMembers() : number {
+ return this.filteredMembers.length;
+ }
+
+ /************************************************
+ calculate the number of display vnf members
+ @allMemberStatusMap: current vnf member status
+ ************************************************/
+ calculateSelectedAndNotHide() : number {
+ return _.filter(this.filteredMembers, (item) => { if ( this.allMemberStatusMap[item.instanceId].isSelected) return item }).length;
+ }
+
+
+}