/*- * ============LICENSE_START======================================================= * SDC * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= */ 'use strict'; import * as _ from "lodash"; import {IWorkspaceViewModelScope} from "app/view-models/workspace/workspace-view-model"; import {ComponentInstance, InstancesInputsOrPropertiesMapData, Resource, PropertyModel, InputModel} from "app/models"; import {ModalsHandler} from "app/utils"; export interface IInputsViewModelScope extends IWorkspaceViewModelScope { InstanceInputsProperties:InstancesInputsOrPropertiesMapData; //this is tha map object that hold the selected inputs and the inputs we already used vfInstancesList:Array; component:Resource; onArrowPressed():void; getInputPropertiesForInstance(instanceId:string, instance:ComponentInstance):ng.IPromise ; loadInputPropertiesForInstance(instanceId:string, input:InputModel):ng.IPromise ; openEditValueModal(input:InputModel):void; openEditPropertyModal(property:PropertyModel):void; } export class ResourceInputsViewModel { static '$inject' = [ '$scope', '$q', 'ModalsHandler' ]; constructor(private $scope:IInputsViewModelScope, private $q:ng.IQService, private ModalsHandler:ModalsHandler) { this.initScope(); } private initScope = ():void => { this.$scope.InstanceInputsProperties = new InstancesInputsOrPropertiesMapData(); this.$scope.vfInstancesList = this.$scope.component.componentInstances; // Need to cast all inputs to InputModel for the search to work let tmpInputs:Array = new Array(); _.each(this.$scope.component.inputs, (input):void => { tmpInputs.push(new InputModel(input)); }); this.$scope.component.inputs = tmpInputs; // This function is not supported for resource //this.$scope.component.getComponentInputs(); /* * When clicking on instance input in the left or right table, this function will load all properties of the selected input */ this.$scope.getInputPropertiesForInstance = (instanceId:string, instance:ComponentInstance):ng.IPromise => { let deferred = this.$q.defer(); instance.properties = this.$scope.component.componentInstancesProperties[instanceId]; deferred.resolve(true); return deferred.promise; }; /* * When clicking on instance input in the left or right table, this function will load all properties of the selected input */ this.$scope.loadInputPropertiesForInstance = (instanceId:string, input:InputModel):ng.IPromise => { let deferred = this.$q.defer(); let onSuccess = (properties:Array) => { input.properties = properties; deferred.resolve(true); }; let onError = () => { deferred.resolve(false) }; if (!input.properties) { this.$scope.component.getComponentInstanceInputProperties(instanceId, input.uniqueId).then(onSuccess, onError); } else { deferred.resolve(true); } return deferred.promise; }; /* * When pressing the arrow, we create service inputs from the inputs selected */ this.$scope.onArrowPressed = ():void => { let onSuccess = (inputsCreated:Array) => { //disabled all the inputs in the left table _.forEach(this.$scope.InstanceInputsProperties, (properties:Array) => { _.forEach(properties, (property:PropertyModel) => { property.isAlreadySelected = true; }); }); // Adding color to the new inputs (right table) _.forEach(inputsCreated, (input) => { input.isNew = true; }); // Removing color to the new inputs (right table) setTimeout(() => { _.forEach(inputsCreated, (input) => { input.isNew = false; }); this.$scope.$apply(); }, 3000); }; this.$scope.component.createInputsFormInstances(this.$scope.InstanceInputsProperties).then(onSuccess); }; this.$scope.openEditValueModal = (input:InputModel) => { this.ModalsHandler.openEditInputValueModal(input); }; this.$scope.openEditPropertyModal = (property:PropertyModel):void => { this.ModalsHandler.openEditPropertyModal(property, this.$scope.component, this.$scope.component.componentInstancesProperties[property.resourceInstanceUniqueId], false).then(() => { }); } } }