5
5
6
6
import React , { useEffect , useState } from 'react' ;
7
7
import { RouteComponentProps , useLocation } from 'react-router-dom' ;
8
- import { useSelector } from 'react-redux' ;
8
+ import { useDispatch , useSelector } from 'react-redux' ;
9
9
import { ReactFlowProvider } from 'reactflow' ;
10
10
import queryString from 'query-string' ;
11
11
import { EuiPage , EuiPageBody } from '@elastic/eui' ;
@@ -16,6 +16,7 @@ import { AppState } from '../../store';
16
16
import { ResizableWorkspace } from './workspace' ;
17
17
import { Launches } from './launches' ;
18
18
import { Prototype } from './prototype' ;
19
+ import { NEW_WORKFLOW_ID_URL } from '../../../common' ;
19
20
20
21
export interface WorkflowDetailRouterProps {
21
22
workflowId : string ;
@@ -45,13 +46,26 @@ function replaceActiveTab(activeTab: string, props: WorkflowDetailProps) {
45
46
* The workflow details page. This is where users will configure, create, and
46
47
* test their created workflows. Additionally, can be used to load existing workflows
47
48
* to view details and/or make changes to them.
49
+ * New, unsaved workflows are cached in the redux store and displayed here.
48
50
*/
51
+
52
+ // TODO: if exiting the page, or if saving, clear the cached workflow. Can use redux clearCachedWorkflow()
49
53
export function WorkflowDetail ( props : WorkflowDetailProps ) {
50
- const { workflows } = useSelector ( ( state : AppState ) => state . workflows ) ;
54
+ const { workflows, cachedWorkflow } = useSelector (
55
+ ( state : AppState ) => state . workflows
56
+ ) ;
51
57
52
- const workflow = workflows [ props . match ?. params ?. workflowId ] ;
53
- const workflowName = workflow ? workflow . name : '' ;
58
+ const isNewWorkflow = props . match ?. params ?. workflowId === NEW_WORKFLOW_ID_URL ;
59
+ const workflow = isNewWorkflow
60
+ ? cachedWorkflow
61
+ : workflows [ props . match ?. params ?. workflowId ] ;
62
+ const workflowName = workflow
63
+ ? workflow . name
64
+ : isNewWorkflow && ! cachedWorkflow
65
+ ? 'new_workflow'
66
+ : '' ;
54
67
68
+ // tab state
55
69
const tabFromUrl = queryString . parse ( useLocation ( ) . search ) [
56
70
ACTIVE_TAB_PARAM
57
71
] as WORKFLOW_DETAILS_TAB ;
@@ -112,7 +126,11 @@ export function WorkflowDetail(props: WorkflowDetailProps) {
112
126
< ReactFlowProvider >
113
127
< EuiPage >
114
128
< EuiPageBody >
115
- < WorkflowDetailHeader workflow = { workflow } tabs = { tabs } />
129
+ < WorkflowDetailHeader
130
+ workflow = { workflow }
131
+ formattedWorkflowName = { workflowName }
132
+ tabs = { tabs }
133
+ />
116
134
{ selectedTabId === WORKFLOW_DETAILS_TAB . EDITOR && (
117
135
< ResizableWorkspace workflow = { workflow } />
118
136
) }
0 commit comments