1 import {Injectable} from "@angular/core";
2 import {NgRedux} from "@angular-redux/store";
3 import {AppState} from "../../../../../../../shared/store/reducers";
4 import {AaiService} from "../../../../../../../shared/services/aaiService/aai.service";
6 updateGenericModalCriteria,
7 updateGenericModalhelper
8 } from "../../../../../../../shared/storeUtil/utils/global/global.actions";
9 import {ElementsTableService} from "../../../../../../../shared/components/searchMembersModal/members-table/elements-table.service";
11 ICriteria, ISearchField, ITableContent,
13 } from "../../../../../../../shared/components/searchMembersModal/members-table/element-table-row.model";
14 import {Observable, of} from "rxjs";
15 import * as _ from "lodash";
16 import {CustomTableColumnDefinition} from "../../../../../../../shared/components/searchMembersModal/members-table/elements-table.component";
17 import {NetworkModalRow} from "./network.step.model";
20 export class NetworkStepService {
21 constructor(private _store: NgRedux<AppState>, private _aaiService: AaiService) {}
23 uniqObjectField: string = "instanceId";
24 type: string = "Network";
26 getNetworkStep = (serviceInstance, serviceModelId, ...otherSteps): ModalInformation => {
29 serviceModelId: serviceModelId,
30 title: 'Associate network to VRF Entry',
31 description: 'Select a network to associate to the VRF Entry',
32 noElementsMsg: 'No network were found.',
34 uniqObjectField: this.uniqObjectField,
35 backAction: (searchElementsModalComponent) => {
36 searchElementsModalComponent.closeDialog();
40 action: (searchElementsModalComponent) => {
41 let tmpMembers = searchElementsModalComponent._membersTableService.allElementsStatusMap;
42 let vpnStep = otherSteps[0];
43 for (let key in tmpMembers) {
44 if (tmpMembers[key].isSelected) {
45 this._store.dispatch(updateGenericModalhelper(`selected${this.type}`, tmpMembers[key], this.uniqObjectField));
48 ElementsTableService.changeModalInformationDataTrigger.next({
49 modalInformation: vpnStep.getVpnStep(serviceInstance, searchElementsModalComponent.modalInformation.serviceModelId, ...otherSteps),
56 action: (searchElementsModalComponent) => {
57 this.getNetworks(serviceInstance).subscribe((networks) => {
58 const currentRole = searchElementsModalComponent.modalInformation.criteria.find((criteria: ICriteria) => {
59 criteria.label === 'Roles';
61 ElementsTableService.changeFnTableDataTrigger.next(
62 networks.filter((network) => {
63 if (_.isNil(currentRole)) return network;
64 return network.role === currentRole.currentValue;
69 getElements: (...args) => this.getNetworks(serviceInstance),
70 criteria: this.getNetworkStepCriteria(serviceInstance),
71 searchFields: this.getsNetworkStepSearchFields(serviceInstance),
72 tableHeaders: this.getNetworkStepHeaders(),
73 tableContent: this.getNetworkTableContent()
77 getNetworks = (serviceInstance): Observable<any[]> => {
78 let cloudRegion = serviceInstance.lcpCloudRegionId;
79 let tenantId = serviceInstance.tenantName;
80 return this._aaiService.retrieveActiveNetwork(cloudRegion, tenantId).map((networks: NetworkModalRow[]) => {
81 this.generateRolesOptions(networks);
82 return this.sortElementsResultByField(networks, this.uniqObjectField);
86 getNetworkStepCriteria(serviceInstance): ICriteria[] {
91 onInit: (): Observable<any> => of(this._store.getState().global.genericModalCriteria.roles),
92 onChange: (that, selectedOption): void => {
93 that.currentValue = selectedOption;
95 dataTestId: 'roles-criteria',
100 getsNetworkStepSearchFields = (serviceInstance): ISearchField[] => {
104 dataTestId: 'Region',
105 value: serviceInstance["lcpCloudRegionId"],
109 dataTestId: 'Tenant',
110 value: serviceInstance["tenantName"],
114 title: 'Orch. status',
115 dataTestId: 'Orch_status',
121 dataTestId: 'Related_to',
122 value: "VPN binding",
128 generateRolesOptions = (networks): void => {
129 let roles: string[] = (_.uniq(_.flatten(_.map(networks, 'role').filter((role) => !_.isNil(role))))).sort();
130 const SELECTED_AN_OPTION: string = "-- select an option --";
131 const NOT_ASSIGNED: string = "Not assigned";
133 roles = _.remove([SELECTED_AN_OPTION, this.shouldAddNotAssigned(networks) ? NOT_ASSIGNED : null, ...roles], null);
134 this._store.dispatch(updateGenericModalCriteria("roles", roles));
137 getNetworkStepHeaders = (): CustomTableColumnDefinition[] => {
139 {displayName: `Name`, key: ['instanceName']},
140 {displayName: `Type`, key: ['instanceType']},
141 {displayName: `Role`, key: ['role']},
142 {displayName: 'Orch. Status', key: ['orchStatus']},
143 {displayName: 'Physical name', key: ['physicalName']},
144 {displayName: 'Instance ID', key: ['instanceId']},
145 {displayName: 'Model UUID', key: ['modelInfo', 'modelVersionId']},
146 {displayName: 'Service name', key: ['serviceName']},
147 {displayName: 'Service UUID', key: ['serviceUUID']},
148 {displayName: 'Tenant', key: ['tenantName']},
149 {displayName: 'Region', key: ['lcpCloudRegionId']}
153 getNetworkTableContent = (): ITableContent[] => {
159 value: ["instanceName"]
166 value: ['instanceType']
177 id: 'network-orch-status',
180 value: ['orchStatus']
184 id: 'network-physical-name',
186 id: ['physicalName'],
187 value: ['physicalName']
191 id: 'network-instance-id',
194 value: ['instanceId']
198 id: 'network-model-uuid',
201 value: ['modelInfo', 'modelVersionId']
205 id: 'network-serviceName',
208 value: ['serviceName']
212 id: 'network-service-id',
215 value: ['serviceUUID']
219 id: 'network-tenantName',
222 value: ['tenantName']
226 id: 'network-region',
229 value: ['lcpCloudRegionId']
235 sortElementsResultByField = (elements, fieldName): any[] => {
236 return _.sortBy(elements, o => o[fieldName]);
239 shouldAddNotAssigned = (networks): boolean => {
240 return _.values(networks).some(network => _.isNil(network.role) || network.role === "");