1 import {Action} from "redux";
2 import {PnfInstance} from "../../../models/pnfInstance";
4 CreatePnfInstanceAction,
5 RemovePnfInstanceAction,
6 UpdatePnfInstanceAction, UpdatePnfPosition,
8 } from "./pnf.actions";
9 import * as _ from "lodash";
10 import {ServiceState} from "../main.reducer";
11 import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
12 import {deleteFirstLevel, updateServiceValidationCounter, calculateNextUniqueModelName, updateUniqueNames} from "../reducersHelper";
13 import {ActionOnFirstLevel} from "../firstLevel/firstLevel.actions";
15 export function pnfReducer(state: ServiceState, action: Action): ServiceState {
16 switch (action.type) {
17 case PNFActions.CREATE_PNF_INSTANCE: {
18 const updatePnfInstanceAction = <CreatePnfInstanceAction>action;
19 const serviceUuid = updatePnfInstanceAction.serviceUuid;
20 let pnfModelName = updatePnfInstanceAction.pnfModelName;
21 let newState = _.cloneDeep(state);
23 updatePnfInstanceAction.pnfInstance.originalName = pnfModelName;
24 updatePnfInstanceAction.pnfModelName = calculateNextUniqueModelName(pnfModelName, serviceUuid, newState, 'pnfs');
26 let pnfInstance: PnfInstance = newState.serviceInstance[serviceUuid].pnfs[pnfModelName];
27 pnfInstance = new PnfInstance();
28 updatePnfInstanceAction.pnfInstance.pnfStoreKey = updatePnfInstanceAction.pnfModelName;
29 updatePnfInstanceAction.pnfInstance.originalName = pnfModelName;
30 pnfInstance.originalName = updatePnfInstanceAction.pnfInstance.originalName;
31 pnfInstance.pnfStoreKey = updatePnfInstanceAction.pnfInstance.pnfStoreKey;
32 updateServiceValidationCounter(newState, pnfInstance['isMissingData'], updatePnfInstanceAction.pnfInstance['isMissingData'], serviceUuid);
34 newState.serviceInstance[serviceUuid].pnfs[updatePnfInstanceAction.pnfModelName] = Object.assign(pnfInstance, updatePnfInstanceAction.pnfInstance);
38 case PNFActions.UPDATE_PNF_INSTANCE: {
39 const updatePnfInstanceAction = <UpdatePnfInstanceAction>action;
40 const serviceUuid = updatePnfInstanceAction.serviceUuid;
41 let pnfStoreKey = updatePnfInstanceAction.pnfStoreKey;
43 let newState = _.cloneDeep(state);
44 let pnfInstance: PnfInstance = newState.serviceInstance[serviceUuid].pnfs[pnfStoreKey];
45 let oldInstanceName = pnfInstance ? pnfInstance.instanceName : null;
46 updateUniqueNames(oldInstanceName, updatePnfInstanceAction.pnfInstance.instanceName, newState.serviceInstance[serviceUuid]);
48 pnfInstance = pnfInstance || new PnfInstance();
49 updateServiceValidationCounter(newState, pnfInstance['isMissingData'], updatePnfInstanceAction.pnfInstance['isMissingData'], serviceUuid);
51 newState.serviceInstance[serviceUuid].pnfs[pnfStoreKey] = Object.assign(pnfInstance, updatePnfInstanceAction.pnfInstance);
55 case PNFActions.DELETE_ACTION_PNF_INSTANCE : {
56 return deleteFirstLevel(state, <ActionOnFirstLevel>action,true);
59 case PNFActions.UNDO_DELETE_ACTION_PNF_INSTANCE : {
60 let newState = _.cloneDeep(state);
61 let pnf = newState.serviceInstance[(<ActionOnFirstLevel>action).serviceId].pnfs[(<ActionOnFirstLevel>action).storeKey];
62 let oldState = pnf.action;
63 newState.serviceInstance[(<ActionOnFirstLevel>action).serviceId].pnfs[(<ActionOnFirstLevel>action).storeKey].action = (oldState.split('_')[0]) as ServiceInstanceActions;
64 updateServiceValidationCounter(newState, pnf['isMissingData'], false, (<ActionOnFirstLevel>action).serviceId);
68 case PNFActions.REMOVE_PNF_INSTANCE : {
69 let newState = _.cloneDeep(state);
70 let pnfInstance = newState.serviceInstance[(<RemovePnfInstanceAction>action).serviceId].pnfs[(<RemovePnfInstanceAction>action).pnfStoreKey];
71 updateServiceValidationCounter(newState, pnfInstance['isMissingData'], false, (<RemovePnfInstanceAction>action).serviceId);
72 delete newState.serviceInstance[(<RemovePnfInstanceAction>action).serviceId].pnfs[(<RemovePnfInstanceAction>action).pnfStoreKey];
76 case PNFActions.UPDATE_PNF_POSITION : {
77 let newState = _.cloneDeep(state);
78 newState.serviceInstance[(<UpdatePnfPosition>action).instanceId]
79 .pnfs[(<UpdatePnfPosition>action).pnfStoreKey]
80 .position = (<UpdatePnfPosition>action).node.position;