New Angular UI from 1806

Change-Id: I39c160db0e0a6ec2e587ccf007ee1b23c6a08666
Issue-ID: VID-208
Signed-off-by: Sonsino, Ofir (os0695) <os0695@intl.att.com>
diff --git a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.ts b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.ts
new file mode 100644
index 0000000..57dc4b4
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.ts
@@ -0,0 +1,36 @@
+import {Injectable} from '@angular/core';
+import * as _ from "lodash";
+import {ServicePlanningService} from "../../services/service-planning.service";
+
+@Injectable()
+export class AvailableModelsTreeService {
+  constructor(private _servicePlanningService: ServicePlanningService) {
+  }
+
+  shouldShowAddIcon(node: any, serviceHierarchy: any, serviceModelId: string, currentNodeCount: number): boolean {
+    let maxNodes: number = 1;
+    if (node.data.children !== null && node.data.children.length == 0) {
+      let vnfModules = serviceHierarchy[serviceModelId].vfModules;
+      if (vnfModules[node.data.name]) {
+        maxNodes = vnfModules[node.data.name].properties.maxCountInstances || 1;
+      }
+    }
+    return !node.data.disabled && currentNodeCount < maxNodes
+  }
+
+  shouldOpenDialog(type: string, dynamicInputs: any, userProvidedNaming: boolean): boolean {
+    if (userProvidedNaming || this._servicePlanningService.requiredFields[type].length > 0) {
+      return true;
+    }
+
+    if (dynamicInputs) {
+      for(let input of dynamicInputs) {
+        if (input.isRequired && _.isEmpty(input.value)) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+}