@@ -77,13 +77,6 @@ export function ResizableWorkspace(props: ResizableWorkspaceProps) {
77
77
props . workflow
78
78
) ;
79
79
80
- // Loading state
81
- const [ isProvisioning , setIsProvisioning ] = useState < boolean > ( false ) ;
82
- const [ isDeprovisioning , setIsDeprovisioning ] = useState < boolean > ( false ) ;
83
- const [ isSaving , setIsSaving ] = useState < boolean > ( false ) ;
84
- const isLoadingGlobal =
85
- loading || isProvisioning || isDeprovisioning || isSaving ;
86
-
87
80
// Formik form state
88
81
const [ formValues , setFormValues ] = useState < WorkspaceFormValues > ( { } ) ;
89
82
const [ formSchema , setFormSchema ] = useState < WorkspaceSchema > ( yup . object ( { } ) ) ;
@@ -109,7 +102,7 @@ export function ResizableWorkspace(props: ResizableWorkspaceProps) {
109
102
ReactFlowComponent
110
103
> ( ) ;
111
104
112
- // Save/provision button state
105
+ // Save/provision/deprovision button state
113
106
const isSaveable = isFirstSave ? true : isDirty ;
114
107
const isProvisionable =
115
108
! isDirty &&
@@ -121,6 +114,14 @@ export function ResizableWorkspace(props: ResizableWorkspaceProps) {
121
114
! props . isNewWorkflow &&
122
115
props . workflow ?. state !== WORKFLOW_STATE . NOT_STARTED ;
123
116
117
+ // Loading state
118
+ const [ isProvisioning , setIsProvisioning ] = useState < boolean > ( false ) ;
119
+ const [ isDeprovisioning , setIsDeprovisioning ] = useState < boolean > ( false ) ;
120
+ const [ isSaving , setIsSaving ] = useState < boolean > ( false ) ;
121
+ const isCreating = isSaving && props . isNewWorkflow ;
122
+ const isLoadingGlobal =
123
+ loading || isProvisioning || isDeprovisioning || isSaving || isCreating ;
124
+
124
125
/**
125
126
* Custom listener on when nodes are selected / de-selected. Passed to
126
127
* downstream ReactFlow components you can listen using
@@ -251,9 +252,9 @@ export function ResizableWorkspace(props: ResizableWorkspaceProps) {
251
252
// The workaround is to additionally execute validateForm() which will return any errors found.
252
253
formikProps . submitForm ( ) ;
253
254
formikProps . validateForm ( ) . then ( ( validationResults : { } ) => {
254
- setIsSaving ( false ) ;
255
255
if ( Object . keys ( validationResults ) . length > 0 ) {
256
256
setFormValidOnSubmit ( false ) ;
257
+ setIsSaving ( false ) ;
257
258
} else {
258
259
setFormValidOnSubmit ( true ) ;
259
260
let curFlowState = reactFlowInstance . toObject ( ) as WorkspaceFlowState ;
@@ -275,6 +276,7 @@ export function ResizableWorkspace(props: ResizableWorkspaceProps) {
275
276
} else {
276
277
// TODO: bubble up flow error?
277
278
setFlowValidOnSubmit ( false ) ;
279
+ setIsSaving ( false ) ;
278
280
}
279
281
}
280
282
} ) ;
@@ -383,6 +385,7 @@ export function ResizableWorkspace(props: ResizableWorkspaceProps) {
383
385
( updatedWorkflow ) => {
384
386
if ( updatedWorkflow . id ) {
385
387
// TODO: add update workflow API
388
+ // make sure to set isSaving to false in catch block
386
389
} else {
387
390
dispatch ( createWorkflow ( updatedWorkflow ) )
388
391
. unwrap ( )
@@ -394,13 +397,14 @@ export function ResizableWorkspace(props: ResizableWorkspaceProps) {
394
397
. catch ( ( error : any ) => {
395
398
// TODO: process error (toast msg?)
396
399
console . log ( 'error: ' , error ) ;
400
+ setIsSaving ( false ) ;
397
401
} ) ;
398
402
}
399
403
}
400
404
) ;
401
405
} }
402
406
>
403
- { props . isNewWorkflow ? 'Create' : 'Save' }
407
+ { props . isNewWorkflow || isCreating ? 'Create' : 'Save' }
404
408
</ EuiButton > ,
405
409
] }
406
410
bottomBorder = { false }
0 commit comments