1 import {Action} from "redux";
2 import * as _ from "lodash";
3 import {NetworkInstance} from "../../../models/networkInstance";
5 CreateNetworkInstanceAction,
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";
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;
26 let newState = _.cloneDeep(state);
28 updateNetworkInstanceAction.networkInstance.originalName = networkModelName;
29 updateNetworkInstanceAction.networkModelName = calculateNextUniqueModelName(networkModelName, serviceUuid, newState, 'networks');
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);
39 newState.serviceInstance[serviceUuid].networks[updateNetworkInstanceAction.networkModelName] = Object.assign(networkInstance, updateNetworkInstanceAction.networkInstance);
42 case NetworkActions.UPDATE_NETWORK_INSTANCE: {
43 const updateNetworkInstanceAction = <UpdateNetworkInstanceAction>action;
44 const serviceUuid = updateNetworkInstanceAction.serviceUuid;
45 let networkStoreKey = updateNetworkInstanceAction.networkStoreKey;
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]);
51 networkInstance = networkInstance || new NetworkInstance();
52 updateServiceValidationCounter(newState, networkInstance['isMissingData'], updateNetworkInstanceAction.networkInstance['isMissingData'], serviceUuid);
54 newState.serviceInstance[serviceUuid].networks[networkStoreKey] = Object.assign(networkInstance, updateNetworkInstanceAction.networkInstance);
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);
64 case NetworkActions.DELETE_ACTION_NETWORK_INSTANCE : {
65 return deleteFirstLevel(state, <ActionOnFirstLevel>action,true);
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);
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()];
85 if(!_.isNil(newName)) {
86 existingNames[newName.toLowerCase()] = "";