re base code
[sdc.git] / catalog-ui / src / app / ng2 / components / logic / properties-table / properties-table.component.ts
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 import { Component, Input, Output, EventEmitter} from "@angular/core";
22 import {PropertyFEModel, DerivedFEProperty, InstanceFePropertiesMap} from "app/models";
23 import {PropertiesService} from "../../../services/properties.service";
24 import { InstanceFeDetails } from "../../../../models/instance-fe-details";
25
26 @Component({
27     selector: 'properties-table',
28     templateUrl: './properties-table.component.html',
29     styleUrls: ['./properties-table.component.less']
30 })
31 export class PropertiesTableComponent {
32
33     @Input() fePropertiesMap: InstanceFePropertiesMap;
34     @Input() feInstanceNamesMap: Map<string, InstanceFeDetails>;
35     @Input() selectedPropertyId: string;
36     @Input() propertyNameSearchText:string;
37     @Input() searchTerm:string;
38     @Input() readonly:boolean;
39     @Input() isLoading:boolean;
40     @Input() hasDeclareOption:boolean;
41     @Input() hidePropertyType:boolean;
42     
43     @Output('propertyChanged') emitter: EventEmitter<PropertyFEModel> = new EventEmitter<PropertyFEModel>();
44     @Output() selectPropertyRow: EventEmitter<PropertyRowSelectedEvent> = new EventEmitter<PropertyRowSelectedEvent>();
45     @Output() updateCheckedPropertyCount: EventEmitter<boolean> = new EventEmitter<boolean>();//only for hasDeclareOption
46
47     constructor (private propertiesService:PropertiesService ){
48     }
49     
50     ngOnInit() {
51     }
52
53     onPropertyChanged = (property) => {
54         this.emitter.emit(property);
55     };
56
57     // Click on main row (row of propertyFEModel)
58     onClickPropertyRow = (property:PropertyFEModel, instanceName:string, event?) => {
59         //event && event.stopPropagation();
60         this.selectedPropertyId = property.name;
61         let propertyRowSelectedEvent:PropertyRowSelectedEvent = new PropertyRowSelectedEvent(property, instanceName);
62         this.selectPropertyRow.emit(propertyRowSelectedEvent);
63     };
64
65     // Click on inner row (row of DerivedFEProperty)
66     onClickPropertyInnerRow = (property:DerivedFEProperty, instanceName:string) => {
67         let propertyRowSelectedEvent:PropertyRowSelectedEvent = new PropertyRowSelectedEvent(property, instanceName);
68         this.selectPropertyRow.emit(propertyRowSelectedEvent);
69     }
70
71     propertyChecked = (prop: PropertyFEModel, childPropName?: string) => {
72         let isChecked: boolean = (!childPropName)? prop.isSelected : prop.flattenedChildren.find(prop => prop.propertiesName == childPropName).isSelected;
73
74         if (!isChecked) {
75             this.propertiesService.undoDisableRelatedProperties(prop, childPropName);
76         } else {
77             this.propertiesService.disableRelatedProperties(prop, childPropName);
78         }
79         this.updateCheckedPropertyCount.emit(isChecked);
80     }
81
82 }
83
84 export class PropertyRowSelectedEvent {
85     propertyModel:PropertyFEModel | DerivedFEProperty;
86     instanceName:string;
87     constructor ( propertyModel:PropertyFEModel | DerivedFEProperty, instanceName:string ){
88         this.propertyModel = propertyModel;
89         this.instanceName = instanceName;
90     }
91 }
92