[sdc] update code of sdc
[sdc.git] / catalog-ui / src / app / ng2 / components / properties-table / properties-table.component.ts
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';
6
7 @Component({
8     selector: 'properties-table',
9     templateUrl: './properties-table.component.html',
10     styleUrls: ['./properties-table.component.less']
11 })
12 export class PropertiesTableComponent {
13
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;
21     
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>();
26
27     feInstancesNames: Array<string>;
28
29     constructor ( private propertiesService:PropertiesService ){
30     }
31
32     /**
33      * Update feInstancesNames when fePropertiesMap: InstanceFePropertiesMap change (after getting response from server)
34      */
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;
41             }
42         }
43     }
44
45     propValueChanged = (property) => {
46         !property.isDeclared && this.valueChanged.emit(property);
47     };
48
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);
55     };
56
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);
61     }
62
63     propertyChecked = (prop: PropertyFEModel, childPropName?: string) => {
64         let isChecked: boolean = (!childPropName)? prop.isSelected : prop.flattenedChildren.find(prop => prop.propertiesName == childPropName).isSelected;
65
66         if (!isChecked) {
67             this.propertiesService.undoDisableRelatedProperties(prop, childPropName);
68         } else {
69             this.propertiesService.disableRelatedProperties(prop, childPropName);
70         }
71         this.updateCheckedPropertyCount.emit(isChecked);
72     }
73
74 }
75
76 export class PropertyRowSelectedEvent {
77     propertyModel:PropertyFEModel | DerivedFEProperty;
78     instanceName:string;
79     constructor ( propertyModel:PropertyFEModel | DerivedFEProperty, instanceName:string ){
80         this.propertyModel = propertyModel;
81         this.instanceName = instanceName;
82     }
83 }
84