4
4
*/
5
5
6
6
import React , { useRef , useCallback , useEffect , useState } from 'react' ;
7
+ import { useFormikContext } from 'formik' ;
8
+ import { isEmpty } from 'lodash' ;
7
9
import ReactFlow , {
8
10
Controls ,
9
11
useNodesState ,
@@ -24,6 +26,7 @@ import {
24
26
WORKFLOW_TUTORIAL_LINK ,
25
27
Workflow ,
26
28
WorkflowConfig ,
29
+ WorkflowFormValues ,
27
30
customStringify ,
28
31
} from '../../../../common' ;
29
32
import {
@@ -32,7 +35,11 @@ import {
32
35
WorkspaceComponent ,
33
36
} from './workspace_components' ;
34
37
import { DeletableEdge } from './workspace_edge' ;
35
- import { uiConfigToWorkspaceFlow } from '../../../utils' ;
38
+ import {
39
+ configToTemplateFlows ,
40
+ formikToUiConfig ,
41
+ uiConfigToWorkspaceFlow ,
42
+ } from '../../../utils' ;
36
43
37
44
// styling
38
45
import 'reactflow/dist/style.css' ;
@@ -60,6 +67,7 @@ enum TOGGLE_BUTTON_ID {
60
67
}
61
68
62
69
export function Workspace ( props : WorkspaceProps ) {
70
+ const { values } = useFormikContext < WorkflowFormValues > ( ) ;
63
71
// Visual/JSON toggle states
64
72
const [ toggleButtonSelected , setToggleButtonSelected ] = useState <
65
73
TOGGLE_BUTTON_ID
@@ -78,12 +86,17 @@ export function Workspace(props: WorkspaceProps) {
78
86
// JSON state
79
87
const [ provisionTemplate , setProvisionTemplate ] = useState < string > ( '' ) ;
80
88
useEffect ( ( ) => {
81
- if ( props . workflow ?. workflows ?. provision ) {
82
- const templateAsObj = props . workflow ?. workflows . provision as { } ;
83
- const templateAsStr = customStringify ( templateAsObj ) ;
84
- setProvisionTemplate ( templateAsStr ) ;
89
+ if ( ! isEmpty ( props . uiConfig ) && ! isEmpty ( values ) ) {
90
+ const templateFlows = configToTemplateFlows (
91
+ formikToUiConfig ( values , props . uiConfig as WorkflowConfig ) ,
92
+ true ,
93
+ true
94
+ ) ;
95
+ if ( ! isEmpty ( templateFlows . provision ) ) {
96
+ setProvisionTemplate ( customStringify ( templateFlows . provision ) ) ;
97
+ }
85
98
}
86
- } , [ props . workflow ] ) ;
99
+ } , [ props . uiConfig , values ] ) ;
87
100
88
101
// ReactFlow state
89
102
const reactFlowWrapper = useRef ( null ) ;
0 commit comments