1 import { Component, Input, Output, EventEmitter, SimpleChanges, ViewChild, ElementRef } from "@angular/core";
2 import { trigger, state, style, transition, animate} from '@angular/core';
3 import {PropertyFEModel, DerivedFEProperty, DerivedPropertyType, InstanceFePropertiesMap} from "app/models";
4 import {PropertiesService} from "../../services/properties.service";
5 import { DynamicElementComponent } from 'app/ng2/components/dynamic-element/dynamic-element.component';
6 import { KeysPipe } from 'app/ng2/pipes/keys.pipe';
9 selector: 'properties-table',
10 templateUrl: './properties-table.component.html',
11 styleUrls: ['./properties-table.component.less'],
12 animations: [trigger('fadeIn', [transition(':enter', [style({ opacity: '0' }), animate('.3s ease-out', style({ opacity: '1' }))]) ])]
14 export class PropertiesTableComponent {
16 @Input() fePropertiesMap: InstanceFePropertiesMap;
17 @Input() selectedPropertyId: string;
18 @Input() displayDeleteButton: boolean;
19 @Input() propertyNameSearchText:string;
20 @Input() searchTerm:string;
21 @Input() readonly:boolean;
22 @Input() isLoading:boolean;
24 @Output() valueChanged: EventEmitter<any> = new EventEmitter<any>();
25 @Output() selectPropertyRow: EventEmitter<PropertyRowSelectedEvent> = new EventEmitter<PropertyRowSelectedEvent>();
26 @Output() updateCheckedPropertyCount: EventEmitter<boolean> = new EventEmitter<boolean>();
27 //@Output() selectInstanceRow: EventEmitter<string> = new EventEmitter<string>();
29 feInstancesNames: Array<string>;
31 constructor ( private propertiesService:PropertiesService ){
35 * Update feInstancesNames when fePropertiesMap: InstanceFePropertiesMap change (after getting response from server)
37 ngOnChanges(changes: SimpleChanges) {
38 if (changes['fePropertiesMap']) {
39 if (changes['fePropertiesMap'].currentValue) {
40 let keysPipe = new KeysPipe();
41 let fiteredArr = keysPipe.transform(changes['fePropertiesMap'].currentValue,[]);
42 this.feInstancesNames = fiteredArr;
47 propValueChanged = (property) => {
48 !property.isDeclared && this.valueChanged.emit(property);
51 // Click on main row (row of propertyFEModel)
52 onClickPropertyRow = (property:PropertyFEModel, instanceName:string, event?) => {
53 //event && event.stopPropagation();
54 this.selectedPropertyId = property.name;
55 let propertyRowSelectedEvent:PropertyRowSelectedEvent = new PropertyRowSelectedEvent(property, instanceName);
56 this.selectPropertyRow.emit(propertyRowSelectedEvent);
59 // Click on inner row (row of DerivedFEProperty)
60 onClickPropertyInnerRow = (property:DerivedFEProperty, instanceName:string) => {
61 let propertyRowSelectedEvent:PropertyRowSelectedEvent = new PropertyRowSelectedEvent(property, instanceName);
62 this.selectPropertyRow.emit(propertyRowSelectedEvent);
65 propertyChecked = (prop: PropertyFEModel, childPropName?: string) => {
66 let isChecked: boolean = (!childPropName)? prop.isSelected : prop.flattenedChildren.find(prop => prop.propertiesName == childPropName).isSelected;
68 console.log(isChecked, childPropName, prop);
70 this.propertiesService.undoDisableRelatedProperties(prop, childPropName);
72 this.propertiesService.disableRelatedProperties(prop, childPropName);
74 this.updateCheckedPropertyCount.emit(isChecked);
79 export class PropertyRowSelectedEvent {
80 propertyModel:PropertyFEModel | DerivedFEProperty;
82 constructor ( propertyModel:PropertyFEModel | DerivedFEProperty, instanceName:string ){
83 this.propertyModel = propertyModel;
84 this.instanceName = instanceName;