1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
/*-
* ============LICENSE_START=======================================================
* SDC
* ================================================================================
* Copyright (C) 2021 Nordix Foundation. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
*/
import {Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';
import {InstanceFeDetails} from '../../../../models/instance-fe-details';
import {InstanceFeAttributesMap} from "../../../../models/attributes-outputs/attribute-fe-map";
import {AttributeFEModel} from "../../../../models/attributes-outputs/attribute-fe-model";
import {AttributesService} from "../../../services/attributes.service";
import {DerivedFEAttribute} from "../../../../models/attributes-outputs/derived-fe-attribute";
@Component({
selector: 'attributes-table',
templateUrl: './attributes-table.component.html',
styleUrls: ['./attributes-table.component.less']
})
export class AttributesTableComponent implements OnChanges {
@Input() feAttributesMap: InstanceFeAttributesMap;
@Input() feInstanceNamesMap: Map<string, InstanceFeDetails>;
@Input() selectedAttributeId: string;
@Input() attributeNameSearchText: string;
@Input() searchTerm: string;
@Input() readonly: boolean;
@Input() isLoading: boolean;
@Input() hasDeclareOption: boolean;
@Input() hideAttributeType: boolean;
@Input() showDelete: boolean;
@Output('attributeChanged') emitter: EventEmitter<AttributeFEModel> = new EventEmitter<AttributeFEModel>();
@Output() selectAttributeRow: EventEmitter<AttributeRowSelectedEvent> = new EventEmitter<AttributeRowSelectedEvent>();
@Output() updateCheckedAttributeCount: EventEmitter<boolean> = new EventEmitter<boolean>(); // only for hasDeclareOption
@Output() updateCheckedChildAttributeCount: EventEmitter<boolean> = new EventEmitter<boolean>();//only for hasDeclareListOption
@Output() deleteAttribute: EventEmitter<AttributeFEModel> = new EventEmitter<AttributeFEModel>();
sortBy: string;
reverse: boolean;
direction: number;
path: string[];
readonly ascUpperLettersFirst = 1;
readonly descLowerLettersFirst = -1;
constructor(private attributesService: AttributesService) {
}
ngOnChanges(changes: SimpleChanges): void {
if (changes.fePropertiesMap) {
this.sortBy = '';
this.sort('name');
}
}
sort(sortBy) {
this.reverse = (this.sortBy === sortBy) ? !this.reverse : true;
this.direction = this.reverse ? this.ascUpperLettersFirst : this.descLowerLettersFirst;
this.sortBy = sortBy;
this.path = sortBy.split('.');
}
onAttributeChanged = (attribute) => {
this.emitter.emit(attribute);
}
// Click on main row (row of AttributeFEModel)
onClickAttributeRow = (attribute: AttributeFEModel, instanceName: string) => {
this.selectedAttributeId = attribute.name;
const attributeRowSelectedEvent: AttributeRowSelectedEvent = new AttributeRowSelectedEvent(attribute, instanceName);
this.selectAttributeRow.emit(attributeRowSelectedEvent);
}
// Click on inner row (row of DerivedFEAttribute)
onClickAttributeInnerRow = (attribute: DerivedFEAttribute, instanceName: string) => {
const attributeRowSelectedEvent: AttributeRowSelectedEvent = new AttributeRowSelectedEvent(attribute, instanceName);
this.selectAttributeRow.emit(attributeRowSelectedEvent);
}
attributeChecked = (attrib: AttributeFEModel, childAttribName?: string) => {
const isChecked: boolean = (!childAttribName) ? attrib.isSelected : attrib.flattenedChildren.find((attrib) => attrib.attributesName == childAttribName).isSelected;
if (isChecked) {
this.attributesService.disableRelatedAttributes(attrib, childAttribName);
} else {
this.attributesService.undoDisableRelatedAttributes(attrib, childAttribName);
}
this.updateCheckedAttributeCount.emit(isChecked);
}
}
export class AttributeRowSelectedEvent {
attributeModel: AttributeFEModel | DerivedFEAttribute;
instanceName: string;
constructor(attributeModel: AttributeFEModel | DerivedFEAttribute, instanceName: string) {
this.attributeModel = attributeModel;
this.instanceName = instanceName;
}
}
|