diff options
author | JvD_Ericsson <jeff.van.dam@est.tech> | 2023-08-16 14:43:13 +0100 |
---|---|---|
committer | Michael Morris <michael.morris@est.tech> | 2023-09-22 07:43:34 +0000 |
commit | db333a620e4b8dec6c58009162561b32c83d6bd9 (patch) | |
tree | e1541ffd45a005c9aa190d56b55a8fcf10175e30 /catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/filters-list/filters-list.component.ts | |
parent | 035d670c792c9408493b3d729a3ac91124c2d4df (diff) |
UI Support for operation milestones
Issue-ID: SDC-4601
Signed-off-by: JvD_Ericsson <jeff.van.dam@est.tech>
Change-Id: I9088a1d004ae3a3470aee8d831066584fd26b0d4
Diffstat (limited to 'catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/filters-list/filters-list.component.ts')
-rw-r--r-- | catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/filters-list/filters-list.component.ts | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/filters-list/filters-list.component.ts b/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/filters-list/filters-list.component.ts new file mode 100644 index 0000000000..5aaaea5327 --- /dev/null +++ b/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/filters-list/filters-list.component.ts @@ -0,0 +1,241 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2023 Nordix Foundation + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges} from '@angular/core'; +import { + AbstractControl, + FormArray, + FormControl, + FormGroup, ValidationErrors, + ValidatorFn, + Validators +} from '@angular/forms'; +import { + FilterParameter, + IFilterParameterList +} from '../../../../../../models/interfaceOperation'; +import { InstanceFeDetails } from '../../../../../../models/instance-fe-details'; +import { ConstraintTypes, ConstraintTypesMapping } from '../../../../../pages/properties-assignment/constraints/constraints.component'; +import {CustomToscaFunction } from '../../../../../../models/default-custom-functions'; +import { ToscaFunction } from '../../../../../../models/tosca-function'; +import { PropertyBEModel } from '../../../../../../models/properties-inputs/property-be-model'; +import { ToscaFunctionValidationEvent } from '../../../../properties-assignment/tosca-function/tosca-function.component'; + +@Component({ + selector: 'filters-list', + templateUrl: './filters-list.component.html', + styleUrls: ['./filters-list.component.less'] +}) +export class FiltersListComponent implements OnInit { + + @Input() customToscaFunctions: Array<CustomToscaFunction> = []; + @Input() componentInstanceMap: Map<string, InstanceFeDetails> = new Map(); + @Input() activitiesExist: boolean; + @Input() existingFilters: IFilterParameterList; + @Input() isViewOnly: boolean; + @Output('filtersChangeEvent') filtersChangeEvent: EventEmitter<any> = new EventEmitter<any>(); + + isAProperty: Map<number, PropertyBEModel> = new Map(); + operatorTypes: any[]; + ConstraintTypesMapping = ConstraintTypesMapping; + filters: FilterParameter[] = []; + filterFormArray: FormArray = new FormArray([]); + filterForm: FormGroup = new FormGroup ( + { + 'filterFormList': this.filterFormArray + } + ); + validationMessages = { + filter: [ + { type: 'required', message: 'Filter name, constraint, and value is required'} + ] + }; + + ngOnInit () { + this.operatorTypes = Object.keys(ConstraintTypes).map((key) => ConstraintTypes[key]); + } + + ngOnChanges (changes: SimpleChanges) { + this.filterForm.valueChanges.subscribe(() => { + this.emitOnFilterChange(); + }); + if (!changes.activitiesExist) { + return; + } + if (changes.activitiesExist.currentValue) { + this.initFilters(); + } else { + this.filters = []; + this.filterFormArray = new FormArray([]); + this. filterForm = new FormGroup ( + { + 'filterFormList': this.filterFormArray + } + ); + } + } + + private initFilters () { + if (this.existingFilters && this.existingFilters.listToscaDataDefinition && this.existingFilters.listToscaDataDefinition.length > 0) { + this.existingFilters.listToscaDataDefinition.forEach(val => { + this.filters.push(val); + this.filterFormArray.push( + new FormControl(val, [Validators.required, this.formControlValidator()]) + ); + }) + } + } + + private emitOnFilterChange (): void { + this.filtersChangeEvent.emit({ + filters: this.filters, + valid: this.filterForm.valid + }); + } + + addFilter () { + let filterParameter: FilterParameter = { + name: null, + constraint: null, + filterValue: null + } + this.filters.push(filterParameter); + this.filterFormArray.push( + new FormControl(filterParameter, [Validators.required, this.formControlValidator()]) + ); + } + + private formControlValidator (): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + const filter = control.value; + + if (!filter || !filter.name || !filter.constraint || !filter.filterValue) { + return {required:true}; + } + return null; + } + } + + removeFromFilters (index: number) { + this.filters.splice(index, 1); + this.filterFormArray.removeAt(index); + } + + onFilterConstraintChange (type: string, index: number) { + let filter = this.filterFormArray.controls[index].value; + filter.constraint = type; + if (ConstraintTypes.valid_values == type || ConstraintTypes.in_range == type) { + filter.filterValue = []; + } else { + filter.filterValue = ''; + } + this.filterFormArray.controls[index].setValue(filter); + } + + onFilterValueChange (value: any, index: number) { + let filter = this.filterFormArray.controls[index].value; + filter.filterValue = value; + this.filterFormArray.controls[index].setValue(filter); + } + + onFilterNameChange (value: any, index: number) { + let filter = this.filterFormArray.controls[index].value; + filter.name = value; + this.filterFormArray.controls[index].setValue(filter); + } + + getInRangeValue (index: number, valueIndex: number): string { + const value = this.filters[index].filterValue; + + if (!value || !value[valueIndex]) { + return ''; + } + + return value[valueIndex]; + } + + onChangeConstrainValueIndex (index: number, newValue: any, valueIndex: number) { + let filter = this.filterFormArray.controls[index].value; + if (!filter.filterValue) { + filter.filterValue = []; + } + filter.filterValue[valueIndex] = newValue; + this.filterFormArray.controls[index].setValue(filter); + } + + constraintValuesArray (index: number) { + let filters = this.filterForm.get('filterFormList') as FormArray; + return filters.at(index).value.filterValue; + } + + addToList (filterIndex: number) { + this.constraintValuesArray(filterIndex).push(''); + } + + removeFromList (filterIndex: number, valueIndex: number) { + this.constraintValuesArray(filterIndex).splice(valueIndex, 1); + } + + onValueTypeChange (value: string, index: number) { + if (value === 'true') { + let filter = this.filterFormArray.controls[index].value; + if (!filter.toscaFunction) { + filter.toscaFunction = {} as ToscaFunction; + } + filter.filterValue = ''; + this.filterFormArray.controls[index].setValue(filter); + } else { + let filter = this.filterFormArray.controls[index].value; + filter.toscaFunction = undefined; + this.filterFormArray.controls[index].setValue(filter); + if (this.isAProperty.has(index)) { + this.isAProperty.delete(index); + } + } + } + + getAsProperty(index: number) { + if (!this.isAProperty.has(index)) { + let filter = this.filterFormArray.controls[index].value; + let property = new PropertyBEModel(); + property.type = 'any'; + property.toscaFunction = filter.toscaFunction; + property.value = filter.filterValue; + this.isAProperty.set(index, property); + return property; + } + return this.isAProperty.get(index); + } + + onToscaFunctionValidityChange(validationEvent: ToscaFunctionValidationEvent, index: number):void { + if (validationEvent.isValid) { + let filter = this.filterFormArray.controls[index].value; + filter.toscaFunction = validationEvent.toscaFunction; + filter.filterValue = validationEvent.toscaFunction.buildValueString(); + this.filterFormArray.controls[index].setValue(filter); + } + } + + isToscaFunction(index: number): boolean { + let filter = this.filterFormArray.controls[index].value; + let toscaFunction = filter.toscaFunction; + return toscaFunction; + } + +} |