4
4
*/
5
5
6
6
import { createAsyncThunk , createSlice } from '@reduxjs/toolkit' ;
7
- import { Workflow , WorkflowDict } from '../../../common' ;
7
+ import { Workflow , WorkflowDict , WorkflowTemplate } from '../../../common' ;
8
8
import { HttpFetchError } from '../../../../../src/core/public' ;
9
9
import { getRouteService } from '../../services' ;
10
10
@@ -20,6 +20,7 @@ const GET_WORKFLOW_ACTION = `${WORKFLOWS_ACTION_PREFIX}/get`;
20
20
const SEARCH_WORKFLOWS_ACTION = `${ WORKFLOWS_ACTION_PREFIX } /search` ;
21
21
const GET_WORKFLOW_STATE_ACTION = `${ WORKFLOWS_ACTION_PREFIX } /getState` ;
22
22
const CREATE_WORKFLOW_ACTION = `${ WORKFLOWS_ACTION_PREFIX } /create` ;
23
+ const UPDATE_WORKFLOW_ACTION = `${ WORKFLOWS_ACTION_PREFIX } /update` ;
23
24
const PROVISION_WORKFLOW_ACTION = `${ WORKFLOWS_ACTION_PREFIX } /provision` ;
24
25
const DEPROVISION_WORKFLOW_ACTION = `${ WORKFLOWS_ACTION_PREFIX } /deprovision` ;
25
26
const DELETE_WORKFLOW_ACTION = `${ WORKFLOWS_ACTION_PREFIX } /delete` ;
@@ -90,6 +91,29 @@ export const createWorkflow = createAsyncThunk(
90
91
}
91
92
) ;
92
93
94
+ export const updateWorkflow = createAsyncThunk (
95
+ UPDATE_WORKFLOW_ACTION ,
96
+ async (
97
+ workflowInfo : { workflowId : string ; workflowTemplate : WorkflowTemplate } ,
98
+ { rejectWithValue }
99
+ ) => {
100
+ const { workflowId, workflowTemplate } = workflowInfo ;
101
+ const response :
102
+ | any
103
+ | HttpFetchError = await getRouteService ( ) . updateWorkflow (
104
+ workflowId ,
105
+ workflowTemplate
106
+ ) ;
107
+ if ( response instanceof HttpFetchError ) {
108
+ return rejectWithValue (
109
+ 'Error updating workflow: ' + response . body . message
110
+ ) ;
111
+ } else {
112
+ return response ;
113
+ }
114
+ }
115
+ ) ;
116
+
93
117
export const provisionWorkflow = createAsyncThunk (
94
118
PROVISION_WORKFLOW_ACTION ,
95
119
async ( workflowId : string , { rejectWithValue } ) => {
@@ -173,6 +197,10 @@ const workflowsSlice = createSlice({
173
197
state . loading = true ;
174
198
state . errorMessage = '' ;
175
199
} )
200
+ . addCase ( updateWorkflow . pending , ( state , action ) => {
201
+ state . loading = true ;
202
+ state . errorMessage = '' ;
203
+ } )
176
204
. addCase ( provisionWorkflow . pending , ( state , action ) => {
177
205
state . loading = true ;
178
206
state . errorMessage = '' ;
@@ -228,6 +256,22 @@ const workflowsSlice = createSlice({
228
256
state . loading = false ;
229
257
state . errorMessage = '' ;
230
258
} )
259
+ . addCase ( updateWorkflow . fulfilled , ( state , action ) => {
260
+ const { workflowId, workflowTemplate } = action . payload as {
261
+ workflowId : string ;
262
+ workflowTemplate : WorkflowTemplate ;
263
+ } ;
264
+ state . workflows = {
265
+ ...state . workflows ,
266
+ [ workflowId ] : {
267
+ // only overwrite the stateless / template fields. persist any existing state (e.g., lastUpdated, lastProvisioned)
268
+ ...state . workflows [ workflowId ] ,
269
+ ...workflowTemplate ,
270
+ } ,
271
+ } ;
272
+ state . loading = false ;
273
+ state . errorMessage = '' ;
274
+ } )
231
275
. addCase ( provisionWorkflow . fulfilled , ( state , action ) => {
232
276
state . loading = false ;
233
277
state . errorMessage = '' ;
@@ -266,6 +310,10 @@ const workflowsSlice = createSlice({
266
310
state . errorMessage = action . payload as string ;
267
311
state . loading = false ;
268
312
} )
313
+ . addCase ( updateWorkflow . rejected , ( state , action ) => {
314
+ state . errorMessage = action . payload as string ;
315
+ state . loading = false ;
316
+ } )
269
317
. addCase ( provisionWorkflow . rejected , ( state , action ) => {
270
318
state . errorMessage = action . payload as string ;
271
319
state . loading = false ;
0 commit comments