merge from ecomp a88f0072 - Modern UI

Issue-ID: VID-378
Change-Id: Ibcb23dd27f550cf32ce2fe0239f0f496ae014ff6
Signed-off-by: Ittay Stern <ittay.stern@att.com>
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/aai.epics.ts b/vid-webpack-master/src/app/shared/services/aaiService/aai.epics.ts
new file mode 100644
index 0000000..a850d55
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/aaiService/aai.epics.ts
@@ -0,0 +1,81 @@
+import {Injectable} from '@angular/core';
+import {combineEpics, createEpicMiddleware, ofType} from 'redux-observable';
+import 'rxjs/add/operator/catch';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/do';
+import 'rxjs/add/operator/startWith';
+import {
+  LOAD_PRODUCT_FAMILIES,
+  LOAD_LCP_TENANT,
+  LOAD_AIC_ZONES,
+  LOAD_CATEGORY_PARAMETERS,
+  LOAD_SERVICE_MDOEL_BY_UUID,
+  LOAD_NETWORK_ACCORDING_TO_NF,
+  LOAD_USER_ID
+} from "./aai.actions";
+import {AaiService} from "./aai.service";
+import {AppState} from "../../store/reducers";
+import {
+  updateAicZones, updateCategoryParameters,
+  updateLcpRegionsAndTenants,
+  updateNetworkCollectionFunction,
+  updateProductFamilies, updateUserId
+} from "../../storeUtil/utils/general/general.actions";
+import {createServiceInstance} from "../../storeUtil/utils/service/service.actions";
+import {delay, mapTo} from "rxjs/operators";
+
+const notFetchedAlready = (state: AppState): boolean => state.service.productFamilies !== null;
+
+@Injectable()
+export class AAIEpics {
+  constructor(private aaiService: AaiService) {
+  }
+
+  public createEpic() {
+    return combineEpics(
+        this.loadProductFamiliesEpic
+      , this.loadLcpTenants
+      , this.loadAicZones
+      , this.loadCategoryParameters
+      , this.loadServiceAccordingToUuid
+      , this.loadNetworkAccordingToNetworkFunction
+      , this.loadUserId)
+  }
+
+  private loadLcpTenants = (action$, store) =>
+   action$.ofType(LOAD_LCP_TENANT)
+    .switchMap((action) => this.aaiService.getLcpRegionsAndTenants(action.subscriberId, action.serviceType)
+    .map(data => updateLcpRegionsAndTenants(data)));
+
+  private loadProductFamiliesEpic = (action$, store) => action$
+    .ofType(LOAD_PRODUCT_FAMILIES)
+    .switchMap(() => this.aaiService.getProductFamilies().map(data => updateProductFamilies(data)));
+
+  private loadCategoryParameters = (action$, store) => action$
+    .ofType(LOAD_CATEGORY_PARAMETERS)
+    .switchMap(() => this.aaiService.getCategoryParameters(null).map(data => updateCategoryParameters(data)));
+
+
+  private loadNetworkAccordingToNetworkFunction = (action$, store) => action$
+    .ofType(LOAD_NETWORK_ACCORDING_TO_NF)
+    .flatMap((action) => this.aaiService.getCRAccordingToNetworkFunctionId(action.networkFunctions, action.cloudOwner, action.cloudRegionId).map((res) =>
+      updateNetworkCollectionFunction(action.networkFunctions, res)));
+
+  private loadServiceAccordingToUuid = (action$, store) => action$
+    .ofType(LOAD_SERVICE_MDOEL_BY_UUID)
+    .switchMap((action) => this.aaiService.getServiceModelById(action.modelId)
+      .map(data => createServiceInstance(action.uuid, data)));
+
+  private loadUserId = (action$, store) => action$
+    .ofType(LOAD_USER_ID)
+    .switchMap(() => this.aaiService.getUserId()
+      .map(res => updateUserId(res)));
+
+
+  private loadAicZones = (action$, store) => action$
+    .ofType(LOAD_AIC_ZONES)
+    .switchMap(() => this.aaiService.getAicZones().map(data => updateAicZones(data)));
+  // .catch(response => of(this.actions.loadFailed(status)))
+  // .startWith(this.actions.loadStarted()));
+
+}