/**
* Created by rc2122 on 5/4/2017.
*/
-import { Component, Input, Output, EventEmitter } from "@angular/core";
-import { InputFEModel } from "app/models";
+import { Component, Input, Output, EventEmitter, ViewChildren, QueryList } from "@angular/core";
+import { InputFEModel, PropertyModel, PropertiesGroup, Component as ComponentData } from "app/models";
+import { ModalsHandler } from 'app/utils';
import { ModalService } from "../../../services/modal.service";
import { InstanceFeDetails } from "app/models/instance-fe-details";
import { InstanceFePropertiesMap } from "../../../../models/properties-inputs/property-fe-map";
import { DataTypeService } from "../../../services/data-type.service";
+import { MetadataEntry } from "app/models/metadataEntry";
+import { DynamicElementComponent } from "../../ui/dynamic-element/dynamic-element.component";
@Component({
selector: 'inputs-table',
export class InputsTableComponent {
@Input() inputs: Array<InputFEModel>;
- @Input() instanceNamesMap: Map<string, InstanceFeDetails>;
+ @Input() instanceNamesMap: { [key: string]: InstanceFeDetails };
@Input() readonly: boolean;
@Input() isLoading: boolean;
+ @Input() componentType: string;
+ @Input() showDelete:boolean;
@Output() inputChanged: EventEmitter<any> = new EventEmitter<any>();
@Output() deleteInput: EventEmitter<any> = new EventEmitter<any>();
@Input() fePropertiesMap: InstanceFePropertiesMap;
-
+ @Input() componentInstancePropertyMap: PropertiesGroup;
+ @Input() parentComponent: ComponentData;
+
+ @ViewChildren('metadataViewChildren') public metadataViewChildren: QueryList<DynamicElementComponent>;
+
sortBy: String;
reverse: boolean;
- selectedInputToDelete: InputFEModel;
+ selectedInputToDelete: InputFEModel;
sort = (sortBy) => {
this.reverse = (this.sortBy === sortBy) ? !this.reverse : true;
};
- constructor(private modalService: ModalService, private dataTypeService: DataTypeService){
+ constructor(private modalService: ModalService, private dataTypeService: DataTypeService, private modalsHandler: ModalsHandler){
var x = 5
}
this.inputChanged.emit(input);
};
+ onRequiredChanged = (input: InputFEModel, event) => {
+ this.inputChanged.emit(input);
+ }
+
+ onMetadataKeyChanged = (input: InputFEModel, event, metadataEntry: MetadataEntry) => {
+ let dynamicElementComponent = this.metadataViewChildren.filter(element => element.name == input.name + "_" + metadataEntry.key).pop();
+
+ input.updateMetadataKey(metadataEntry, event.value);
+ this.inputChanged.emit(input);
+
+ var mapKeyError = input.metadataMapKeyError;
+ if(input.metadataMapKeyError){
+ dynamicElementComponent.cmpRef.instance.control.setErrors({mapKeyError});
+ }
+ };
+
+ onMetadataValueChanged = (input: InputFEModel, event, metadataEntry: MetadataEntry) => {
+ input.updateMetadataValue(metadataEntry, event.value);
+ this.inputChanged.emit(input);
+ };
+
+
+ createNewMetadataEntry = (input: InputFEModel): void => {
+ let metadataEntry = new MetadataEntry("", "");
+ input.addMetadataEntry(metadataEntry);
+ this.inputChanged.emit(input);
+ }
+
+ deleteMetadataEntry = (input: InputFEModel, metadataEntry: MetadataEntry) => {
+ input.deleteMetadataEntry(metadataEntry);
+ this.inputChanged.emit(input);
+ }
+
onDeleteInput = () => {
this.deleteInput.emit(this.selectedInputToDelete);
this.modalService.closeCurrentModal();
openDeleteModal = (input: InputFEModel) => {
console.log('exist inputs: ' + this.inputs)
-
-
this.selectedInputToDelete = input;
this.modalService.createActionModal("Delete Input", "Are you sure you want to delete this input?", "Delete", this.onDeleteInput, "Close").instance.open();
}
checkInstanceFePropertiesMapIsFilled(){
return _.keys(this.fePropertiesMap).length > 0
}
+
+ hasInputMetadata(){
+ for(let input of this.inputs){
+ if (input.metadataEntries.length > 0){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public updateProperty = (inputProperty: InputFEModel): void => {
+ let modelProperty : PropertyModel = this.createPropertyModel(inputProperty);
+ if (inputProperty.instanceUniqueId != null && this.componentInstancePropertyMap != null && modelProperty.constraints == null && this.componentInstancePropertyMap[inputProperty.instanceUniqueId]) {
+ this.componentInstancePropertyMap[inputProperty.instanceUniqueId].forEach(tempProperty => {
+ modelProperty.constraints = tempProperty.constraints;
+ });
+ }
+ this.modalsHandler.newOpenEditPropertyModal(modelProperty, [],true, 'component', modelProperty.resourceInstanceUniqueId, this.parentComponent, inputProperty).then(result => {
+ let newInputs : Array<InputFEModel> = [];
+ this.inputs.forEach(input => {
+ if (input.uniqueId != inputProperty.uniqueId) {
+ newInputs.push(input);
+ } else {
+ let newMetadataEntries : Array<MetadataEntry> = [];
+ for (let key of Object.keys(inputProperty.metadata)){
+ newMetadataEntries.push(new MetadataEntry(key, inputProperty.metadata[key]));
+ }
+ inputProperty.metadataEntries = [];
+ inputProperty.metadataEntries = newMetadataEntries;
+ newInputs.push(inputProperty);
+ }
+ });
+ this.inputs = newInputs;
+ });
+ }
+
+ private createPropertyModel(inputproperty: InputFEModel){
+ let propertyModel = new PropertyModel();
+ propertyModel.constraints = inputproperty.constraints;
+ propertyModel.defaultValue = inputproperty.defaultValue;
+ propertyModel.definition = inputproperty.definition;
+ propertyModel.description = inputproperty.description;
+ propertyModel.name = inputproperty.name;
+ propertyModel.parentUniqueId = inputproperty.parentUniqueId;
+ propertyModel.password = inputproperty.password;
+ propertyModel.required = inputproperty.required;
+ propertyModel.schema = inputproperty.schema;
+ propertyModel.schemaType = inputproperty.schemaType;
+ propertyModel.type = inputproperty.type;
+ propertyModel.uniqueId = inputproperty.uniqueId;
+ propertyModel.value = inputproperty.value;
+ propertyModel.getInputValues = inputproperty.getInputValues;
+ propertyModel.parentPropertyType = inputproperty.parentPropertyType;
+ propertyModel.subPropertyInputPath = inputproperty.subPropertyInputPath;
+ propertyModel.getPolicyValues = inputproperty.getPolicyValues;
+ propertyModel.inputPath = inputproperty.inputPath;
+ propertyModel.metadata = inputproperty.metadata;
+ propertyModel.subPropertyToscaFunctions = inputproperty.subPropertyToscaFunctions;
+ propertyModel.ownerId = inputproperty.ownerId;
+ propertyModel.propertyView = true;
+ return propertyModel;
+ }
+
}