Provide tosca function capability to complex type fields in composition view
[sdc.git] / catalog-ui / src / app / directives / property-types / type-map / type-map-directive.html
1 <!--
2   ~ Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
3   ~
4   ~ Licensed under the Apache License, Version 2.0 (the "License");
5   ~ you may not use this file except in compliance with the License.
6   ~ You may obtain a copy of the License at
7   ~
8   ~      http://www.apache.org/licenses/LICENSE-2.0
9   ~
10   ~ Unless required by applicable law or agreed to in writing, software
11   ~ distributed under the License is distributed on an "AS IS" BASIS,
12   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   ~ See the License for the specific language governing permissions and
14   ~ limitations under the License.
15   -->
16
17
18 <div class="type-map">
19     <div  ng-if="mapKeys.length > 0" data-ng-repeat="i in getNumber(mapKeys.length) track by $index" class="map-item" data-ng-class="{'primitive-value-map':!isSchemaTypeDataType}">
20         <div class="i-sdc-form-item map-item-field" data-ng-class="{error:(parentFormObj['mapKey'+fieldsPrefixName+$index].$dirty && parentFormObj['mapKey'+fieldsPrefixName+$index].$invalid)}">
21             <label class="i-sdc-form-label required">Key</label>
22             <input class="i-sdc-form-input"
23                    data-tests-id="mapKey{{fieldsPrefixName}}{{$index}}"
24                    data-ng-model="mapKeys[$index]"
25                    type="text"
26                    data-ng-maxlength="50"
27                    maxlength="50"
28                    name="mapKey{{fieldsPrefixName}}{{$index}}"
29                    data-ng-pattern="MapKeyValidationPattern"
30                    data-ng-model-options="{ debounce: 200 }"
31                    data-ng-change="changeKeyOfMap(mapKeys[$index], $index,'mapKey'+fieldsPrefixName+$index);$event.stopPropagation();"
32                    data-ng-readonly="readOnly"
33                    data-required
34                    autofocus/>
35             <div class="input-error" data-ng-show="parentFormObj['mapKey'+fieldsPrefixName+$index].$dirty && parentFormObj['mapKey'+fieldsPrefixName+$index].$invalid">
36                 <span ng-show="parentFormObj['mapKey'+fieldsPrefixName+$index].$error.keyExist" translate="PROPERTY_EDIT_MAP_UNIQUE_KEYS"></span>
37                 <span ng-show="parentFormObj['mapKey'+fieldsPrefixName+$index].$error.required" translate="VALIDATION_ERROR_REQUIRED" translate-values="{'field': 'Key' }"></span>
38                 <span ng-show="parentFormObj['mapKey'+fieldsPrefixName+$index].$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
39                 <span ng-show="parentFormObj['mapKey'+fieldsPrefixName+$index].$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
40             </div>
41         </div>
42         <div data-ng-if="!isSchemaTypeDataType" class="i-sdc-form-item map-item-field" data-ng-class="{error:(parentFormObj['mapValue'+fieldsPrefixName+$index].$dirty && parentFormObj['mapValue'+fieldsPrefixName+$index].$invalid)}">
43             <label class="i-sdc-form-label required">Value</label>
44             <form class="temp-form" data-ng-if="isService && complexToscapath == null">
45                 <input type="radio" name="hasToscaFunction-{{fieldsPrefixName}}-{{$index}}" data-ng-checked="{{showToscaFunction[$index] == false}}" data-ng-click="onEnableTosca(false,$index)"/>
46                 Value
47                 <input type="radio" name="hasToscaFunction-{{fieldsPrefixName}}-{{$index}}" data-ng-checked="{{showToscaFunction[$index]}}" data-ng-click="onEnableTosca(true,$index)" ng-disabled="mapKeys[$index] == '' || mapKeys[$index] == null"/>
48                 {{'TOSCA_FUNCTION_LABEL' | translate}}
49             </form>
50             <input class="i-sdc-form-input"
51                    ng-if="!constraints && !((schemaProperty.simpleType||schemaProperty.type) == 'boolean') && showToscaFunction[$index] == false"
52                    data-ng-readonly="readOnly"
53                    data-ng-model="valueObjRef[mapKeys[$index]]"
54                    type="text"
55                    name="mapValue{{fieldsPrefixName}}{{$index}}"
56                    data-tests-id="mapValue{{fieldsPrefixName}}{{$index}}"
57                    data-ng-pattern="getValidationPattern((schemaProperty.simpleType||schemaProperty.type))"
58                    data-ng-change="!parentFormObj['mapValue'+fieldsPrefixName+$index].$error.pattern && parseToCorrectType(valueObjRef, key, (schemaProperty.simpleType||schemaProperty.type))"
59                    data-ng-model-options="{ debounce: 200 }"
60                    data-ng-maxlength="maxLength"
61                    maxlength="{{maxLength}}"
62                    data-required
63                    autofocus />
64             <select class="i-sdc-form-select"
65                     data-tests-id="mapValue{{fieldsPrefixName}}{{$index}}"
66                     ng-if="!constraints && (schemaProperty.simpleType||schemaProperty.type) == 'boolean' && showToscaFunction[$index] == false"
67                     data-ng-disabled="readOnly"
68                     name="mapValue{{fieldsPrefixName}}{{$index}}"
69                     data-ng-model="valueObjRef[mapKeys[$index]]"
70                     data-required>
71                 <option value="true">true</option>
72                 <option value="false">false</option>
73             </select>
74             <div data-ng-if="showToscaFunction[$index]" class="div-tosca-function">
75                 <tosca-function [property]="parentProperty"
76                                 [component-instance-map]="componentInstanceMap"
77                                 [allow-clear]="false"
78                                 [composition-map]="true"
79                                 [composition-map-key]="mapKeys[$index]"
80                                 (on-valid-function)="onGetToscaFunction($event,mapKeys[$index])"
81                 >
82                 </tosca-function>
83             </div>
84
85
86             <select class="i-sdc-form-select"
87                 data-tests-id="constraints"
88                 ng-if="constraints"
89                 data-ng-disabled="readOnly"
90                 data-ng-model="valueObjRef[mapKeys[$index]]">
91
92                 <!-- Get the saved value for the relevant key -->
93                 <option ng-if = "valueObjRef[mapKeys[$index]]" value = "{{valueObjRef[mapKeys[$index]]}}" name = "{{valueObjRef[mapKeys[$index]]}}" hidden selected>
94                         {{valueObjRef[mapKeys[$index]]}}
95                 </option>
96                 <!-- add all constratint to Select list -->
97                 <option ng-repeat='value in constraints' value="{{value}}" name="{{value}}">
98                     {{value}}
99                 </option>
100             </select>
101
102             <div class="input-error" data-ng-show="parentFormObj['mapValue'+fieldsPrefixName+$index].$dirty && parentFormObj['mapValue'+fieldsPrefixName+$index].$invalid">
103                 <span ng-show="parentFormObj['mapValue'+fieldsPrefixName+$index].$error.required" translate="VALIDATION_ERROR_REQUIRED" translate-values="{'field': 'Value' }"></span>
104                 <span ng-show="parentFormObj['mapValue'+fieldsPrefixName+$index].$error.pattern" translate="PROPERTY_EDIT_PATTERN"></span>
105                 <span ng-show="parentFormObj['mapValue'+fieldsPrefixName+$index].$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '{{maxLength}}' }"></span>
106             </div>
107         </div>
108         <div data-ng-if="isSchemaTypeDataType" class="i-sdc-form-item map-item-field">
109             <label class="i-sdc-form-label">Value</label>
110             <fields-structure value-obj-ref="valueObjRef[mapKeysStatic[$index]]"
111                               type-name="schemaProperty.type"
112                               parent-form-obj="parentFormObj"
113                               fields-prefix-name="'mapValue'+fieldsPrefixName+''+$index"
114                               types="types"
115                               read-only="readOnly"
116             ></fields-structure>
117         </div>
118         <span ng-click="deleteMapItem($index)" class="delete-map-item" data-tests-id="delete-map-item{{fieldsPrefixName}}{{$index}}"
119               data-ng-class="{'disabled': readOnly}" title="{{'PROPERTY_EDIT_MAP_DELETE_ITEM' | translate}}"></span>
120     </div>
121     <div class="add-map-item" data-ng-class="{'schema-data-type':isSchemaTypeDataType}" data-ng-if="showAddBtn">
122         <div class="add-btn" data-tests-id="add-map-item"
123              data-ng-class="{'disabled': readOnly || !isMapKeysUnique}"
124              data-ng-click="addMapItemFields()" title="{{'PROPERTY_EDIT_MAP_ADD_ITEM' | translate}}">Add</div>
125     </div>
126 </div>
127