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
|
import {Component, Input} from '@angular/core';
import {DataTypeService} from "app/ng2/services/data-type.service";
import {OperationParameter, InputBEModel} from 'app/models';
import {DropDownOption} from "../operation-creator.component";
import {DropdownValue} from "app/ng2/components/ui/form-components/dropdown/ui-element-dropdown.component";
@Component({
selector: 'param-row',
templateUrl: './param-row.component.html',
styleUrls: ['./param-row.component.less']
})
export class ParamRowComponent {
@Input() param: OperationParameter;
@Input() inputProps: Array<InputBEModel>;
@Input() onRemoveParam: Function;
@Input() isAssociateWorkflow: boolean;
@Input() readonly: boolean;
@Input() isInputParam: boolean;
@Input() validityChanged: Function;
paramId: string;
propTypeEnum: Array<DropDownOption> = [];
filteredInputProps: Array<DropdownValue> = [];
constructor(private dataTypeService: DataTypeService) {}
ngOnInit() {
this.propTypeEnum = _.uniq(
_.map(
this.getPrimitiveSubtypes(),
prop => new DropDownOption(prop.type)
)
);
this.onChangeType();
this.validityChanged();
}
onChangeName() {
this.validityChanged();
}
onChangeType(paramId?: string) {
this.filteredInputProps = _.map(
_.filter(
this.getPrimitiveSubtypes(),
prop => !this.param.type || prop.type === this.param.type
),
prop => new DropdownValue(prop.uniqueId, prop.name)
);
if (paramId) {
this.paramId = paramId;
}
}
onChangeProperty(paramId: string) {
this.param.inputId = paramId;
const newProp = _.find(
this.getPrimitiveSubtypes(),
prop => this.param.inputId === prop.uniqueId
);
if (!this.param.type) {
this.param.type = newProp.type;
this.onChangeType(paramId);
} else {
this.paramId = paramId;
}
if (!this.param.name) {
this.param.name = newProp.name;
}
this.validityChanged();
}
getPrimitiveSubtypes(): Array<InputBEModel> {
const flattenedProps: Array<any> = [];
const dataTypes = this.dataTypeService.getAllDataTypes();
_.forEach(this.inputProps, prop => {
const type = _.find(
_.toArray(dataTypes),
(type: any) => type.name === prop.type
);
flattenedProps.push(prop);
if (type.properties) {
_.forEach(type.properties, subType => {
if (this.isTypePrimitive(subType.type)) {
flattenedProps.push({
type: subType.type,
name: `${prop.name}.${subType.name}`,
uniqueId: `${prop.uniqueId}.${subType.name}`
});
}
});
}
});
return flattenedProps;
}
isTypePrimitive(type): boolean {
return (
type === 'string' ||
type === 'integer' ||
type === 'float' ||
type === 'boolean'
);
}
}
|