[SDC-29] rebase continue work to align source
[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 { 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';
7
8 @Component({
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' }))]) ])]
13 })
14 export class PropertiesTableComponent {
15
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;
23     
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>();
28
29     feInstancesNames: Array<string>;
30
31     constructor ( private propertiesService:PropertiesService ){
32     }
33
34     /**
35      * Update feInstancesNames when fePropertiesMap: InstanceFePropertiesMap change (after getting response from server)
36      */
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;
43             }
44         }
45     }
46
47     propValueChanged = (property) => {
48         !property.isDeclared && this.valueChanged.emit(property);
49     };
50
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);
57     };
58
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);
63     }
64
65     propertyChecked = (prop: PropertyFEModel, childPropName?: string) => {
66         let isChecked: boolean = (!childPropName)? prop.isSelected : prop.flattenedChildren.find(prop => prop.propertiesName == childPropName).isSelected;
67
68         console.log(isChecked, childPropName, prop);
69         if (!isChecked) {
70             this.propertiesService.undoDisableRelatedProperties(prop, childPropName);
71         } else {
72             this.propertiesService.disableRelatedProperties(prop, childPropName);
73         }
74         this.updateCheckedPropertyCount.emit(isChecked);
75     }
76
77 }
78
79 export class PropertyRowSelectedEvent {
80     propertyModel:PropertyFEModel | DerivedFEProperty;
81     instanceName:string;
82     constructor ( propertyModel:PropertyFEModel | DerivedFEProperty, instanceName:string ){
83         this.propertyModel = propertyModel;
84         this.instanceName = instanceName;
85     }
86 }
87