Can't undo delete the second vfModule in drawing board - fix.
[vid.git] / vid-webpack-master / src / app / shared / storeUtil / utils / vfModule / vfModule.reducers.ts
index f3636ff..8efecf2 100644 (file)
@@ -1,15 +1,16 @@
 import {Action} from "redux";
 import * as _ from "lodash";
 import {
-  CreateVFModuleInstanceAction, DeleteActionVfModuleInstanceAction,
-  DeleteVfModuleInstanceAction, UndoDeleteActionVfModuleInstanceAction, UpdateVFModluePosition,
-  UpdateVFModuleInstanceAction,
-  VfModuleActions
+  CreateVFModuleInstanceAction, DeleteActionVfModuleInstanceAction, DeleteVFModuleField,
+  DeleteVfModuleInstanceAction, UndoDeleteActionVfModuleInstanceAction, UpdateVFModluePosition, UpdateVFModuleField,
+  UpdateVFModuleInstanceAction, UpgradeVfModuleInstanceAction,
+  VfModuleActions,
 } from "./vfModule.actions";
 import {ServiceInstance} from "../../../models/serviceInstance";
 import {VfModuleMap} from "../../../models/vfModulesMap";
 import {ServiceState} from "../main.reducer";
 import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+import {updateServiceValidationCounter} from "../reducersHelper";
 
 
 export function vfModuleReducer(state: ServiceState , action: Action) : ServiceState{
@@ -25,6 +26,7 @@ export function vfModuleReducer(state: ServiceState , action: Action) : ServiceS
 
       let vfModulesMap = newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey].vfModules[vfModuleId] || new VfModuleMap();
       let randomId = generateId();
+      vfInstance.action = ServiceInstanceActions.Create;
       vfModulesMap[vfModuleId + randomId] = vfInstance;
       updateUniqueNames(null, vfInstance.instanceName, newState.serviceInstance[serviceUuid]);
       updateUniqueNames(null, vfInstance.volumeGroupName, newState.serviceInstance[serviceUuid]);
@@ -68,34 +70,29 @@ export function vfModuleReducer(state: ServiceState , action: Action) : ServiceS
       return Object.assign({}, state);
     }
     case VfModuleActions.DELETE_ACTION_VF_MODULE_INSTANCE : {
+      const deleteAction = (<DeleteActionVfModuleInstanceAction>action);
       let newState = _.cloneDeep(state);
-      let vfModules = newState.serviceInstance[(<DeleteActionVfModuleInstanceAction>action).serviceId].vnfs[(<DeleteActionVfModuleInstanceAction>action).vnfStoreKey].vfModules;
-
-      for(let key in vfModules){
-        let firstKey = Object.keys(vfModules[key])[0];
-        if(firstKey === (<DeleteActionVfModuleInstanceAction>action).dynamicModelName){
-          let oldAction = newState.serviceInstance[(<DeleteActionVfModuleInstanceAction>action).serviceId].vnfs[(<DeleteActionVfModuleInstanceAction>action).vnfStoreKey].vfModules[key][firstKey].action;
-          if(oldAction === ServiceInstanceActions.None_Delete || oldAction === ServiceInstanceActions.Update_Delete) return newState;
-          newState.serviceInstance[(<DeleteActionVfModuleInstanceAction>action).serviceId].vnfs[(<DeleteActionVfModuleInstanceAction>action).vnfStoreKey].vfModules[key][firstKey].action = (oldAction + '_Delete') as ServiceInstanceActions;
-          updateIsMissingDataOnDeleteVFModule(newState, (<UndoDeleteActionVfModuleInstanceAction>action).serviceId, (<UndoDeleteActionVfModuleInstanceAction>action).vnfStoreKey, key);
-          return newState;
-        }
-      }
+      let vfModule = newState.serviceInstance[deleteAction.serviceId].vnfs[deleteAction.vnfStoreKey]
+        .vfModules[deleteAction.vfModuleModelName][deleteAction.dynamicModelName];
+      let oldAction = vfModule.action;
+      if (oldAction === ServiceInstanceActions.None_Delete || oldAction === ServiceInstanceActions.Update_Delete) return newState;
+      newState.serviceInstance[deleteAction.serviceId].vnfs[deleteAction.vnfStoreKey]
+        .vfModules[deleteAction.vfModuleModelName][deleteAction.dynamicModelName].action = (oldAction + '_Delete') as ServiceInstanceActions;
+      setLcpCloudRegionIdAndTenantIdFromVnf(newState, deleteAction.serviceId, deleteAction.vnfStoreKey, deleteAction.vfModuleModelName, deleteAction.dynamicModelName);
+      updateIsMissingDataOnDeleteVFModule(newState, deleteAction.serviceId, deleteAction.vnfStoreKey, deleteAction.vfModuleModelName);
+
       return newState;
     }
     case VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE : {
+      const undoDeleteAction = (<UndoDeleteActionVfModuleInstanceAction>action);
       let newState = _.cloneDeep(state);
-      let vfModules = newState.serviceInstance[(<DeleteActionVfModuleInstanceAction>action).serviceId].vnfs[(<DeleteActionVfModuleInstanceAction>action).vnfStoreKey].vfModules;
-
-      for(let key in vfModules){
-        let firstKey = Object.keys(vfModules[key])[0];
-        if(firstKey === (<UndoDeleteActionVfModuleInstanceAction>action).dynamicModelName){
-          let oldAction = newState.serviceInstance[(<UndoDeleteActionVfModuleInstanceAction>action).serviceId].vnfs[(<UndoDeleteActionVfModuleInstanceAction>action).vnfStoreKey].vfModules[key][firstKey].action;
-          newState.serviceInstance[(<UndoDeleteActionVfModuleInstanceAction>action).serviceId].vnfs[(<UndoDeleteActionVfModuleInstanceAction>action).vnfStoreKey].vfModules[key][firstKey].action = (oldAction.split('_')[0]) as ServiceInstanceActions;
-          updateIsMissingDataOnDeleteVFModule(newState, (<UndoDeleteActionVfModuleInstanceAction>action).serviceId, (<UndoDeleteActionVfModuleInstanceAction>action).vnfStoreKey, key);
-          return newState;
-        }
-      }
+      let vfModule = newState.serviceInstance[undoDeleteAction.serviceId].vnfs[undoDeleteAction.vnfStoreKey]
+        .vfModules[undoDeleteAction.vfModuleModelName][undoDeleteAction.dynamicModelName];
+
+          let oldAction = vfModule.action;
+          newState.serviceInstance[undoDeleteAction.serviceId].vnfs[undoDeleteAction.vnfStoreKey]
+            .vfModules[undoDeleteAction.vfModuleModelName][undoDeleteAction.dynamicModelName].action = (oldAction.split('_')[0]) as ServiceInstanceActions;
+          updateIsMissingDataOnDeleteVFModule(newState, undoDeleteAction.serviceId, undoDeleteAction.vnfStoreKey, undoDeleteAction.vfModuleModelName);
       return newState;
     }
 
@@ -109,6 +106,60 @@ export function vfModuleReducer(state: ServiceState , action: Action) : ServiceS
       newState.serviceInstance[serviceUuid].vnfs[updateVFModluePosition.vnfStoreKey].vfModules[modelName][dynamicModelName].position = updateVFModluePosition.node.position;
       return newState;
     }
+
+    case VfModuleActions.UPGRADE_VFMODULE : {
+      let clonedState = _.cloneDeep(state);
+      const upgradeAction = (<UpgradeVfModuleInstanceAction>action);
+      let oldAction = clonedState
+        .serviceInstance[upgradeAction.serviceId]
+        .vnfs[upgradeAction.vnfStoreKey]
+        .vfModules[upgradeAction.modelName][upgradeAction.dynamicModelName]
+        .action;
+      if(!_.isNil(oldAction) && oldAction.includes("Upgrade")) {
+        return clonedState;
+      }
+      clonedState.serviceInstance[upgradeAction.serviceId]
+        .vnfs[upgradeAction.vnfStoreKey]
+        .vfModules[upgradeAction.modelName][upgradeAction.dynamicModelName]
+        .action = (`${oldAction}_Upgrade`) as ServiceInstanceActions;
+      return clonedState;
+    }
+    case VfModuleActions.UNDO_UPGRADE_VFMODULE_ACTION : {
+      let clonedState = _.cloneDeep(state);
+      const upgradeAction = (<UpgradeVfModuleInstanceAction>action);
+      let oldAction = clonedState
+        .serviceInstance[upgradeAction.serviceId]
+        .vnfs[upgradeAction.vnfStoreKey]
+        .vfModules[upgradeAction.modelName][upgradeAction.dynamicModelName]
+        .action;
+      if(!_.isNil(oldAction) && oldAction.includes("Upgrade")) {
+        clonedState.serviceInstance[upgradeAction.serviceId]
+          .vnfs[upgradeAction.vnfStoreKey]
+          .vfModules[upgradeAction.modelName][upgradeAction.dynamicModelName]
+          .action = ServiceInstanceActions.None;
+      }
+      return clonedState;
+    }
+    case VfModuleActions.UPDATE_VFMODULE_FEILD : {
+      let clonedState = _.cloneDeep(state);
+      let updateFieldAction =  <UpdateVFModuleField> action;
+
+        clonedState.serviceInstance[updateFieldAction.serviceId]
+          .vnfs[updateFieldAction.vnfStoreKey]
+          .vfModules[updateFieldAction.modelName][updateFieldAction.dynamicModelName][updateFieldAction.fieldName] =  updateFieldAction.fieldValue;
+
+      return clonedState;
+    }
+    case VfModuleActions.DELETE_VFMODULE_FIELD : {
+      let clonedState = _.cloneDeep(state);
+      let deleteAction =  <DeleteVFModuleField> action;
+
+      delete clonedState.serviceInstance[deleteAction.serviceId]
+        .vnfs[deleteAction.vnfStoreKey]
+        .vfModules[deleteAction.modelName][deleteAction.dynamicModelName][deleteAction.deleteFieldName];
+
+      return clonedState;
+    }
   }
 }
 
@@ -121,6 +172,13 @@ const updateIsMissingDataOnDeleteVFModule = (state: any, serviceModelId: string,
   });
 };
 
+const  setLcpCloudRegionIdAndTenantIdFromVnf = (state: any, serviceModelId: string, vnfStoreKey: string, key: string, firstKey: string) :void => {
+  let tenantId = state.serviceInstance[serviceModelId].vnfs[vnfStoreKey].tenantId;
+  let lcpCloudRegion = state.serviceInstance[serviceModelId].vnfs[vnfStoreKey].lcpCloudRegionId;
+
+  state.serviceInstance[serviceModelId].vnfs[vnfStoreKey].vfModules[key][firstKey].tenantId = tenantId;
+  state.serviceInstance[serviceModelId].vnfs[vnfStoreKey].vfModules[key][firstKey].lcpCloudRegionId = lcpCloudRegion;
+}
 
 const updateUniqueNames = (oldName : string, newName : string, serviceInstance : ServiceInstance) : void => {
   let existingNames = serviceInstance.existingNames;
@@ -132,13 +190,6 @@ const updateUniqueNames = (oldName : string, newName : string, serviceInstance :
   }
 };
 
-const updateServiceValidationCounter = (newState: any, oldValidationState: boolean, newValidationState: boolean, serviceUuid: string) => {
-  if (oldValidationState && !newValidationState) {
-    newState.serviceInstance[serviceUuid].validationCounter--;
-  } else if (!oldValidationState && newValidationState) {
-    newState.serviceInstance[serviceUuid].validationCounter++;
-  }
-};
 
 const generateId = () => {
   return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5);