aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-ui/src/app/ng2/components/ui/form-components/valid-values-input/ui-element-valid-values-input.component.ts
blob: 079fdeba1c010eb7da83f855248d52b602234c38 (plain)
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
/*
 * -
 *  ============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, Output, EventEmitter} from '@angular/core';
import { UiElementBase, UiElementBaseInterface } from './../ui-element-base.component';
import {ConstraintTypes} from "../../../../pages/properties-assignment/constraints/constraints.component";
import {PROPERTY_DATA, PROPERTY_TYPES} from "../../../../../utils/constants";

@Component({
    selector: 'ui-element-valid-values-input',
    templateUrl: './ui-element-valid-values-input.component.html',
    styleUrls: ['./ui-element-valid-values-input.component.less'],
})
export class UiElementValidValuesInputComponent extends UiElementBase implements UiElementBaseInterface {
    @Output() onConstraintChange: EventEmitter<any> = new EventEmitter<any>();
    constructor() {
        super();
        this.pattern = this.validation.validationPatterns.comment;
    }

    showStringField(): boolean {
        return this.type === PROPERTY_TYPES.STRING || PROPERTY_DATA.SCALAR_TYPES.indexOf(this.type) > -1;
    }

    showIntegerField(): boolean {
        return this.type === PROPERTY_TYPES.INTEGER || this.type === PROPERTY_TYPES.TIMESTAMP;
    }

    addToList(){
        if (!this.value) {
            this.value = new Array();
        }
        this.value.push("");
        this.baseEmitter.emit({
            value: this.value,
            isValid: false
        });
        this.emitOnConstraintChange()
    }

    onChangeConstrainValueIndex(newValue: any, valueIndex: number) {
        if(!this.value) {
            this.value = new Array();
        }
        this.value[valueIndex] = newValue;
        this.baseEmitter.emit({
            value: this.value,
            isValid: newValue != "" && !this.doesArrayContaintEmptyValues(this.value)
        });
        this.emitOnConstraintChange();
    }

    private emitOnConstraintChange(): void {
        this.onConstraintChange.emit({
            valid: this.validateConstraints()
        });
    }
    private validateConstraints(): boolean {
        if (Array.isArray(this.value)) {
            return !(this.value.length == 0 || this.doesArrayContaintEmptyValues(this.value));
        }
        return this.value && this.type != ConstraintTypes.null
    }

    removeFromList(valueIndex: number){
        this.value.splice(valueIndex, 1);
        this.baseEmitter.emit({
            value: this.value,
            isValid: !this.doesArrayContaintEmptyValues(this.value)
        });
        this.emitOnConstraintChange()
    }

    trackByFn(index) {
        return index;
    }

    private doesArrayContaintEmptyValues(arr) {
        for(const element of arr) {
            if(element === "") return true;
        }
        return false;
    }
}