blob: a11f31e805094685b8103b7e9984f1e8d460f7e0 [file] [log] [blame]
import { Action } from 'redux';
import {
CREATE_VF_MODULE,
CreateVFModuleInstanceAction,
DELETE_SERVICE_INSTANCE,
DELETE_VNF_INSTANCE,
DELETE_VNF_MODULE_INSTANCE,
DeleteServiceInstanceAction,
DeleteVfModuleInstanceAction,
DeleteVnfInstanceAction,
UPDATE_AIC_ZONES,
UPDATE_CATEGORY_PARAMETERS,
UPDATE_LCP_REGIONS_AND_TENANTS,
UPDATE_MODEL,
UPDATE_NETWORK_FUNCTION,
UPDATE_PRODUCT_FAMILIES,
UPDATE_SERVICE_INSTANCE,
UPDATE_SERVICE_TYPES,
UPDATE_SUBSCRIBERS,
UPDATE_USER_ID,
UPDATE_VF_MODULE,
UPDATE_VNF_INSTANCE,
UpdateAicZonesAction,
UpdateCategoryParametersAction,
UpdateLcpRegionsAndTenantsAction,
UpdateNetworkCollectionFunction,
UpdateProductFamiliesAction,
UpdateServiceInstanceAction,
UpdateServiceModelAction,
UpdateServiceTypesAction,
UpdateSubscribersAction,
UpdateUserIdAction,
UpdateVFModuleInstanceAction,
UpdateVnfInstanceAction,
} from './service.actions';
import { LcpRegionsAndTenants } from './shared/models/lcpRegionsAndTenants';
import * as _ from 'lodash';
import { ServiceInstance } from './shared/models/serviceInstance';
import { CategoryParams } from './shared/models/categoryParams';
import { SelectOptionInterface } from './shared/models/selectOption';
import { ServiceType } from './shared/models/serviceType';
import { VnfInstance } from './shared/models/vnfInstance';
import { VfModuleMap } from './shared/models/vfModulesMap';
export interface ServiceState {
serviceHierarchy: any;
serviceInstance: { [uuid: string]: ServiceInstance; };
lcpRegionsAndTenants: LcpRegionsAndTenants;
subscribers: SelectOptionInterface[];
productFamilies: any;
serviceTypes: { [subscriberId: string]: ServiceType[]; };
aicZones: SelectOptionInterface[];
categoryParameters: CategoryParams;
}
const initialState: ServiceState = {
serviceHierarchy: {},
serviceInstance: {},
lcpRegionsAndTenants: new LcpRegionsAndTenants(),
subscribers: null,
productFamilies: null,
serviceTypes: {},
aicZones: null,
categoryParameters: new CategoryParams()
};
export const ServiceReducer =
function (state: ServiceState = initialState, action: Action): ServiceState {
switch (action.type) {
case UPDATE_MODEL: {
let uuid = (<UpdateServiceModelAction>action).serviceHierarchy.service.uuid;
state.serviceHierarchy[uuid] = _.cloneDeep((<UpdateServiceModelAction>action).serviceHierarchy);
return Object.assign({}, state);
}
case UPDATE_SERVICE_INSTANCE: {
const updateServiceInstanceAction = <UpdateServiceInstanceAction>action;
const uuid = updateServiceInstanceAction.serviceUuid;
const newState = _.cloneDeep(state);
const serviceInstance: ServiceInstance = newState.serviceInstance[uuid] || new ServiceInstance();
newState.serviceInstance[uuid] = Object.assign(serviceInstance, updateServiceInstanceAction.serviceInstance);
return newState;
}
case UPDATE_VNF_INSTANCE: {
const updateVnfInstanceAction = <UpdateVnfInstanceAction>action;
const serviceUuid = updateVnfInstanceAction.serviceUuid;
const vnfModelName = updateVnfInstanceAction.vnfModelName;
const newState = _.cloneDeep(state);
const vnfInstance: VnfInstance = newState.serviceInstance[serviceUuid].vnfs[vnfModelName] || new VnfInstance();
newState.serviceInstance[serviceUuid].vnfs[vnfModelName] = Object.assign(vnfInstance, updateVnfInstanceAction.vnfInstance);
return newState;
}
case UPDATE_USER_ID: {
const updateUserId : UpdateUserIdAction = <UpdateUserIdAction>action;
// var newState2 = {...state,'userId':updateUserId.userId}
var newState = _.cloneDeep(state);
newState['userId'] = updateUserId.userId;
return newState;
// state = (... {userId:action["userId"]},state]}
}
case UPDATE_VF_MODULE: {
const updateVFModuleInstanceAction = <UpdateVFModuleInstanceAction>action;
const vfInstance = updateVFModuleInstanceAction.vfInstance;
const serviceUuid = updateVFModuleInstanceAction.serviceUuid;
const vfModuleId = updateVFModuleInstanceAction.vfId;
const newState = _.cloneDeep(state);
const vnfs = newState.serviceHierarchy[serviceUuid].vnfs;
const vnfId = getVfModuleParentVnfId(vnfs, vfModuleId);
let vfModulesMap = newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] || new VfModuleMap();
vfModulesMap[vfModuleId] = vfInstance;
newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] = vfModulesMap;
return newState;
}
case CREATE_VF_MODULE: {
const updateVFModuleInstanceAction = <CreateVFModuleInstanceAction>action;
const vfInstance = updateVFModuleInstanceAction.vfInstance;
const serviceUuid = updateVFModuleInstanceAction.serviceUuid;
const vfModuleId = updateVFModuleInstanceAction.vfId;
const index = updateVFModuleInstanceAction.index;
let newState = Object.assign({}, state);
const vnfs = newState.serviceHierarchy[serviceUuid].vnfs;
const vnfId = getVfModuleParentVnfId(vnfs, vfModuleId);
let vfModulesMap = newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] || new VfModuleMap();
let randomId = generateId();
vfModulesMap[vfModuleId + randomId] = vfInstance;
newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] = vfModulesMap;
return newState;
}
case UPDATE_LCP_REGIONS_AND_TENANTS: {
Object.assign(state, (<UpdateLcpRegionsAndTenantsAction>action));
return Object.assign({}, state);
}
case UPDATE_SUBSCRIBERS: {
Object.assign(state, (<UpdateSubscribersAction>action));
return Object.assign({}, state);
}
case UPDATE_AIC_ZONES: {
Object.assign(state, (<UpdateAicZonesAction>action));
return Object.assign({}, state);
}
case UPDATE_PRODUCT_FAMILIES: {
Object.assign(state, (<UpdateProductFamiliesAction>action));
return Object.assign({}, state);
}
case UPDATE_NETWORK_FUNCTION: {
let networkFunctionReduxObj = state["networkFunctions"] == undefined ? {} : state["networkFunctions"];
networkFunctionReduxObj[(<UpdateNetworkCollectionFunction>action).network_function] = (<UpdateNetworkCollectionFunction>action).networksAccordingToNetworkCollection;
Object.assign(state, {"networkFunctions":networkFunctionReduxObj});
return Object.assign({}, state);
}
case UPDATE_SERVICE_TYPES: {
let subscriberId = (<UpdateServiceTypesAction>action).subscriberId;
let serviceTypes = (<UpdateServiceTypesAction>action).serviceTypes;
state.serviceTypes[subscriberId] = serviceTypes;
return Object.assign({}, state);
}
case UPDATE_CATEGORY_PARAMETERS: {
Object.assign(state, (<UpdateCategoryParametersAction>action));
return Object.assign({}, state);
}
case DELETE_SERVICE_INSTANCE: {
const uuid = (<DeleteServiceInstanceAction>action).serviceUuid;
if (state.serviceHierarchy[uuid]) {
let newState = _.omit(state, ['serviceInstance[' + uuid + ']']);
return Object.assign({}, state, newState);
}
return Object.assign({}, state);
}
case DELETE_VNF_INSTANCE: {
const actionData =(<DeleteVnfInstanceAction>action);
if(state.serviceInstance[actionData.serviceModelId]){
delete state.serviceInstance[actionData.serviceModelId].vnfs[actionData.modelName];
}
return Object.assign({}, state);
}
case DELETE_VNF_MODULE_INSTANCE: {
const actionData =(<DeleteVfModuleInstanceAction>action);
if(state.serviceInstance[actionData.serviceModelId]){
delete state.serviceInstance[actionData.serviceModelId].vnfs[actionData.vfName].vfModules[actionData.modelName];
}
return Object.assign({}, state);
}
default:
return Object.assign({}, state);
}
};
const generateId = () => {
return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5);
};
const getVfModuleParentVnfId = (vnfs: object, vfModuleId: string) => {
let vnfId = undefined;
_.forOwn(vnfs, (value, key) => {
if (vnfs[key].vfModules && vnfs[key].vfModules[vfModuleId]) {
vnfId = vnfs[key].modelCustomizationName;
return false;
}
});
return vnfId;
};