2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
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";
27 selector: 'properties-table',
28 templateUrl: './properties-table.component.html',
29 styleUrls: ['./properties-table.component.less']
31 export class PropertiesTableComponent {
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;
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
47 constructor (private propertiesService:PropertiesService ){
53 onPropertyChanged = (property) => {
54 this.emitter.emit(property);
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);
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);
71 propertyChecked = (prop: PropertyFEModel, childPropName?: string) => {
72 let isChecked: boolean = (!childPropName)? prop.isSelected : prop.flattenedChildren.find(prop => prop.propertiesName == childPropName).isSelected;
75 this.propertiesService.undoDisableRelatedProperties(prop, childPropName);
77 this.propertiesService.disableRelatedProperties(prop, childPropName);
79 this.updateCheckedPropertyCount.emit(isChecked);
84 export class PropertyRowSelectedEvent {
85 propertyModel:PropertyFEModel | DerivedFEProperty;
87 constructor ( propertyModel:PropertyFEModel | DerivedFEProperty, instanceName:string ){
88 this.propertyModel = propertyModel;
89 this.instanceName = instanceName;