Extend Modern UI for pnf usecase
[vid.git] / vid-webpack-master / src / app / shared / storeUtil / utils / network / network.reducers.ts
1 import {Action} from "redux";
2 import * as _ from "lodash";
3 import {NetworkInstance} from "../../../models/networkInstance";
4 import {
5   CreateNetworkInstanceAction,
6   NetworkActions,
7   UpdateNetworkCollectionFunction,
8   UpdateNetworkInstanceAction
9 } from "./network.actions";
10 import {ServiceInstance} from "../../../models/serviceInstance";
11 import {calculateNextUniqueModelName} from "../reducersHelper";
12 import {ServiceState} from "../main.reducer";
13 import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
14 import {deleteFirstLevel, updateServiceValidationCounter} from "../reducersHelper";
15 import {ActionOnFirstLevel} from "../firstLevel/firstLevel.actions";
16
17
18 export function networkReducer(state: ServiceState , action: Action) : ServiceState {
19   switch (action.type) {
20     case NetworkActions.CREATE_NETWORK_INSTANCE: {
21       const updateNetworkInstanceAction = <CreateNetworkInstanceAction>action;
22       const serviceUuid = updateNetworkInstanceAction.serviceUuid;
23       let networkModelName = updateNetworkInstanceAction.networkModelName;
24
25
26       let newState = _.cloneDeep(state);
27
28       updateNetworkInstanceAction.networkInstance.originalName = networkModelName;
29       updateNetworkInstanceAction.networkModelName = calculateNextUniqueModelName(networkModelName, serviceUuid, newState, 'networks');
30
31       let networkInstance: NetworkInstance = newState.serviceInstance[serviceUuid].networks[networkModelName];
32       networkInstance = new NetworkInstance();
33       updateNetworkInstanceAction.networkInstance.networkStoreKey = updateNetworkInstanceAction.networkModelName;
34       updateNetworkInstanceAction.networkInstance.originalName = networkModelName;
35       networkInstance.originalName = updateNetworkInstanceAction.networkInstance.originalName;
36       networkInstance.networkStoreKey = updateNetworkInstanceAction.networkInstance.networkStoreKey;
37       updateServiceValidationCounter(newState, networkInstance['isMissingData'], updateNetworkInstanceAction.networkInstance['isMissingData'], serviceUuid);
38
39       newState.serviceInstance[serviceUuid].networks[updateNetworkInstanceAction.networkModelName] = Object.assign(networkInstance, updateNetworkInstanceAction.networkInstance);
40       return newState;
41     }
42     case NetworkActions.UPDATE_NETWORK_INSTANCE: {
43       const updateNetworkInstanceAction = <UpdateNetworkInstanceAction>action;
44       const serviceUuid = updateNetworkInstanceAction.serviceUuid;
45       let networkStoreKey = updateNetworkInstanceAction.networkStoreKey;
46
47       let newState = _.cloneDeep(state);
48       let networkInstance: NetworkInstance = newState.serviceInstance[serviceUuid].networks[networkStoreKey];
49       updateUniqueNames(networkInstance? networkInstance.instanceName : null, updateNetworkInstanceAction.networkInstance.instanceName, newState.serviceInstance[serviceUuid]);
50
51       networkInstance = networkInstance || new NetworkInstance();
52       updateServiceValidationCounter(newState, networkInstance['isMissingData'], updateNetworkInstanceAction.networkInstance['isMissingData'], serviceUuid);
53
54       newState.serviceInstance[serviceUuid].networks[networkStoreKey] = Object.assign(networkInstance, updateNetworkInstanceAction.networkInstance);
55       return newState;
56     }
57     case NetworkActions.UPDATE_NETWORK_FUNCTION: {
58       let networkFunctionReduxObj = state['networkFunctions'] == undefined ? {} : state['networkFunctions'];
59       networkFunctionReduxObj[(<UpdateNetworkCollectionFunction>action).network_function] = (<UpdateNetworkCollectionFunction>action).networksAccordingToNetworkCollection;
60       Object.assign(state, {'networkFunctions': networkFunctionReduxObj});
61       return Object.assign({}, state);
62     }
63
64     case NetworkActions.DELETE_ACTION_NETWORK_INSTANCE : {
65       return deleteFirstLevel(state, <ActionOnFirstLevel>action,true);
66
67     }
68
69     case NetworkActions.UNDO_DELETE_ACTION_NETWORK_INSTANCE : {
70       let newState = _.cloneDeep(state);
71       let network = newState.serviceInstance[(<ActionOnFirstLevel>action).serviceId].networks[(<ActionOnFirstLevel>action).storeKey];
72       let oldState = network.action;
73       newState.serviceInstance[(<ActionOnFirstLevel>action).serviceId].networks[(<ActionOnFirstLevel>action).storeKey].action = (oldState.split('_')[0]) as ServiceInstanceActions;
74       updateServiceValidationCounter(newState, network['isMissingData'], false , (<ActionOnFirstLevel>action).serviceId);
75       return newState;
76     }
77   }
78 }
79
80 const updateUniqueNames = (oldName : string, newName : string, serviceInstance : ServiceInstance) : void => {
81   let existingNames = serviceInstance.existingNames;
82   if (!_.isNil(oldName) && oldName.toLowerCase() in existingNames) {
83     delete existingNames[oldName.toLowerCase()];
84   }
85   if(!_.isNil(newName)) {
86     existingNames[newName.toLowerCase()] = "";
87   }
88 };
89
90
91
92