1 import { Component, Input, Output, EventEmitter, SimpleChanges, ViewChild, ElementRef } from "@angular/core";
2 import {PropertyFEModel, DerivedFEProperty, DerivedPropertyType, InstanceFePropertiesMap} from "app/models";
3 import {PropertiesService} from "../../services/properties.service";
4 import { DynamicElementComponent } from 'app/ng2/components/dynamic-element/dynamic-element.component';
5 import { KeysPipe } from 'app/ng2/pipes/keys.pipe';
8 selector: 'properties-table',
9 templateUrl: './properties-table.component.html',
10 styleUrls: ['./properties-table.component.less']
12 export class PropertiesTableComponent {
14 @Input() fePropertiesMap: InstanceFePropertiesMap;
15 @Input() selectedPropertyId: string;
16 @Input() displayDeleteButton: boolean;
17 @Input() propertyNameSearchText:string;
18 @Input() searchTerm:string;
19 @Input() readonly:boolean;
20 @Input() isLoading:boolean;
22 @Output() valueChanged: EventEmitter<any> = new EventEmitter<any>();
23 @Output() selectPropertyRow: EventEmitter<PropertyRowSelectedEvent> = new EventEmitter<PropertyRowSelectedEvent>();
24 @Output() updateCheckedPropertyCount: EventEmitter<boolean> = new EventEmitter<boolean>();
25 //@Output() selectInstanceRow: EventEmitter<string> = new EventEmitter<string>();
27 feInstancesNames: Array<string>;
29 constructor ( private propertiesService:PropertiesService ){
33 * Update feInstancesNames when fePropertiesMap: InstanceFePropertiesMap change (after getting response from server)
35 ngOnChanges(changes: SimpleChanges) {
36 if (changes['fePropertiesMap']) {
37 if (changes['fePropertiesMap'].currentValue) {
38 let keysPipe = new KeysPipe();
39 let fiteredArr = keysPipe.transform(changes['fePropertiesMap'].currentValue,[]);
40 this.feInstancesNames = fiteredArr;
45 propValueChanged = (property) => {
46 !property.isDeclared && this.valueChanged.emit(property);
49 // Click on main row (row of propertyFEModel)
50 onClickPropertyRow = (property:PropertyFEModel, instanceName:string, event?) => {
51 //event && event.stopPropagation();
52 this.selectedPropertyId = property.name;
53 let propertyRowSelectedEvent:PropertyRowSelectedEvent = new PropertyRowSelectedEvent(property, instanceName);
54 this.selectPropertyRow.emit(propertyRowSelectedEvent);
57 // Click on inner row (row of DerivedFEProperty)
58 onClickPropertyInnerRow = (property:DerivedFEProperty, instanceName:string) => {
59 let propertyRowSelectedEvent:PropertyRowSelectedEvent = new PropertyRowSelectedEvent(property, instanceName);
60 this.selectPropertyRow.emit(propertyRowSelectedEvent);
63 propertyChecked = (prop: PropertyFEModel, childPropName?: string) => {
64 let isChecked: boolean = (!childPropName)? prop.isSelected : prop.flattenedChildren.find(prop => prop.propertiesName == childPropName).isSelected;
67 this.propertiesService.undoDisableRelatedProperties(prop, childPropName);
69 this.propertiesService.disableRelatedProperties(prop, childPropName);
71 this.updateCheckedPropertyCount.emit(isChecked);
76 export class PropertyRowSelectedEvent {
77 propertyModel:PropertyFEModel | DerivedFEProperty;
79 constructor ( propertyModel:PropertyFEModel | DerivedFEProperty, instanceName:string ){
80 this.propertyModel = propertyModel;
81 this.instanceName = instanceName;