2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2022 Nordix Foundation. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 <div class="operation-creator-interface-definition">
22 <loader [display]="isLoading" [size]="'large'" [relative]="true"></loader>
24 <form class="w-sdc-form">
26 <div class="side-by-side">
27 <div class="form-item">
29 label="{{ 'OPERATION_INTERFACE_TYPE' | translate }}"
31 testId="interface-name"
32 [selectedOption]="getSelectedDropdown(interfaceNames, operation.interfaceType)"
33 placeHolder="Select..."
35 (changed)="onSelectInterface($event)"
36 [options]="interfaceNames">
40 <div class="form-item" *ngIf="!isInterfaceOther()">
42 #operationNamesDropdown
43 label="{{ 'OPERATION_NAME' | translate }}"
45 testId="operation-name"
46 [selectedOption]="getSelectedDropdown(operationNames, operation.name)"
47 placeHolder="Select..."
49 (changed)="onSelectOperationName($event)"
50 [options]="operationNames">
53 <div class="form-item" *ngIf="isInterfaceOther()">
55 label="{{ 'OPERATION_NAME' | translate }}"
56 [(value)]="operation.name"
57 testId="operationName"
58 (valueChange)="onChangeName()"
59 [disabled]="readonly">
65 <div class="i-sdc-form-item sdc-input">
66 <span class="sdc-input__label">{{ 'OPERATION_DESCRIPTION' | translate }}</span>
68 data-tests-id="operationDescription"
71 [(ngModel)]="descriptionValue"
72 [ngClass]="{'disabled': readonly}">
76 <div class="side-by-side" *ngIf="enableWorkflowAssociation">
77 <div class="form-item">
79 #workflowAssignmentDropdown
80 label="{{ 'OPERATION_WORKFLOW_ASSIGNMENT' | translate }}"
81 placeHolder="Select..."
82 testId="association-type"
83 [selectedOption]="toDropDownOption(workflowAssociationType)"
84 [options]="associationOptions"
85 (changed)="toggleAssociateWorkflow($event)"
86 [disabled]="readonly">
90 <div class="form-item" *ngIf="!isUsingExistingWF() && !isUsingExternalWF()"></div>
93 *ngIf="isUsingExternalWF()"
94 class="form-item sdc-input">
95 <label class="sdc-input__label">{{ 'OPERATION_ARTIFACT' | translate }}</label>
96 <div class="i-sdc-form-item i-sdc-form-file-upload">
98 class="i-sdc-form-file-name"
99 data-tests-id="artifactFilename">
100 {{ operation.artifactFileName }}
103 *ngIf="operation.artifactFileName"
104 class="i-sdc-form-file-upload-x-btn"
105 data-tests-id="clearArtifact"
106 (click)="onChangeArtifactFile({ target: {} })"></div>
108 class="i-sdc-form-file-upload-label"
109 [ngClass]="{'disabled': readonly}">
112 base-sixty-four-input
114 data-tests-id="artifactUpload"
115 (change)="onChangeArtifactFile($event)"
116 (click)="$event.target.value = ''"
118 <div class="file-upload-browse-btn">Browse</div>
123 <div class="form-item sdc-input" *ngIf="isUsingExistingWF()">
124 <label class="sdc-input__label required">{{ 'OPERATION_WORKFLOW' | translate }}
125 <span class="archive-warning" *ngIf="workflowIsOnline && archivedWorkflowId === operation.workflowId">({{ 'OPERATION_WORKFLOW_ARCHIVED' | translate }})</span>
126 <span class="no-workflow-warning" *ngIf="!workflowIsOnline">{{ 'OPERATION_NO_WORKFLOW_CONNECTION' | translate }}</span>
127 <span class="no-workflow-warning" *ngIf="workflowIsOnline && !workflows.length">{{ 'OPERATION_NO_WORKFLOW_ERROR' | translate }}</span>
130 placeHolder="Select..."
131 testId="associated-workflow"
132 [selectedOption]="getSelectedDropdown(workflows, operation.workflowId)"
133 [options]="workflows"
134 (changed)="onSelectWorkflow($event)"
135 [disabled]="readonly || !workflows.length || !workflowIsOnline">
139 <div class="form-item sdc-input" *ngIf="isUsingExistingWF()">
141 *ngIf="workflowIsOnline && workflows.length"
142 label="{{ 'OPERATION_WORKFLOW_VERSION' | translate }}"
143 testId="associated-workflow-version"
144 [selectedOption]="getSelectedDropdown(workflowVersions, operation.workflowVersionId)"
145 [options]="workflowVersions"
146 (changed)="changeWorkflowVersion($event)"
147 [disabled]="!operation.workflowId || archivedWorkflowId === operation.workflowId || readonly">
152 <div class="separator-buttons">
153 <tabs #propertyInputTabs tabStyle="round-tabs" (tabChanged)="tabChanged($event)" [hideIndicationOnTabChange]="true">
154 <tab tabTitle="Inputs"></tab>
155 <tab tabTitle="Outputs"></tab>
158 class="add-param-link add-btn"
159 *ngIf="!isUsingExistingWF() && !readonly"
160 data-tests-id="addInputParameter"
161 [ngClass]="{'disabled':!canAdd()}"
162 (click)="addParam()">{{ currentTab === TYPE_INPUT ? 'Add Input' : 'Add Output' }}</a>
165 <div class="generic-table">
166 <div class="header-row table-row">
167 <span class="cell header-cell field-name">{{ 'OPERATION_PARAM_NAME' | translate }}</span>
168 <span class="cell header-cell field-type">{{ 'OPERATION_PARAM_TYPE' | translate }}</span>
169 <span class="cell header-cell field-property" *ngIf="currentTab == TYPE_INPUT">
170 {{ 'OPERATION_PARAM_PROPERTY' | translate }}
172 *ngIf="!isUsingExistingWF()"
173 class="sprite-new info-icon"
174 tooltip="{{propertyTooltipText}}"
178 <span class="cell header-cell field-mandatory" *ngIf="!isUsingExistingWF()">{{ 'OPERATION_PARAM_MANDATORY' | translate }}</span>
179 <span class="cell header-cell remove" *ngIf="!isUsingExistingWF() && !readonly">●●●</span>
182 <div class="empty-msg data-row" *ngIf="tableParameters.length === 0">
183 <div>{{ 'EMPTY_PARAM_TABLE_HEADER' | translate }}</div>
184 <div *ngIf="isUsingExistingWF() && !operation.workflowVersionId">
185 <div *ngIf="workflows.length">
186 <span class="bold-message">{{ 'EMPTY_PARAM_TABLE_NO_SELECTED_WORKFLOW_1' | translate }}</span>
187 <span>{{ 'EMPTY_PARAM_TABLE_NO_SELECTED_WORKFLOW_2' | translate }}</span>
189 <div *ngIf="!workflows.length">
190 Only <span class="bold-message">certified</span> workflow versions can be assigned to an operation
196 *ngFor="let param of tableParameters"
198 [isInputParam]="currentTab === TYPE_INPUT"
199 [isAssociateWorkflow]="isUsingExistingWF()"
201 [inputProps]="inputProperties"
202 [capabilitiesProps]="componentCapabilities"
203 [operationOutputs]="operationOutputs"
204 [onRemoveParam]="onRemoveParam"
205 [readonly]="readonly"
206 [validityChanged]="validityChanged">