1
1
import { html , LitElement } from "lit" ;
2
- import { property , state } from "lit/decorators.js" ;
3
- import { postWorkflow } from "../../API/Workflow/wesGet.js" ;
2
+ import { customElement , property , state } from "lit/decorators.js" ;
3
+ import { postWorkflow , fetchWorkflowType } from "../../API/Workflow/wesGet.js" ;
4
4
import "@elixir-cloud/design" ;
5
5
6
6
// TODO: import the interface from the design package
7
- export interface Field {
7
+ interface Field {
8
8
key : string ;
9
9
label : string ;
10
10
type ?:
@@ -21,14 +21,16 @@ export interface Field {
21
21
| "array"
22
22
| "switch"
23
23
| "file"
24
- | "group" ;
24
+ | "group"
25
+ | "select" ;
25
26
fieldOptions ?: {
26
27
required ?: boolean ;
27
28
default ?: string | boolean ;
28
29
multiple ?: boolean ;
29
30
accept ?: string ;
30
31
returnIfEmpty ?: string ;
31
32
tooltip ?: string ;
33
+ options ?: Array < { label : string ; value : string } > ;
32
34
} ;
33
35
arrayOptions ?: {
34
36
defaultInstances ?: number ;
@@ -42,15 +44,8 @@ export interface Field {
42
44
children ?: Array < Field > ;
43
45
}
44
46
45
- /**
46
- * @summary This component is used to create task runs using WES API.
47
- * @since 1.0.0
48
- *
49
- * @property {string } baseURL - Base URL
50
- *
51
- */
52
-
53
- export default class ECCClientGa4ghWesCreateRuns extends LitElement {
47
+ @customElement ( "ecc-client-lit-ga4gh-wes-create-run" )
48
+ export class WESCreateRun extends LitElement {
54
49
@state ( ) private form : FormData = new FormData ( ) ;
55
50
@property ( { type : String } ) private baseURL =
56
51
"https://prowes.rahtiapp.fi/ga4gh/wes/v1" ;
@@ -69,21 +64,23 @@ export default class ECCClientGa4ghWesCreateRuns extends LitElement {
69
64
{
70
65
key : "workflow_type" ,
71
66
label : "Type" ,
72
- type : "text " ,
67
+ type : "select " ,
73
68
fieldOptions : {
74
69
required : true ,
75
70
tooltip :
76
71
"The type of workflow language and must be CWL or WDL currently." ,
72
+ options : [ ] ,
77
73
} ,
78
74
} ,
79
75
{
80
76
key : "workflow_type_version" ,
81
77
label : "Type version" ,
82
- type : "text " ,
78
+ type : "select " ,
83
79
fieldOptions : {
84
80
required : true ,
85
81
tooltip :
86
82
"The version of the workflow language submitted and must be one supported by this WES instance." ,
83
+ options : [ ] ,
87
84
} ,
88
85
} ,
89
86
{
@@ -136,6 +133,71 @@ export default class ECCClientGa4ghWesCreateRuns extends LitElement {
136
133
} ,
137
134
] ;
138
135
136
+ connectedCallback ( ) {
137
+ super . connectedCallback ?.( ) ;
138
+ this . _updateWorkflowType ( ) ;
139
+ }
140
+
141
+ private async _updateWorkflowType ( ) {
142
+ const data = await fetchWorkflowType ( this . baseURL ) ;
143
+ const workflowTypes = data . workflow_type_versions ;
144
+
145
+ const eccUtilsDesignForm = this . shadowRoot ?. querySelector (
146
+ "ecc-utils-design-form"
147
+ ) as any ;
148
+
149
+ if ( eccUtilsDesignForm ) {
150
+ const workflowTypeKey = "workflow_type" ;
151
+ const workflowTypeVersionKey = "workflow_type_version" ;
152
+
153
+ // Find the dropdown field for workflow_type in this.fields
154
+ const workflowTypeDropdown = this . fields . find (
155
+ ( field ) => field . key === workflowTypeKey
156
+ ) ;
157
+
158
+ // Find the dropdown field for workflow_type_version in this.fields
159
+ const workflowTypeVersionDropdown = this . fields . find (
160
+ ( field ) => field . key === workflowTypeVersionKey
161
+ ) ;
162
+
163
+ // Check if the dropdown fields exist and have fieldOptions
164
+ if (
165
+ workflowTypeDropdown &&
166
+ workflowTypeDropdown . fieldOptions &&
167
+ workflowTypeVersionDropdown &&
168
+ workflowTypeVersionDropdown . fieldOptions
169
+ ) {
170
+ // Update the options of the workflow_type dropdown
171
+ workflowTypeDropdown . fieldOptions . options = Object . keys (
172
+ workflowTypes
173
+ ) . map ( ( type : string ) => ( {
174
+ label : type ,
175
+ value : type ,
176
+ } ) ) ;
177
+
178
+ // Manually trigger a re-render or update of the form
179
+ eccUtilsDesignForm . requestUpdate ( ) ;
180
+ // Add an event listener to workflow_type dropdown change
181
+ const formData = eccUtilsDesignForm . getFormData ( ) ;
182
+ const selectedWorkflowType = formData [ workflowTypeKey ] ;
183
+
184
+ // Check if fieldOptions is defined
185
+ if ( workflowTypeVersionDropdown . fieldOptions ) {
186
+ // Update the options of the workflow_type_version dropdown based on the selected workflow_type
187
+ workflowTypeVersionDropdown . fieldOptions . options =
188
+ workflowTypes [ selectedWorkflowType ] || [ ] ;
189
+
190
+ eccUtilsDesignForm . requestUpdate ( ) ;
191
+ }
192
+ }
193
+ } else {
194
+ console . error ( {
195
+ message : "ecc-utils-design-form not found" ,
196
+ breakPoint : "WESCreateRun.updateDropdown" ,
197
+ } ) ;
198
+ }
199
+ }
200
+
139
201
async submitForm ( form : any ) {
140
202
Object . keys ( form ) . forEach ( ( key ) => {
141
203
this . form . append ( key , form [ key ] ) ;
0 commit comments